1

我在 ruby​​ 中使用 selenoid 进行远程浏览器测试。我正在使用“selenium-webdriver”、“capybara”、“rspec”进行自动化。我正在使用 attach_file 方法将文件上传到浏览器我想在 Firefox 和 Chrome 浏览器上上传文件,但它都会引发错误;

镀铬

Selenium::WebDriver::Error::UnknownCommandError: unknown command: unknown command: session/***8d32e045e3***/se/file

在火狐中

“不允许 HTTP 方法”处的意外令牌

所以搜索后我找到了 chrome 的解决方案,即在 caps['goog:chromeOptions'] > caps['goog:chromeOptions'] = {w3c: false}中设置 w3c 选项 false 所以现在 chrome 正在使用OSS 桥进行握手但是我不知道如何在 Firefox 中做到这一点。Firefox 没有类似的解决方案。我的浏览器功能如下:

if ENV['BROWSER'] == 'firefox'
    caps = Selenium::WebDriver::Remote::Capabilities.new
    caps['browserName'] = 'firefox'
    # caps['moz:firefoxOptions'] = {w3c: false} ## It is not working
  else
    caps = Selenium::WebDriver::Remote::Capabilities.new
    caps["browserName"] = "chrome"
    caps["version"] = "81.0"
    caps['goog:chromeOptions'] = {w3c: false}
  end
    caps["enableVNC"] = true
    caps["screenResolution"] = "1280x800"
    caps['sessionTimeout'] = '15m'

  Capybara.register_driver :selenium do |app|  
    Capybara::Selenium::Driver.new(app, browser: :remote,
    :desired_capabilities => caps,
    :url => ENV["REMOTE_URL"] || "http://*.*.*.*:4444/wd/hub"
    )
  end

  Capybara.configure do |config|  
   config.default_driver = :selenium
  end
4

2 回答 2

1

我发现了问题。在 java 上运行的 selenium 服务器中存在错误,因此我必须更改我的 selenium-webdriver gem 版本 3.142.7 和猴子补丁。您可以在此处找到有关错误和解决方案的更多信息。

现在我必须更改我的 gem 和猴子补丁 selenium-webdriver-3.142.7\lib\selenium\webdriver\remote\w3c\commands.rb 文件。检查以下行,即第 150 行。

upload_file: [:post, 'session/:session_id/se/file']

并将其更新为

upload_file: [:post, 'session/:session_id/file']
于 2020-07-27T05:31:51.977 回答
0

在 Firefox 图像中,我们/session/<id>/file通过添加模拟此 API 而不是 Geckodriver(未实现它)的 Selenoid 二进制文件来支持 API。

于 2020-07-23T15:29:08.930 回答