未知错误:即使在 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=65.0 ChromeDriver v2.37 的发行说明明确提及以下内容:支持 Chrome v60-62
我们不知道您的 Selenium 客户端 版本。支持 Chrome v64-66
所以 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文件不存在