【问题标题】:User agent testing using Capybara not working使用 Capybara 的用户代理测试不起作用
【发布时间】:2013-10-10 13:57:36
【问题描述】:

我希望使用模拟 iphone 的用户代理来运行我的一些测试。目前我在 FF、Chrome 和 headless 上运行我的测试,我将驱动程序定义为这样的环境变量:

 when 'chrome'
  Capybara.default_selector = :css
  Capybara.default_driver = :selenium
  Capybara.run_server = false
  Capybara.register_driver :selenium do |app|
  Capybara::Selenium::Driver.new(app, :browser => :chrome)
  end

 when 'headless'
  Capybara.default_driver    = :poltergeist
  Capybara.javascript_driver = :poltergeist
  Capybara.run_server = false
  Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app, {:inspector => true})
  end

因此,当我运行测试时,我只需输入 BROWSER=chrome 或 BROWSER=headless,chrome 或 headless 就会启动。我希望使用用户代理做同样的事情,我尝试了以下方法:

    when 'iphone'
      Capybara.register_driver :iphone do |app|
      require 'selenium/webdriver'
      profile = Selenium::WebDriver::Firefox::Profile.new
      profile['general.useragent.override'] = "iphone"
      Capybara::Driver::Selenium.new(app, :profile => profile)

但是,当我尝试像这样运行测试时:BROWSER=iphone,我收到一条消息“机架测试需要机架应用程序,但没有给出 (ArgumentError)”。因此,我尝试通过在开始时添加默认驱动程序和 javascript 驱动程序来解决此问题,如下所示:

     when 'iphone'
      Capybara.default_selector = :css
      Capybara.default_driver = :selenium
      Capybara.run_server = false
      Capybara.register_driver :iphone do |app|
      require 'selenium/webdriver'
      profile = Selenium::WebDriver::Firefox::Profile.new
      profile['general.useragent.override'] = "iphone"
      Capybara::Driver::Selenium.new(app, :profile => profile)

但这只会导致默认的 FF 浏览器被启动。有谁知道我将如何让它工作或我做错了什么?我找到了这篇文章:http://blog.plataformatec.com.br/2011/03/configuring-user-agents-with-capybara-selenium-webdriver/ 并试图关注它,但没有运气。

任何帮助将不胜感激!

【问题讨论】:

    标签: selenium-webdriver capybara


    【解决方案1】:

    要不运行服务器,您应该设置:

    Capybara.run_server = false
    

    要将默认驱动程序设置为:iphone,您应该设置:

    Capybara.default_driver = :iphone
    

    所以完整的设置将是:

    when 'iphone'
      Capybara.register_driver :iphone do |app|
        require 'selenium/webdriver'
        profile = Selenium::WebDriver::Firefox::Profile.new
        profile['general.useragent.override'] = "iphone"
        Capybara::Driver::Selenium.new(app, :profile => profile)
      end
      Capybara.default_driver = :iphone
      Capybara.run_server = false
    

    请注意,最好使用ios-driverappium 而不是通过用户代理的Firefox

    【讨论】:

    • 感谢您的回复安德烈。但是,当我使用您的建议时,我收到了错误:未初始化的常量 Capybara::Driver::Selenium (NameError)。有什么想法吗?至于您对使用 ios-driver 或 appium 的建议,目前我们的应用程序完全基于 Web(不是原生或混合),但设计用于移动设备浏览器,因此我认为用户代理测试可能是一个不错的选择。
    • 有趣的是,我没有 require 'capybara'。我将它添加到我的 env 文件中,但我仍然得到同样的错误。 :-(
    • 设法让它工作,而不是:Capybara::Driver::Selenium.new(app, :profile => profile),我改为:Capybara::Selenium::Driver.new( app, :profile => profile) 和测试现在正在运行,-感谢您的帮助 Andrey
    • @user1523236 抱歉,我没注意到
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 2011-06-26
    相关资源
    最近更新 更多