java—隐式/显式等待,不等待指定的时间量

enyaitl3  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(439)

我正在尝试对文本字段执行sendkeys(),这可以通过thread.sleep()完成(我希望避免)。现在我已经使用了5-10秒的隐式等待,但是执行显然没有等待那么长的时间。使用elementtobelickable()的预期条件添加显式等待会导致类似的间歇性故障。

4uqofj5v

4uqofj5v1#

如果你能调用 sendKeys() 在调用 Thread.sleep() 本质上意味着真正的问题在于隐式等待和/或webdriverwait的实现

深潜

在与基于javascript、reactjs、jquery、ajax、vue.js、ember.js、gwt等的应用程序元素交互时,隐式等待并不是那么有效。
在这种情况下,您可以选择使用webdriverwait完全删除隐式等待,因为等待的文档清楚地提到:
警告:不要混合隐式和显式等待。这样做会导致不可预知的等待时间。例如,将隐式等待设置为10秒,显式等待设置为15秒可能会导致20秒后发生超时。

解决方案

首先,您需要重新配置隐式等待 0 具体如下:
Python:

driver.implicitly_wait(0)

java 语:

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

点网:

driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(0);

而不是诱导webdriverwait elementToBeClickable() 具体如下:
Python:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "elementID"))).send_keys("Debajyoti Sikdar")

java 语:

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.id("elementID"))).sendKeys("Debajyoti Sikdar");

点网:

new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("input.entry#ng-touched[id='limit'][name='limit']"))).SendKeys("Debajyoti Sikdar");

参考文献

有关详细讨论,请参见:
在selenium中使用隐式等待
为什么selenium的等待。直到_not(ec.invisibility_of_element_located)不等待加载程序消失的时间太长?

相关问题