【问题标题】:Capybara drivers for different layouts适用于不同布局的 Capybara 驱动程序
【发布时间】:2016-08-16 14:17:32
【问题描述】:

我有两个司机

  • 桌面版
  • 手机版

手机:

Capybara.register_driver :selenium do |app|
  args = []
  args << "-user-agent='Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'"
  Capybara::Selenium::Driver.new(app, :browser => :chrome, :args => args)

end

桌面:

Capybara.register_driver :selenium do |app|
  Capybara::Selenium::Driver.new(app, :browser => :chrome)
end

目前我为每个测试添加它,这有点不方便。

我想在我的spec_helper 中设置它,但我该怎么做呢?

结果应该是这样的:

if folder.mobile?
 use mobile driver 
else 
 desktop driver
end 

【问题讨论】:

    标签: ruby-on-rails selenium rspec capybara


    【解决方案1】:

    有多种方法可以在每个测试中切换驱动程序,但第一步是使用不同的名称定义驱动程序,以便您可以在它们之间切换而不是不断地重新定义它们

    Capybara.register_driver :selenium_mobile do |app|
      args = []
      args << "-user-agent='Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'"
      Capybara::Selenium::Driver.new(app, :browser => :chrome, :args => args)
    end
    
    Capybara.register_driver :selenium do |app|
      Capybara::Selenium::Driver.new(app, :browser => :chrome)
    end
    

    然后假设您使用的是普通 capybara/rspec 配置,您可以使用驱动程序标记您的移动功能::selenium_mobile

    feature "do something mobile", driver: :selenium_mobile do
      ...
    end
    

    或者如果你想基于目录,你可以做类似的事情

    RSpec.before(:each) do |example|
      if self.class.include?(Capybara::DSL) and example.file_path.include?('mobile')
        Capybara.current_driver = :selenium_mobile
      end
    end
    

    所需的确切配置取决于您为非移动测试配置驱动程序的准确程度。

    【讨论】:

    • 你的解决方案更好
    【解决方案2】:

    我做到了

    spec_helper

    config.before(:each) do
      mobile = config.instance_variable_get(:@files_or_directories_to_run)[0].include?('mobile')
      if mobile
        Capybara.register_driver :selenium do |app|
          args = []
          args << "-user-agent='Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'"
          Capybara::Selenium::Driver.new(app, :browser => :chrome, :args => args)
        end
      else
        Capybara.register_driver :selenium do |app|
          Capybara::Selenium::Driver.new(app, :browser => :chrome)
        end
      end
    end
    

    更新:

    仅当您单独运行测试时才有效

    例如

    rspec spec/mobile/... etc 
    

    但如果只运行 rspec 它将不起作用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-22
      • 2011-05-11
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-18
      相关资源
      最近更新 更多