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

时间:2019-07-31 18:49:17

标签: c# selenium selenium-chromedriver

昨天更新到Chrome浏览器版本76.0.3809.87,并将我的Chrome驱动程序更新到版本76.0.3809.68之后,我们在使用FindElementsFindElementByXPath和{ {1}}个方法。更新前未发生此问题。抛出的异常是:

  

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

目前,我的项目在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

这些站点中的每个站点都是由同一家公司构建的,因此代码具有可比性。使用FindElement方法时,不会引发此异常。您提供给该方法的XPath似乎也无关紧要,每次都会引发异常。我尝试用新的硒安装程序创建一个新项目,结果是相同的。

我确定这与Chrome驱动程序更新有关,与我搜索但找不到的FindElementById的实际实现有关。我的猜测是,它在后端使用了一些JavaScript,与网站的配合不好。

我没有尝试使用其他驱动程序重现此问题。鉴于我们的一些项目限制,目前我们只能使用Chrome驱动程序。

搜索此问题不会产生任何结果,因为这是一个新问题。搜索异常消息只会产生关于错误使用FindElements的事情,(我认为)与我的问题无关。

有人知道会在网站上引起什么吗?或者,如果有已知的解决方法?在提交有关此问题的帮助票之前,只想确保我没有做任何导致此问题的特定操作即可。

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时,代码将引发异常。

3 个答案:

答案 0 :(得分: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])`

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

答案 1 :(得分:1)

here中描述了此问题,当受测页面使用prototypejs v1.6.1时会重现该问题。

对应的错误here(现已关闭),应于下周(2019年8月26日之后)发布到新版本的chromedrivers v76,v77中。仅供参考:chromedrivers的当前版本为:76.0.3809.68和77.0.3865.10

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

启动驱动程序

答案 2 :(得分:-1)

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