hi, i have a weird scenario…
i am trying to convert my project into POM using PageFactory.
i created a login page and i want to use the @AndroidFindBy annotations
but the program throws the following error:
java.lang.RuntimeException: java.lang.NoSuchMethodException: jdk.proxy2.$Proxy10.proxyClassLookup()
i know that basically it creates a “lazy proxy” which locates the element when action is made.
so my guess that it is somehow related.
My Code:
public class LoginScreen {
@AndroidFindBy(id="**company name**:id/com_auth0_lock_input")
protected WebElement emailEl;
public LoginScreen(AppiumDriver driver) throws NoSuchFieldException {
PageFactory.initElements(new AppiumFieldDecorator(driver),this);
}
public void enterEmail(String email){
wait.until(ExpectedConditions.elementToBeClickable(emailEl)).sendKeys(email);
}
}
i run it from the related test class(creates a LoginScreen object)
it fails at the initElements()
now for the weird part…
when i am using @FindBy annotation (should be web context…)
and! omitting the AppiumFieldDecorator it works fine.
i am using the latest appium version 7.6
and using jdk 17
any thoughts?
if i won’t have a choice i’ll build my pages with By fields instead of WebElements…
- update code with time:
// 10 sec to search elements. Otherwise with it uses default = 1 sec
PageFactory.initElements(new AppiumFieldDecorator(driver, Duration.ofSeconds(10)), this);
- you may use only last part of ID. package name should add Appium itself. Example:
@AndroidFindBy(id = "iv_delete")
private WebElement deleteContactButton;
- finally switch to JDK 11 -> https://github.com/appium/java-client/issues/1619
1 Like
thanks but still the same…
with JDK 11? are you sure you are with correct JDK?
PS I am with 11 and have no problems here
worked. thank you very much!!
actually, i changed the project jdk and forgot to change the module as well…
@Aleksei
hi, additionally, i have two questions, i would be glad if you could answer… thanks again.
- do you know the right way to integrate WebDriverWait with POM? specifically how to find child element with annotations… or i should use [visibilityOfNestedElementsLocatedBy], if you have an example it would be great.
- should i catch the wrapper element and filter with it the sub element or maybe there is an annotation for that?
- do you maybe have a link for a good tutorial on appium different way of annotations? because all i found is just about ‘AndroidFindBy’ and not other ones.
you can use appium annotation to find whatever:
// example with iOS for chain. fist find element with 'PitchView' -> than element inside with id = `bottomButton`
@iOSXCUITFindBys(value = {
@iOSXCUITBy(id = "PitchView"),
@iOSXCUITBy(id = "bottomButton")
})
@AndroidFindBy(id = "gotItButton")
private WebElement gotItButton;
more to read with tons examples -> https://github.com/appium/java-client/blob/master/docs/Page-objects.md
1 Like