Skip to content

Commit 6aff8c7

Browse files
committed
rb - remove unnecessary and time consuming browser resets in specs
1 parent 8fc56df commit 6aff8c7

File tree

3 files changed

+63
-39
lines changed

3 files changed

+63
-39
lines changed

rb/spec/integration/selenium/webdriver/spec_support/helpers.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ def reset_driver!
3030
GlobalTestEnv.reset_driver!
3131
end
3232

33+
def ensure_single_window
34+
GlobalTestEnv.ensure_single_window
35+
end
36+
3337
def url_for(filename)
3438
GlobalTestEnv.url_for filename
3539
end

rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,14 @@ def reset_driver!
5050
@driver_instance = new_driver_instance
5151
end
5252

53+
def ensure_single_window
54+
@driver_instance.window_handles[1..-1].each do |handle|
55+
@driver_instance.switch_to.window(handle)
56+
@driver_instance.close
57+
end
58+
@driver_instance.switch_to.window @driver_instance.window_handles.first
59+
end
60+
5361
def quit_driver
5462
if @driver_instance
5563
@driver_instance.quit
@@ -82,6 +90,10 @@ def remote_server
8290
)
8391
end
8492

93+
def remote_server?
94+
!@remote_server.nil?
95+
end
96+
8597
def remote_server_jar
8698
@remote_server_jar ||= root.join("build/java/server/test/org/openqa/selenium/server-with-tests-standalone.jar").to_s
8799
end

rb/spec/integration/selenium/webdriver/target_locator_spec.rb

Lines changed: 47 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
not_compliant_on :driver => :remote, :browser => :marionette do
2323
describe "Selenium::WebDriver::TargetLocator" do
2424
after do
25-
reset_driver!
25+
ensure_single_window
2626
end
2727

2828
let(:wait) { Selenium::WebDriver::Wait.new }
@@ -128,60 +128,68 @@
128128

129129
# Marionette BUG: Automatically switches browsing context to new window when it opens.
130130
not_compliant_on :driver => :marionette do
131-
it "should close current window when more than two windows exist" do
132-
driver.navigate.to url_for("xhtmlTest.html")
133-
driver.find_element(:link, "Create a new anonymous window").click
134-
driver.find_element(:link, "Open new window").click
131+
context "with more than two windows" do
132+
before(:each) do
133+
compliant_on :browser => :chrome do
134+
reset_driver!
135+
end
136+
end
135137

136-
wait.until { driver.window_handles.size == 3 }
138+
it "should close current window when more than two windows exist" do
139+
driver.navigate.to url_for("xhtmlTest.html")
140+
driver.find_element(:link, "Create a new anonymous window").click
141+
driver.find_element(:link, "Open new window").click
137142

138-
driver.switch_to.window(driver.window_handle) {driver.close}
139-
expect(driver.window_handles.size).to eq 2
140-
end
143+
wait.until { driver.window_handles.size == 3 }
141144

142-
it "should close another window when more than two windows exist" do
143-
driver.navigate.to url_for("xhtmlTest.html")
144-
driver.find_element(:link, "Create a new anonymous window").click
145-
driver.find_element(:link, "Open new window").click
145+
driver.switch_to.window(driver.window_handle) {driver.close}
146+
expect(driver.window_handles.size).to eq 2
147+
end
146148

147-
wait.until { driver.window_handles.size == 3 }
149+
it "should close another window when more than two windows exist" do
150+
driver.navigate.to url_for("xhtmlTest.html")
151+
driver.find_element(:link, "Create a new anonymous window").click
152+
wait.until { driver.window_handles.size == 2 }
153+
driver.find_element(:link, "Open new window").click
154+
wait.until { driver.window_handles.size == 3 }
148155

149-
window_to_close = driver.window_handles.last
156+
window_to_close = driver.window_handles.last
150157

151-
driver.switch_to.window(window_to_close) { driver.close }
152-
expect(driver.window_handles.size).to eq 2
153-
end
158+
driver.switch_to.window(window_to_close) { driver.close }
159+
expect(driver.window_handles.size).to eq 2
160+
end
154161

155-
it "should iterate over open windows when current window is not closed" do
156-
driver.navigate.to url_for("xhtmlTest.html")
157-
driver.find_element(:link, "Create a new anonymous window").click
158-
driver.find_element(:link, "Open new window").click
162+
it "should iterate over open windows when current window is not closed" do
163+
driver.navigate.to url_for("xhtmlTest.html")
164+
driver.find_element(:link, "Create a new anonymous window").click
165+
driver.find_element(:link, "Open new window").click
166+
167+
wait.until { driver.window_handles.size == 3 }
159168

160-
wait.until { driver.window_handles.size == 3 }
169+
matching_window = driver.window_handles.find do |wh|
170+
driver.switch_to.window(wh) { driver.title == "We Arrive Here" }
171+
end
161172

162-
matching_window = driver.window_handles.find do |wh|
163-
driver.switch_to.window(wh) { driver.title == "We Arrive Here" }
173+
driver.switch_to.window(matching_window)
174+
expect(driver.title).to eq("We Arrive Here")
164175
end
165176

166-
driver.switch_to.window(matching_window)
167-
expect(driver.title).to eq("We Arrive Here")
168-
end
177+
it "should iterate over open windows when current window is closed" do
178+
driver.navigate.to url_for("xhtmlTest.html")
179+
driver.find_element(:link, "Create a new anonymous window").click
180+
driver.find_element(:link, "Open new window").click
169181

170-
it "should iterate over open windows when current window is closed" do
171-
driver.navigate.to url_for("xhtmlTest.html")
172-
driver.find_element(:link, "Create a new anonymous window").click
173-
driver.find_element(:link, "Open new window").click
182+
wait.until { driver.window_handles.size == 3 }
174183

175-
wait.until { driver.window_handles.size == 3 }
184+
driver.close
176185

177-
driver.close
186+
matching_window = driver.window_handles.find do |wh|
187+
driver.switch_to.window(wh) { driver.title == "We Arrive Here" }
188+
end
178189

179-
matching_window = driver.window_handles.find do |wh|
180-
driver.switch_to.window(wh) { driver.title == "We Arrive Here" }
190+
driver.switch_to.window(matching_window)
191+
expect(driver.title).to eq("We Arrive Here")
181192
end
182-
183-
driver.switch_to.window(matching_window)
184-
expect(driver.title).to eq("We Arrive Here")
185193
end
186194
end
187195

0 commit comments

Comments
 (0)