我创建了一些代码以在执行轻扫操作后找到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:元素 使用给定的搜索参数无法在页面上定位。
答案 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方法。