-
-
Save mycargus/d1df3adc9d1246ab74c4011b3f29fbc3 to your computer and use it in GitHub Desktop.
Revisions
-
rosskevin revised this gist
Feb 12, 2015 . 1 changed file with 121 additions and 54 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,84 +1,111 @@ # verified against log_in.feature for blake # https://github.com/jnicklas/capybara/issues/1443 # turn on webkit driver debug $use_webkit = true $use_chrome_instead_of_firefox = false $webkit_debug = false $wait_time = 5 def webkit_driver if $webkit_debug return :webkit_debug else return :webkit end end def webkit? [:webkit, :webkit_debug].include? Capybara.current_driver end def selenium? Capybara.javascript_driver == :selenium end if $use_chrome_instead_of_firefox # Register chrome browser for the :selenium driver, can be triggered below with the combination of @javascript @show Capybara.register_driver :selenium do |app| Capybara::Selenium::Driver.new(app, :browser => :chrome) end end # try to get a unique port, important for parallels tests # if ENV['TEST_ENV_NUMBER'] test_env_number = ENV['TEST_ENV_NUMBER'] test_env_number ||= 1 test_port = 9887 + test_env_number.to_i #test_port += 1 while is_port_open?(@port) and not is_running_on_port?(@port) puts "Capybara::Server.port: #{test_port} for test process: #{test_env_number}" Capybara.server_port = test_port # end if $headless_server.nil? # Unnecessary on mac, see https://github.com/leonid-shevtsov/headless/issues/31#issuecomment-8933108 if !OS.mac? require 'headless' # allow display autopick (by default) # allow each headless to destroy_at_exit (by default) # allow each process to have their own headless by setting reuse: false # $headless_server = Headless.new(reuse: false) $headless_server = Headless.new(reuse: true, destroy_at_exit: false) $headless_server.start puts "Process[#{Process.pid}] started headless server display: #{$headless_server.display}" end end at_exit do unless $headless_server.nil? puts "Process[#{Process.pid}] destroying headless server on display: #{$headless_server.display}" $headless_server.destroy end end # first time around, we need this set. if $use_webkit Capybara.default_driver = webkit_driver # Capybara.current_driver = webkit_driver # Capybara.javascript_driver = webkit_driver end # # If the @show tag is present on a non-mac environment, ignore it, # otherwise allow the combination of @javascript @show to trigger the # :selenium driver (which is :chrome browser as configured above) # Before do |scenario| if $use_webkit Capybara.current_driver = webkit_driver Capybara.javascript_driver = webkit_driver end # problem on @show with backgrounds: https://github.com/cucumber/cucumber/issues/52 if should_show(scenario) # for some reason, just using the `using_driver` doesn't get us all the way there, so set/reset the `javascript_driver` as necessary. Capybara.current_driver = :selenium Capybara.javascript_driver = :selenium # needed for @show with chrome, as it doesn't seem to explicitly set the javascript driver end # puts "Using #{Capybara.current_driver}/#{Capybara.javascript_driver}/#{Capybara.default_driver}" end After do |scenario| # problem on @show with backgrounds: https://github.com/cucumber/cucumber/issues/52 # puts "Done #{Capybara.current_driver}/#{Capybara.javascript_driver}/#{Capybara.default_driver}" Capybara.use_default_driver end def should_show(scenario) OS.mac? && (has_tag(scenario, '@show') || has_tag(scenario, '@leave_browser_open') || has_tag(scenario, '@single_step')) end def has_tag(scenario, tag) @@ -96,22 +123,62 @@ def has_tag(scenario, tag) Capybara.default_wait_time = $wait_time end # webkit javascript check only AfterStep do if webkit? begin #puts "All Javascript errors: #{page.driver.error_messages}" # puts "All console messages: #{page.driver.console_messages}" real_error_messages = page.driver.error_messages #real_error_messages = [] #page.driver.error_messages.each_with_index do |e, i| # # first two messages appear to be bogus, always. # if (e[:line_number] == 0) && (e[:source].eql? 'undefined') && (e[:message].eql? 'TypeError: \'null\' is not an object') && i <= 1 # # discard message # else # real_error_messages << e # end #end if real_error_messages.length > 0 unless real_error_messages.first[:source].include?('https://a.stripecdn.com/manage/assets/application.manage') raise "Javascript errors: #{real_error_messages}" end end rescue puts "Failed to check javascript error messages." end end end After do |scenario| if (scenario.failed?) print_console_messages scenario end end def print_console_messages(scenario) return unless webkit? begin messages = page.driver.console_messages if messages.presence && messages.size > 0 print "\n--------------------------------------------------------------------------------------------------------------------------------------------" print "\nConsole: #{scenario_unique_name(scenario)}: " print "\n---------------------------------------------------------------------------\n" messages.each do |console_message| print "\n" print console_message[:message] end print "\n--------------------------------------------------------------------------------------------------------------------------------------------" else print "\n--------------------------------------------------------------------------------------------------------------------------------------------" print "\nNo Console messages for: #{scenario_unique_name(scenario)}: " print "\n--------------------------------------------------------------------------------------------------------------------------------------------" end $stdout.flush rescue puts "Failed to write console messages." end end -
rosskevin revised this gist
Dec 18, 2013 . 1 changed file with 11 additions and 10 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -12,7 +12,7 @@ def set_webkit_driver() end def webkit?() [:webkit, :webkit_debug].include? Capybara.current_driver end # Possible values are :truncation and :transaction @@ -101,15 +101,16 @@ def has_tag(scenario, tag) if webkit? #puts "All Javascript errors: #{page.driver.error_messages}" real_error_messages = page.driver.error_messages #real_error_messages = [] #page.driver.error_messages.each_with_index do |e, i| # # first two messages appear to be bogus, always. # if (e[:line_number] == 0) && (e[:source].eql? 'undefined') && (e[:message].eql? 'TypeError: \'null\' is not an object') && i <= 1 # # discard message # else # real_error_messages << e # end #end raise "Javascript errors: #{real_error_messages}" if real_error_messages.length > 0 end -
rosskevin revised this gist
Nov 21, 2013 . 1 changed file with 26 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -25,6 +25,13 @@ def webkit?() Capybara.register_driver :selenium do |app| Capybara::Selenium::Driver.new(app, :browser => :chrome) end #else # Capybara.register_driver :selenium do |app| # require 'selenium/webdriver' # profile = Selenium::WebDriver::Firefox::Profile.new # profile['focusmanager.testmode'] = 'true' # Capybara::Selenium::Driver.new(app, :profile => profile) # end end # Unnecessary on mac @@ -87,4 +94,23 @@ def has_tag(scenario, tag) @scenario = scenario # reset to wait time in case something in the scenario upped it as it was long running Capybara.default_wait_time = $wait_time end # webkit javascript check only AfterStep do if webkit? #puts "All Javascript errors: #{page.driver.error_messages}" real_error_messages = [] page.driver.error_messages.each_with_index do |e, i| # first two messages appear to be bogus, always. if (e[:line_number] == 0) && (e[:source].eql? 'undefined') && (e[:message].eql? 'TypeError: \'null\' is not an object') && i <= 1 # discard message else real_error_messages << e end end raise "Javascript errors: #{real_error_messages}" if real_error_messages.length > 0 end end -
rosskevin revised this gist
Nov 20, 2013 . 1 changed file with 36 additions and 16 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,34 +1,49 @@ # turn on webkit driver debug $webkit_debug = false $wait_time = 5 $use_chrome_instead_of_firefox = true def set_webkit_driver() if $webkit_debug Capybara.javascript_driver = :webkit_debug else Capybara.javascript_driver = :webkit end end def webkit?() [:webkit, :webkit_debug].include? Capybara.javascript_driver end # Possible values are :truncation and :transaction # The :transaction strategy is faster, but might give you threading problems. # See https://github.com/cucumber/cucumber-rails/blob/master/features/choose_javascript_database_strategy.feature Cucumber::Rails::Database.javascript_strategy = :truncation if $use_chrome_instead_of_firefox # Register chrome browser for the :selenium driver, can be triggered below with the combination of @javascript @show Capybara.register_driver :selenium do |app| Capybara::Selenium::Driver.new(app, :browser => :chrome) end end # Unnecessary on mac if (!OS.mac? && !$headless_started) require 'headless' # allow display autopick (by default) # allow each headless to destroy_at_exit (by default) # allow each process to have their own headless by setting reuse: false headless_server = Headless.new(:reuse => false) headless_server.start $headless_started = true puts "Process[#{Process.pid}] started headless server display: #{headless_server.display}" end # Set capybara-webkit as the default driver for javascript, it is 3x faster than selenium in a simple test YMMV set_webkit_driver() # # If the @show tag is present on a non-mac environment, ignore it, @@ -65,6 +80,11 @@ def has_tag(scenario, tag) end).include? tag end # Increase wait time for ajax retries Capybara.default_wait_time = $wait_time Before do |scenario| @scenario = scenario # reset to wait time in case something in the scenario upped it as it was long running Capybara.default_wait_time = $wait_time end -
rosskevin revised this gist
Nov 20, 2013 . 1 changed file with 10 additions and 16 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -39,8 +39,16 @@ # problem on @show with backgrounds: https://github.com/cucumber/cucumber/issues/52 if should_show(scenario) # for some reason, just using the `using_driver` doesn't get us all the way there, so set/reset the `javascript_driver` as necessary. original_driver = Capybara.javascript_driver begin Capybara.javascript_driver = :selenium Capybara.using_driver :selenium do block.call end ensure Capybara.javascript_driver = original_driver end else block.call @@ -59,18 +67,4 @@ def has_tag(scenario, tag) Before do |scenario| @scenario = scenario end -
rosskevin revised this gist
Aug 21, 2013 . 1 changed file with 21 additions and 10 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -2,23 +2,29 @@ # gem 'headless' # gem 'capybara-webkit' # Possible values are :truncation and :transaction # The :transaction strategy is faster, but might give you threading problems. # See https://github.com/cucumber/cucumber-rails/blob/master/features/choose_javascript_database_strategy.feature Cucumber::Rails::Database.javascript_strategy = :truncation # Register chrome browser for the :selenium driver, can be triggered below with the combination of @javascript @show Capybara.register_driver :selenium do |app| Capybara::Selenium::Driver.new(app, :browser => :chrome) end # Unnecessary on mac if (!OS.mac? && !$headless_started) require 'headless' # allow display autopick (by default) # allow each headless to destroy_at_exit (by default) # allow each process to have their own headless by setting reuse: false headless_server = Headless.new(:reuse => false) headless_server.start $headless_started = true puts "Process[#{Process.pid}] started headless server display: #{headless_server.display}" end # Set capybara-webkit as the default driver for javascript, it is 3x faster than selenium in a simple test YMMV @@ -51,10 +57,15 @@ def has_tag(scenario, tag) end).include? tag end Before do |scenario| @scenario = scenario end # supports fill_in f '' def trigger_event_for(selector, event) raise "Please supply a selector" if selector.blank? raise "Please use the @javascript tag on: \n\tFeature: #{@scenario.feature.name}\n\tScenario: #{@scenario.name}\n" unless has_tag(@scenario, '@javascript') if Capybara.javascript_driver == :selenium page.execute_script %Q{ $('#{selector}').trigger("#{event}") } end -
rosskevin revised this gist
Jul 11, 2013 . 1 changed file with 2 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -8,12 +8,12 @@ end Before do # Unnecessary on mac if !OS.mac? && !$headless_started require 'headless' @headless = Headless.new @headless.start $headless_started = true end end -
rosskevin revised this gist
Jul 11, 2013 . 1 changed file with 14 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -8,7 +8,7 @@ end Before do if !OS.mac? && !$headless_started # set this flag right away, Headless can throw exceptions on OSX and we don't care. $headless_started = true require 'headless' @@ -49,4 +49,17 @@ def has_tag(scenario, tag) (scenario.source_tags.map do |tag| tag.name end).include? tag end # supports fill_in f '' def trigger_event_for(selector, event) raise "Please supply a selector" if selector.blank? if Capybara.javascript_driver == :selenium page.execute_script %Q{ $('#{selector}').trigger("#{event}") } end if Capybara.javascript_driver == :webkit page.find(selector).trigger(event.to_sym) end end -
rosskevin revised this gist
Jul 11, 2013 . 1 changed file with 17 additions and 14 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -7,6 +7,20 @@ Capybara::Selenium::Driver.new(app, :browser => :chrome) end Before do if !$headless_started # set this flag right away, Headless can throw exceptions on OSX and we don't care. $headless_started = true require 'headless' @headless = Headless.new @headless.start end end at_exit do @headless.destroy unless @headless.nil? end # Set capybara-webkit as the default driver for javascript, it is 3x faster than selenium in a simple test YMMV Capybara.javascript_driver = :webkit @@ -16,22 +30,11 @@ # :selenium driver (which is :chrome browser as configured above) # Around('@javascript') do |scenario, block| # problem on @show with backgrounds: https://github.com/cucumber/cucumber/issues/52 if should_show(scenario) Capybara.using_driver :selenium do block.call end else block.call -
rosskevin revised this gist
Jul 5, 2013 . 1 changed file with 4 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,3 +1,7 @@ # gem 'os' # gem 'headless' # gem 'capybara-webkit' # Register chrome browser for the :selenium driver, can be triggered below with the combination of @javascript @show Capybara.register_driver :selenium do |app| Capybara::Selenium::Driver.new(app, :browser => :chrome) -
rosskevin revised this gist
Jul 5, 2013 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -7,7 +7,7 @@ Capybara.javascript_driver = :webkit # # If the @show tag is present on a non-mac environment, ignore it, # otherwise allow the combination of @javascript @show to trigger the # :selenium driver (which is :chrome browser as configured above) # -
rosskevin created this gist
Jul 5, 2013 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,45 @@ # Register chrome browser for the :selenium driver, can be triggered below with the combination of @javascript @show Capybara.register_driver :selenium do |app| Capybara::Selenium::Driver.new(app, :browser => :chrome) end # Set capybara-webkit as the default driver for javascript, it is 3x faster than selenium in a simple test YMMV Capybara.javascript_driver = :webkit # # If the @show tag is present on a non-mac environment, ignore it use default, # otherwise allow the combination of @javascript @show to trigger the # :selenium driver (which is :chrome browser as configured above) # Around('@javascript') do |scenario, block| if should_show(scenario) original_driver = Capybara.javascript_driver begin Capybara.javascript_driver = :selenium block.call ensure Capybara.javascript_driver = original_driver end elsif Capybara.current_driver == :selenium require 'headless' headless = Headless.new begin headless.start block.call ensure headless.destroy end else block.call end end def should_show(scenario) OS.mac? && has_tag(scenario, '@show') end def has_tag(scenario, tag) (scenario.source_tags.map do |tag| tag.name end).include? tag end