Not able to use Page factory model with appium

Platform you are automating : Android
Appium version : 1.7.1
Simulator/Emulator or Real Device: Real Device
The language you are using for writing tests (client binding) : Java
Your OS : MAC OS Sierra
Java Client : 5.0.4
Selenium version: 3.4.0

Not able to use page factory model framework with appium, getting below error in my java code:

java.lang.NoSuchMethodError: org.openqa.selenium.support.ui.FluentWait.until(Lcom/google/common/base/Function;)Ljava/lang/Object;

I would start with java_client upgrade , the latest one is 5.0.4 already …

I mistakenly wrote selenium version in my original post for java client version, i am using 5.0.4 only

Is the code for fluent wait running without POM.

It seems to be an issue of class imported in fluent wait code not working with selenium or unavailability of jar file.

Just try with selenium-support jar with latest version and you should you have guava jar with 21.0 version.

Thanks for the reply, but its still not working. Below is my constructor of class which is using page factory, i am using 22 version of guava and 3.4.0(latest) of selenium-support as my selenium version is 3.4.0:

public AndroidAppHome(AppiumDriver(MobileElement) androidDriver){
this.androidDriver=androidDriver;
PageFactory.initElements(new AppiumFieldDecorator(androidDriver),this);
}

Also please find error log in selenium:

java.lang.NoSuchMethodError: org.openqa.selenium.support.ui.FluentWait.until(Lcom/google/common/base/Function;)Ljava/lang/Object;
at io.appium.java_client.pagefactory.AppiumElementLocator.waitFor(AppiumElementLocator.java:88)
at io.appium.java_client.pagefactory.AppiumElementLocator.findElement(AppiumElementLocator.java:103)
at io.appium.java_client.pagefactory.interceptors.InterceptorOfASingleElement.intercept(InterceptorOfASingleElement.java:57)
at io.appium.java_client.android.AndroidElement$$EnhancerByCGLIB$$c0b591f0.click()
at com.app.automation.app.android.AndroidAppHome.androidAppLaunch(AndroidAppHome.java:64)
at com.app.automation.core.appMain.androidAppLogin(appMain.java:902)
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:108)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:661)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:869)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1193)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:744)
at org.testng.TestRunner.run(TestRunner.java:602)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
at org.testng.SuiteRunner.run(SuiteRunner.java:289)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
at org.testng.TestNG.runSuites(TestNG.java:1144)
at org.testng.TestNG.run(TestNG.java:1115)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)

I am not using fluentwait anywhere in my code.

However there is one class ‘AppiumElementLocator’ under src/main/java/io/appium/java_client/pagefactory on github which is using fluentwait, that might be causing some trouble.

It worked with latest jars:

Appium 1.7.1
Java-client 5.0.4
Selenium-java 3.7.1

Even I was facing the same issue while using : io.appium java-client: 5.0.4, selenium-java: 3.3.0, guava: 24.0-jre.

On using: io.appium java-client: 6.1.0, selenium-java: 3.11.0, guava: 24.0-jre, this issue got resolved.