Search code examples
javaeclipseseleniumappium

No class definition error with IOS driver creation


I am getting a NoClassDefFound error for org.openqa.selenium.remote.JsonToWebElementConverter when trying to run some code to set up an IOSDriver for use with Appium. So far all I am trying to do is set up capabilities and open a driver. However the error occurs on the driver initialization line.

So far I have tried to import org.openqa.selenium.remote.JsonToWebElementConverter into the class but still get the same error. My Eclipse is pointing to the right JDK and Java is installed properly. I believe I have all dependencies as well.

Dependencies:

<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.1.1</version>
</dependency>

<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>7.6.0</version>
</dependency>

<dependency>
<groupId>com.github.appium</groupId>
<artifactId>java-client</artifactId>
<version>7.6.0</version>
</dependency>

</dependencies>

Driver I am trying to set up.

        try {
        IOSDriver driver = new IOSDriver(new URL("http://localhost:4723/wd/hub"),capabilites);
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Resulting Error

Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/remote/internal/JsonToWebElementConverter

at appiumtests.BaseIOTest.main(BaseIOTest.java:31) Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.remote.internal.JsonToWebElementConverter at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ... 1 more


Solution

  • There is an issue with selenium dependency.

    Appium 7.6 uses selenium version 3.141.59, and you've added selenium 4.1.1, so they are not compatible.

    1 Try to remove selenium dependency from the pom.

    2 Leave only

    <dependency>
        <groupId>io.appium</groupId>
        <artifactId>java-client</artifactId>
        <version>7.6.0</version>
    </dependency>
    

    for appium java client.