Created
September 10, 2013 17:41
-
-
Save tompata/6512905 to your computer and use it in GitHub Desktop.
Cucumber hook and additional environment config for testing different screen resolutions with Capybara, Poltergeist and PhantomJS
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 characters
| <% | |
| CUCUMBER_PROFILES = %w{desktop mobile tablet_landscape tablet_portrait} | |
| rerun = File.file?('tmp/rerun.txt') ? IO.read('tmp/rerun.txt') : "" | |
| rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}" | |
| std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} --tags ~@wip -r features" | |
| %> | |
| default: <%= std_opts %> features | |
| wip: --tags @wip:3 --wip features | |
| rerun: <%= rerun_opts %> --format rerun --out tmp/rerun.txt --strict --tags ~@wip | |
| <% CUCUMBER_PROFILES.each do |profile| %> | |
| <% | |
| profile_rerun = File.file?("tmp/rerun_#{profile}.txt") ? IO.read("tmp/rerun_#{profile}.txt") : "" | |
| profile_rerun_opts = profile_rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{profile_rerun}" | |
| %> | |
| <%= profile %>: <%= std_opts %> features --tags @common,@<%= profile %> SCREEN_MODE=<%= profile %> | |
| <%= profile %>_rerun: <%= profile_rerun_opts %> -r features --tags @common,@<%= profile %> SCREEN_MODE=<%= profile %> | |
| <% end %> | |
| untagged: <%= std_opts %> features --tags ~@common --tags ~@desktop --tags ~@mobile --tags ~@tablet_portrait --tags ~@tablet_landscape |
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 characters
| require 'capybara/poltergeist' | |
| def set_screen_size_by_profile | |
| $screen_mode = ENV['SCREEN_MODE'] || 'desktop' | |
| @window_width, @window_height = case $screen_mode | |
| when 'desktop' | |
| [1200, 1024] | |
| when 'tablet_landscape' | |
| [1020, 600] | |
| when 'tablet_portrait' | |
| [620, 800] | |
| when 'mobile' | |
| [340, 480] | |
| end | |
| puts "screen size was set to #{@window_width}*#{@window_height}" | |
| end | |
| def screen_is_mobile? | |
| $screen_mode == 'mobile' | |
| end | |
| def screen_is_desktop? | |
| $screen_mode == 'desktop' | |
| end | |
| def screen_is_tablet_landscape? | |
| $screen_mode == 'tablet_landscape' | |
| end | |
| def screen_is_tablet_portrait? | |
| $screen_mode == 'tablet_portrait' | |
| end | |
| require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "selectors")) | |
| # include warden mocking helpers | |
| include Warden::Test::Helpers | |
| Warden.test_mode! | |
| Capybara::Screenshot.autosave_on_failure = true | |
| module WithinHelpers | |
| def with_scope(locator) | |
| locator ? within(*selector_for(locator)) { yield } : yield | |
| end | |
| end | |
| World(WithinHelpers) | |
| set_screen_size_by_profile | |
| Capybara.javascript_driver = :poltergeist | |
| Capybara.register_driver :poltergeist do |app| | |
| Capybara::Poltergeist::Driver.new(app, | |
| # inspector: true, | |
| window_size: [@window_width, @window_height], | |
| js_errors: true, | |
| timeout: 60) | |
| end | |
| Capybara.register_driver :poltergeist_scroll do |app| | |
| Capybara::Poltergeist::Driver.new(app, | |
| window_size: [@window_width, 400], | |
| js_errors: true, | |
| timeout: 60) | |
| end | |
| Capybara.register_driver :poltergeist_without_js_errors do |app| | |
| Capybara::Poltergeist::Driver.new(app, | |
| window_size: [@window_width, @window_height], | |
| js_errors: false, | |
| timeout: 60) | |
| end | |
| # override for testing | |
| module Airbrake | |
| def self.notify(exception, opts = {}) | |
| # do nothing. | |
| end | |
| end | |
| module Capybara | |
| module Node | |
| class Element | |
| def hover | |
| @session.driver.browser.action.move_to(self.native).perform | |
| end | |
| end | |
| end | |
| end if Capybara.current_driver == :selenium |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment