spec/element_spec.rb in watir-webdriver-0.7.0 vs spec/element_spec.rb in watir-webdriver-0.8.0

- old
+ new

@@ -2,11 +2,11 @@ describe Watir::Element do describe '#present?' do before do - browser.goto(WatirSpec.url_for("wait.html", :needs_server => true)) + browser.goto(WatirSpec.url_for("wait.html", needs_server: true)) end it 'returns true if the element exists and is visible' do expect(browser.div(:id, 'foo')).to be_present end @@ -18,11 +18,11 @@ it 'returns false if the element does not exist' do expect(browser.div(:id, 'should-not-exist')).to_not be_present end it "returns false if the element is stale" do - wd_element = browser.div(:id => "foo").wd + wd_element = browser.div(id: "foo").wd # simulate element going stale during lookup allow(browser.driver).to receive(:find_element).with(:id, 'foo') { wd_element } browser.refresh @@ -31,11 +31,11 @@ end describe "#reset!" do it "successfully relocates collection elements after a reset!" do - browser.goto(WatirSpec.url_for("wait.html", :needs_server => true)) + browser.goto(WatirSpec.url_for("wait.html", needs_server: true)) element = browser.div(:id, 'foo') expect(element).to exist browser.refresh expect(element.exist?).to be false unless Watir.always_locate? element.send :reset! @@ -43,48 +43,61 @@ end end describe "#exists?" do before do - browser.goto WatirSpec.url_for('removed_element.html', :needs_server => true) + browser.goto WatirSpec.url_for('removed_element.html', needs_server: true) end it "does not propagate StaleElementReferenceErrors" do - button = browser.button(:id => "remove-button") - element = browser.div(:id => "text") + button = browser.button(id: "remove-button") + element = browser.div(id: "text") expect(element).to exist button.click expect(element).to_not exist end it "returns false when an element from a collection becomes stale" do - button = browser.button(:id => "remove-button") - text = browser.divs(:id => "text").first + button = browser.button(id: "remove-button") + text = browser.divs(id: "text").first expect(text).to exist button.click expect(text).to_not exist end it "returns false when an element becomes stale" do - wd_element = browser.div(:id => "text").wd + wd_element = browser.div(id: "text").wd # simulate element going stale during lookup allow(browser.driver).to receive(:find_element).with(:id, 'text') { wd_element } browser.refresh expect(browser.div(:id, 'text')).to_not exist end + + it "returns appropriate value when an ancestor element becomes stale" do + stale_element = browser.div(id: 'top').div(id: 'middle').div(id: 'bottom') + expect(stale_element.present?).to be true # look up and store @element for each element in hierarchy + + grandparent = stale_element.instance_variable_get('@parent').instance_variable_get('@parent').instance_variable_get('@element') + + # simulate element going stale during lookup + allow(grandparent).to receive('enabled?') { raise Selenium::WebDriver::Error::ObsoleteElementError } + + browser.refresh + expect(stale_element.present?).to be Watir.always_locate? + end end describe "#element_call" do it 'handles exceptions when taking an action on an element that goes stale during execution' do - browser.goto WatirSpec.url_for('removed_element.html', :needs_server => true) + browser.goto WatirSpec.url_for('removed_element.html', needs_server: true) - watir_element = browser.div(:id => "text") + watir_element = browser.div(id: "text") # simulate element going stale after assert_exists and before action taken allow(watir_element).to receive(:text) do watir_element.send :assert_exists browser.refresh @@ -99,15 +112,15 @@ end end describe "#hover" do - not_compliant_on [:webdriver, :firefox, :synthesized_events], - [:webdriver, :internet_explorer], - [:webdriver, :iphone], - [:webdriver, :safari] do + not_compliant_on %i(webdriver firefox synthesized_events), + %i(webdriver internet_explorer), + %i(webdriver iphone), + %i(webdriver safari) do it "should hover over the element" do - browser.goto WatirSpec.url_for('hover.html', :needs_server => true) + browser.goto WatirSpec.url_for('hover.html', needs_server: true) link = browser.a expect(link.style("font-size")).to eq "10px" link.hover expect(link.style("font-size")).to eq "20px"