gpt4 book ai didi

python - 当两者都使用时,WebDriverWait 是否会覆盖 ImplicitlyWait?

转载 作者:太空狗 更新时间:2023-10-30 01:08:59 26 4
gpt4 key购买 nike

我正在使用 python+selenium webdriver 进行自动化。我使用了 ImplicitlyWait 和 WebDriverWait。

问题:

  1. 在单个脚本中同时使用 ImplicitlyWait 和 WebDriverWait 是一种好的做法吗?

  2. 假设我的 ImplicitlyWait 值为 20,WebDriverWait 值为 10 秒。 WebDriverWait 在等待特定元素时会覆盖 20 吗?当 ImplicitlyWait 值小于 WebDriverWait 时会发生什么?

请推荐。我试图在互联网上找到这个答案,但没有得到任何充分的证据或令人信服的答案。

最佳答案

对于第一点,这可能是个人选择。我根本不使用 implicit waiting,因为我喜欢控制 Selenium 在何处等待和不在何处等待。设置implicit wait就是盲目地告诉Selenium,如果你没有找到我的元素,那么就等一段时间,直到你找到为止。无论它是什么,无论结果如何,无论是哪个页面,您都要等到找到它或 20 秒过去。

如果这是您想要的方式,那很好,但对我来说,问题在于如果我的元素需要 30 秒才能出现在页面上,那么这本身就是一个问题。 Selenium 只是隐藏它,它可以掩盖问题。

但是,有时元素确实需要一段时间才能出现并“准备好”,这时 explicit waiting 就会出现。当您确实期望它时.

至于等待,最初会发生的是当您的 WebDriverWait 被命中时,它会运行并尝试找到元素。 Selenium 会看到您设置了隐式等待,因此它会不断尝试查找该元素长达 20 秒。

它将在幕后“免费”执行此操作。

一旦超时,您的 WebDriverWait 将得到响应,并且由于您的 implicit wait 超时大于您的 WebDriverWait 超时,它将下降异常结束(超时异常)。

如果 WebDriverWait 值高于 implicit wait 值(您在评论中的示例),那么过程将是:

  1. 首先运行 WebDriverWait
  2. 它命中了 .FindElement 调用
  3. Selenium 在内部运行此程序 10 秒
  4. 在最初的 10 秒后,您的 WebDriverWait 会收到响应。
  5. 如果没有找到该元素,则再次从步骤 1 开始运行。
  6. 一旦进入第 4 步,如果仍未找到该元素,它现在将抛出超时异常。

进一步解释(伪C#代码):

driver.Manage().Timeouts().SetImplicitWait(TimeSpan.FromSeconds(10));
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
wait.Until(w =>
{
return w.FindElement(By.Id("something")).Displayed;
}

我们有一个 20 秒的 WebDriverWait 和一个 10 秒的隐式等待

它将命中:

return w.FindElement(By.Id("something")).Displayed;

第一次。 Selenium 在内部将运行 .FindElement 10 秒。在这 10 秒过去后,我的 WebDriverWait 将检查它的条件 (.Displayed)。如果不满足,则 WebDriverWait 将再次运行同一行代码。同样,Selenium 将像以前一样运行 10 秒。一旦它从那里返回,如果不满足条件,则意味着 WebDriverWait 等待的时间总共为 20 秒,然后将抛出错误。

关于python - 当两者都使用时,WebDriverWait 是否会覆盖 ImplicitlyWait?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17829575/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com