spec/watirspec/selector_builder/button_spec.rb in watir-6.15.0 vs spec/watirspec/selector_builder/button_spec.rb in watir-6.15.1

- old
+ new

@@ -16,16 +16,15 @@ describe '#build' do after(:each) do |example| next if example.metadata[:skip_after] @query_scope ||= browser - built = selector_builder.build(@selector) - expect(built).to eq [@wd_locator, (@remaining || {})] + expect(selector_builder.build(@selector)).to eq @built next unless @data_locator || @tag_name - expect { @located = @query_scope.wd.first(@wd_locator) }.not_to raise_exception + expect { @located = @query_scope.wd.first(@built) }.not_to raise_exception if @data_locator expect(@located.attribute('data-locator')).to eq(@data_locator) else expect { @@ -35,33 +34,33 @@ end it 'without any arguments' do browser.goto(WatirSpec.url_for('forms_with_input_elements.html')) @selector = {} - @wd_locator = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]"} + @built = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]"} @data_locator = 'user submit' end context 'with type' do before(:each) { browser.goto(WatirSpec.url_for('forms_with_input_elements.html')) } it 'false only locates with button without a type' do @selector = {type: false} - @wd_locator = {xpath: ".//*[(local-name()='button' and not(@type))]"} + @built = {xpath: ".//*[(local-name()='button' and not(@type))]"} @data_locator = 'No Type' end it 'true locates button or input with a type' do @selector = {type: true} - @wd_locator = {xpath: ".//*[(local-name()='button' and @type) or " \ + @built = {xpath: ".//*[(local-name()='button' and @type) or " \ "(local-name()='input' and (#{default_types}))]"} @data_locator = 'user submit' end it 'locates input or button element with specified type' do @selector = {type: 'reset'} - @wd_locator = {xpath: ".//*[(local-name()='button' and " \ + @built = {xpath: ".//*[(local-name()='button' and " \ "translate(@type,'#{uppercase}','#{lowercase}')='reset') or " \ "(local-name()='input' and (translate(@type,'#{uppercase}','#{lowercase}')='reset'))]"} @data_locator = 'reset' end @@ -78,155 +77,152 @@ browser.goto(WatirSpec.url_for('forms_with_input_elements.html')) end it 'returns tag name and type to the locator' do @selector = {xpath: '#disabled_button', tag_name: 'input', type: 'submit'} - @wd_locator = {xpath: '#disabled_button'} - @remaining = {tag_name: 'input', type: 'submit'} + @built = {xpath: '#disabled_button', tag_name: 'input', type: 'submit'} end end context 'with text' do before(:each) { browser.goto(WatirSpec.url_for('forms_with_input_elements.html')) } it 'locates value of input element with String' do @selector = {text: 'Button'} - @wd_locator = {xpath: ".//*[(local-name()='button' and normalize-space()='Button') or " \ + @built = {xpath: ".//*[(local-name()='button' and normalize-space()='Button') or " \ "(local-name()='input' and (#{default_types}) and @value='Button')]"} @data_locator = 'new user' end it 'locates text of button element with String' do @selector = {text: 'Button 2'} - @wd_locator = {xpath: ".//*[(local-name()='button' and normalize-space()='Button 2') or " \ + @built = {xpath: ".//*[(local-name()='button' and normalize-space()='Button 2') or " \ "(local-name()='input' and (#{default_types}) and @value='Button 2')]"} @data_locator = 'Benjamin' end it 'locates value of input element with simple Regexp' do @selector = {text: /Button/} - @wd_locator = {xpath: ".//*[(local-name()='button' and contains(text(), 'Button')) or " \ + @built = {xpath: ".//*[(local-name()='button' and contains(text(), 'Button')) or " \ "(local-name()='input' and (#{default_types}) and contains(@value, 'Button'))]"} @data_locator = 'new user' end it 'locates text of button element with simple Regexp' do @selector = {text: /Button 2/} - @wd_locator = {xpath: ".//*[(local-name()='button' and contains(text(), 'Button 2')) or " \ + @built = {xpath: ".//*[(local-name()='button' and contains(text(), 'Button 2')) or " \ "(local-name()='input' and (#{default_types}) and contains(@value, 'Button 2'))]"} @data_locator = 'Benjamin' end it 'Simple Regexp for text' do @selector = {text: /n 2/} - @wd_locator = {xpath: ".//*[(local-name()='button' and contains(text(), 'n 2')) or " \ + @built = {xpath: ".//*[(local-name()='button' and contains(text(), 'n 2')) or " \ "(local-name()='input' and (#{default_types}) and contains(@value, 'n 2'))]"} @data_locator = 'Benjamin' end it 'Simple Regexp for value' do @selector = {text: /Prev/} - @wd_locator = {xpath: ".//*[(local-name()='button' and contains(text(), 'Prev')) or " \ + @built = {xpath: ".//*[(local-name()='button' and contains(text(), 'Prev')) or " \ "(local-name()='input' and (#{default_types}) and contains(@value, 'Prev'))]"} @data_locator = 'preview' end it 'returns complex Regexp to the locator' do @selector = {text: /^foo$/} - @wd_locator = {xpath: ".//*[(local-name()='button' and contains(text(), 'foo')) or " \ -"(local-name()='input' and (#{default_types}) and contains(@value, 'foo'))]"} - @remaining = {text: /^foo$/} + @built = {xpath: ".//*[(local-name()='button' and contains(text(), 'foo')) or " \ +"(local-name()='input' and (#{default_types}) and contains(@value, 'foo'))]", text: /^foo$/} end end context 'with value' do before(:each) { browser.goto(WatirSpec.url_for('forms_with_input_elements.html')) } it 'input element value with String' do @selector = {value: 'Preview'} - @wd_locator = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]" \ + @built = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]" \ "[normalize-space()='Preview' or @value='Preview']"} @data_locator = 'preview' end it 'button element value with String' do @selector = {value: 'button_2'} - @wd_locator = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]" \ + @built = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]" \ "[normalize-space()='button_2' or @value='button_2']"} @data_locator = 'Benjamin' end it 'input element value with simple Regexp' do @selector = {value: /Prev/} - @wd_locator = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]" \ + @built = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]" \ "[contains(text(), 'Prev') or contains(@value, 'Prev')]"} @data_locator = 'preview' end it 'button element value with simple Regexp' do @selector = {value: /on_2/} - @wd_locator = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]" \ + @built = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]" \ "[contains(text(), 'on_2') or contains(@value, 'on_2')]"} @data_locator = 'Benjamin' end it 'button element text with String' do @selector = {value: 'Button 2'} - @wd_locator = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]" \ + @built = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]" \ "[normalize-space()='Button 2' or @value='Button 2']"} @data_locator = 'Benjamin' end it 'button element text with simple Regexp' do @selector = {value: /ton 2/} - @wd_locator = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]" \ + @built = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]" \ "[contains(text(), 'ton 2') or contains(@value, 'ton 2')]"} @data_locator = 'Benjamin' end it 'returns complex Regexp to the locator' do @selector = {value: /^foo$/} - @wd_locator = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]" \ -"[contains(text(), 'foo') or contains(@value, 'foo')]"} - @remaining = {value: /^foo$/} + @built = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]" \ +"[contains(text(), 'foo') or contains(@value, 'foo')]", value: /^foo$/} end end context 'with index' do before(:each) do browser.goto(WatirSpec.url_for('forms_with_input_elements.html')) end it 'positive' do @selector = {index: 3} - @wd_locator = {xpath: "(.//*[(local-name()='button') or (local-name()='input' and (#{default_types}))])[4]"} + @built = {xpath: "(.//*[(local-name()='button') or (local-name()='input' and (#{default_types}))])[4]"} @data_locator = 'preview' end it 'negative' do @selector = {index: -4} - @wd_locator = {xpath: "(.//*[(local-name()='button') or " \ + @built = {xpath: "(.//*[(local-name()='button') or " \ "(local-name()='input' and (#{default_types}))])[last()-3]"} @data_locator = 'submittable button' end it 'last' do @selector = {index: -1} - @wd_locator = {xpath: "(.//*[(local-name()='button') or " \ + @built = {xpath: "(.//*[(local-name()='button') or " \ "(local-name()='input' and (#{default_types}))])[last()]"} @data_locator = 'last button' end it 'does not return index if it is zero' do @selector = {index: 0} - @wd_locator = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]"} + @built = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]"} @data_locator = 'user submit' end it 'raises exception when index is not an Integer', skip_after: true do selector = {index: 'foo'} - msg = 'expected Integer, got "foo":String' + msg = /expected one of \[(Integer|Fixnum)\], got "foo":String/ expect { selector_builder.build(selector) }.to raise_exception TypeError, msg end end context 'with multiple locators' do @@ -234,21 +230,21 @@ browser.goto(WatirSpec.url_for('forms_with_input_elements.html')) end it 'locates using class and attributes' do @selector = {class: 'image', name: 'new_user_image', src: true} - @wd_locator = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]" \ + @built = {xpath: ".//*[(local-name()='button') or (local-name()='input' and (#{default_types}))]" \ "[contains(concat(' ', @class, ' '), ' image ')][@name='new_user_image' and @src]"} @data_locator = 'submittable button' end end it 'delegates adjacent to Element SelectorBuilder' do browser.goto(WatirSpec.url_for('forms_with_input_elements.html')) @query_scope = browser.element(id: 'new_user_button').locate @selector = {adjacent: :ancestor, index: 2} - @wd_locator = {xpath: './ancestor::*[3]'} + @built = {xpath: './ancestor::*[3]'} @data_locator = 'body' end end end