spec/watirspec/elements/element_spec.rb in watir-6.15.1 vs spec/watirspec/elements/element_spec.rb in watir-6.16.0

- old
+ new

@@ -18,23 +18,36 @@ it 'raises ArgumentError if given the wrong number of arguments' do container = double('container').as_null_object expect { Watir::Element.new(container, 1, 2, 3, 4) }.to raise_error(ArgumentError) expect { Watir::Element.new(container, 'foo') }.to raise_error(ArgumentError) end + + it 'throws deprecation warning when combining element locator with other locators' do + element = double Selenium::WebDriver::Element + allow(element).to receive(:enabled?).and_return(true) + expect { browser.text_field(class_name: 'name', index: 1, element: element) }.to have_deprecated_element_cache + end end describe '#element_call' do it 'handles exceptions when taking an action on a stale element' do browser.goto WatirSpec.url_for('removed_element.html') - element = browser.div(id: 'text').tap(&:exists?) + element = browser.div(id: 'text').locate browser.refresh expect(element).to be_stale expect { element.text }.to_not raise_error end + + it 'relocates stale element when taking an action on it' do + browser.goto(WatirSpec.url_for('forms_with_input_elements.html')) + element = browser.text_field(id: 'new_user_first_name').locate + browser.refresh + expect { element.click }.not_to raise_exception + end end describe '#eq and #eql?' do before { browser.goto WatirSpec.url_for('definition_lists.html') } @@ -222,11 +235,11 @@ expect { browser.text_field(id: 'no_such_id').visible? }.to raise_unknown_object_exception }.to output(msg).to_stdout_from_any_process end it 'raises UnknownObjectException exception if the element is stale' do - element = browser.text_field(id: 'new_user_email').tap(&:exists?) + element = browser.text_field(id: 'new_user_email').locate browser.refresh expect(element).to be_stale expect { @@ -259,17 +272,40 @@ it 'returns false if one of the parent elements is hidden' do expect { expect(browser.div(id: 'hidden_parent')).to_not be_visible } end end + describe '#cache=' do + it 'bypasses selector location' do + browser.goto(WatirSpec.url_for('forms_with_input_elements.html')) + + wd = browser.div.wd + element = Watir::Element.new(browser, id: 'not_valid') + element.cache = wd + + expect(element).to exist + end + + it 'can be cleared' do + browser.goto(WatirSpec.url_for('forms_with_input_elements.html')) + + wd = browser.div.wd + element = Watir::Element.new(browser, id: 'not_valid') + element.cache = wd + + browser.refresh + expect(element).to_not exist + end + end + describe '#exists?' do before do browser.goto WatirSpec.url_for('removed_element.html') end it 'element from a collection returns false when it becomes stale' do - element = browser.divs(id: 'text').first.tap(&:exists?) + element = browser.divs(id: 'text').first.locate browser.refresh expect(element).to be_stale expect { @@ -299,11 +335,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 - element = browser.div(id: 'foo').tap(&:exists?) + element = browser.div(id: 'foo').locate browser.refresh expect(element).to be_stale @@ -311,19 +347,19 @@ expect(element).to_not be_present }.to have_deprecated_stale_present end it 'does not raise staleness deprecation if element no longer exists in DOM' do - element = browser.div(id: 'foo').tap(&:exists?) + element = browser.div(id: 'foo').locate browser.goto(WatirSpec.url_for('iframes.html')) expect { element.present? }.to_not have_deprecated_stale_present end # TODO: Documents Current Behavior, but needs to be refactored/removed it 'returns true the second time if the element is stale' do - element = browser.div(id: 'foo').tap(&:exists?) + element = browser.div(id: 'foo').locate browser.refresh expect(element).to be_stale @@ -352,19 +388,19 @@ end end describe '#stale?' do it 'returns true if the element is stale' do - element = browser.button(name: 'new_user_submit_disabled').tap(&:exists?) + element = browser.button(name: 'new_user_submit_disabled').locate browser.refresh expect(element).to be_stale end it 'returns false if the element is not stale' do - element = browser.button(name: 'new_user_submit_disabled').tap(&:exists?) + element = browser.button(name: 'new_user_submit_disabled').locate expect(element).to_not be_stale end end @@ -453,16 +489,10 @@ it "doesn't raise when called on nested elements" do expect(browser.div(id: 'no_such_div').link(id: 'no_such_id')).to_not exist end - it 'raises if both :xpath and :css are given' do - msg = ':xpath and :css cannot be combined ({:xpath=>"//div", :css=>"div"})' - expect { browser.div(xpath: '//div', css: 'div').exists? } - .to raise_exception Watir::Exception::LocatorException, msg - end - it "doesn't raise when selector has with :xpath has :index" do expect(browser.div(xpath: '//div', index: 1)).to exist end it "doesn't raise when selector has with :css has :index" do @@ -785,11 +815,11 @@ it 'returns true if element has been located' do expect(browser.form(id: 'new_user')).to_not be_located end it 'returns false if element has not been located' do - expect(browser.form(id: 'new_user').tap(&:exists?)).to be_located + expect(browser.form(id: 'new_user').locate).to be_located end end describe '#wd' do it 'returns a Selenium::WebDriver::Element instance' do @@ -895,13 +925,19 @@ btn = browser.button(id: 'surrounded') expect(btn).not_to be_obscured expect { btn.click }.not_to raise_exception end - it 'scrolls element into view before checking if obscured' do + it 'scrolls interactive element into view before checking if obscured' do btn = browser.button(id: 'requires_scrolling') expect(btn).not_to be_obscured expect { btn.click }.not_to raise_exception + end + + it 'scrolls non-interactive element into view before checking if obscured' do + div = browser.div(id: 'requires_scrolling_container') + expect(div).not_to be_obscured + expect { div.click }.not_to raise_exception end it 'returns true if element cannot be scrolled into view' do btn = browser.button(id: 'off_screen') expect(btn).to be_obscured