如标题中所述,由于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
答案 0 :(得分:-2)
使用Selenium和WebDriver执行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呈现中的缺陷。
您可以在以下位置找到一些相关的讨论