首页 > 解决方案 > selenium/webdriver/firefox/binary.rb:134:in `path': 无法修改冻结字符串 (FrozenError)

问题描述

我尝试在 selenium 中运行一个简单的谷歌查找代码并在 EC2 实例(Amazon Linux)上运行它。我在启动 Firefox 时遇到错误,无法理解错误的含义。

Ruby 版本 - ruby​​ 2.6.3p62(2019-04-16 修订版 67580)[x86_64-linux] selenium-webdriver 版本 - 3.142.3

require 'selenium-webdriver'

options = Selenium::WebDriver::Firefox::Options.new(args: ['-headless'])
driver = Selenium::WebDriver.for(:firefox, options: options)

driver.get "http://google.com"

puts "Page title is #{driver.title}"

driver.quit

跑步时ruby test.rb

Traceback (most recent call last):
    8: from test.rb:4:in `<main>'
    7: from /usr/local/rvm/gems/ruby-2.6.3/gems/selenium-webdriver-3.142.3/lib/selenium/webdriver.rb:88:in `for'
    6: from /usr/local/rvm/gems/ruby-2.6.3/gems/selenium-webdriver-3.142.3/lib/selenium/webdriver/common/driver.rb:54:in `for'
    5: from /usr/local/rvm/gems/ruby-2.6.3/gems/selenium-webdriver-3.142.3/lib/selenium/webdriver/firefox/driver.rb:33:in `new'
    4: from /usr/local/rvm/gems/ruby-2.6.3/gems/selenium-webdriver-3.142.3/lib/selenium/webdriver/firefox/driver.rb:33:in `new'
    3: from /usr/local/rvm/gems/ruby-2.6.3/gems/selenium-webdriver-3.142.3/lib/selenium/webdriver/firefox/marionette/driver.rb:38:in `initialize'
    2: from /usr/local/rvm/gems/ruby-2.6.3/gems/selenium-webdriver-3.142.3/lib/selenium/webdriver/common/driver.rb:299:in `service_url'
    1: from /usr/local/rvm/gems/ruby-2.6.3/gems/selenium-webdriver-3.142.3/lib/selenium/webdriver/common/service.rb:45:in `firefox'
/usr/local/rvm/gems/ruby-2.6.3/gems/selenium-webdriver-3.142.3/lib/selenium/webdriver/firefox/binary.rb:134:in `path': can't modify frozen String (FrozenError)

在这里需要一些帮助。

标签: rubyseleniumselenium-webdriverrubygemsselenium-firefoxdriver

解决方案


此外,从 开始selenium-webdriver 3.142.3,您可以使用以下命令检查当前的 Firefox 二进制路径:

Selenium::WebDriver::Firefox::Binary.path

FrozenError如果没有找到二进制文件,这将抛出相同的结果,如果在某处找到了 Firefox 二进制文件,则返回二进制路径。

还值得一提的是,如果您有兴趣,在repo中已经打开了一个问题,以使错误消息更具解释性。selenium-webdriver


推荐阅读