0

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

4

2 回答 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的实现


深潜

在与基于JavaScriptReactJSjQueryAJAXVue.jsEmber.jsGWT等的应用程序元素交互时,隐式等待并不是那么有效

在这种情况下,您可以选择使用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 回答