Skip to content

Commit 9fbeb03

Browse files
committed
Test that we can register a driver with mobile emulation
This tests for mobile emulation by: * Checking that text controlled by a CSS media query is / isn't visible. * Checking that touch input is enabled / disabled.
1 parent 1e68535 commit 9fbeb03

File tree

3 files changed

+60
-1
lines changed

3 files changed

+60
-1
lines changed

spec/features/driver_spec.rb

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ module Capybara
88
module Cuprite
99
describe Driver do
1010
let(:device_pixel_ratio) { @driver.device_pixel_ratio }
11+
let(:mobile) { false }
1112

1213
include Spec::Support::ExternalBrowser
1314

1415
around do |example|
15-
@session = TestSessions::Cuprite
16+
@session = mobile ? TestSessions::CupriteMobile : TestSessions::Cuprite
1617
@driver = @session.driver
1718
example.run
1819
ensure
@@ -50,6 +51,30 @@ def session_url(path)
5051
driver&.quit
5152
end
5253

54+
describe "mobile emulation" do
55+
context "when mobile emulation is enabled" do
56+
let(:mobile) { true }
57+
58+
it "emulates a mobile browser" do
59+
@session.visit("/cuprite/mobile")
60+
expect(@session).to have_text("I am a mobile.")
61+
expect(@session).to have_no_text("I am a desktop.")
62+
expect(@session.evaluate_script("'ontouchstart' in window || navigator.maxTouchPoints > 0")).to be_truthy
63+
end
64+
end
65+
66+
context "when mobile emulation is disabled" do
67+
let(:mobile) { false }
68+
69+
it "does not emulate a mobile browser" do
70+
@session.visit("/cuprite/mobile")
71+
expect(@session).to have_text("I am a desktop.")
72+
expect(@session).to have_no_text("I am a mobile.")
73+
expect(@session.evaluate_script("'ontouchstart' in window || navigator.maxTouchPoints > 0")).to be_falsy
74+
end
75+
end
76+
end
77+
5378
context "output redirection" do
5479
let(:logger) { StringIO.new }
5580
let(:session) { Capybara::Session.new(:cuprite_with_logger, TestApp) }

spec/spec_helper.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@
3030
Capybara::Cuprite::Driver.new(app, options)
3131
end
3232

33+
Capybara.register_driver(:cuprite_mobile) do |app|
34+
options = { mobile: true }
35+
options.merge!(inspector: true) if ENV["INSPECTOR"]
36+
options.merge!(logger: StringIO.new) if ENV["CI"]
37+
options.merge!(headless: false) if ENV["HEADLESS"] == "false"
38+
Capybara::Cuprite::Driver.new(app, options)
39+
end
40+
3341
module TestSessions
3442
Cuprite = Capybara::Session.new(:cuprite, TestApp)
3543
end

spec/support/views/mobile.erb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<title>Mobile test page</title>
5+
<style>
6+
@media (min-width: 1000px) {
7+
.desktop { display: block; }
8+
.mobile { display: none; }
9+
}
10+
11+
@media (max-width: 999px) {
12+
.desktop { display: none; }
13+
.mobile { display: block; }
14+
}
15+
</style>
16+
</head>
17+
<body>
18+
<div class="desktop">
19+
I am a desktop.
20+
</div>
21+
22+
<div class="mobile">
23+
I am a mobile.
24+
</div>
25+
</body>
26+
</html>

0 commit comments

Comments
 (0)