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