Не удалось найти элемент со стратегией XPATH и селектором // * [@ text = 'Username'] io.appium.espressoserver.lib.handlers.FindElement.handleInternal - PullRequest
0 голосов
/ 05 августа 2020

Прямо сейчас я изучаю Appium Espresso с помощью этой статьи: https://appiumpro.com/editions/18-using-espresso-with-appium. Но вместо использования этого:

private By loginScreen = MobileBy.AccessibilityId("Login Screen");
private By username = MobileBy.AccessibilityId("username");
private By password = MobileBy.AccessibilityId("password");
private By loginBtn = MobileBy.AccessibilityId("loginBtn");
private By verificationTextEspresso = By.xpath(
        "//com.facebook.react.views.text.ReactTextView[@text='You are logged in as alice']");
private By verificationTextUiAuto2 = By.xpath(
        "//android.widget.TextView[contains(@text, 'alice')]");
private By logoutBtn = By.xpath("//com.facebook.react.views.text.ReactTextView[@text='Logout']");

public void clickBtnReadyLogin() {
    WebDriverWait wait = new WebDriverWait(ANDROID_DRIVER, 10);
    ExpectedCondition<WebElement> loginScreenReady =
            ExpectedConditions.presenceOfElementLocated(loginScreen);
    wait.until(loginScreenReady).click();
}

public void fillUsername() {
    ANDROID_DRIVER.findElement(username).sendKeys("alice");
}

public void fillPassword() {
    ANDROID_DRIVER.findElement(password).sendKeys("mypassword");
}

public void clickBtnLogin() {
    ANDROID_DRIVER.findElement(loginBtn).click();
}

public String verifyUser() {
    return ANDROID_DRIVER.findElement(verificationTextEspresso).getText();
}

public void clickLogoutBtn() {
    ANDROID_DRIVER.findElement(logoutBtn).click();
}

я пытаюсь найти элемент с помощью WebElementFacade:

@FindBy(xpath = "//*[@text='Login Screen']")
private WebElementFacade loginScreen;
@FindBy(xpath = "//*[@text='Username']")
private WebElementFacade username;
@FindBy(xpath = "//*[@text='Password']")
private WebElementFacade password;
@FindBy(xpath = "//*[@content-desc='loginBtn']")
private WebElementFacade loginBtn;
@FindBy(xpath = "//com.facebook.react.views.text.ReactTextView[@text='You are logged in as alice']")
private WebElementFacade verificationTextEspresso;
@FindBy(xpath = "//*[contains(@text, 'You are logged in as alice')]")
private WebElementFacade verificationTextUiAuto2;
@FindBy(xpath = "//*[contains(@text, 'Logout')]")
private WebElementFacade logoutBtn;

public void clickLoginScreen() {
    WebDriverWait wait = new WebDriverWait(AppiumDriverEspresso.ANDROID_DRIVER, 10);
    ExpectedCondition<WebElement> loginScreenReady =
            ExpectedConditions.presenceOfElementLocated(loginScreen);
    wait.until(loginScreenReady).click();
}

public void fillUsername() {
    username.type("alice");
}

public void fillPassword() {
    password.type("mypassword");
}

public void clickBtnLogin() {
    loginBtn.click();
}

public String verifyUser() {
    return verificationTextEspresso.getText();
}

public void clickLogoutBtn() {
    logoutBtn.click();
}

Когда я использую UiAutomator2, этот код работает нормально, но при использовании драйвера Espresso Я получаю эту ошибку:

«error»: «no such element», «message»: «Не удалось найти элемент со стратегией XPATH и селектором // [@ text = 'Username']», "stacktrace": "io.appium.espressoserver.lib.handlers.exceptions.NoSuchElementException: не удалось найти элемент со стратегией XPATH и селектором // [@ text = 'Username'] \ n \ tat io.appium.espressoserver .lib.handlers.FindElement.handleInternal (FindElement.kt: 38) \ n \ tat io.appium.espressoserver.lib.handlers.FindElement.handleInternal (FindElement.kt: 26) \ n \ tat io.appium.espressoserver.lib .handlers.RequestHandler $ DefaultImpls.handle (RequestHandler.kt: 28) \ n \ tat io.appium.espressoserver.lib.handlers.FindElement.handle (FindElement.kt: 26) \ n \ tat io.appium.espressoserver.lib .handlers.FindElement.handle (FindElement.kt: 26) \ n \ tat io.appium.espressoserver.li b.http.Router.route (Router.kt: 220) \ n \ tat io.appium.espressoserver.lib.http.Server.serve (Server.kt: 49) \ n \ tat fi.iki.elonen.NanoHTTPD $ HTTPSession.execute (NanoH ... [debug] [W3C] Соответствует W3 C код ошибки «нет такого элемента» и NoSuchElementError

Кто-нибудь может мне помочь?

Я использую Appium 1.18 .0-бета.0 Серенити 1.9.45

1 Ответ

0 голосов
/ 06 августа 2020

Вам необходимо изменить выражение XPath на одно из следующих:

"//*[text()='Username']"

или

"//*[.='Username']"

Вы можете проверить разницу между двумя здесь

...