Chrome驱动程序在FindElement调用上引发脚本结果错误

Men*_*ive 2 c# selenium selenium-chromedriver

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

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

目前,我的项目可以在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;
}
Run Code Online (Sandbox Code Playgroud)

使用上面的代码时,success可以正确计算,但是在尝试计算failure代码时会引发异常。

Mos*_*s R 7

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

在使用行/列引用调用表对象时,即通过以下方法,缩小了导致问题的原因并最终从该方法返回了错误。

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

俗气的页面对象

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

解决方法:将 Chrome-Driver降级到75.0.3770.140为我解决了问题

从现在开始,这是一个临时解决方案。希望这个问题能永久解决!

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