selenium / capybara - 无法加载Firefox个人资料

时间:2012-07-03 22:13:21

标签: ruby-on-rails selenium capybara

当我使用selenium运行测试时,浏览器会反复弹出声明无法找到firefox配置文件。我准备了一个与selenium一起使用的Firefox配置文件我只是不确定如何告诉selenium该配置文件的位置。

如何告诉Selenium使用哪个firefox配置文件?

4 个答案:

答案 0 :(得分:4)

我得到同样的错误。对我来说,事实证明,在我的测试中调用save_and_open_page导致了问题。我删除了那些并且Firefox配置文件错误已停止。

我还没有任何需要(仅)for capybara / selenium的特殊Firefox配置文件,但是,为了更彻底地回答您的问题,在尝试解决此问题时,我遇到了以下两种方法来指定配置文件对于Firefox。

注意:这些都没有真正解决我的个人资料错误问题,但无论如何我都把它们包括在内,因为你问过。

方法1: (要求项目中的每个开发人员在Firefox中设置特殊配置文件。)

将以下内容添加到test_helper.rb

Capybara.register_driver :my_firefox_driver do |app|
  Capybara::Selenium::Driver.new(app, :browser => :firefox, :profile => 'name_of_existing_profile')
end

方法2: (不要求项目中的每个开发人员在Firefox中设置特殊配置文件。)

将以下内容添加到测试助手.rb

require 'selenium-webdriver'

...

  Capybara.register_driver :my_firefox_driver do |app|
    profile = Selenium::WebDriver::Firefox::Profile.new
    Capybara::Selenium::Driver.new(app, :browser => :firefox, :profile => profile)
  end

然后,无论您选择哪种方法,都可以将默认驱动程序设置为新驱动程序,或者通过在测试开始时放置Capybara.current_driver = :my_firefox_driver并确保test_helper.rb包含如果您按照设置说明进行操作,则应将Capybara.use_default_driver的任务拆除。

答案 1 :(得分:1)

要在Ruby中执行此操作需要进行大量调查,但我已将其付诸实施。

首先,使用-p标志启动Firefox以选择配置文件。创建新的配置文件并将其存储在项目中的某个位置。在我的案例中," firefox_profile"目录。在那之后你需要给Selenium一个关于在哪里找到这个配置文件的提示,为此你可以修改layout_on_disk方法:

module Selenium
  module WebDriver
    module Firefox
      class Profile
        def layout_on_disk
          firefox_profile = File.expand_path(File.join(File.dirname(__FILE__),'firefox_profile'))
          profile_dir = create_tmp_copy(firefox_profile)
          FileReaper << profile_dir

          install_extensions(profile_dir)
          delete_lock_files(profile_dir)
          delete_extensions_cache(profile_dir)
          update_user_prefs_in(profile_dir)

          puts "Using temporary Firefox profile in: #{profile_dir} from #{firefox_profile}"
          profile_dir
        end
      end
    end
  end
end

As Gist here

答案 2 :(得分:0)

我也遇到了这个问题,结果与Firefox配置文件无关。在我的例子中,我用于PhantomJS的Ghostdriver版本与我用于FirefoxDriver的Selenium版本之间的类路径不兼容(我试图设置我的代码以允许两者)。删除Ghostdriver依赖项并注释掉PhantomJS代码会使此配置文件错误消失。真的,如果我已经阅读了它给我更密切的错误消息,我会看到由于类不兼容而导致配置文件错误的根本原因是缺少方法。具体错误类似于:

NoSuchMethodError:org.openqa.selenium.os.CommandLine.waitFor(J)V

答案 3 :(得分:0)

我在Firefox更新后遇到此错误。

我手动打开Firefox,允许它应用更新,然后测试工作。