Allow all invalid element error types to trigger allow_label_click behavior - Issue #1762
This commit is contained in:
parent
b00adfa5e5
commit
272a052f68
|
@ -28,7 +28,7 @@ matrix:
|
|||
- gemfile: gemfiles/Gemfile.base-versions
|
||||
rvm: 1.9.3
|
||||
- gemfile: gemfiles/Gemfile.beta-versions
|
||||
rvm: 2.4.0-preview1
|
||||
rvm: 2.4.0-preview2
|
||||
- gemfile: gemfiles/Gemfile.beta-marionette
|
||||
env: GECKODRIVER=true
|
||||
rvm: 2.3.1
|
||||
|
|
|
@ -109,11 +109,12 @@ module Capybara
|
|||
allow_label_click = options.delete(:allow_label_click) { Capybara.automatic_label_click }
|
||||
|
||||
begin
|
||||
find(:radio_button, locator, options).set(true)
|
||||
rescue Capybara::ElementNotFound => e
|
||||
raise unless allow_label_click
|
||||
radio = find(:radio_button, locator, options)
|
||||
radio.set(true)
|
||||
rescue => e
|
||||
raise unless allow_label_click && catch_error?(e)
|
||||
begin
|
||||
radio = find(:radio_button, locator, options.merge({wait: 0, visible: :hidden}))
|
||||
radio ||= find(:radio_button, locator, options.merge({wait: 0, visible: :all}))
|
||||
label = find(:label, for: radio, wait: 0, visible: true)
|
||||
label.click unless radio.checked?
|
||||
rescue
|
||||
|
@ -145,11 +146,12 @@ module Capybara
|
|||
allow_label_click = options.delete(:allow_label_click) { Capybara.automatic_label_click }
|
||||
|
||||
begin
|
||||
find(:checkbox, locator, options).set(true)
|
||||
rescue Capybara::ElementNotFound => e
|
||||
raise unless allow_label_click
|
||||
cbox = find(:checkbox, locator, options)
|
||||
cbox.set(true)
|
||||
rescue => e
|
||||
raise unless allow_label_click && catch_error?(e)
|
||||
begin
|
||||
cbox = find(:checkbox, locator, options.merge({wait: 0, visible: :hidden}))
|
||||
cbox ||= find(:checkbox, locator, options.merge({wait: 0, visible: :all}))
|
||||
label = find(:label, for: cbox, wait: 0, visible: true)
|
||||
label.click unless cbox.checked?
|
||||
rescue
|
||||
|
@ -181,11 +183,12 @@ module Capybara
|
|||
allow_label_click = options.delete(:allow_label_click) { Capybara.automatic_label_click }
|
||||
|
||||
begin
|
||||
find(:checkbox, locator, options).set(false)
|
||||
rescue Capybara::ElementNotFound => e
|
||||
raise unless allow_label_click
|
||||
cbox = find(:checkbox, locator, options)
|
||||
cbox.set(false)
|
||||
rescue => e
|
||||
raise unless allow_label_click && catch_error?(e)
|
||||
begin
|
||||
cbox = find(:checkbox, locator, options.merge({wait: 0, visible: :hidden}))
|
||||
cbox ||= find(:checkbox, locator, options.merge({wait: 0, visible: :all}))
|
||||
label = find(:label, for: cbox, wait: 0, visible: true)
|
||||
label.click if cbox.checked?
|
||||
rescue
|
||||
|
|
|
@ -161,11 +161,20 @@ Capybara::SpecHelper.spec "#check" do
|
|||
expect{@session.check('form_cars_mclaren')}.to raise_error(Capybara::ElementNotFound, 'Unable to find checkbox "form_cars_mclaren"')
|
||||
end
|
||||
|
||||
it "should check via the label if allow_label_click == true" do
|
||||
expect(@session.find(:checkbox, 'form_cars_tesla', unchecked: true, visible: :hidden)).to be
|
||||
@session.check('form_cars_tesla', allow_label_click: true)
|
||||
@session.click_button('awesome')
|
||||
expect(extract_results(@session)['cars']).to include('tesla')
|
||||
context "with allow_label_click == true" do
|
||||
it "should check via the label if input is hidden" do
|
||||
expect(@session.find(:checkbox, 'form_cars_tesla', unchecked: true, visible: :hidden)).to be
|
||||
@session.check('form_cars_tesla', allow_label_click: true)
|
||||
@session.click_button('awesome')
|
||||
expect(extract_results(@session)['cars']).to include('tesla')
|
||||
end
|
||||
|
||||
it "should check via the label if input is moved off the left edge of the page" do
|
||||
expect(@session.find(:checkbox, 'form_cars_pagani', unchecked: true, visible: :all)).to be
|
||||
@session.check('form_cars_pagani', allow_label_click: true)
|
||||
@session.click_button('awesome')
|
||||
expect(extract_results(@session)['cars']).to include('pagani')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -183,6 +183,8 @@ New line after and before textarea tag
|
|||
<label for="form_cars_tesla">Tesla</label>
|
||||
<input type="checkbox" value="ferrari" name="form[cars][]" id="form_cars_ferrari" checked="checked" style="display: none"/>
|
||||
<label for="form_cars_ferrari">Ferrari</label>
|
||||
<input type="checkbox" value="pagani" name="form[cars][]" id="form_cars_pagani" style="position: absolute; left: -9999px"/>
|
||||
<label for="form_cars_pagani">Pagani</label>
|
||||
<input type="checkbox" value="ariel" name="form[cars][]" id="form_cars_ariel" style="display: none"/>
|
||||
<label>
|
||||
McLaren
|
||||
|
|
Loading…
Reference in New Issue