【问题标题】:How to create wait in selenium that waits for a web element to finish refreshing如何在 selenium 中创建等待 web 元素完成刷新的等待
【发布时间】:2019-11-13 11:50:59
【问题描述】:

我对 Selenium 还很陌生,我正在为使用它的 Web 应用程序编写测试。在此过程中,我使用断言来确保 Web 应用程序正常工作。对于其中一些断言,我在一个 web 元素上断言,该元素具有一个已知预期数字的数值。问题是当进行更改以更改此数值时,更改会根据互联网连接的速度逐渐发生。到目前为止,在我使用断言之前已经诉诸于使用睡眠来等待元素完成刷新,但我想这样做,所以这个等待不会超过元素停止刷新所需的时间,因此不必包括太短或太长的睡眠。

【问题讨论】:

  • Selenium 的操作将等待页面加载事件。如果此元素是在没有页面加载的情况下动态创建的,您将需要使用 WebDriverWait 和 ExpectedCondition。然后它会轮询 DOM,直到满足预期的条件,或者达到超时期限。 (或抛出“陈旧元素”异常......)
  • @orde Selenium 2.0 现在真的很老了......关于这个问题有很多非常糟糕的答案。 Selenium 现在在许多/大多数情况下会自动等待页面加载。
  • 欢迎来到 Stack Overflow!请参阅:How do I do X? SO 的期望是,提出问题的用户不仅会进行研究以回答他们自己的问题,还会分享该研究、代码尝试和结果。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!另见:How to Ask
  • @JeffC:粗鲁。我没有仔细看答案。我的错。我已经删除了欺骗标志,所以它不会指向那个答案。但这个问题仍然是“我该如何等待?”的欺骗。 (这似乎每天都会被问到,并且可以通过基本的谷歌搜索或 RTM 轻松找到)。
  • @orde 同意...我们确实需要一个很好的规范更新答案来回答这个问题以及每天都会询问的其他 20 个问题。

标签: java selenium selenium-webdriver expected-condition


【解决方案1】:

你应该试试这个:

WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(<specific locator of element>));

睡眠不是一个好的选择,因为您等待的时间总是预期的。

在上面介绍的方法中,您总是等待特定元素的可见性。当元素可见时,您的测试步骤将继续进行。隐式睡眠没有额外的等待时间

【讨论】:

  • 鉴于 OP 对页面的描述,这可能不起作用。问题是在所描述的流程中有几个步骤:1. 元素存在并且有一个数字,2. 用户执行导致页面刷新并更新该数字的操作,3. 现在页面加载并更新了数字.如果脚本足够快(并且页面足够慢),它将在第 1 步捕获值,而不是等待第 3 步发生然后检查。
【解决方案2】:

避免使用睡眠并将其替换为隐式等待或使用预期条件(如果适用)。下面是它的c#代码

int time =10; // set maximum time required for operation
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(time));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.XPath(""))); //replace "" with your desired xpath

上面的代码将等待最多 10 秒以使元素可见。但如果它出现得更早,那么它将跳转到下一个进程,因此您无需等待特定时间。此外,还有其他可用的预期条件,例如 ElementExists、ElementToBeClickable 等。我将留给您自己探索合适的选项

如果您想使用隐式等待,请专门使用以下代码

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(50));

【讨论】:

  • 您称其为隐式等待,但未使用隐式等待。您发布的代码是显式等待。此代码可能不起作用。请参阅我对 mslowiak 答案的评论。
  • 是的,我弄错了。谢谢你让我注意到。现在使用隐式等待示例编辑
猜你喜欢
  • 2018-06-08
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 2023-01-28
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
相关资源
最近更新 更多