c# - Chrome 驱动程序在 FindElement 调用中抛出脚本结果错误

标签 c# selenium selenium-chromedriver

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

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 时,代码抛出异常。

最佳答案

在我们的测试自动化服务器上​​将 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 驱动程序降级为 75.0.3770.140帮我解决问题

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

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

关于c# - Chrome 驱动程序在 FindElement 调用中抛出脚本结果错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57297186/

相关文章:

c# - Entity Framework Core 和包括子集合

java - 在 Eclipse 中使用 Selenium 出现 JSONException

c# - Entity Framework - 在连接上使用导航属性

c# - 找不到 Entity Framework 6 的兼容提供者

c# - BatchBlock 使用在 TriggerBatch() 之后发送的元素生成批处理

python - Selenium 按 ID 点击

java - Selenium 2.53 不适用于 Firefox 47

java - selenium - 无法在 gmail 中找到“撰写”按钮

java - 带有 TestNG 和 Gradle 的 Selenium : Setting browser crash tests as SKIPPED instead of FAILED

selenium - 需要降级 Protractor 的 chromedriver 以匹配早期的 Chrome 版本