【问题标题】:Java & Appium: Unable to click elementJava & Appium:无法点击元素
【发布时间】:2015-12-07 17:00:56
【问题描述】:

在我正在测试的 Android 应用程序中,我试图单击/点击时间选择器。例如,默认情况下时间选择器显示 08:00AM。我想将小时从 8 更改为 7,然后再更改分钟,但 xpath 似乎不起作用。它点击了一些东西,但是当我通过代码点击 OK 按钮时,时间仍然显示为 08:00AM。如果有人可以帮助我,那么我也可以将分钟和 PM 更改为 AM。

这是我用来点击小时选择器的方法,以便选择 7:

driver.findElement(By.xpath("//android.widget.NumberPicker[0]/android.widget.Button[0]")).click();

图片:

【问题讨论】:

  • 我没有使用 Appium 的经验,但是 XPath 索引从 1 而不是 0 开始,所以我要尝试的第一件事是更改 XPath 表达式的索引

标签: java android xpath appium


【解决方案1】:

我试图通过 Text 找到一个元素,即“7”,它对我有用,请尝试:

driver.findElementsByName("7").click();

or

helpers.element(By.name("7")).click();

您也可以使用变量而不是文本来点击特定时间

让我知道它是否有效

【讨论】:

  • 那行不通。 7 没有突出显示。在发布到这里之前我已经尝试过了。我认为我们不能在这里使用 By.Name。
【解决方案2】:

试试这个:

driver.findElementByName("7").click();

或

driver.findElementByXPath("//*[@class='android.widget.button' and @text='7']").click();

【讨论】:

  • 他们都没有工作。测试通过,但点击未注册。时间显示为上午 08:00。就像它确实击中了某些东西,但结果不是预期的。
  • 感谢 Gaurav 抽出宝贵时间,但您的解决方案无效。我已经发布了解决方案。
【解决方案3】:

这是对我有用的解决方案:

  1. 使用 MobileElement。我也在使用 AndroidDriver 而不是 RemoteWebDriver,所以我不知道这是否可行。
  2. 忘记点击()。使用 MobileElement 的 tap(int finger, int duration) 方法。我没有在互联网上找到持续时间(秒、毫秒等,所以这些值只是命中和试用)。

我已经在下面发布了代码并且它有效。它可能需要改进,但现在我很高兴,因为我不是一个铁杆程序员。

现在假设小时是可变的,具体取决于您的测试

            // change hour
            @SuppressWarnings("unchecked")
            List<WebElement> buttons = driver.findElementsByClassName("android.widget.Button");
            MobileElement hour = (MobileElement) buttons.get(0);
            List<WebElement> highlights = driver.findElementsByClassName("android.widget.EditText");
            MobileElement hourHighlight = (MobileElement) highlights.get(0); // highlighted hour

            // lets say we need hour = 4

            while (!hourHighlight.getText().equalsIgnoreCase("4"))
            {
                Thread.sleep(100);
                if (hourHighlight.getText().equalsIgnoreCase("4"))
                {
                    break;
                }
                hour.tap(1, 10);
            }

【讨论】:

  • 方法 tap() 现已弃用。
  • @iversoncru 在TouchAction 类中的tap 怎么样。无效吗?
【解决方案4】:

如果你想尝试 javascript,当常规触摸和点击未注册任何内容时,我发现它适用于 Android 设备:

js.executeScript("$('# pageElement .elementClassName').trigger('touchstart')");

【讨论】:

    【解决方案5】:

    不要点击 NumberPicker 中的数字,而是使用 SendKey。


    WebElement hour= driver.findElement(By.xpath("//android.widget.TimePicker[1]/android.widget.NumberPicker[0])); 小时.sendKeys("8");

    【讨论】:

      猜你喜欢
      • 2021-04-04
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      • 2019-09-17
      相关资源
      最近更新 更多