When running selenium with capybara/rails, how do I configure the server?

空扰寡人 提交于 2019-12-18 10:55:11

问题


Normally I use the rails dev server at port 3000.

Capybara/Cucumber uses Capybara.server_port = 31337. If I swap from the default driver to selenium, it looks like it tries to connect on port 80.

I'm trying to understand:

  • When using selenium, do I need to separately instantiate a test server on the test environment.
  • If the answer to the above question is yes, how can I make it so I can seamlessly swap between web drivers without having to keep changing things?

If someone has an example of a env.rb configuration that would help please let me know!

Thanks!

Chris.


回答1:


If you use selenium, you should start web server in test environment. You can start it on a different port from development. Then you should configure Capybara to use that port:

  Capybara.run_server = true #Whether start server when testing
  Capybara.server_port = 8200
  Capybara.default_selector = :css #:xpath #default selector , you can change to :css
  Capybara.default_wait_time = 5 #When we testing AJAX, we can set a default wait time
  Capybara.ignore_hidden_elements = false #Ignore hidden elements when testing, make helpful when you hide or show elements using javascript
  Capybara.javascript_driver = :selenium #default driver when you using @javascript tag
  # Other option is:
  # Capybara.javascript_driver = :webkit

If you don't want to start server every time before you run your cucumber scenarios I suggest you to use capybara webkit driver. All javascript scenarios will run at background. It also will work on continuous integration server.

If you are on Linux platform, capybara-webkit requires an X server to run. To setup it you can use headless gem. Here is headless configuration for cucumber:

# place code below in features/support/headless.rb
if Capybara.current_driver == :webkit
  require 'headless'

  headless = Headless.new
  headless.start

  at_exit do
    headless.destroy
  end
end



回答2:


This may or may not answer your question, but here's my env.rb file (the relevant bits).

Capybara.app_host = "http://0.0.0.0:3000"
Capybara.server_port = 3000

I also have this in there:

Capybara.register_driver :iphone do |app|
  require 'selenium/webdriver'
  profile = Selenium::WebDriver::Firefox::Profile.new
  profile['general.useragent.override'] = "iPhone"

  Capybara::Selenium::Driver.new(app, :profile => profile)
end

Maybe you can have the Capybara.app_host and .server_port lines inside the register_driver bit and switch driver in your Cucumber scripts. :/



来源:https://stackoverflow.com/questions/8413443/when-running-selenium-with-capybara-rails-how-do-i-configure-the-server

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!