Отсутствие такого исключения элемента, когда я использую аннотацию @FindBy, работает нормально, когда я использовал driver.findelement (By.id ())

Я использую java с appium. Я выполнил свой код двумя способами. Один - когда я использую приведенный ниже код, он работает нормально.

public class On_BoardingPages

    MobileElement smsField = driver.findElement(By.id("pinEntryViewVerifyCode"));
    smsField.sendKeys("XXXX");


    public On_BoardingPages(AppiumDriver<MobileElement> driver) {
        PageFactory.initElements(new AppiumFieldDecorator(driver), this);

    }
    public void enterSMSVerificationCode(String codeVerification) { 
        sms_VerificationCode.sendKeys(codeVerification);

    }

Во-вторых, когда я использую POM и он не работает

класс страницы:

@FindBy(id = "pinEntryViewVerifyCode")
private MobileElement sms_VerificationCode;

TestClass

on_BoardingPages.enterSMSVerificationCode("XXXX");

Ошибка:

org.openqa.selenium.NoSuchElementException: невозможно найти элемент с помощью этой стратегии: By.chained ({By.id: pinEntryViewVerifyCode}) в io.appium.java_client.pagefactory.AppiumElementLocator.findElement (AppiumElementLocator). io.appium.java_client.pagefactory.interceptors.InterceptorOfASingleElement.intercept (InterceptorOfASingleElement.java:60) --Причина: org.openqa.selenium.TimeoutException: ожидаемое условие не выполнено: ожидание io.appium.pageLactoryLactoryFactory_cloud @ 56a4479a (проверено в течение 1 секунды с интервалом 500 миллисекунд) в org.openqa.selenium.support.ui.FluentWait.timeoutException (FluentWait.java:303) в org.openqa.selenium.support.ui.FluentWait.until (FluentWait.java:271) в io.appium.java_client.pagefactory.AppiumElementLocator.waitFor (AppiumElementLocator.java:99) в io.appium.java_client.pagefactory.AppiumElementLocator.findElement (Appator.javaLocator:11)


person Tester    schedule 20.12.2019    source источник


Ответы (1)


@FindBy будет работать только для POM WebElements. Для MobileElements мы должны использовать @AndroidFindBy для Android и @iOSXCUITFindBy для iOS.

Итак, ваш код будет выглядеть так:

@AndroidFindBy(id = "pinEntryViewVerifyCode")
private MobileElement sms_VerificationCode;
person Sooraj    schedule 20.12.2019
comment
Вы также можете установить точку останова, в которой тест не проходит, и использовать команду Evaluate Expression (alt + f8), чтобы проверить, будет ли driver.findElement(MobileBy.id("pinEntryViewVerifyCode")); работать - person Mark Han; 20.12.2019
comment
Да, он работал с find by, но я использовал @androidFindBy, потому что это элемент Android. - person Tester; 24.12.2019