开发者问题收集

Chrome 驱动程序在 FindElement 调用时抛出脚本结果错误

2019-07-31
735

昨天将 Chrome 浏览器更新至 76.0.3809.87 版并将 Chrome 驱动程序更新至 76.0.3809.68 版后,我们在使用 FindElementsFindElementByXPathFindElement 方法时,在一组网站上遇到了奇怪的异常。更新前没有发生此问题。抛出的异常是:

unknown error: script returns unexpected result.

目前我的项目自动化了大约 500-600 个网站,我们只在 3 个网站上遇到了这个问题(到目前为止):

  • https://billing.clarksvillegw.com/iwr/user/login.seam
  • https://mwsonline.nashville.gov/iwr/user/login.seam
  • https://webconnect.greensboro-nc.gov/iwr/user/login.seam

这些网站都是由同一家公司建立的,因此代码是可比的。使用 FindElementById 方法时,不会抛出此异常。您为方法提供什么 XPath 似乎也不重要,每次都会抛出异常。我尝试使用全新安装的 selenium 创建新项目,结果相同。

我确信这与 Chrome 驱动程序更新有关,也与我搜索过但未找到的 FindElements 的实际实现有关。我猜是后端使用了一些 javascript,无法与网站很好地兼容。

我尚未尝试使用其他驱动程序重现此问题。鉴于我们的一些项目限制,我们目前无法使用 Chrome 驱动程序以外的任何驱动程序。

搜索此问题没有结果,因为这是一个新问题。搜索异常消息只会得到有关错误使用 ExecuteScript 的信息,这(我认为)与我的问题无关。

有人知道是什么原因导致网站上出现这种情况吗?或者是否有已知的解决方法?在针对此问题提交帮助单之前,我只想确保我没有做导致此问题的任何特定操作。

try
{
    var driver = new ChromeDriver();
    driver.Navigate().GoToUrl("https://billing.clarksvillegw.com/iwr/user/login.seam");
    var success = driver.FindElementsById("login:usernamedec:username").Any();
    var failure = driver.FindElementsByXPath("//*[@id='login:usernamedec:username']").Any();
}
catch (Exception)
{
    throw;
}

使用上述代码时, success 计算正确,但尝试计算 failure 时,代码会引发异常。

3个回答

在我们的测试自动化服务器上​​将 Chrome 浏览器和 ChromeDriver 升级到 76.0.3809.87 后,在 ruby​​ 上运行 Selenium-Webdriver 和 Appium,我遇到了完全相同的错误。

已经缩小了问题的原因并最终从下面的方法返回了错误 - 当调用具有行/列引用的表对象时,即。

`execute_script("arguments[0].scrollIntoView({block: 'center'});", self.sales_table_element[ref][@ref_col])`

Cheezy page-object

`def row_items
    meth = strategy == :descendants ? :trs : :rows
    @row_items ||= element.send(meth).map do |obj|
      ::PageObject::Elements::TableRow.new(obj)
    end
 end`

解决方法: 将 Chrome-Driver 降级到 75.0.3770.140 即可解决我的问题

从现在起,这是一个临时解决方案。希望此问题能尽快得到永久修复!

更新: 将 ChromeDriver 和 Chrome 浏览器都升级到 77.0.3865.40 可解决此问题。- 另请参阅, https://chromedriver.storage.googleapis.com/77.0.3865.40/notes.txt

Moss R
2019-08-01

此问题在 此处 中有描述,在测试页面使用prototypejs v1.6.1时重现。

相应的错误在 此处 (现已关闭),并将于下周(2019年8月26日之后)发布到chromedrivers v76、v77的新版本中。仅供参考:chromedrivers的当前版本是:76.0.3809.68和77.0.3865.10

使用以前的驱动程序版本应该可以,使用chromedriver v75你应该有仅警告“当前版本未经测试”。但对于 v74,您需要使用 --disable-build-check

启动驱动程序
kool79
2019-08-20

使用之前的 chromedriver (75.0.3770.140) 对我来说不起作用。有人有其他解决方案吗?

Stanford Wong
2019-08-08