我正在自动化一个网站,其中教程正好有 10 个相同的"下一步"按钮,这些按钮在下一个出现之前触发了一个简短的动画,所以我使用:
for (int i = 0; i <= 10; i++) {
wait.until(ExpectedConditions.elementToBeClickable(element)).click();
}
为了等待每个按钮可点击并单击它。 我需要在单击"下一步"按钮 10 次后与其他元素进行交互。 调试它工作正常,但是运行它会在元素变得可单击之后单击几次元素,因为它的动画(代码单击单个元素几次,因此单击2-3次而不是10次(。
在 for 循环中使用Thread.sleep(5000);
似乎有效,因为它在每次单击后等到动画完成,但我想要一个更快的解决方案,而不是使用Thread.sleep();
JavaScript 执行器和操作似乎也不能解决问题。
您可以使用
new WebDriverWait(driver, 10).until(ExpectedConditions.invisibilityOfElementLocated(locator));
而不是
Thread.sleep(5000);
对于 Web 元素的消失并继续。您可以为单击后显示的动画提供定位器。
正如@cruisepandey提到的,尝试查找元素的定位器 您正在尝试等待(动画(找到其定位器(id,标签等(并使用等待:
public static boolean isElementNotPresent(MobileDriver driver, WebElement elementName, int timeout){
try{
WebDriverWait wait = new WebDriverWait(driver, timeout);
wait.until(ExpectedConditions.invisibilityOf(elementName));
return true;
}catch(Exception e){
return false;
}
}
用法:
isElementNotPresent(driver, element, 30)