【问题标题】:appium selects incorrect item from the popup listappium 从弹出列表中选择了不正确的项目
【发布时间】:2018-10-15 07:00:50
【问题描述】:

我有两个与我无法解决的同一问题相关的问题。我正在创建一个 appium 程序来测试原生 android 应用程序。我正在使用 Java。 在登录之前,应用程序中有一个更改环境的选项。我将环境名称作为参数传递给我的 appium 类,并使用 Xpath 查找与提供的环境对应的元素。 问题:每次更改为特定环境名称(暂存)时,我将哪个环境名称作为参数传递都没有关系。 问题:

  1. 可能是什么原因造成的?

  2. 为什么当我使用带有 text 参数的 xpath 时,尽管 uiautomatorviewer 工具具有该 text 属性,但 appium 却无法找到该元素。

    selectEnv = androidDriver.findElement(By.xpath("//android.widget.LinearLayout[@text='QA']"));

我提供了 2 个屏幕截图。第一个是一个实际的应用程序屏幕,其中包含来自 Android Studio Layout Inspector 的环境和属性列表。

第二个是列表中一项的 uiautomatorviewer 属性的屏幕截图。

new WebDriverWait(androidDriver, 30).until(ExpectedConditions.presenceOfElementLocated(id("md_contentRecyclerView")));
        envContainer = androidDriver.findElement(By.id("md_contentRecyclerView"));
        Assert.assertTrue(envContainer.isDisplayed());
        if (env.equals("dev")) {
            selectEnv = androidDriver.findElement(By.xpath("//android.widget.LinearLayout[@index='0']"));
            selectEnv.click();
        }
        if (env.equals("QA")) {
            selectEnv = androidDriver.findElement(By.xpath("//android.widget.LinearLayout[@index = '1']"));
            selectEnv.click();
        }
        if (env.equals("Staging")) {
            selectEnv = androidDriver.findElement(By.xpath("//android.widget.LinearLayout[@index='2']"));
            selectEnv.click();
        }
        if (env.equals("Prod")) {
            selectEnv = androidDriver.findElement(By.xpath("//android.widget.LinearLayout[@index='3']"));
            selectEnv.click();
        }

【问题讨论】:

  • 您是否尝试使用 ID 而不是文本值选择它
  • 不幸的是,这些特定元素没有 ID

标签: java android automated-tests appium


【解决方案1】:

您正在尝试单击 LinearLayout 而不是其 Textview。

用途:

selectEnv = androidDriver.findElement(By.xpath("//android.widget.TextView[contains(.,'QA')]"));
selectEnv.click();

【讨论】:

  • 代码对我不起作用,但您指出了一件正确的事情:在我使用 TextView 而不是 LinearLayout 之后,我能够通过谷歌搜索额外的步骤,现在一切正常。谢谢!
  • 很高兴我能帮上忙,至少。你能赞成我的回答,因为它很有用吗?您应该将自己的答案标记为已接受的答案。
  • 我刚刚意识到我的答案不应该在 contains 前面有一个 at 符号,而且我对“TextView”的情况有误,我都修复了(现在是星期五)
【解决方案2】:

最终能够使用 UiSelector 找到元素

findElementByAndroidUIAutomator ("new UiSelector().textContains(\"QA\")");

【讨论】:

    猜你喜欢
    • 2022-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-23
    • 2012-05-24
    • 2016-03-27
    • 1970-01-01
    相关资源
    最近更新 更多