Skip to content

Instantly share code, notes, and snippets.

@tompata
Created September 10, 2013 17:41
Show Gist options
  • Select an option

  • Save tompata/6512905 to your computer and use it in GitHub Desktop.

Select an option

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
<%
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
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