spec/watirspec/window_switching_spec.rb in watir-6.10.1 vs spec/watirspec/window_switching_spec.rb in watir-6.10.2
- old
+ new
@@ -1,415 +1,415 @@
-require "watirspec_helper"
-
-describe "Browser" do
- before do
- url = WatirSpec.url_for("window_switching.html")
- browser.goto url
- browser.a(id: "open").click
- Watir::Wait.until { browser.windows.size == 2 }
- end
-
- after do
- browser.original_window.use
- browser.windows.reject(&:current?).each(&:close)
- end
-
- describe "#windows" do
- it "returns an array of window handles" do
- wins = browser.windows
- expect(wins).to_not be_empty
- wins.each { |win| expect(win).to be_kind_of(Watir::Window) }
- end
-
- it "only returns windows matching the given selector" do
- expect(browser.windows(title: "closeable window").size).to eq 1
- end
-
- it "raises ArgumentError if the selector is invalid" do
- expect { browser.windows(name: "foo") }.to raise_error(ArgumentError)
- end
-
- it "returns an empty array if no window matches the selector" do
- expect(browser.windows(title: "noop")).to eq []
- end
- end
-
- describe "#window" do
- it "finds window by :url" do
- w = browser.window(url: /closeable\.html/).use
- expect(w).to be_kind_of(Watir::Window)
- end
-
- it "finds window by :title" do
- w = browser.window(title: "closeable window").use
- expect(w).to be_kind_of(Watir::Window)
- end
-
- it "finds window by :index" do
- w = browser.window(index: 1).use
- expect(w).to be_kind_of(Watir::Window)
- end
-
- it "should not find incorrect handle" do
- expect(browser.window(handle: 'bar')).to_not be_present
- end
-
- it "returns the current window if no argument is given" do
- expect(browser.window.url).to match(/window_switching\.html/)
- end
-
- it "stores the reference to a window when no argument is given" do
- original_window = browser.window
- browser.window(index: 1).use
- expect(original_window.url).to match(/window_switching\.html/)
- end
-
- bug "https://bugzilla.mozilla.org/show_bug.cgi?id=1223277", :firefox do
- not_compliant_on :headless do
- it "it executes the given block in the window" do
- browser.window(title: "closeable window") do
- link = browser.a(id: "close")
- expect(link).to exist
- link.click
- end.wait_while_present
-
- expect(browser.windows.size).to eq 1
- end
- end
- end
-
- it "raises ArgumentError if the selector is invalid" do
- expect { browser.window(name: "foo") }.to raise_error(ArgumentError)
- end
-
- it "raises a NoMatchingWindowFoundException error if no window matches the selector" do
- expect { browser.window(title: "noop").use }.to raise_no_matching_window_exception
- end
-
- it "raises a NoMatchingWindowFoundException error if there's no window at the given index" do
- expect { browser.window(index: 100).use }.to raise_no_matching_window_exception
- end
-
- it "raises NoMatchingWindowFoundException error when attempting to use a window with an incorrect handle" do
- expect { browser.window(handle: 'bar').use }.to raise_no_matching_window_exception
- end
- end
-end
-
-describe "Window" do
- context 'multiple windows' do
- before do
- browser.goto WatirSpec.url_for("window_switching.html")
- browser.a(id: "open").click
- Watir::Wait.until { browser.windows.size == 2 }
- end
-
- after do
- browser.original_window.use
- browser.windows.reject(&:current?).each(&:close)
- end
-
- not_compliant_on :safari, %i(firefox linux) do
- describe "#close" do
- it "closes a window" do
- browser.a(id: "open").click
- Watir::Wait.until { browser.windows.size == 3 }
-
- browser.window(title: "closeable window").close
- expect(browser.windows.size).to eq 2
- end
- end
-
- it "closes the current window" do
- browser.a(id: "open").click
- Watir::Wait.until { browser.windows.size == 3 }
-
- window = browser.window(title: "closeable window").use
- window.close
- expect(browser.windows.size).to eq 2
- end
- end
-
- describe "#use" do
- it "switches to the window" do
- browser.window(title: "closeable window").use
- expect(browser.title).to eq "closeable window"
- end
- end
-
- describe "#current?" do
- it "returns true if it is the current window" do
- expect(browser.window(title: browser.title)).to be_current
- end
-
- it "returns false if it is not the current window" do
- expect(browser.window(title: "closeable window")).to_not be_current
- end
- end
-
- describe "#title" do
- it "returns the title of the window" do
- titles = browser.windows.map(&:title)
- expect(titles.size).to eq 2
-
- expect(titles.sort).to eq ["window switching", "closeable window"].sort
- end
-
- it "does not change the current window" do
- expect(browser.title).to eq "window switching"
- expect(browser.windows.find { |w| w.title == "closeable window" }).to_not be_nil
- expect(browser.title).to eq "window switching"
- end
- end
-
- describe "#url" do
- it "returns the url of the window" do
- expect(browser.windows.select { |w| w.url =~ (/window_switching\.html/) }.size).to eq 1
- expect(browser.windows.select { |w| w.url =~ (/closeable\.html$/) }.size).to eq 1
- end
-
- it "does not change the current window" do
- expect(browser.url).to match(/window_switching\.html/)
- expect(browser.windows.find { |w| w.url =~ (/closeable\.html/) }).to_not be_nil
- expect(browser.url).to match(/window_switching/)
- end
- end
-
- describe "#eql?" do
- it "knows when two windows are equal" do
- expect(browser.window).to eq browser.window(index: 0)
- end
-
- it "knows when two windows are not equal" do
- win1 = browser.window(index: 0)
- win2 = browser.window(index: 1)
-
- expect(win1).to_not eq win2
- end
- end
-
- not_compliant_on :relaxed_locate do
- describe "#wait_until &:present?" do
- it "times out waiting for a non-present window" do
- expect {
- browser.window(title: "noop").wait_until(timeout: 0.5, &:present?)
- }.to raise_error(Watir::Wait::TimeoutError)
- end
- end
- end
- end
-
- context "with a closed window" do
- before do
- browser.goto WatirSpec.url_for("window_switching.html")
- browser.a(id: "open").click
- Watir::Wait.until { browser.windows.size == 2 }
- end
-
- after do
- browser.original_window.use
- browser.windows.reject(&:current?).each(&:close)
- end
-
- bug "https://bugzilla.mozilla.org/show_bug.cgi?id=1223277", :firefox do
- not_compliant_on :headless do
- describe "#exists?" do
- it "returns false if previously referenced window is closed" do
- window = browser.window(title: "closeable window")
- window.use
- browser.a(id: "close").click
- Watir::Wait.until { browser.windows.size == 1 }
- expect(window).to_not be_present
- end
-
- it "returns false if closed window is referenced" do
- browser.window(title: "closeable window").use
- browser.a(id: "close").click
- Watir::Wait.until { browser.windows.size == 1 }
- expect(browser.window).to_not be_present
- end
- end
- end
- end
-
- describe "#current?" do
- it "returns false if the referenced window is closed" do
- original_window = browser.window
- browser.window(title: "closeable window").use
- original_window.close
- expect(original_window).to_not be_current
- end
- end
-
- not_compliant_on :safari, :headless do
- describe "#eql?" do
- it "should return false when checking equivalence to a closed window" do
- original_window = browser.window
- other_window = browser.window(index: 1)
- other_window.use
- original_window.close
- expect(other_window == original_window).to be false
- end
- end
- end
-
- not_compliant_on :headless do
- describe "#use" do
- it "raises NoMatchingWindowFoundException error when attempting to use a referenced window that is closed" do
- original_window = browser.window
- browser.window(index: 1).use
- original_window.close
- expect { original_window.use }.to raise_no_matching_window_exception
- end
-
- bug "https://bugzilla.mozilla.org/show_bug.cgi?id=1223277", :firefox do
- it "raises NoMatchingWindowFoundException error when attempting to use the current window if it is closed" do
- browser.window(title: "closeable window").use
- browser.a(id: "close").click
- Watir::Wait.until { browser.windows.size == 1 }
- expect { browser.window.use }.to raise_no_matching_window_exception
- end
- end
- end
- end
- end
-
- bug "https://bugzilla.mozilla.org/show_bug.cgi?id=1223277", :firefox do
- not_compliant_on :headless do
- context "with current window closed" do
- before do
- browser.goto WatirSpec.url_for("window_switching.html")
- browser.a(id: "open").click
- Watir::Wait.until { browser.windows.size == 2 }
- browser.window(title: "closeable window").use
- browser.a(id: "close").click
- Watir::Wait.until { browser.windows.size == 1 }
- end
-
- after do
- browser.window(index: 0).use
- browser.windows[1..-1].each(&:close)
- end
-
- describe "#present?" do
- it "should find window by index" do
- expect(browser.window(index: 0)).to be_present
- end
-
- it "should find window by url" do
- expect(browser.window(url: /window_switching\.html/)).to be_present
- end
-
- it "should find window by title" do
- expect(browser.window(title: "window switching")).to be_present
- end
- end
-
- describe "#use" do
-
- context "switching windows without blocks" do
- it "by index" do
- browser.window(index: 0).use
- expect(browser.title).to be == "window switching"
- end
-
- it "by url" do
- browser.window(url: /window_switching\.html/).use
- expect(browser.title).to be == "window switching"
- end
-
- it "by title" do
- browser.window(title: "window switching").use
- expect(browser.url).to match(/window_switching\.html/)
- end
- end
-
- context "Switching windows with blocks" do
- it "by index" do
- browser.window(index: 0).use { expect(browser.title).to be == "window switching" }
- end
-
- it "by url" do
- browser.window(url: /window_switching\.html/).use { expect(browser.title).to be == "window switching" }
- end
-
- it "by title" do
- browser.window(title: "window switching").use { expect(browser.url).to match(/window_switching\.html/) }
- end
- end
-
- end
- end
- end
- end
-
- context "manipulating size and position" do
- before do
- browser.goto WatirSpec.url_for("window_switching.html")
- end
-
- not_compliant_on :headless do
- it "should get the size of the current window" do
- size = browser.window.size
-
- expect(size.width).to be > 0
- expect(size.height).to be > 0
- end
- end
-
- it "should get the position of the current window" do
- pos = browser.window.position
-
- expect(pos.x).to be >= 0
- expect(pos.y).to be >= 0
- end
-
- not_compliant_on :headless do
- it "should resize the window" do
- initial_size = browser.window.size
- browser.window.resize_to(
- initial_size.width - 20,
- initial_size.height - 20
- )
-
- new_size = browser.window.size
-
- expect(new_size.width).to eq initial_size.width - 20
- expect(new_size.height).to eq initial_size.height - 20
- end
- end
-
- not_compliant_on :headless, %i(remote firefox) do
- it "should move the window" do
- initial_pos = browser.window.position
-
- browser.window.move_to(
- initial_pos.x + 2,
- initial_pos.y + 2
- )
-
- new_pos = browser.window.position
- expect(new_pos.x).to eq initial_pos.x + 2
- expect(new_pos.y).to eq initial_pos.y + 2
- end
- end
-
- not_compliant_on :headless do
- compliant_on :window_manager do
- it "should maximize the window" do
- initial_size = browser.window.size
- browser.window.resize_to(
- initial_size.width,
- initial_size.height - 20
- )
-
- browser.window.maximize
- browser.wait_until { browser.window.size != initial_size }
-
- new_size = browser.window.size
- expect(new_size.width).to be >= initial_size.width
- expect(new_size.height).to be > (initial_size.height - 20)
- end
- end
- end
- end
-end
+require "watirspec_helper"
+
+describe "Browser" do
+ before do
+ url = WatirSpec.url_for("window_switching.html")
+ browser.goto url
+ browser.a(id: "open").click
+ Watir::Wait.until { browser.windows.size == 2 }
+ end
+
+ after do
+ browser.original_window.use
+ browser.windows.reject(&:current?).each(&:close)
+ end
+
+ describe "#windows" do
+ it "returns an array of window handles" do
+ wins = browser.windows
+ expect(wins).to_not be_empty
+ wins.each { |win| expect(win).to be_kind_of(Watir::Window) }
+ end
+
+ it "only returns windows matching the given selector" do
+ expect(browser.windows(title: "closeable window").size).to eq 1
+ end
+
+ it "raises ArgumentError if the selector is invalid" do
+ expect { browser.windows(name: "foo") }.to raise_error(ArgumentError)
+ end
+
+ it "returns an empty array if no window matches the selector" do
+ expect(browser.windows(title: "noop")).to eq []
+ end
+ end
+
+ describe "#window" do
+ it "finds window by :url" do
+ w = browser.window(url: /closeable\.html/).use
+ expect(w).to be_kind_of(Watir::Window)
+ end
+
+ it "finds window by :title" do
+ w = browser.window(title: "closeable window").use
+ expect(w).to be_kind_of(Watir::Window)
+ end
+
+ it "finds window by :index" do
+ w = browser.window(index: 1).use
+ expect(w).to be_kind_of(Watir::Window)
+ end
+
+ it "should not find incorrect handle" do
+ expect(browser.window(handle: 'bar')).to_not be_present
+ end
+
+ it "returns the current window if no argument is given" do
+ expect(browser.window.url).to match(/window_switching\.html/)
+ end
+
+ it "stores the reference to a window when no argument is given" do
+ original_window = browser.window
+ browser.window(index: 1).use
+ expect(original_window.url).to match(/window_switching\.html/)
+ end
+
+ bug "https://bugzilla.mozilla.org/show_bug.cgi?id=1223277", :firefox do
+ not_compliant_on :headless do
+ it "it executes the given block in the window" do
+ browser.window(title: "closeable window") do
+ link = browser.a(id: "close")
+ expect(link).to exist
+ link.click
+ end.wait_while_present
+
+ expect(browser.windows.size).to eq 1
+ end
+ end
+ end
+
+ it "raises ArgumentError if the selector is invalid" do
+ expect { browser.window(name: "foo") }.to raise_error(ArgumentError)
+ end
+
+ it "raises a NoMatchingWindowFoundException error if no window matches the selector" do
+ expect { browser.window(title: "noop").use }.to raise_no_matching_window_exception
+ end
+
+ it "raises a NoMatchingWindowFoundException error if there's no window at the given index" do
+ expect { browser.window(index: 100).use }.to raise_no_matching_window_exception
+ end
+
+ it "raises NoMatchingWindowFoundException error when attempting to use a window with an incorrect handle" do
+ expect { browser.window(handle: 'bar').use }.to raise_no_matching_window_exception
+ end
+ end
+end
+
+describe "Window" do
+ context 'multiple windows' do
+ before do
+ browser.goto WatirSpec.url_for("window_switching.html")
+ browser.a(id: "open").click
+ Watir::Wait.until { browser.windows.size == 2 }
+ end
+
+ after do
+ browser.original_window.use
+ browser.windows.reject(&:current?).each(&:close)
+ end
+
+ not_compliant_on :safari, %i(firefox linux) do
+ describe "#close" do
+ it "closes a window" do
+ browser.a(id: "open").click
+ Watir::Wait.until { browser.windows.size == 3 }
+
+ browser.window(title: "closeable window").close
+ expect(browser.windows.size).to eq 2
+ end
+ end
+
+ it "closes the current window" do
+ browser.a(id: "open").click
+ Watir::Wait.until { browser.windows.size == 3 }
+
+ window = browser.window(title: "closeable window").use
+ window.close
+ expect(browser.windows.size).to eq 2
+ end
+ end
+
+ describe "#use" do
+ it "switches to the window" do
+ browser.window(title: "closeable window").use
+ expect(browser.title).to eq "closeable window"
+ end
+ end
+
+ describe "#current?" do
+ it "returns true if it is the current window" do
+ expect(browser.window(title: browser.title)).to be_current
+ end
+
+ it "returns false if it is not the current window" do
+ expect(browser.window(title: "closeable window")).to_not be_current
+ end
+ end
+
+ describe "#title" do
+ it "returns the title of the window" do
+ titles = browser.windows.map(&:title)
+ expect(titles.size).to eq 2
+
+ expect(titles.sort).to eq ["window switching", "closeable window"].sort
+ end
+
+ it "does not change the current window" do
+ expect(browser.title).to eq "window switching"
+ expect(browser.windows.find { |w| w.title == "closeable window" }).to_not be_nil
+ expect(browser.title).to eq "window switching"
+ end
+ end
+
+ describe "#url" do
+ it "returns the url of the window" do
+ expect(browser.windows.select { |w| w.url =~ (/window_switching\.html/) }.size).to eq 1
+ expect(browser.windows.select { |w| w.url =~ (/closeable\.html$/) }.size).to eq 1
+ end
+
+ it "does not change the current window" do
+ expect(browser.url).to match(/window_switching\.html/)
+ expect(browser.windows.find { |w| w.url =~ (/closeable\.html/) }).to_not be_nil
+ expect(browser.url).to match(/window_switching/)
+ end
+ end
+
+ describe "#eql?" do
+ it "knows when two windows are equal" do
+ expect(browser.window).to eq browser.window(index: 0)
+ end
+
+ it "knows when two windows are not equal" do
+ win1 = browser.window(index: 0)
+ win2 = browser.window(index: 1)
+
+ expect(win1).to_not eq win2
+ end
+ end
+
+ not_compliant_on :relaxed_locate do
+ describe "#wait_until &:present?" do
+ it "times out waiting for a non-present window" do
+ expect {
+ browser.window(title: "noop").wait_until(timeout: 0.5, &:present?)
+ }.to raise_error(Watir::Wait::TimeoutError)
+ end
+ end
+ end
+ end
+
+ context "with a closed window" do
+ before do
+ browser.goto WatirSpec.url_for("window_switching.html")
+ browser.a(id: "open").click
+ Watir::Wait.until { browser.windows.size == 2 }
+ end
+
+ after do
+ browser.original_window.use
+ browser.windows.reject(&:current?).each(&:close)
+ end
+
+ bug "https://bugzilla.mozilla.org/show_bug.cgi?id=1223277", :firefox do
+ not_compliant_on :headless do
+ describe "#exists?" do
+ it "returns false if previously referenced window is closed" do
+ window = browser.window(title: "closeable window")
+ window.use
+ browser.a(id: "close").click
+ Watir::Wait.until { browser.windows.size == 1 }
+ expect(window).to_not be_present
+ end
+
+ it "returns false if closed window is referenced" do
+ browser.window(title: "closeable window").use
+ browser.a(id: "close").click
+ Watir::Wait.until { browser.windows.size == 1 }
+ expect(browser.window).to_not be_present
+ end
+ end
+ end
+ end
+
+ describe "#current?" do
+ it "returns false if the referenced window is closed" do
+ original_window = browser.window
+ browser.window(title: "closeable window").use
+ original_window.close
+ expect(original_window).to_not be_current
+ end
+ end
+
+ not_compliant_on :safari, :headless do
+ describe "#eql?" do
+ it "should return false when checking equivalence to a closed window" do
+ original_window = browser.window
+ other_window = browser.window(index: 1)
+ other_window.use
+ original_window.close
+ expect(other_window == original_window).to be false
+ end
+ end
+ end
+
+ not_compliant_on :headless do
+ describe "#use" do
+ it "raises NoMatchingWindowFoundException error when attempting to use a referenced window that is closed" do
+ original_window = browser.window
+ browser.window(index: 1).use
+ original_window.close
+ expect { original_window.use }.to raise_no_matching_window_exception
+ end
+
+ bug "https://bugzilla.mozilla.org/show_bug.cgi?id=1223277", :firefox do
+ it "raises NoMatchingWindowFoundException error when attempting to use the current window if it is closed" do
+ browser.window(title: "closeable window").use
+ browser.a(id: "close").click
+ Watir::Wait.until { browser.windows.size == 1 }
+ expect { browser.window.use }.to raise_no_matching_window_exception
+ end
+ end
+ end
+ end
+ end
+
+ bug "https://bugzilla.mozilla.org/show_bug.cgi?id=1223277", :firefox do
+ not_compliant_on :headless do
+ context "with current window closed" do
+ before do
+ browser.goto WatirSpec.url_for("window_switching.html")
+ browser.a(id: "open").click
+ Watir::Wait.until { browser.windows.size == 2 }
+ browser.window(title: "closeable window").use
+ browser.a(id: "close").click
+ Watir::Wait.until { browser.windows.size == 1 }
+ end
+
+ after do
+ browser.window(index: 0).use
+ browser.windows[1..-1].each(&:close)
+ end
+
+ describe "#present?" do
+ it "should find window by index" do
+ expect(browser.window(index: 0)).to be_present
+ end
+
+ it "should find window by url" do
+ expect(browser.window(url: /window_switching\.html/)).to be_present
+ end
+
+ it "should find window by title" do
+ expect(browser.window(title: "window switching")).to be_present
+ end
+ end
+
+ describe "#use" do
+
+ context "switching windows without blocks" do
+ it "by index" do
+ browser.window(index: 0).use
+ expect(browser.title).to be == "window switching"
+ end
+
+ it "by url" do
+ browser.window(url: /window_switching\.html/).use
+ expect(browser.title).to be == "window switching"
+ end
+
+ it "by title" do
+ browser.window(title: "window switching").use
+ expect(browser.url).to match(/window_switching\.html/)
+ end
+ end
+
+ context "Switching windows with blocks" do
+ it "by index" do
+ browser.window(index: 0).use { expect(browser.title).to be == "window switching" }
+ end
+
+ it "by url" do
+ browser.window(url: /window_switching\.html/).use { expect(browser.title).to be == "window switching" }
+ end
+
+ it "by title" do
+ browser.window(title: "window switching").use { expect(browser.url).to match(/window_switching\.html/) }
+ end
+ end
+
+ end
+ end
+ end
+ end
+
+ context "manipulating size and position" do
+ before do
+ browser.goto WatirSpec.url_for("window_switching.html")
+ end
+
+ not_compliant_on :headless do
+ it "should get the size of the current window" do
+ size = browser.window.size
+
+ expect(size.width).to be > 0
+ expect(size.height).to be > 0
+ end
+ end
+
+ it "should get the position of the current window" do
+ pos = browser.window.position
+
+ expect(pos.x).to be >= 0
+ expect(pos.y).to be >= 0
+ end
+
+ not_compliant_on :headless do
+ it "should resize the window" do
+ initial_size = browser.window.size
+ browser.window.resize_to(
+ initial_size.width - 20,
+ initial_size.height - 20
+ )
+
+ new_size = browser.window.size
+
+ expect(new_size.width).to eq initial_size.width - 20
+ expect(new_size.height).to eq initial_size.height - 20
+ end
+ end
+
+ not_compliant_on :headless, %i(remote firefox) do
+ it "should move the window" do
+ initial_pos = browser.window.position
+
+ browser.window.move_to(
+ initial_pos.x + 2,
+ initial_pos.y + 2
+ )
+
+ new_pos = browser.window.position
+ expect(new_pos.x).to eq initial_pos.x + 2
+ expect(new_pos.y).to eq initial_pos.y + 2
+ end
+ end
+
+ not_compliant_on :headless do
+ compliant_on :window_manager do
+ it "should maximize the window" do
+ initial_size = browser.window.size
+ browser.window.resize_to(
+ initial_size.width,
+ initial_size.height - 20
+ )
+
+ browser.window.maximize
+ browser.wait_until { browser.window.size != initial_size }
+
+ new_size = browser.window.size
+ expect(new_size.width).to be >= initial_size.width
+ expect(new_size.height).to be > (initial_size.height - 20)
+ end
+ end
+ end
+ end
+end