Chrome 驱动程序抛出脚本会导致 FindElement 调用出错



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

未知错误:脚本返回意外结果。

目前,我的项目自动化了大约 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 似乎也无关紧要,每次都会引发异常。我尝试使用新的硒安装创建一个新项目,结果是一样的。

我确定这与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时,代码会引发异常。

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

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

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

俗气的页面对象

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

解决办法:将 Chrome 驱动程序降级到 75.0.3770.140 可为我解决问题

这是从现在开始的临时解决方案。希望这个问题尽快得到永久修复!

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

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

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

使用以前的驱动程序版本应该可以工作,使用 chromedriver v75,您应该只收到"当前版本未测试"的警告。但是对于 v74,您需要启动带有--disable-build-check驱动程序

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

相关内容

  • 没有找到相关文章

最新更新