Używam Java z appium. Wykonałem swój kod na 2 sposoby. Jeden - gdy używam poniższego kodu, działa dobrze.

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);

    }

Po drugie - kiedy używam POM i jego niepowodzenie

Klasa strony:

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

TestClass

on_BoardingPages.enterSMSVerificationCode("XXXX");

Błąd:

org.openqa.selenium.NoSuchElementException: Nie można zlokalizować elementu za pomocą tej strategii: By.chained ({By.id: pinEntryViewVerifyCode}) w io.appium.java_client.pagefactory.AppiumElementLocator.findElement (AppiumElementLocator ).java: io.appium.java_client.pagefactory.interceptors.InterceptorOfASingleElement.intercept (InterceptorOfASingleElement.java:60) - Spowodowane przez: org.openqa.selenium.TimeoutException: Oczekiwany warunek nie powiódł się: oczekiwanie na io.appium.java_client.pagefementFactory.App @ 56a4479a (próbowano przez 1 sekundę z interwałem 500 milisekund) na org.openqa.selenium.support.ui.FluentWait.timeoutException (FluentWait.java:303) na org.openqa.selenium.support.ui.FluentWait.until (FluentWait.java:271) pod adresem io.appium.java_client.pagefactory.AppiumElementLocator.waitFor (AppiumElementLocator.java:99) pod adresem io.appium.java_client.pagefactory.AppiumElementLocator.findElement (AppiumElementLocator.java:99)

-1
Tester 20 grudzień 2019, 05:48

1 odpowiedź

@FindBy będzie działać tylko dla WebElements POM. W przypadku MobileElements powinniśmy używać @AndroidFindBy dla Androida i @iOSXCUITFindBy dla iOS.

Twój kod będzie więc wyglądał następująco:

@AndroidFindBy(id = "pinEntryViewVerifyCode")
private MobileElement sms_VerificationCode;
0
Sooraj 20 grudzień 2019, 15:43
1
Możesz także ustawić punkt przerwania, w którym test kończy się niepowodzeniem i użyć polecenia „Oceń wyrażenie” (alt + f8), aby sprawdzić, czy driver.findElement(MobileBy.id("pinEntryViewVerifyCode")); będzie działać
 – 
Mark Han
20 grudzień 2019, 20:06
Tak, działało z find by, ale użyłem @androidFindBy, ponieważ jest to element Androida. Problem był tutaj
 – 
Tester
24 grudzień 2019, 02:35