【问题标题】:Could not find element with strategy XPATH and selector //*[@text='Username'] io.appium.espressoserver.lib.handlers.FindElement.handleInternal找不到带有策略 XPATH 和选择器的元素 //*[@text='Username'] io.appium.espressoserver.lib.handlers.FindElement.handleInternal
【发布时间】:2020-11-25 12:11:39
【问题描述】:

现在我正在使用这篇文章了解 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":"Could not find element with strategy XPATH and selector //[@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。句柄(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.lib.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] 匹配 W3C 错误代码 'no such element' 到 NoSuchElementError

谁能帮帮我?

我正在使用 Appium 1.18.0-beta.0 宁静 1.9.45

【问题讨论】:

    标签: appium android-espresso appium-android


    【解决方案1】:

    您需要将 XPath 表达式更改为以下之一:

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

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

    可以查看here两者的区别

    【讨论】:

      猜你喜欢
      • 2020-10-16
      • 2019-11-20
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 2017-03-10
      • 2013-07-29
      • 2020-03-14
      • 2018-10-05
      相关资源
      最近更新 更多