Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RemoteWebElement class shows error in compile time. But all the java-client libs downloaded. #2058

Open
varun2810 opened this issue Oct 25, 2023 · 25 comments

Comments

@varun2810
Copy link

java.lang.ClassNotFoundException: org.openqa.selenium.remote.RemoteWebElement
at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.findClass(ByteArrayClassLoader.java:404)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.access$300(ByteArrayClassLoader.java:57)
at net.bytebuddy.dynamic.loading.ByteArrayClassLoader$ClassDefinitionAction.run(ByteArrayClassLoader.java:687)
at net.by

Java-Client-8.6.0
OS : Mac
@mykola-mokhnach mykola-mokhnach transferred this issue from appium/appium Oct 25, 2023
@varun2810
Copy link
Author

public LoginPage(AndroidDriver driver) {
this.driver = driver;
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
}

// Cliq Login
@AndroidFindBy(id = "signinbtn")
public WebElement gettingStarted;

@AndroidFindBy(xpath = "//android.widget.EditText[@resource-id='login_id']")
WebElement emailField;

My code

@valfirst
Copy link
Collaborator

The error means Selenium dependencies are missed in the classpath

@varun2810
Copy link
Author

@valfirst below is the complete issue i'm facing.

26-Oct-2023 18:32:13.548 SEVERE [http-9090-1] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet WebdriverApi threw exception
java.lang.ClassNotFoundException: org.openqa.selenium.remote.RemoteWebElement
at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.findClass(ByteArrayClassLoader.java:404)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.access$300(ByteArrayClassLoader.java:57)
at net.bytebuddy.dynamic.loading.ByteArrayClassLoader$ClassDefinitionAction.run(ByteArrayClassLoader.java:687)
at net.bytebuddy.dynamic.loading.ByteArrayClassLoader$ClassDefinitionAction.run(ByteArrayClassLoader.java:639)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.doPrivileged(ByteArrayClassLoader.java)
at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.findClass(ByteArrayClassLoader.java:406)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:398)
at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.load(ByteArrayClassLoader.java:361)
at net.bytebuddy.dynamic.loading.ClassLoadingStrategy$Default$WrappingDispatcher.load(ClassLoadingStrategy.java:367)
at net.bytebuddy.dynamic.loading.ClassLoadingStrategy$Default.load(ClassLoadingStrategy.java:148)
at net.bytebuddy.dynamic.TypeResolutionStrategy$Passive.initialize(TypeResolutionStrategy.java:101)
at net.bytebuddy.dynamic.DynamicType$Default$Unloaded.load(DynamicType.java:6317)
at io.appium.java_client.proxy.Helpers.createProxy(Helpers.java:122)
at io.appium.java_client.pagefactory.utils.ProxyFactory.getEnhancedProxy(ProxyFactory.java:86)
at io.appium.java_client.pagefactory.utils.ProxyFactory.getEnhancedProxy(ProxyFactory.java:61)
at io.appium.java_client.pagefactory.AppiumFieldDecorator.proxyForAnElement(AppiumFieldDecorator.java:248)
at io.appium.java_client.pagefactory.AppiumFieldDecorator.access$000(AppiumFieldDecorator.java:63)
at io.appium.java_client.pagefactory.AppiumFieldDecorator$1.proxyForLocator(AppiumFieldDecorator.java:147)
at org.openqa.selenium.support.pagefactory.DefaultFieldDecorator.decorate(DefaultFieldDecorator.java:63)
at io.appium.java_client.pagefactory.AppiumFieldDecorator.decorate(AppiumFieldDecorator.java:186)
at org.openqa.selenium.support.PageFactory.proxyFields(PageFactory.java:111)
at org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:103)
at com.zoho.cliqmobile.android.pageclass.LoginPage.(LoginPage.java:38)
at com.zoho.cliqmobile.android.testclass.LoginTest.(LoginTest.java:35)

@varun2810
Copy link
Author

The issue happens in AppiumFieldDecorator initiate elements in page factory.

public LoginPage(AndroidDriver driver) {
this.driver = driver;
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
}
@AndroidFindBy(id = "signinbtn")
public WebElement gettingStarted;

The above code works when i change the PageFactory.initElements(new AppiumFieldDecorator(driver), this); to PageFactory.initElements((driver), this);. But when i remove AppiumFieldDecorator, @AndroidFindby doesnt work.

@varun2810
Copy link
Author

Environment used :
Java : Jdk11
Jars used : Java-client-8.6.0
Selenium jars used : Selenium jars which is compiled with java-client-8.6.0

@ashwithpoojary98
Copy link
Contributor

@varun2810 check your pom file for jdk

@uck82
Copy link

uck82 commented Jan 4, 2024

I can confirm the same issue on my side using Java-Client-8.6.0 in an Eclipse environment with jdk17.
Several approaches to enhance class loading failed.
I tried both: to only use the java-client dependency in the pom or to declare the respective depdencies themselves (seleniuem-remote-driver, byte-buddy, etc).
Verbose logging confirmed, that the RemoteWebElement class is loaded for the requested version (4.13.0).

Any update on this issue or a possible workaround, which allows the further use of AndroidFindby?

@ranjanashish00
Copy link

Facing same issue.

Platform: Mac
JDK: 21
Appium Java Client: 8.5.1
Selenium Java: 4.10.0
Selenium Server: 4.0.0-alpha-2
webdrivermanager: 5.4.1

@valfirst
Copy link
Collaborator

@ranjanashish00 @uck82 @varun2810 please migrate to Appium Java client 9.0.0 and check if the issues is reproduced

@ranjanashish00
Copy link

@valfirst So according to the matrix: https://github.com/appium/java-client?tab=readme-ov-file#compatibility-matrix
I have updated first to

  • appium: 8.6.0
  • selenium: 4.13.0
    Still faing the issue: java.lang.NoClassDefFoundError: org/openqa/selenium/remote/RemoteWebElement

Then I have updated

  • appium: 9.0.0
  • selenium: 4.14.1
    Still facing the issue: java.lang.NoClassDefFoundError: org/openqa/selenium/remote/RemoteWebElement

Then I have added below dependencyManagement, in-order to exclude Selenium from Appium

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>${appium.java.client}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.seleniumhq.selenium</groupId>
                    <artifactId>selenium-support</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.seleniumhq.selenium</groupId>
                    <artifactId>selenium-remote-driver</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.seleniumhq.selenium</groupId>
                    <artifactId>selenium-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</dependencyManagement>

Still facing the issue: java.lang.NoClassDefFoundError: org/openqa/selenium/remote/RemoteWebElement

Then I have updated:

  • selenium: 4.16.1
    Still facing the issue: java.lang.NoClassDefFoundError: org/openqa/selenium/remote/RemoteWebElement

@valfirst
Copy link
Collaborator

Then I have added below dependencyManagement, in-order to exclude Selenium from Appium

why is it needed? actually this is the reason of your problem

@ranjanashish00
Copy link

I saw the Maven dependency that

  • selenium-support
  • selenium-remote-driver
  • selenium-api

were already included in latest Appium, So though of excluding them.

Nevertheless, I have removed dependencyManagement. So now the update looks like:

  • appium: 9.0.0
  • selenium: 4.16.1

Still facing the issue: java.lang.NoClassDefFoundError: org/openqa/selenium/remote/RemoteWebElement

@valfirst
Copy link
Collaborator

@ranjanashish00 please share your full POM

@ranjanashish00
Copy link

Here it is: https://gist.github.com/AshishHypr/820d7aade48e05d74dbdac4001958818
Please let me know if you need any other info and any info on this pom file

Thank you.

@valfirst
Copy link
Collaborator

@ranjanashish00 the pom you shared contains:

<appium.java.client>8.5.1</appium.java.client>
<selenium.version>4.10.0</selenium.version>

it's not

appium: 9.0.0
selenium: 4.16.1

At the same time it also has:

    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-server</artifactId>
        <version>4.0.0-alpha-2</version>
    </dependency>

and set of other dependencies like webdrivermanager that may bring Selenium dependencies transitively.

I recommend to sanitize your classpath (after that the issue will gone).

@ranjanashish00
Copy link

True, the pom which I shared is the complete pom file which I am using.
In that I have made changes as I had stated and mentioned the respective result, like updating appium/selenium to different versions.

I have removed selenium-server and still facing issue.

Regarding webdrivermanager, I would need it to create respeciver browser drivers. If I remove this dependency, it giver error for:
WebDriverManager.chromedriver().setup();

I have updated gist too.

One more thing I have observed:
the usual mvn clean test works fine but this command mvn clean test exec:java@rerunFailedTests triggers the error.
Why mvn clean test exec:java@rerunFailedTests: i have implemented logic to get the failed runs and then rerun it using exec-maven-plugin

<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.1.0</version>
<execution>
    <id>rerunFailedTests</id>
    <goals>
        <goal>java</goal>
    </goals>
</execution>
</executions>

And this triggers the error:

      java.lang.NoClassDefFoundError: org/openqa/selenium/remote/RemoteWebElement
	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
	at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.access$300(ByteArrayClassLoader.java:57)
	at net.bytebuddy.dynamic.loading.ByteArrayClassLoader$ClassDefinitionAction.run(ByteArrayClassLoader.java:687)
	at net.bytebuddy.dynamic.loading.ByteArrayClassLoader$ClassDefinitionAction.run(ByteArrayClassLoader.java:639) 

@ranjanashish00
Copy link

@valfirst Any suggestion here?

@valfirst
Copy link
Collaborator

valfirst commented Feb 2, 2024

@ranjanashish00 please try new version of Appium Java client

@ranjanashish00
Copy link

ranjanashish00 commented Feb 2, 2024

@valfirst I have updated appium java client to 9.1.0 and now seeing:

java.lang.NoClassDefFoundError: io/appium/java_client/proxy/HasMethodCallListeners
	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1027)
	at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.access$300(ByteArrayClassLoader.java:57)
	at net.bytebuddy.dynamic.loading.ByteArrayClassLoader$ClassDefinitionAction.run(ByteArrayClassLoader.java:687)
	at net.bytebuddy.dynamic.loading.ByteArrayClassLoader$ClassDefinitionAction.run(ByteArrayClassLoader.java:639)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
	at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.doPrivileged(ByteArrayClassLoader.java)
	at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.findClass(ByteArrayClassLoader.java:406)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:593)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:534)
	at java.base/java.lang.Class.forName(Class.java:513)
	at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.load(ByteArrayClassLoader.java:361)
	at net.bytebuddy.dynamic.loading.ClassLoadingStrategy$Default$WrappingDispatcher.load(ClassLoadingStrategy.java:367)
	at net.bytebuddy.dynamic.loading.ClassLoadingStrategy$Default.load(ClassLoadingStrategy.java:148)
	at net.bytebuddy.dynamic.TypeResolutionStrategy$Passive.initialize(TypeResolutionStrategy.java:101)
	at net.bytebuddy.dynamic.DynamicType$Default$Unloaded.load(DynamicType.java:6325)
	at io.appium.java_client.proxy.Helpers.createProxy(Helpers.java:127)
	at io.appium.java_client.pagefactory.utils.ProxyFactory.getEnhancedProxy(ProxyFactory.java:95)
	at io.appium.java_client.pagefactory.utils.ProxyFactory.getEnhancedProxy(ProxyFactory.java:70)
	at io.appium.java_client.pagefactory.AppiumFieldDecorator.proxyForAnElement(AppiumFieldDecorator.java:258)
	at io.appium.java_client.pagefactory.AppiumFieldDecorator$1.proxyForLocator(AppiumFieldDecorator.java:157)
	at org.openqa.selenium.support.pagefactory.DefaultFieldDecorator.decorate(DefaultFieldDecorator.java:61)
	at io.appium.java_client.pagefactory.AppiumFieldDecorator.decorate(AppiumFieldDecorator.java:196)
	at org.openqa.selenium.support.PageFactory.proxyFields(PageFactory.java:109)
	at org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:101)
	at com.ashish.mobile.screens.ScreenObject.<init>(ScreenObject.java:13)
	at com.ashish.mobile.screens.BaseScreen.<init>(BaseScreen.java:228)
	at com.ashish.mobile.steps.DebugMenuSteps.<init>(DebugMenuSteps.java:35)
	at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
	at org.picocontainer.injectors.AbstractInjector.newInstance(AbstractInjector.java:145)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:342)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:699)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:647)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:678)
	at io.cucumber.picocontainer.PicoFactory.getInstance(PicoFactory.java:49)
	at io.cucumber.java.AbstractGlueDefinition.invokeMethod(AbstractGlueDefinition.java:47)
	at io.cucumber.java.JavaStepDefinition.execute(JavaStepDefinition.java:29)
	at io.cucumber.core.runner.CoreStepDefinition.execute(CoreStepDefinition.java:66)
	at io.cucumber.core.runner.PickleStepDefinitionMatch.runStep(PickleStepDefinitionMatch.java:63)
	at io.cucumber.core.runner.ExecutionMode$1.execute(ExecutionMode.java:10)
	at io.cucumber.core.runner.TestStep.executeStep(TestStep.java:85)
	at io.cucumber.core.runner.TestStep.run(TestStep.java:57)
	at io.cucumber.core.runner.PickleStepTestStep.run(PickleStepTestStep.java:51)
	at io.cucumber.core.runner.TestCase.run(TestCase.java:84)
	at io.cucumber.core.runner.Runner.runPickle(Runner.java:75)
	at io.cucumber.junit.platform.engine.CucumberEngineExecutionContext.lambda$runTestCase$4(CucumberEngineExecutionContext.java:112)
	at io.cucumber.core.runtime.CucumberExecutionContext.lambda$runTestCase$5(CucumberExecutionContext.java:129)
	at io.cucumber.core.runtime.RethrowingThrowableCollector.executeAndThrow(RethrowingThrowableCollector.java:23)
	at io.cucumber.core.runtime.CucumberExecutionContext.runTestCase(CucumberExecutionContext.java:129)
	at io.cucumber.junit.platform.engine.CucumberEngineExecutionContext.runTestCase(CucumberEngineExecutionContext.java:109)
	at io.cucumber.junit.platform.engine.NodeDescriptor$PickleDescriptor.execute(NodeDescriptor.java:164)
	at io.cucumber.junit.platform.engine.NodeDescriptor$PickleDescriptor.execute(NodeDescriptor.java:90)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
	at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
	at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
	at com.ashish.web.support.FailedScenariosRunner.main(FailedScenariosRunner.java:64)
	at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:279)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.ClassNotFoundException: io.appium.java_client.proxy.HasMethodCallListeners
	at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.findClass(ByteArrayClassLoader.java:404)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:593)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
	... 125 more

@truyenaspire
Copy link

I have same issue, does someone have any solution?

@valfirst
Copy link
Collaborator

valfirst commented Feb 5, 2024

@ranjanashish00 @truyenaspire please provide steps to reproduce

@truyenaspire
Copy link

@valfirst
In my project, I use selenium 4.11.0 and java-client 8.6.0
I use Appium server 2.x.x
I can run mobile test cases successful in locally but when I run on Jenkins, the issue happens
[java.lang.NoClassDefFoundError: org/openqa/selenium/remote/RemoteWebElement](javascript:toggleElement('exception-0', 'block')) java.base/java.lang.ClassLoader.defineClass1(Native Method) java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012) net.bytebuddy.dynamic.loading.ByteArrayClassLoader.access$300(ByteArrayClassLoader.java:56) net.bytebuddy.dynamic.loading.ByteArrayClassLoader$ClassDefinitionAction.run(ByteArrayClassLoader.java:686) net.bytebuddy.dynamic.loading.ByteArrayClassLoader$ClassDefinitionAction.run(ByteArrayClassLoader.java:638) java.base/java.security.AccessController.doPrivileged(AccessController.java:399) net.bytebuddy.dynamic.loading.ByteArrayClassLoader.doPrivileged(ByteArrayClassLoader.java) net.bytebuddy.dynamic.loading.ByteArrayClassLoader.findClass(ByteArrayClassLoader.java:405) java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587) java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) java.base/java.lang.Class.forName0(Native Method) java.base/java.lang.Class.forName(Class.java:467) net.bytebuddy.dynamic.loading.ByteArrayClassLoader.load(ByteArrayClassLoader.java:360) net.bytebuddy.dynamic.loading.ClassLoadingStrategy$Default$WrappingDispatcher.load(ClassLoadingStrategy.java:367) net.bytebuddy.dynamic.loading.ClassLoadingStrategy$Default.load(ClassLoadingStrategy.java:148) net.bytebuddy.dynamic.TypeResolutionStrategy$Passive.initialize(TypeResolutionStrategy.java:101) net.bytebuddy.dynamic.DynamicType$Default$Unloaded.load(DynamicType.java:6317) io.appium.java_client.proxy.Helpers.createProxy(Helpers.java:122) io.appium.java_client.pagefactory.utils.ProxyFactory.getEnhancedProxy(ProxyFactory.java:86) io.appium.java_client.pagefactory.utils.ProxyFactory.getEnhancedProxy(ProxyFactory.java:61) io.appium.java_client.pagefactory.AppiumFieldDecorator.proxyForAnElement(AppiumFieldDecorator.java:248) io.appium.java_client.pagefactory.AppiumFieldDecorator.access$000(AppiumFieldDecorator.java:63) io.appium.java_client.pagefactory.AppiumFieldDecorator$1.proxyForLocator(AppiumFieldDecorator.java:147) org.openqa.selenium.support.pagefactory.DefaultFieldDecorator.decorate(DefaultFieldDecorator.java:61) io.appium.java_client.pagefactory.AppiumFieldDecorator.decorate(AppiumFieldDecorator.java:186) org.openqa.selenium.support.PageFactory.proxyFields(PageFactory.java:109) org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:101) Automation.Utils.MobilePage.<init>(MobilePage.java:101) Automation.Access.customer.mobile.LoginPageMobile.<init>(LoginPageMobile.java:89) Automation.Access.customer.helpers.AccessHelperMobile.doLogin(AccessHelperMobile.java:61) Automation.Treasury.TreasuryTeam1.mobile.sgd.TestSgdLocalTransfer.testInstantTransfer(TestSgdLocalTransfer.java:25) java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.base/java.lang.reflect.Method.invoke(Method.java:568) org.testng.internal.invokers.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:139) org.testng.internal.invokers.TestInvoker.invokeMethod(TestInvoker.java:664) org.testng.internal.invokers.TestInvoker.invokeTestMethod(TestInvoker.java:227) org.testng.internal.invokers.MethodRunner.runInSequence(MethodRunner.java:50) org.testng.internal.invokers.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:957) org.testng.internal.invokers.TestInvoker.invokeTestMethods(TestInvoker.java:200) org.testng.internal.invokers.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:148) org.testng.internal.invokers.TestMethodWorker.run(TestMethodWorker.java:128) java.base/java.util.ArrayList.forEach(ArrayList.java:1511) org.testng.TestRunner.privateRun(TestRunner.java:848) org.testng.TestRunner.run(TestRunner.java:621) org.testng.SuiteRunner.runTest(SuiteRunner.java:443) org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:481) org.testng.internal.thread.ThreadUtil.lambda$execute$0(ThreadUtil.java:58) java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) java.base/java.lang.Thread.run(Thread.java:833) Caused by: [java.lang.ClassNotFoundException: org.openqa.selenium.remote.RemoteWebElement](javascript:toggleElement('exception-1', 'block'))

I have researched, the issue related to the compatibility of Selenium and Appium. I tried many version of them but issue still happens.
It's weird because issue happens with Jenkins only, in the same machine, I can run a test case successfully with the editor.

@shinobi01
Copy link

Facing the same issue when selenium client > 4.14.1 and java client > 9.0, Java version is required to > 11.

No issue when using selenium client = 4.13.0, Java client = 8.3.0 and Java version = 1.8

there should be some compatibility issues with new version of selenium, java client and Java.

@khaleeljageer
Copy link

Facing the same issue with:

Platform: macOS Sonoma(Version 14.4)
Chip: Apple M2 Pro
JDK: 17.0.10 also tried with 21.0.1
Appium Java Client: 9.2.0
TestNG: 7.9.0
Selenium Java: 4.18.1
Appium: 2.5.1

loginWithValidCredentials_AUTHL01 : java.lang.NoClassDefFoundError: io/appium/java_client/proxy/HasMethodCallListeners
loginAndLogout_AUTHL02 : java.lang.NoClassDefFoundError: io/appium/java_client/proxy/HasMethodCallListeners

@sathishremitbee
Copy link

Hi Team,
Issue with following one while running Appium using POM(PageFactory.initElements(new AppiumFieldDecorator(driver), this);
also tried with PageFactory.initElements(new AppiumFieldDecorator(driver), pageName.class);

@AndroidFindBy(id = "login")
@iOSXCUITFindBy(accessibility = "login")
private WebElement loginButton;

Exception throwing:
java.lang.NullPointerException: Cannot invoke "org.openqa.selenium.WebElement.click()" because "this.loginButton" is null

JDK: 21.0.1
Appium Java Client: 9.2.0
TestNG: 7.9.0
Selenium Java: 4.18.1
Appium: 2.5.1
IDE: Eclipse
Platform: macOS Sonoma(Version 14.4)

Note: whereas tried with all listed versions of JAVA-CLIENT and SELENIUM JAVA in maven repository
As of now all versions in my pom.xml are latest ones though verified locally testng.xml where @AndroidFindBy and @iOSXCUITFindBy are working as expected, but through "mvn test exec:java" this command not letting reads the annotations and throwing with above exception of both platforms for Appium.

Whether issues are on PageFactory/annotations/versions on pom.xml, please give us some inputs to overcome this issue! Thanks in Advance Team!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants