Reputation: 51
I am trying to create a demo for Mobile Automation using Appium. Created Selenium-TestNG-Maven framework. Installed below software for Automation: 1. JDK version- 1.8.0_202 2. Appium version- 1.22.1 3. Android Studio 4 Eclipse - Version: 2020-06 (4.16.0)
Setup Environment variables:
JAVA_HOME: C:\Program Files\Java\jdk1.8.0_202
ANDROID_HOME : C:\Users\Name\AppData\Local\Android\Sdk
PATH
- JRE : C:\Program Files\Java\jre1.8.0_202
- Tools : C:\Users\Name\AppData\Local\Android\Sdk\tools
- Tools/bin : C:\Users\Name\AppData\Local\Android\Sdk\tools\bin
- Platform-tools : C:\Users\Name\AppData\Local\Android\Sdk\platform-tools
Created a Maven project.Below is POM.XML
4.0.0 com.Login.Demo LoginDemoProject 0.0.1-SNAPSHOT
<dependencies>
<!-- https://mvnrepository.com/artifact/io.appium/java-client -->
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>7.6.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.testng/testng -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
Below is the BaseClass.Java
import java.net.URL;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;
import io.appium.java_client.remote.MobileCapabilityType;
public class BaseClass {
AppiumDriver<MobileElement> driver;
@BeforeTest
public void setup()
{
try
{
DesiredCapabilities caps = new DesiredCapabilities();
//caps.setCapability(CapabilityType.PLATFORM_NAME, "ANDROID");
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "ANDROID");
caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "10");
caps.setCapability(MobileCapabilityType.DEVICE_NAME, "OnePlus 7T");
caps.setCapability(MobileCapabilityType.UDID, "52a7cc1a");
caps.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 60);
caps.setCapability(MobileCapabilityType.APP, "");
caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome");
URL url = new URL("http://0.0.0.1:4723/wd/hub");
driver = new AppiumDriver<MobileElement>(url, caps);
}
catch (Exception e)
{
//System.out.println("" +e.getCause());
}
}
@Test
public void sampleTest()
{
System.out.println("Test running");
}
@AfterTest
public void teardown()
{
}
}
Running BaseClass.Java file using RunAs -> TestNG test but getting below error.
[RemoteTestNG] detected TestNG version 7.4.0
FAILED CONFIGURATION: @BeforeTest setup
java.lang.NoClassDefFoundError: org/openqa/selenium/virtualauthenticator/HasVirtualAuthenticator
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at tests.BaseClass.setup(BaseClass.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:133)
at org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:62)
at org.testng.internal.ConfigInvoker.invokeConfigurationMethod(ConfigInvoker.java:385)
at org.testng.internal.ConfigInvoker.invokeConfigurations(ConfigInvoker.java:321)
at org.testng.TestRunner.invokeTestConfigurations(TestRunner.java:637)
at org.testng.TestRunner.beforeRun(TestRunner.java:627)
at org.testng.TestRunner.run(TestRunner.java:589)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:377)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:371)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:332)
at org.testng.SuiteRunner.run(SuiteRunner.java:276)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1212)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1134)
at org.testng.TestNG.runSuites(TestNG.java:1063)
at org.testng.TestNG.run(TestNG.java:1031)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.virtualauthenticator.HasVirtualAuthenticator
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 61 more
Upvotes: 1
Views: 9420
Reputation: 351
I came across the same issue and fixed it by modifying the appropriate Selenium compile dependency of Appium that was found in Appium java-client's Maven page.
Upvotes: 0
Reputation: 49
The reason for this problem is related to the selenium version in "pom.xml". You can edit version to 3.141.59. your pom.xml file code updating:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
Upvotes: 4
Reputation: 193108
This error message...
java.lang.NoClassDefFoundError: org/openqa/selenium/virtualauthenticator/HasVirtualAuthenticator
...implies that the HasVirtualAuthenticator
class definition wasn't found probably as Maven was unable to load the class.
As per Class Loading and Forking in Maven Surefire tweaking either the following settings may work:
useSystemClassLoader
: Setting 'useSystemClassLoader=false' as follows:
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
forkCount
useManifestOnlyJar
PS: Ensure that JDK is upgraded to current levels JDK 8u311.
Upvotes: 0