我正在尝试对文本字段执行 sendKeys(),这可以通过 Thread.sleep() 来完成(我想避免)。现在我已经使用了 5-10 秒的隐式等待,但执行显然没有等待那段时间。使用 elementToBeClickable() 的预期条件添加显式等待会导致类似的间歇性故障。
问问题
344 次
2 回答
0
在定义显式等待时,请确保您添加了正确的预期条件。
您可以查看此“https://itnext.io/how-to-using-implicit-and-explicit-waits-in-selenium-d1ba53de5e15”。
于 2021-01-19T05:09:32.373 回答
0
如果您能够在调用sendKeys()
后调用文本字段,Thread.sleep()
则本质上意味着真正的问题在于隐式等待和/或WebDriverWait的实现
深潜
在与基于JavaScript、ReactJS、jQuery、AJAX、Vue.js、Ember.js、GWT等的应用程序元素交互时,隐式等待并不是那么有效。
在这种情况下,您可以选择使用WebDriverWait完全删除隐式等待,因为Waits的文档清楚地提到:
警告:不要混合隐式和显式等待。这样做会导致不可预测的等待时间。例如,设置 10 秒的隐式等待和 15 秒的显式等待可能会导致 20 秒后发生超时。
解决方案
首先,您需要重新配置隐式等待,0
如下所示:
蟒蛇:
driver.implicitly_wait(0)
爪哇:
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
点网:
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(0);
而是诱导WebDriverWait如下elementToBeClickable()
:
蟒蛇:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "elementID"))).send_keys("Debajyoti Sikdar")
爪哇:
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");
参考
您可以在以下位置找到详细讨论:
于 2020-12-20T12:38:00.550 回答