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

时间:2018-07-27 14:56:16

标签: selenium selenium-webdriver automated-tests appium appium-android

我正在尝试对我的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

2 个答案:

答案 0 :(得分:2)

隐式等待表示:

隐式等待是,在尝试查找 元素或元素时,告诉 WebDriver 轮询WebElement myDynamicElement = (new WebDriverWait(driver, 10)) .until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement"))); 一定时间。 / strong>(如果无法立即使用)。

明确等待

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

提供了一些便利 方法,可帮助您编写仅需要等待时间的代码

在这种情况下,代码为:

Thread.sleep(time)

如果您这样使用显式等待,则没有问题。但是,如果您使用的是Location updates,请注意,这是最坏/极端的显式等待,应尽可能避免。

希望这会对您有所帮助。

答案 1 :(得分:0)

  1. 如果要隐式等待所有元素达到固定时间,请在BasePage类或Base / Parent类setUp方法中使用一次以下声明,这是在WebDriver对象实例的生存期内设置的。因此,我们只编写一次该语句。

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

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

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

警告:请勿混合使用隐式和显式等待。这样做可能导致无法预测的等待时间。例如,将隐式等待设置为10秒,将显式等待设置为15秒,则可能导致20秒后发生超时。

推荐阅读官方文档here