未知错误:即使在 chromedriver 升级后,调用函数结果也缺少 Selenium Send Keys 的“值”

Posted

技术标签:

【中文标题】未知错误:即使在 chromedriver 升级后,调用函数结果也缺少 Selenium Send Keys 的“值”【英文标题】:unknown error: call function result missing 'value' for Selenium Send Keys even after chromedriver upgrade 【发布时间】:2018-08-16 04:33:30 【问题描述】:

我在发送密钥时收到以下错误。

结果消息:

System.InvalidOperationException : unknown error: call function result missing 'value'
  (Session info: chrome=65.0.3325.146)
  (Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 10.0.14393 x86_64)

我已将 chrome 驱动程序更新到 2.36,但我的代码仍然搜索 2.33?

有什么想法吗?

【问题讨论】:

从昨天开始出现同样的问题。就我而言,我认为问题在于无头 chrome v65 + selenium driver v2.34 的组合(更改日志说它与 chrome v61-63 兼容) 【参考方案1】:
Use xpaths instead of class names to locate elements

更新 chrome 及其驱动程序后,它根本没有帮助我!! 我不知道它有多大意义,但是当我用 xpath 替换类名时它对我有用。这是 xpath ,我曾经使用 python 自动发送 whatsapp 消息。

driver.find_element_by_xpath('//*[@id="main"]/footer/div[1]/div[2]/div')

以前我用过

driver.find_element_by_class_name('Some class Name Here')

【讨论】:

【参考方案2】:

将您的 ChromeDriver.exe 替换为最新版本。同样可以从 Google 轻松下载。

还最好使用 webDriver 管理器自动完成,如下所述 - 1.在你的项目POM中添加Mvn依赖:

<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>$webdrivermanager.version</version>
    <scope>test</scope>
</dependency>
    现在在您的浏览器实例化类中而不是使用传统方式来创建驱动程序,即使用 System.setProperty(见下文)...

    System.setProperty("webdriver.chrome.driver","src/test/resources/drivers/chromedriver.exe");

使用以下方法:

WebDriverManager.chromedriver().setup(); webDriver = new ChromeDriver(chromeOptions);

就是这样,你完成了!

使用以下链接供您参考- What is Browser Binary Manager how to use it for Selenium

或 chkout git 项目相同- https://github.com/bonigarcia/webdrivermanager#webdrivermanager-as-java-dependency

【讨论】:

这对我有用 - 2.37 的下载可以在这里找到:chromedriver.storage.googleapis.com/index.html?path=2.37 是的,现在最新的是-ChromeDriver 2.38 -chromedriver.chromium.org/downloads【参考方案3】:

问题是由于 chromedriver 和 chrome 浏览器版本不匹配。 以下链接指定了支持chrome浏览器版本的chromedriver版本。

http://chromedriver.chromium.org/downloads

【讨论】:

【参考方案4】:

我不知道您是否仍在处理此问题,但我收到了类似的错误。我的 PATH 中有最新版本的 chromedriver,并且 Google Chrome 已更新。我在 Windows 10 x64 位上运行 Python 3.6。我试图从网页上的下拉菜单中选择一个值。奇怪的是,它会正确选择下拉值并且页面会很好地更新,但无论如何我都会收到那个愚蠢的错误,我的脚本会冻结。所以我只是为它做了一个异常错误处理程序,因为就像我说它正确选择了下拉值,所以我只是想绕过那个愚蠢的错误消息:

# select by value
try:
    select.select_by_value('100')
except:
    pass

希望有人觉得这很有帮助。

【讨论】:

【参考方案5】:

我遇到了同样的错误,请下载最新的 ChromeDriver 版本和/或更新 chrome 浏览器版本,它会正常工作:)

https://chromedriver.storage.googleapis.com/index.html?path=2.36/

【讨论】:

我已经下载了它并称为 Nuget 并删除了对 2.33 的所有引用,但它仍然连接到旧的 2.33 吗? 我下载了最新的 chromedriver 2.36,但它仍然不适用于 Chrome 版本 65.0.3325.146(官方构建)(64 位)至少在 Mac OS 上:( 哦,抱歉,我实际上错误地配置了我的路径,在我将它链接到新的 chromedriver 之后,我的脚本现在实际上可以工作了。顺便说一句,我正在使用 Windows 机器。 如果你使用github.com/flavorjones/chromedriver-helper gem,那么在控制台运行chromedriver-update 2.36 如果使用 Homebrew,可以执行brew upgrade chromedriver【参考方案6】:

如果您正在使用gulp-protractor 插件,请务必同时更新它。

【讨论】:

【参考方案7】:

我在 Windows 环境中使用 Selenium 运行 Protractor (webdriver-manager),我必须执行以下操作:

    webdriver-manager update --versions.chrome="2.36"(这会将新的 Chromedriver 下载到正确的路径,但没有在量角器中启用它。) 编辑 %userprofile%\AppData\Roaming\npm\node_modules\protractor\config.json 并将 chromedriver 值从 2.32 更改为 2.36。 从%userprofile%\AppData\Roaming\npm\node_modules\protractor\selenium 中删除我的旧chromedriver_2.32.exe 以获得更好的衡量标准(不确定是否需要这样做。)

或者:

当需要另一个 Chromedriver 更新时,我无法再以这种方式进行更新。配置设置仍然需要旧的路径和文件名,我不知道在哪里更改该设置。所以我只是将最新的 chromedriver 重命名为“chromedriver.exe”并将其卡在 C:\Windows\system32(始终由 PATH 引用)中。粗鲁,但有效。

【讨论】:

【参考方案8】:

如果您使用的是最新的稳定版 Google Chrome(例如 67),我建议:

brew uninstall chromedriver
brew tap homebrew/cask
brew cask install chromedriver

这组命令将卸载您当前的 chromedriver,检查更新并安装最新的(例如 2.40)。

【讨论】:

很高兴它有帮助!【参考方案9】:

错误说明了一切:

System.InvalidOperationException : unknown error: call function result missing 'value'
  (Session info: chrome=65.0.3325.146)
  (Driver info: chromedriver=2.33.506120

该错误清楚地抱怨 InvalidOperationException

您的主要问题是您使用的二进制文件之间的版本兼容性,如下所示:

您正在使用 chromedriver=2.33 chromedriver=2.33 的发行说明明确提及以下内容:

支持 Chrome v60-62

您正在使用 chrome=65.0 ChromeDriver v2.37 的发行说明明确提及以下内容:

支持 Chrome v64-66

我们不知道您的 Selenium 客户端 版本。

所以 ChromeDriver 版本 (v2.33) 和 Chrome 浏览器 版本 (v65. 0)

解决方案

Selenium升级到当前级别Version 3.11.0。 将ChromeDriver升级到ChromeDriver v2.37级别。 将 Chrome 版本保持在 Chrome v64.x-66.x 级别之间。 (as per ChromeDriver v2.37 release notes) 清理你的项目工作区通过你的IDE重建你的项目只需要依赖。 使用CCleaner 工具在执行测试套件之前和之后清除所有操作系统杂务。 如果您的基础 Web Browser/Web Client 版本太旧,请通过Revo Uninstaller 卸载它并安装最新的 GA 和发布版本的 Web Browser/Web Client. 执行您的@Test

【讨论】:

【参考方案10】:

我正在运行 Protractor 并且遇到了同样的问题。

我的解决方案相当简单。

$ npm update protractor -g

$ webdriver-manager update

【讨论】:

如果您正在使用gulp-protractor 插件,请务必同时更新它。【参考方案11】:

正如其他人所提到的,最新的 chromedriver 为我解决了问题。如果您手动下载了驱动程序并想告诉 appium 使用新的 chromedriver,您可以通过以下命令执行此操作:

appium --chromedriver-executable /path/to/driver/chromedriver ....

【讨论】:

【参考方案12】:

如果这可能对我需要额外步骤的人有所帮助:

我在 MacOS X 上。我做到了

brew upgrade chromedriver
bundle exec chromedriver-upgrade

我安装了 chromedriver-helper gem,但它被隐藏了,需要“bundle exec”前缀,否则 shell 找不到命令。

以上解决了我的问题。

【讨论】:

【参考方案13】:

就我而言,我所在的团队将 selenium 指向我们拥有的特定 chromedriver 文件。为了让 Selenium 使用更新后的 chromedriver,我首先使用 brew 安装它,然后创建一个符号链接指向 Selenium 查找它的位置:

brew install chromedriver
ln -s /usr/local/Cellar/chromedriver/2.36/bin/chromedriver /path/where/selenium/expects/chromedriver

【讨论】:

【参考方案14】:

如果您使用的是 Mac:

brew upgrade selenium-server-standalone
brew upgrade chromedriver

如果以上两个都没有安装:

brew install selenium-server-standalone
brew install chromedriver

【讨论】:

【参考方案15】:

需要更新 chromedriver : 在控制台中,运行:chromedriver-update 2.36

【讨论】:

【参考方案16】:

是因为chrome浏览器版本从64.xx更新到65.xx

现在您有 2 个选项可以成功运行测试。

    将您的 chrome 浏览器降级到以前的版本,并使用您现在拥有的旧 chromedriver。

    使用更新后的 Chrome 浏览器将您的 Chrome 驱动程序升级到 2.36 版本。

    访问 https://chromedriver.storage.googleapis.com/index.html?path=2.36 并下载新的 chromedriver。

选项 2 更好。

【讨论】:

我在以下环境中:Ubuntu 16.04、GoogleChrome 65.0.3325.146、ChromeDriver 2.36.540471。而且我仍然得到上面的确切错误。我需要改变什么?但是,该错误说我使用的是 chromedriver 版本 2.33.506092... 您需要提及您更新的最新chromedriver的确切路径,而不是旧的。或者用新的替换旧的chromedriver。只需检查一下。 如果有人在 Visual Studio 中遇到此错误,请将 chrome Web 驱动程序 Nuget 包升级到 2.37(在撰写本文时)将解决此错误。【参考方案17】:

将 Google Chrome 浏览器更新到 Version 65.0.3325.146 (Official Build) (64-bit) 后,我也遇到了同样的错误 在向输入字段发送值时,这是错误消息...

selenium.common.exceptions.WebDriverException: Message: unknown error: call function result missing 'value'

使用 Chromedriver 2.32 和 Google Chrome 65.0

当我对此进行一些研究时,我在 Google chrome v65 更改日志上找到了最近的 commit,它可以帮助我解决问题。

解决方案:

将 Google Chrome 更新到最新的稳定版本(在我的情况下,它是 2018 年 3 月 9 日的 v65)

下载并配置最新的 chromedriver (v2.36)。 要配置 chromedriver(在 Ubuntu 上),请按照以下步骤操作...

    解压下载的 zip 文件。 将提取的 chromedriver 文件复制到 /usr/local/bin 或您通常存储可执行二进制文件的位置。 将相同的路径(放置 chromedriver 文件的位置)添加到环境变量 PATH 中

导出 PATH=$PATH:/usr/local/bin

    为了测试安装,重启终端并输入这个命令

chromedriver --version

它会显示你刚刚安装的 chromedriver 的版本。

注意:如果已经安装并配置了 chromedriver,则只需替换现有的驱动程序文件,如果您不知道 Chromedriver 二进制文件已存储在哪里,请尝试使用以下命令查找文件

 sudo find -H / -type f -iname chromedriver

【讨论】:

以上是关于未知错误:即使在 chromedriver 升级后,调用函数结果也缺少 Selenium Send Keys 的“值”的主要内容,如果未能解决你的问题,请参考以下文章

未知错误:Chrome 无法启动:异常退出(驱动程序信息:chromedriver=2.8.undefined

未知错误:由于未知错误导致页面崩溃,会话被删除:无法从 ChromeDriver Selenium 崩溃的选项卡中确定加载状态

OSX 修复 Selenium Chromedriver 启动错误产生未知系统错误 -86 可执行文件中的错误 CPU 类型?

Jmeter Chromedriver错误:未知错误:从远程主机执行时,DevToolsActivePort文件不存在

升级 Expo CLI 有未知错误 --assetPlugins

node.js抱怨说“当前路径上找不到ChromeDriver”,即使chromedriver在路径上