如何使找到AccessibilityId的条件?

时间:2019-06-27 03:53:42

标签: java appium

我创建了一些代码以在执行轻扫操作后找到AccessibilityId,但是它并没有进入我的while条件。 如何让条件来找到AccessibilityId?

这是我想要的场景。

1.Launch app, there is no test1_action buttons (AccessibilityId = test1_action)
2.To Click test1_action, will repeat swipe "i" times till find AccessibilityId.
3.After "i" times swiping, if there will be test1_action button then it will click it

iOS / iPhone / Appium

WebDriverWait wait = new WebDriverWait(driver, 20);
int i = 0;
while 
(!driver.findElement(MobileBy.AccessibilityId("test1_action")).isDisplayed()) {
    swipe(331, 544, 50, 544, 2);
    i++;
        }
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("test1_action"))).click();

运行此命令时,我遇到以下错误

  

由以下原因引起:org.openqa.selenium.NoSuchElementException:元素   使用给定的搜索参数无法在页面上定位。

2 个答案:

答案 0 :(得分:0)

它不会进入while循环,因为从'driver.findElement(MobileBy.AccessibilityId(“ test1_action”))。isDisplayed()行引发了错误'NoSuchElementException'(您可以先交叉检查一下)。作为第一次迭代本身,该元素不存在,因此isDisplayed()将给出错误。

解决方案:
1)创建单独的方法来检查元素是否存在,该方法检查try / catch块中元素是否存在,并应返回true或false。在这里可以使用该方法检查while循环中元素的存在。
2)代替'driver.findElement(MobileBy.AccessibilityId(“ test1_action”))。isDisplayed()'使用'driver.findElements(MobileBy.AccessibilityId(“ test1_action”))。size()> 0',不会引发任何错误并检查元素是否存在。

注意:在您的while循环中放入一些退出/中断条件,当尝试上述两种解决方案时,否则将进入无限循环。

答案 1 :(得分:0)

如果该元素不存在,则在尝试调用NoSuchElementException函数时会得到isDisplayed(),请考虑将代码修改为:

while (driver.findElements(MobileBy.AccessibilityId("test1_action")).size() == 0 && i < 100) {
    swipe(331, 544, 50, 544, 2);
    i++;
}

您还可以考虑使用SwipeWhileNotFound方法。