Issues after upgrading the java client from 2.2.0 to latest 4.1.2

Hi Team,
I upgraded my java client from 2.2.0 to 4.1.2 and started facing basic failures in my script.
Everywhere I am using AppiumDriver object.
So, at all those places I am getting warning:- AppiumDriver is a raw type. References to generic type AppiumDriver should be parameterised.

However, I moved ahead ignoring this warning and I am getting failure at the very first step of my script with following stack trace:-
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at org.openqa.selenium.support.PageFactory.instantiatePage(PageFactory.java:137)
at org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:63)
at com.threepd.mobiletests.testplan.BaseTest.getPageObject(BaseTest.java:77)
at com.threepd.mobiletests.testplan.smoke.SmokeTests.testAssociateBarcode(SmokeTests.java:2093)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:767)
at org.testng.TestRunner.run(TestRunner.java:617)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
at org.testng.TestNG.run(TestNG.java:1057)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:126)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:152)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:57)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.openqa.selenium.support.PageFactory.instantiatePage(PageFactory.java:128)
… 27 more
Caused by: java.lang.NoClassDefFoundError: org/openqa/selenium/internal/HasIdentity
at io.appium.java_client.android.internal.JsonToAndroidElementConverter.newMobileElement(JsonToAndroidElementConverter.java:31)
at io.appium.java_client.internal.JsonToMobileElementConverter.apply(JsonToMobileElementConverter.java:59)
at com.google.common.collect.Iterators$8.transform(Iterators.java:799)
at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48)
at com.google.common.collect.Iterators.addAll(Iterators.java:362)
at com.google.common.collect.Lists.newArrayList(Lists.java:160)
at com.google.common.collect.Lists.newArrayList(Lists.java:144)
at io.appium.java_client.internal.JsonToMobileElementConverter.apply(JsonToMobileElementConverter.java:53)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:581)
at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:40)
at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)
at io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1)
at org.openqa.selenium.remote.RemoteWebDriver.findElements(RemoteWebDriver.java:377)
at io.appium.java_client.DefaultGenericMobileDriver.findElements(DefaultGenericMobileDriver.java:48)
at io.appium.java_client.AppiumDriver.findElements(AppiumDriver.java:195)
at org.openqa.selenium.remote.RemoteWebDriver.findElementsById(RemoteWebDriver.java:397)
at io.appium.java_client.DefaultGenericMobileDriver.findElementsById(DefaultGenericMobileDriver.java:60)
at io.appium.java_client.AppiumDriver.findElementsById(AppiumDriver.java:199)
at org.openqa.selenium.By$ById.findElements(By.java:206)
at org.openqa.selenium.remote.RemoteWebDriver.findElements(RemoteWebDriver.java:340)
at io.appium.java_client.DefaultGenericMobileDriver.findElements(DefaultGenericMobileDriver.java:44)
at io.appium.java_client.AppiumDriver.findElements(AppiumDriver.java:191)
at com.threepd.mobiletests.utilfactory.SeleniumUtils.searchForElement(SeleniumUtils.java:430)
at com.threepd.mobiletests.pages.android.AndroidLoginPage.(AndroidLoginPage.java:38)
… 32 more
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.internal.HasIdentity
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
… 56 more

Can anyone throw some light on this?
prior it was working like a charm :frowning:

Thanks,
Nishant Shah

How do you define driver? I am using the below syntax -

public static AppiumDriver<WebElement> driver;

Also, I would suggest you to check BaseTest.getPageObject and smoke.SmokeTests.testAssociateBarcode. Are you converting json element to mobile element?

Thanks Suman for your reply.

For the first question, I am using below syntax:-

public static AppiumDriver driver;

I understand in the new java client they have changed the syntax and it
requires a Type to be specified. But, as it was giving me only a warning I
thought to ignore it

Regarding the second question, no I am not coverting WebElement to Mobile
element. I am using WebElement only everywhere. You think the error is
because of this?

Will it be possible for you to quickly have a look at my code and suggest
me some solution?
may be over a skype call?

Thanks,
Nishant Shah

@nishant_shah, please could you mail your test code? Or if you have git, can you share repo link at my email address [email protected]. I’ll have a look at your code and will get back to you tomorrow.

Landed on this page from search. I am getting the same error

java.lang.NoClassDefFoundError: org/openqa/selenium/internal/HasIdentity
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at java.lang.Class.getDeclaredConstructors0(Native Method)
        at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
        at java.lang.Class.getDeclaredConstructors(Class.java:2020)
        at net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:447)
        at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
        at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
        at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
        at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:304)
        at io.appium.java_client.pagefactory.utils.ProxyFactory.getEnhancedProxy(ProxyFactory.java:56)
        at io.appium.java_client.pagefactory.utils.ProxyFactory.getEnhancedProxy(ProxyFactory.java:34)
        at io.appium.java_client.pagefactory.AppiumFieldDecorator.proxyForAnElement(AppiumFieldDecorator.java:248)
        at io.appium.java_client.pagefactory.AppiumFieldDecorator.access$0(AppiumFieldDecorator.java:246)
        at io.appium.java_client.pagefactory.AppiumFieldDecorator$3.proxyForLocator(AppiumFieldDecorator.java:121)
        at org.openqa.selenium.support.pagefactory.DefaultFieldDecorator.decorate(DefaultFieldDecorator.java:62)
        at io.appium.java_client.pagefactory.AppiumFieldDecorator.decorate(AppiumFieldDecorator.java:172)
        at org.openqa.selenium.support.PageFactory.proxyFields(PageFactory.java:113)
        at org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:105)
        at com.intuit.ctg.qa.mobile.oii.pages.WelcomePage.<init>(WelcomePage.java:47)
        at com.intuit.ctg.qa.mobile.oii.tests.NativeAuthPinTest.testEnableAppPINFromAppSettings(NativeAuthPinTest.java:56)


Results :

Failed tests:
  NativeAuthPinTest>IBrowserTestNGBase.run:107->testEnableAppPINFromAppSettings:56 » NoClassDefFound

This happens when we update java-client from 3.4.x to 4.0.x, seems to be related to the removed deprecation code?
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
Any suggestion while I refer to the java client test code?
Any suggestion is welcome.
We are an Appium enterprise user.

is this line now required? in order to avoid this error?

Thanks,

any thoughts?
@SergeyTichomirov @jonahss

FYI.
My problem is solved by cleaning up the pom.xml file. I am not sure which entry created the problem but I figured since it is a dependency issue the pom file is the first place to look.
Hope this will help.