我正在尝试对我的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
答案 0 :(得分:2)
隐式等待表示:
隐式等待是,在尝试查找 元素或元素时,告诉 WebDriver 轮询WebElement myDynamicElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));
一定时间。 / strong>(如果无法立即使用)。
明确等待:
显式等待是您定义的代码,用于在继续执行代码之前等待特定条件发生。
提供了一些便利 方法,可帮助您编写仅需要等待时间的代码:
在这种情况下,代码为:
Thread.sleep(time)
如果您这样使用显式等待,则没有问题。但是,如果您使用的是Location updates
,请注意,这是最坏/极端的显式等待,应尽可能避免。
希望这会对您有所帮助。
答案 1 :(得分:0)
如果要隐式等待所有元素达到固定时间,请在BasePage类或Base / Parent类setUp方法中使用一次以下声明,这是在WebDriver对象实例的生存期内设置的。因此,我们只编写一次该语句。
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
如果您想在子类中使用显式等待,请首先使用此语句 通过将隐式等待覆盖为零,然后使用显式等待。
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
警告:请勿混合使用隐式和显式等待。这样做可能导致无法预测的等待时间。例如,将隐式等待设置为10秒,将显式等待设置为15秒,则可能导致20秒后发生超时。
推荐阅读官方文档here