Selenium-ChomeDriver / Chome可以正确单击元素之前需要等待(ChromeDriver v 77和78,Chome v 78)

时间:2019-11-19 09:42:20

标签: selenium google-chrome selenium-webdriver selenium-chromedriver webdriverwait

如标题中所述,由于chrome已更新为v78,因此发生以下问题。 在chrome v78之前,所有测试都可以正常工作

该行为是高度不确定的,因此请耐心等待。 这意味着有时它只是突然工作,没有任何变化。测试中的大多数点击都有效。 (大多数情况下)只有一些反复失败。

我们正在使用带有最新的chrome 78驱动程序的硒。问题首先出现在运行chrome 78的驱动程序版本77上。 规格流测试和适配器代码都没有任何改变,但是在Chrome更新之后,基本上所有测试都失败了。

在每次单击之前执行Thread.Wait(1000)似乎是避免该问题的最可靠方法,然后按要求单击该元素。

等待时,驱动程序会执行“点击”,包括以下列出的步骤,没有实际点击或引发任何错误

  • 查找元素:
    new WebDriverWait(this.webDriver, this.WaitTimeout).Until<IWebElement>(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(by))
  • 等待元素可点击:
    wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(by));
  • 滚动到元素:
    ((IJavaScriptExecutor) this.webDriver).ExecuteScript("window.scrollTo(0, " + (object) (e.Location.Y - 250) + ")");
  • 并在元素上执行点击并释放操作:
    action.Click(element).Perform()

我还尝试了鼠标单击的其他几种变体,包括注释中的一种。

由于该过程可以解决所有这些问题,而没有实际引发任何类型的错误或警告,因此我无法检查点击是否确实发生(除了检查当前URL之外,这将是一个噩梦,要在其中维护)测试)。

因此,网站未更新,仍保留在源页面上,由于下一个测试未在预期页面上运行,因此测试将失败。

现在的问题:

我是否可以查询或等待以查看驱动程序或chrome是否可以实际单击该元素,或者验证它是否确实被单击?

原始问题报告: https://github.com/jsakamoto/nupkg-selenium-webdriver-chromedriver/issues/66

1 个答案:

答案 0 :(得分:-2)

使用SeleniumWebDriver执行Automation framework的测试时,使用 Thread.Wait(1000) 无需任何特定要求< / em> 违反了自动化 的目的,应不惜一切代价避免这样做。根据文档:

  
    

Thread.Wait(1000)在给定的秒数内暂停当前线程的执行。实际的暂停时间可能少于请求的暂停时间,因为任何捕获到的信号都会在执行该信号的捕获例程后终止wait()。另外,由于系统中其他活动的安排,暂停时间可能比请求的时间长任意数量。

  

您可以在How to sleep webdriver in python for milliseconds

中找到相关的讨论

所以您的方法:

  • wait.Until<IWebElement>(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(by)):用于查找元素
  • wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(by));:用于可点击性
  • action.Click(element).Release().Perform():用于执行点击和释放操作

只是完美的。


在这一点上,值得一提的是,等待时间的 timespan (最大)必须是查询的一部分,而不是进行查询或等待以查看驾驶员是否可以实际单击。 测试规范,并且您的测试必须(最多)等待与预定时间完全相同的时间,并且不得超过此时间。如果在配置的时间跨度测试中未返回状态/可见性/交互性元素,则应该无法指出DOM Tree呈现中的缺陷。


参考

您可以在以下位置找到一些相关的讨论