Ruby-Selenium WebDriver 3.142.6: Unable to upload file due to "Selenium::WebDriver::Error::UnknownCommandError:"
Ruby-Selenium WebDriver 3.142.6: Unable to upload file due to "Selenium::WebDriver::Error::UnknownCommandError:"
无法在 Ruby
中使用 selenium-webdriver (3.142.6)
gem 上传文件
技术栈:
selenium-webdriver (3.142.6)
Chrome Version : 77
Chrome driver: 77
错误信息:
Selenium::WebDriver::Error::UnknownCommandError: unknown command: unknown command: session/xxxsession_idXXX/se/file
Backtrace:
Ordinal0 [0x00FDEB13+1501971]
Ordinal0 [0x00F5F6D1+980689]
Ordinal0 [0x00EE765F+489055]
Ordinal0 [0x00E9618E+156046]
Ordinal0 [0x00E95FF4+155636]
Ordinal0 [0x00E7220E+8718]
Ordinal0 [0x00E72626+9766]
Ordinal0 [0x00E72C10+11280]
Ordinal0 [0x00F78F37+1085239]
GetHandleVerifier [0x0107D7ED+503293]
GetHandleVerifier [0x0107D580+502672]
GetHandleVerifier [0x010846AC+531644]
GetHandleVerifier [0x0107DFFA+505354]
Ordinal0 [0x00F70606+1050118]
Ordinal0 [0x00F7047F+1049727]
Ordinal0 [0x00E7204B+8267]
Ordinal0 [0x00E71D7C+7548]
GetHandleVerifier [0x013CD83C+3976780]
BaseThreadInitThunk [0x755738F4+36]
RtlUnicodeStringToInteger [0x77375E13+595]
RtlUnicodeStringToInteger [0x77375DDE+542]
此版本 gem 的上传似乎已中断。
用于上传文件的代码(watir with cheezy)
@browser.file_field(xpath: "//*[contains(text(), 'Upload')]/input[@type='file']").set(complete_path_to_file)
根本原因: w3c
浏览器功能状态
解释: 当 w3c:true
selenium webdriver 抛出这个错误。这可能是因为 Selenium 3 不完全支持 w3c 实现。
解决方案 1: 如果您没有任何基于 w3c
功能的依赖项,那么简单的解决方案是 w3c:false
。
解决方案 2: 如果解决方案 1 不起作用,则必须更新 selenium-webdriver-3.142.6\lib\selenium\webdriver\remote\w3c\commands.rb
文件。检查下面的行然后更新它。
upload_file: [:post, 'session/:session_id/se/file']
将此行更新为
upload_file: [:post, 'session/:session_id/file']
结论: 在推出 Selenium 4 之前更喜欢解决方案 1。如果您使用解决方案 2,当您尝试在未推送此更改的机器上 运行 时,可能会测试失败/文件可能会被 bundle install
设置回原位。
你可以用直接的方法来解决,但我个人觉得太多了。
已将解决方案发布到SeleniumHQ,得到确认后将提交Pull Request到SeleniumHQ。这样你就不会在更高版本的 Selenium Ruby WebDriver 中遇到这个问题。
无法在 Ruby
中使用selenium-webdriver (3.142.6)
gem 上传文件
技术栈:
selenium-webdriver (3.142.6)
Chrome Version : 77
Chrome driver: 77
错误信息:
Selenium::WebDriver::Error::UnknownCommandError: unknown command: unknown command: session/xxxsession_idXXX/se/file
Backtrace:
Ordinal0 [0x00FDEB13+1501971]
Ordinal0 [0x00F5F6D1+980689]
Ordinal0 [0x00EE765F+489055]
Ordinal0 [0x00E9618E+156046]
Ordinal0 [0x00E95FF4+155636]
Ordinal0 [0x00E7220E+8718]
Ordinal0 [0x00E72626+9766]
Ordinal0 [0x00E72C10+11280]
Ordinal0 [0x00F78F37+1085239]
GetHandleVerifier [0x0107D7ED+503293]
GetHandleVerifier [0x0107D580+502672]
GetHandleVerifier [0x010846AC+531644]
GetHandleVerifier [0x0107DFFA+505354]
Ordinal0 [0x00F70606+1050118]
Ordinal0 [0x00F7047F+1049727]
Ordinal0 [0x00E7204B+8267]
Ordinal0 [0x00E71D7C+7548]
GetHandleVerifier [0x013CD83C+3976780]
BaseThreadInitThunk [0x755738F4+36]
RtlUnicodeStringToInteger [0x77375E13+595]
RtlUnicodeStringToInteger [0x77375DDE+542]
此版本 gem 的上传似乎已中断。
用于上传文件的代码(watir with cheezy)
@browser.file_field(xpath: "//*[contains(text(), 'Upload')]/input[@type='file']").set(complete_path_to_file)
根本原因: w3c
浏览器功能状态
解释: 当 w3c:true
selenium webdriver 抛出这个错误。这可能是因为 Selenium 3 不完全支持 w3c 实现。
解决方案 1: 如果您没有任何基于 w3c
功能的依赖项,那么简单的解决方案是 w3c:false
。
解决方案 2: 如果解决方案 1 不起作用,则必须更新 selenium-webdriver-3.142.6\lib\selenium\webdriver\remote\w3c\commands.rb
文件。检查下面的行然后更新它。
upload_file: [:post, 'session/:session_id/se/file']
将此行更新为
upload_file: [:post, 'session/:session_id/file']
结论: 在推出 Selenium 4 之前更喜欢解决方案 1。如果您使用解决方案 2,当您尝试在未推送此更改的机器上 运行 时,可能会测试失败/文件可能会被 bundle install
设置回原位。
你可以用直接的方法来解决,但我个人觉得太多了。
已将解决方案发布到SeleniumHQ,得到确认后将提交Pull Request到SeleniumHQ。这样你就不会在更高版本的 Selenium Ruby WebDriver 中遇到这个问题。