spec/watirspec/elements/element_spec.rb in watir-7.0.0.beta1 vs spec/watirspec/elements/element_spec.rb in watir-7.0.0.beta2
- old
+ new
@@ -1,9 +1,10 @@
require 'watirspec_helper'
describe 'Element' do
before :each do
+ @c = Selenium::WebDriver::Platform.mac? ? :command : :control
browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
end
describe '.new' do
it "finds elements matching the conditions when given a hash of :how => 'what' arguments" do
@@ -99,18 +100,17 @@
expect(browser.element(visible_text: /some visible/)).to exist
expect(browser.element(visible_text: 'Link 2', class: 'external')).to exist
expect(browser.element(visible_text: /Link 2/, class: 'external')).to exist
end
- bug 'Safari is not filtering out hidden text', :safari do
- it 'finds elements by visible text in spite of hidden text' do
- browser.goto WatirSpec.url_for('non_control_elements.html')
+ it 'finds elements by visible text in spite of hidden text',
+ except: {browser: :safari, reason: 'Safari is not filtering out hidden text'} do
+ browser.goto WatirSpec.url_for('non_control_elements.html')
- expect(browser.element(visible_text: 'some visible')).to exist
- expect(browser.element(visible_text: 'none visible')).not_to exist
- expect(browser.element(visible_text: /none visible/)).not_to exist
- end
+ expect(browser.element(visible_text: 'some visible')).to exist
+ expect(browser.element(visible_text: 'none visible')).not_to exist
+ expect(browser.element(visible_text: /none visible/)).not_to exist
end
it 'raises exception unless value is a String or a RegExp' do
browser.goto WatirSpec.url_for('non_control_elements.html')
msg = /expected one of \[String, Regexp\], got 7:Integer/
@@ -200,18 +200,17 @@
tf.focus
expect(browser.div(id: 'onfocus_test').text).to eq 'changed by onfocus event'
end
end
- bug 'https://github.com/SeleniumHQ/selenium/issues/2555', %i[remote firefox] do
- bug 'https://github.com/SeleniumHQ/selenium/issues/1795', %i[remote edge] do
- describe '#focused?' do
- it 'knows if the element is focused' do
- expect(browser.element(id: 'new_user_first_name')).to be_focused
- expect(browser.element(id: 'new_user_last_name')).to_not be_focused
- end
- end
+ describe '#focused?',
+ except: {browser: :firefox,
+ remote: true,
+ reason: 'https://github.com/SeleniumHQ/selenium/issues/2555'} do
+ it 'knows if the element is focused' do
+ expect(browser.element(id: 'new_user_first_name')).to be_focused
+ expect(browser.element(id: 'new_user_last_name')).to_not be_focused
end
end
describe '#fire_event' do
it 'should fire the given event' do
@@ -247,20 +246,22 @@
describe '#exists?' do
before do
browser.goto WatirSpec.url_for('removed_element.html')
end
- it 'element from a collection is re-looked up after it becomes stale' do
+ it 'element from a collection is re-looked up after it becomes stale',
+ except: {browser: :ie, reason: 'throwing NoSuchElement instead'} do
element = browser.divs(id: 'text').first.locate
browser.refresh
expect(element).to be_stale
expect(element).to exist
end
- it 'element from a selenium element throws an exception when relocated' do
+ it 'element from a selenium element throws an exception when relocated',
+ except: {browser: :ie, reason: 'throwing NoSuchElement instead'} do
div = browser.div.locate
element = browser.element(element: div.wd)
browser.refresh
expect(element).to be_stale
@@ -336,11 +337,12 @@
browser.refresh
expect(element).to be_stale
end
- it 'returns true the second time if the element is stale' do
+ it 'returns true the second time if the element is stale',
+ except: {browser: :ie, reason: 'throwing NoSuchElement instead'} do
element = browser.div.locate
browser.refresh
expect(element).to be_stale
@@ -460,11 +462,10 @@
end
end
describe '#send_keys' do
before(:each) do
- @c = Selenium::WebDriver::Platform.mac? ? :command : :control
browser.goto(WatirSpec.url_for('keylogger.html'))
end
let(:receiver) { browser.text_field(id: 'receiver') }
let(:events) { browser.element(id: 'output').ps.size }
@@ -479,50 +480,129 @@
receiver.send_keys 'hello', 'world'
expect(receiver.value).to eq 'helloworld'
expect(events).to eq 10
end
- bug 'http://code.google.com/p/chromium/issues/detail?id=93879', %i[chrome macosx] do
- bug 'special keys are not working correctly', :safari, :firefox do
- it 'performs key combinations' do
- receiver.send_keys 'foo'
- receiver.send_keys [@c, 'a']
- receiver.send_keys :backspace
- expect(receiver.value).to be_empty
- expect(events).to eq 6
- end
+ context 'with key combinations',
+ except: [{browser: :firefox, reason: 'https://github.com/mozilla/geckodriver/issues/245'},
+ {browser: :safari}] do
+ it 'performs from array' do
+ receiver.send_keys 'foo'
+ receiver.send_keys [@c, 'a']
+ receiver.send_keys :backspace
+ expect(receiver.value).to be_empty
+ expect(events).to eq 6
+ end
- it 'performs arbitrary list of key combinations' do
- receiver.send_keys 'foo'
- receiver.send_keys [@c, 'a'], [@c, 'x']
- expect(receiver.value).to be_empty
- expect(events).to eq 7
- end
+ it 'performs from multiple arrays' do
+ receiver.send_keys 'foo'
+ receiver.send_keys [@c, 'a'], [@c, 'x']
+ expect(receiver.value).to be_empty
+ expect(events).to eq 7
+ end
- it 'supports combination of strings and arrays' do
- receiver.send_keys 'foo', [@c, 'a'], :backspace
- expect(receiver.value).to be_empty
- expect(events).to eq 6
- end
+ it 'supports combination of strings and arrays' do
+ receiver.send_keys 'foo', [@c, 'a'], :backspace
+ expect(receiver.value).to be_empty
+ expect(events).to eq 6
end
end
end
describe '#click' do
- bug 'Element has been located but Safari does not recognize it', :safari do
- bug 'https://bugs.chromium.org/p/chromedriver/issues/detail?id=2732', :w3c do
- it 'accepts modifiers' do
- browser.a.click(:shift)
- browser.wait_until { |b| b.windows.size > 1 }
- expect(browser.windows.size).to eq 2
- ensure
- browser.windows.reject(&:current?).each(&:close)
- end
- end
+ it 'accepts modifiers', except: {browser: :ie} do
+ browser.a.click(@c)
+ expect { browser.windows.wait_until(size: 2) }.to_not raise_exception
+ ensure
+ browser.windows.restore!
end
end
+ describe '#set' do
+ it 'clicks an element by default that does not define #set' do
+ browser.goto(WatirSpec.url_for('non_control_elements.html'))
+ browser.element(id: 'best_language').set
+ expect(browser.div(id: 'best_language').text).to eq 'Ruby!'
+ end
+
+ it 'clicks an element that does not define #set with provided modifiers', except: {browser: :ie} do
+ browser.a.set(@c)
+ browser.wait_until { |b| b.windows.size > 1 }
+ expect(browser.windows.size).to eq 2
+ ensure
+ browser.windows.restore!
+ end
+
+ it 'does not click an element that does not define #set when passed false' do
+ browser.goto(WatirSpec.url_for('non_control_elements.html'))
+ browser.element(id: 'best_language').set(false)
+ expect(browser.div(id: 'best_language').text).not_to eq 'Ruby!'
+ end
+
+ it 'clicks a Button' do
+ browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
+ browser.button(id: 'delete_user_submit').set
+ browser.wait_until { |b| !b.url.include? 'forms_with_input_elements.html' }
+ expect(browser.text).to include('Semantic table')
+ end
+
+ it 'sends keys to text element' do
+ browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
+ browser.element(id: 'new_user_email').set('Bye Cruel World')
+ expect(browser.text_field(id: 'new_user_email').value).to eq 'Bye Cruel World'
+ end
+
+ it 'sends keys to text area' do
+ browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
+ browser.element(id: 'delete_user_comment').set('Hello Cruel World')
+ expect(browser.textarea(id: 'delete_user_comment').value).to eq 'Hello Cruel World'
+ end
+
+ it 'checks a checkbox' do
+ browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
+ browser.element(id: 'new_user_interests_cars').set
+ expect(browser.checkbox(id: 'new_user_interests_cars')).to be_set
+ end
+
+ it 'unchecks a checkbox' do
+ browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
+ browser.element(id: 'new_user_interests_books').set(false)
+ expect(browser.checkbox(id: 'new_user_interests_books')).to_not be_set
+ end
+
+ it 'clicks a Radio' do
+ browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
+ browser.radio(id: 'new_user_newsletter_no').set
+ expect(browser.radio(id: 'new_user_newsletter_no')).to be_set
+ expect(messages.size).to eq 1
+ end
+
+ it 'does not click a Radio when false or already clicked' do
+ browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
+ browser.element(id: 'new_user_newsletter_no').set(false)
+ browser.element(id: 'new_user_newsletter_yes').set(true)
+ expect(messages.size).to eq 0
+ end
+
+ it 'uploads a file' do
+ browser.element(name: 'new_user_portrait').set __FILE__
+
+ expect(browser.file_field(name: 'new_user_portrait').value).to include(File.basename(__FILE__))
+ end
+
+ it 'selects an option' do
+ browser.select_list(name: 'new_user_languages').clear
+ browser.element(name: 'new_user_languages').set('2')
+ expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq %w[EN]
+ end
+
+ it 'sends keys to content editable element' do
+ browser.element(id: 'contenteditable').set('Bar')
+ expect(browser.div(id: 'contenteditable').text).to eq 'Bar'
+ end
+ end
+
describe '#flash' do
let(:h2) { browser.h2(text: 'Add user') }
let(:h1) { browser.h1(text: 'User administration') }
it 'returns the element on which it was called' do
@@ -541,21 +621,19 @@
expect(h2.flash(:long)).to eq h2
end
end
describe '#hover' do
- not_compliant_on :internet_explorer do
- it 'should hover over the element' do
- browser.goto WatirSpec.url_for('hover.html')
- link = browser.a
+ it 'should hover over the element', except: {browser: :ie} do
+ browser.goto WatirSpec.url_for('hover.html')
+ link = browser.a
- expect(link.style('font-size')).to eq '10px'
- link.scroll.to
- link.hover
- link.wait_until { |l| l.style('font-size') == '20px' }
- expect(link.style('font-size')).to eq '20px'
- end
+ expect(link.style('font-size')).to eq '10px'
+ link.scroll.to
+ link.hover
+ link.wait_until { |l| l.style('font-size') == '20px' }
+ expect(link.style('font-size')).to eq '20px'
end
end
describe '#inspect' do
before(:each) { browser.goto(WatirSpec.url_for('nested_iframes.html')) }
@@ -614,11 +692,12 @@
expect(browser.div(id: 'shown').text_content).to eq('Not shownNot hidden')
end
end
describe '#inner_text' do
- it 'returns inner HTML code of element' do
+ it 'returns inner HTML code of element',
+ except: {browser: :ie, reason: 'also returning explicitly hidden results'} do
browser.goto WatirSpec.url_for('non_control_elements.html')
div = browser.div(id: 'shown')
expect(div.inner_text).to eq('Not hidden')
end
end
@@ -640,11 +719,12 @@
expect(div.outer_html).to eq text
end
end
describe '#select_text and #selected_text' do
- it 'selects text and returns selected text' do
+ it 'selects text and returns selected text',
+ except: {browser: :ie, reason: 'Select Text atom appears broken in IE 11'} do
browser.goto WatirSpec.url_for('non_control_elements.html')
element = browser.element(visible_text: 'all visible')
element.select_text('all visible')
expect(element.selected_text).to eq 'all visible'
end
@@ -777,32 +857,26 @@
expect(hash2).to be_a Integer
expect(hash1).to_not eq hash2
end
end
- describe 'Float Attribute' do
- it 'returns Float value of applicable element' do
+ describe 'Numeric Attribute' do
+ it 'returns Float value',
+ except: {browser: :ie, reason: 'not recognizing the value of the element'} do
element = browser.text_field(id: 'number')
expect(element.valueasnumber).to be_a Float
end
- it 'returns nil value for an inapplicable Element' do
+ it 'returns nil for unspecified value' do
element = browser.input
expect(element.valueasnumber).to be_nil
end
- end
- describe 'Integer Attribute' do
- it 'returns Float value of applicable element' do
+ it 'returns Integer value' do
element = browser.form
expect(element.length).to be_a Integer
end
-
- it 'returns -1 for an inapplicable Element' do
- element = browser.input
- expect(element.maxlength).to eq(-1)
- end
end
describe '#class_name' do
it 'returns single class name' do
expect(browser.form(id: 'new_user').class_name).to eq 'user'
@@ -848,22 +922,16 @@
btn = browser.button(id: 'has_descendant')
expect(btn).not_to be_obscured
expect { btn.click }.not_to raise_exception
end
- it 'returns true if element center is covered by a non-descendant' do
+ it 'returns true if element center is covered by a non-descendant',
+ except: {browser: :safari, reason: 'not getting element click intercepted'} do
btn = browser.button(id: 'obscured')
expect(btn).to be_obscured
- not_compliant_on :chrome, :safari do
- expect { btn.click }.to raise_exception(Selenium::WebDriver::Error::ElementClickInterceptedError)
- end
- compliant_on :chrome do
- expect { btn.click }.to raise_exception(Selenium::WebDriver::Error::ElementClickInterceptedError)
- end
- compliant_on :safari do
- expect { btn.click }.to raise_exception(Selenium::WebDriver::Error::WebDriverError)
- end
+
+ expect { btn.click }.to raise_exception(Selenium::WebDriver::Error::ElementClickInterceptedError)
end
it 'returns false if element center is surrounded by non-descendants' do
btn = browser.button(id: 'surrounded')
expect(btn).not_to be_obscured
@@ -880,15 +948,13 @@
div = browser.div(id: 'requires_scrolling_container')
expect(div).not_to be_obscured
expect { div.click }.not_to raise_exception
end
- bug 'Safari is throwing click intercepted here', :safari do
- it 'returns true if element cannot be scrolled into view' do
- btn = browser.button(id: 'off_screen')
- expect(btn).to be_obscured
- expect { btn.click }.to raise_unknown_object_exception
- end
+ it 'returns true if element cannot be scrolled into view' do
+ btn = browser.button(id: 'off_screen')
+ expect(btn).to be_obscured
+ expect { btn.click }.to raise_unknown_object_exception
end
it 'returns true if element is hidden' do
btn = browser.button(id: 'hidden')
expect(btn).to be_obscured