硒 + Appium - 隐式等待不起作用



我正在尝试为我的Android应用程序自动执行一些测试,但ImplicitlyWait不起作用。
我收到错误,该元素不存在。 如果我使用显式等待,它可以正常工作,但我不想一直显式它。

Code:
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
# Output log
[BaseDriver] Waiting up to 30000 ms for condition

我正在使用:

- selenium-java: 3.13  
- io.appium.java-client: 6.1.0

式等待意味着:

隐式等待是告诉WebDriver在尝试查找一个或多个元素(如果它们不是立即可用)时轮询DOM一段时间。

显式等待

显式等待是您定义的代码,用于等待特定条件发生,然后再继续执行代码。

提供了一些方便的方法,可帮助您编写仅根据需要等待的代码:

在这种情况下,代码将是:

WebElement myDynamicElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));  

如果您像这样使用显式等待,则没有问题。但是如果你使用的是Thread.sleep(time),那么请注意,这是一种最糟糕/极端的显式等待,应尽可能避免。

希望这对您有所帮助。

  1. 如果要隐式等待所有元素的修复时间,请在 BasePage 类或 Base/Parent 类 setUp 方法中使用以下语句一次,就像为 WebDriver 对象实例的生命周期设置的那样。所以我们只写一次这个声明。

    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

  2. 如果你想在子类中使用显式等待,那么首先使用此语句 通过将隐式等待覆盖为零,然后使用显式等待。

    driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);

警告:不要混合隐式和显式等待。这样做可能会导致不可预测的等待时间。例如,将隐式等待设置为 10 秒和显式等待 15 秒,可能会导致 20 秒后发生超时。

建议在此处阅读官方文档

最新更新