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