我正在尝试为我的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)
,那么请注意,这是一种最糟糕/极端的显式等待,应尽可能避免。
希望这对您有所帮助。
-
如果要隐式等待所有元素的修复时间,请在 BasePage 类或 Base/Parent 类 setUp 方法中使用以下语句一次,就像为 WebDriver 对象实例的生命周期设置的那样。所以我们只写一次这个声明。
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
-
如果你想在子类中使用显式等待,那么首先使用此语句 通过将隐式等待覆盖为零,然后使用显式等待。
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
警告:不要混合隐式和显式等待。这样做可能会导致不可预测的等待时间。例如,将隐式等待设置为 10 秒和显式等待 15 秒,可能会导致 20 秒后发生超时。
建议在此处阅读官方文档