capybara 2.5.0 → 2.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.yard/templates_custom/default/class/html/selectors.erb +38 -0
- data/.yard/templates_custom/default/class/html/setup.rb +17 -0
- data/.yard/yard_extensions.rb +78 -0
- data/.yardopts +1 -0
- data/History.md +413 -10
- data/License.txt +1 -1
- data/README.md +237 -130
- data/lib/capybara/config.rb +132 -0
- data/lib/capybara/cucumber.rb +3 -1
- data/lib/capybara/driver/base.rb +27 -6
- data/lib/capybara/driver/node.rb +14 -5
- data/lib/capybara/dsl.rb +2 -3
- data/lib/capybara/helpers.rb +13 -65
- data/lib/capybara/minitest/spec.rb +177 -0
- data/lib/capybara/minitest.rb +278 -0
- data/lib/capybara/node/actions.rb +180 -24
- data/lib/capybara/node/base.rb +17 -5
- data/lib/capybara/node/document.rb +5 -0
- data/lib/capybara/node/document_matchers.rb +15 -14
- data/lib/capybara/node/element.rb +55 -7
- data/lib/capybara/node/finders.rb +179 -67
- data/lib/capybara/node/matchers.rb +301 -105
- data/lib/capybara/node/simple.rb +15 -4
- data/lib/capybara/queries/ancestor_query.rb +25 -0
- data/lib/capybara/queries/base_query.rb +69 -3
- data/lib/capybara/queries/current_path_query.rb +17 -8
- data/lib/capybara/queries/match_query.rb +19 -0
- data/lib/capybara/queries/selector_query.rb +251 -0
- data/lib/capybara/queries/sibling_query.rb +25 -0
- data/lib/capybara/queries/text_query.rb +67 -16
- data/lib/capybara/queries/title_query.rb +4 -2
- data/lib/capybara/query.rb +3 -131
- data/lib/capybara/rack_test/browser.rb +14 -5
- data/lib/capybara/rack_test/css_handlers.rb +1 -0
- data/lib/capybara/rack_test/driver.rb +15 -8
- data/lib/capybara/rack_test/form.rb +34 -12
- data/lib/capybara/rack_test/node.rb +29 -12
- data/lib/capybara/rails.rb +3 -3
- data/lib/capybara/result.rb +104 -9
- data/lib/capybara/rspec/compound.rb +95 -0
- data/lib/capybara/rspec/features.rb +17 -6
- data/lib/capybara/rspec/matcher_proxies.rb +45 -0
- data/lib/capybara/rspec/matchers.rb +199 -80
- data/lib/capybara/rspec.rb +4 -2
- data/lib/capybara/selector/css.rb +30 -0
- data/lib/capybara/selector/filter.rb +20 -0
- data/lib/capybara/selector/filter_set.rb +74 -0
- data/lib/capybara/selector/filters/base.rb +33 -0
- data/lib/capybara/selector/filters/expression_filter.rb +40 -0
- data/lib/capybara/selector/filters/node_filter.rb +27 -0
- data/lib/capybara/selector/selector.rb +276 -0
- data/lib/capybara/selector.rb +452 -157
- data/lib/capybara/selenium/driver.rb +282 -81
- data/lib/capybara/selenium/node.rb +144 -46
- data/lib/capybara/server.rb +59 -16
- data/lib/capybara/session/config.rb +114 -0
- data/lib/capybara/session/matchers.rb +29 -19
- data/lib/capybara/session.rb +378 -143
- data/lib/capybara/spec/fixtures/no_extension +1 -0
- data/lib/capybara/spec/public/jquery-ui.js +13 -791
- data/lib/capybara/spec/public/jquery.js +4 -9045
- data/lib/capybara/spec/public/test.js +45 -11
- data/lib/capybara/spec/session/accept_alert_spec.rb +30 -7
- data/lib/capybara/spec/session/accept_confirm_spec.rb +14 -2
- data/lib/capybara/spec/session/accept_prompt_spec.rb +35 -6
- data/lib/capybara/spec/session/all_spec.rb +45 -32
- data/lib/capybara/spec/session/ancestor_spec.rb +85 -0
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +110 -0
- data/lib/capybara/spec/session/assert_current_path.rb +15 -2
- data/lib/capybara/spec/session/assert_selector.rb +29 -28
- data/lib/capybara/spec/session/assert_text.rb +59 -20
- data/lib/capybara/spec/session/assert_title.rb +25 -11
- data/lib/capybara/spec/session/attach_file_spec.rb +42 -4
- data/lib/capybara/spec/session/body_spec.rb +1 -0
- data/lib/capybara/spec/session/check_spec.rb +90 -14
- data/lib/capybara/spec/session/choose_spec.rb +31 -5
- data/lib/capybara/spec/session/click_button_spec.rb +20 -9
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +15 -9
- data/lib/capybara/spec/session/click_link_spec.rb +39 -15
- data/lib/capybara/spec/session/current_scope_spec.rb +2 -1
- data/lib/capybara/spec/session/current_url_spec.rb +12 -3
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +6 -5
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +4 -3
- data/lib/capybara/spec/session/element/assert_match_selector.rb +36 -0
- data/lib/capybara/spec/session/element/match_css_spec.rb +23 -0
- data/lib/capybara/spec/session/element/match_xpath_spec.rb +23 -0
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +106 -0
- data/lib/capybara/spec/session/evaluate_async_script_spec.rb +22 -0
- data/lib/capybara/spec/session/evaluate_script_spec.rb +23 -1
- data/lib/capybara/spec/session/execute_script_spec.rb +22 -3
- data/lib/capybara/spec/session/fill_in_spec.rb +50 -32
- data/lib/capybara/spec/session/find_button_spec.rb +43 -2
- data/lib/capybara/spec/session/find_by_id_spec.rb +3 -2
- data/lib/capybara/spec/session/find_field_spec.rb +42 -6
- data/lib/capybara/spec/session/find_link_spec.rb +22 -3
- data/lib/capybara/spec/session/find_spec.rb +103 -57
- data/lib/capybara/spec/session/first_spec.rb +34 -18
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +103 -0
- data/lib/capybara/spec/session/{within_frame_spec.rb → frame/within_frame_spec.rb} +44 -2
- data/lib/capybara/spec/session/go_back_spec.rb +2 -1
- data/lib/capybara/spec/session/go_forward_spec.rb +2 -1
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +69 -0
- data/lib/capybara/spec/session/has_button_spec.rb +17 -8
- data/lib/capybara/spec/session/has_css_spec.rb +85 -73
- data/lib/capybara/spec/session/has_current_path_spec.rb +91 -7
- data/lib/capybara/spec/session/has_field_spec.rb +93 -58
- data/lib/capybara/spec/session/has_link_spec.rb +9 -8
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +76 -0
- data/lib/capybara/spec/session/has_select_spec.rb +159 -59
- data/lib/capybara/spec/session/has_selector_spec.rb +64 -28
- data/lib/capybara/spec/session/has_table_spec.rb +1 -0
- data/lib/capybara/spec/session/has_text_spec.rb +27 -12
- data/lib/capybara/spec/session/has_title_spec.rb +22 -4
- data/lib/capybara/spec/session/has_xpath_spec.rb +32 -29
- data/lib/capybara/spec/session/headers.rb +2 -1
- data/lib/capybara/spec/session/html_spec.rb +4 -3
- data/lib/capybara/spec/session/node_spec.rb +198 -38
- data/lib/capybara/spec/session/refresh_spec.rb +28 -0
- data/lib/capybara/spec/session/reset_session_spec.rb +46 -5
- data/lib/capybara/spec/session/response_code.rb +2 -1
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +1 -0
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +6 -5
- data/lib/capybara/spec/session/save_page_spec.rb +34 -2
- data/lib/capybara/spec/session/save_screenshot_spec.rb +31 -1
- data/lib/capybara/spec/session/screenshot_spec.rb +4 -2
- data/lib/capybara/spec/session/select_spec.rb +34 -32
- data/lib/capybara/spec/session/selectors_spec.rb +65 -0
- data/lib/capybara/spec/session/sibling_spec.rb +52 -0
- data/lib/capybara/spec/session/text_spec.rb +4 -4
- data/lib/capybara/spec/session/title_spec.rb +2 -1
- data/lib/capybara/spec/session/uncheck_spec.rb +42 -2
- data/lib/capybara/spec/session/unselect_spec.rb +17 -16
- data/lib/capybara/spec/session/visit_spec.rb +77 -2
- data/lib/capybara/spec/session/window/become_closed_spec.rb +12 -11
- data/lib/capybara/spec/session/window/current_window_spec.rb +1 -0
- data/lib/capybara/spec/session/window/open_new_window_spec.rb +1 -0
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +16 -11
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +7 -4
- data/lib/capybara/spec/session/window/window_spec.rb +36 -29
- data/lib/capybara/spec/session/window/windows_spec.rb +1 -0
- data/lib/capybara/spec/session/window/within_window_spec.rb +31 -7
- data/lib/capybara/spec/session/within_spec.rb +14 -6
- data/lib/capybara/spec/spec_helper.rb +37 -4
- data/lib/capybara/spec/test_app.rb +15 -3
- data/lib/capybara/spec/views/buttons.erb +1 -0
- data/lib/capybara/spec/views/fieldsets.erb +2 -1
- data/lib/capybara/spec/views/form.erb +169 -9
- data/lib/capybara/spec/views/frame_child.erb +10 -2
- data/lib/capybara/spec/views/frame_one.erb +2 -1
- data/lib/capybara/spec/views/frame_parent.erb +3 -2
- data/lib/capybara/spec/views/frame_two.erb +2 -1
- data/lib/capybara/spec/views/header_links.erb +1 -0
- data/lib/capybara/spec/views/host_links.erb +1 -0
- data/lib/capybara/spec/views/initial_alert.erb +10 -0
- data/lib/capybara/spec/views/path.erb +1 -0
- data/lib/capybara/spec/views/popup_one.erb +1 -0
- data/lib/capybara/spec/views/popup_two.erb +1 -0
- data/lib/capybara/spec/views/postback.erb +2 -1
- data/lib/capybara/spec/views/tables.erb +1 -0
- data/lib/capybara/spec/views/with_base_tag.erb +1 -0
- data/lib/capybara/spec/views/with_count.erb +2 -1
- data/lib/capybara/spec/views/with_fixed_header_footer.erb +17 -0
- data/lib/capybara/spec/views/with_hover.erb +7 -1
- data/lib/capybara/spec/views/with_html.erb +40 -2
- data/lib/capybara/spec/views/with_html_entities.erb +1 -0
- data/lib/capybara/spec/views/with_js.erb +32 -1
- data/lib/capybara/spec/views/with_scope.erb +1 -0
- data/lib/capybara/spec/views/with_simple_html.erb +2 -1
- data/lib/capybara/spec/views/with_slow_unload.erb +17 -0
- data/lib/capybara/spec/views/with_title.erb +2 -1
- data/lib/capybara/spec/views/with_unload_alert.erb +14 -0
- data/lib/capybara/spec/views/with_windows.erb +7 -0
- data/lib/capybara/spec/views/within_frames.erb +3 -2
- data/lib/capybara/version.rb +2 -1
- data/lib/capybara/window.rb +20 -3
- data/lib/capybara.rb +189 -93
- data/spec/basic_node_spec.rb +7 -6
- data/spec/capybara_spec.rb +90 -4
- data/spec/dsl_spec.rb +3 -1
- data/spec/filter_set_spec.rb +28 -0
- data/spec/fixtures/capybara.csv +1 -0
- data/spec/fixtures/selenium_driver_rspec_failure.rb +5 -1
- data/spec/fixtures/selenium_driver_rspec_success.rb +5 -1
- data/spec/minitest_spec.rb +130 -0
- data/spec/minitest_spec_spec.rb +135 -0
- data/spec/per_session_config_spec.rb +67 -0
- data/spec/rack_test_spec.rb +50 -7
- data/spec/result_spec.rb +76 -0
- data/spec/rspec/features_spec.rb +21 -8
- data/spec/rspec/scenarios_spec.rb +21 -0
- data/spec/rspec/{matchers_spec.rb → shared_spec_matchers.rb} +160 -54
- data/spec/rspec/views_spec.rb +5 -0
- data/spec/rspec_matchers_spec.rb +46 -0
- data/spec/rspec_spec.rb +79 -1
- data/spec/selector_spec.rb +199 -0
- data/spec/selenium_spec_chrome.rb +54 -9
- data/spec/selenium_spec_firefox.rb +68 -0
- data/spec/selenium_spec_marionette.rb +127 -0
- data/spec/server_spec.rb +102 -14
- data/spec/session_spec.rb +54 -0
- data/spec/shared_selenium_session.rb +215 -0
- data/spec/spec_helper.rb +7 -0
- metadata +140 -15
- data/spec/selenium_spec.rb +0 -128
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
Capybara::SpecHelper.spec "#choose" do
|
|
2
3
|
before do
|
|
3
4
|
@session.visit('/form')
|
|
@@ -23,7 +24,7 @@ Capybara::SpecHelper.spec "#choose" do
|
|
|
23
24
|
|
|
24
25
|
context "with a locator that doesn't exist" do
|
|
25
26
|
it "should raise an error" do
|
|
26
|
-
msg = "Unable to find radio button \"does not exist\""
|
|
27
|
+
msg = "Unable to find visible radio button \"does not exist\" that is not disabled"
|
|
27
28
|
expect do
|
|
28
29
|
@session.choose('does not exist')
|
|
29
30
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
|
@@ -40,29 +41,54 @@ Capybara::SpecHelper.spec "#choose" do
|
|
|
40
41
|
|
|
41
42
|
context "with :exact option" do
|
|
42
43
|
it "should accept partial matches when false" do
|
|
43
|
-
@session.choose("Mal", :
|
|
44
|
+
@session.choose("Mal", exact: false)
|
|
44
45
|
@session.click_button('awesome')
|
|
45
46
|
expect(extract_results(@session)['gender']).to eq('male')
|
|
46
47
|
end
|
|
47
48
|
|
|
48
49
|
it "should not accept partial matches when true" do
|
|
49
50
|
expect do
|
|
50
|
-
@session.choose("Mal", :
|
|
51
|
+
@session.choose("Mal", exact: true)
|
|
51
52
|
end.to raise_error(Capybara::ElementNotFound)
|
|
52
53
|
end
|
|
53
54
|
end
|
|
54
55
|
|
|
55
56
|
context "with `option` option" do
|
|
56
57
|
it "can check radio buttons by their value" do
|
|
57
|
-
@session.choose('form[gender]', :
|
|
58
|
+
@session.choose('form[gender]', option: "male")
|
|
58
59
|
@session.click_button('awesome')
|
|
59
60
|
expect(extract_results(@session)['gender']).to eq("male")
|
|
60
61
|
end
|
|
61
62
|
|
|
62
63
|
it "should raise an error if option not found" do
|
|
63
64
|
expect do
|
|
64
|
-
@session.choose('form[gender]', :
|
|
65
|
+
@session.choose('form[gender]', option: "hermaphrodite")
|
|
65
66
|
end.to raise_error(Capybara::ElementNotFound)
|
|
66
67
|
end
|
|
67
68
|
end
|
|
69
|
+
|
|
70
|
+
context "with hidden radio buttons" do
|
|
71
|
+
context "with Capybara.automatic_label_click == true" do
|
|
72
|
+
around do |spec|
|
|
73
|
+
old_click_label, Capybara.automatic_label_click = Capybara.automatic_label_click, true
|
|
74
|
+
spec.run
|
|
75
|
+
Capybara.automatic_label_click = old_click_label
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "should select by clicking the link if available" do
|
|
79
|
+
@session.choose("party_democrat")
|
|
80
|
+
@session.click_button('awesome')
|
|
81
|
+
expect(extract_results(@session)['party']).to eq('democrat')
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "should raise error if not allowed to click label" do
|
|
85
|
+
expect{@session.choose("party_democrat", allow_label_click: false)}.to raise_error(Capybara::ElementNotFound, 'Unable to find visible radio button "party_democrat" that is not disabled')
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "should return the chosen radio button" do
|
|
91
|
+
el = @session.find(:radio_button, 'gender_male')
|
|
92
|
+
expect(@session.choose("gender_male")).to eq el
|
|
93
|
+
end
|
|
68
94
|
end
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
Capybara::SpecHelper.spec '#click_button' do
|
|
2
3
|
before do
|
|
3
4
|
@session.visit('/form')
|
|
4
5
|
end
|
|
5
6
|
|
|
6
|
-
it "should wait for asynchronous load", :
|
|
7
|
+
it "should wait for asynchronous load", requires: [:js] do
|
|
7
8
|
@session.visit('/with_js')
|
|
8
9
|
@session.click_link('Click me')
|
|
9
10
|
@session.click_button('New Here')
|
|
@@ -337,9 +338,22 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
|
337
338
|
expect(extract_results(@session)['first_name']).to eq('John')
|
|
338
339
|
end
|
|
339
340
|
end
|
|
341
|
+
|
|
342
|
+
context "with descendant image alt given on a button defined by <button> tag" do
|
|
343
|
+
it "should submit the associated form" do
|
|
344
|
+
@session.click_button('A horse eating hay')
|
|
345
|
+
expect(extract_results(@session)['first_name']).to eq('John')
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
it "should work with partial matches" do
|
|
349
|
+
@session.click_button('se eating h')
|
|
350
|
+
expect(extract_results(@session)['first_name']).to eq('John')
|
|
351
|
+
end
|
|
352
|
+
end
|
|
353
|
+
|
|
340
354
|
context "with a locator that doesn't exist" do
|
|
341
355
|
it "should raise an error" do
|
|
342
|
-
msg = "Unable to find button \"does not exist\""
|
|
356
|
+
msg = "Unable to find visible button \"does not exist\""
|
|
343
357
|
expect do
|
|
344
358
|
@session.click_button('does not exist')
|
|
345
359
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
|
@@ -412,12 +426,9 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
|
412
426
|
@session.visit('/form')
|
|
413
427
|
@session.fill_in('address1_city', :with =>'Paris')
|
|
414
428
|
@session.fill_in('address1_street', :with =>'CDG')
|
|
415
|
-
@session.fill_in('address1_street', :with =>'CDG')
|
|
416
|
-
@session.select("France", :from => 'address1_country')
|
|
417
429
|
|
|
418
|
-
@session.fill_in('address2_city', :
|
|
419
|
-
@session.fill_in('address2_street', :
|
|
420
|
-
@session.select("Ukraine", :from => 'address2_country')
|
|
430
|
+
@session.fill_in('address2_city', with: 'Mikolaiv')
|
|
431
|
+
@session.fill_in('address2_street', with: 'PGS')
|
|
421
432
|
|
|
422
433
|
@session.click_button "awesome"
|
|
423
434
|
|
|
@@ -435,13 +446,13 @@ Capybara::SpecHelper.spec '#click_button' do
|
|
|
435
446
|
|
|
436
447
|
context "with :exact option" do
|
|
437
448
|
it "should accept partial matches when false" do
|
|
438
|
-
@session.click_button('What an Awesome', :
|
|
449
|
+
@session.click_button('What an Awesome', exact: false)
|
|
439
450
|
expect(extract_results(@session)['first_name']).to eq('John')
|
|
440
451
|
end
|
|
441
452
|
|
|
442
453
|
it "should not accept partial matches when true" do
|
|
443
454
|
expect do
|
|
444
|
-
@session.click_button('What an Awesome', :
|
|
455
|
+
@session.click_button('What an Awesome', exact: true)
|
|
445
456
|
end.to raise_error(Capybara::ElementNotFound)
|
|
446
457
|
end
|
|
447
458
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
Capybara::SpecHelper.spec '#click_link_or_button' do
|
|
2
3
|
it "should click on a link" do
|
|
3
4
|
@session.visit('/with_html')
|
|
@@ -23,7 +24,7 @@ Capybara::SpecHelper.spec '#click_link_or_button' do
|
|
|
23
24
|
expect(extract_results(@session)['first_name']).to eq('John')
|
|
24
25
|
end
|
|
25
26
|
|
|
26
|
-
it "should wait for asynchronous load", :
|
|
27
|
+
it "should wait for asynchronous load", requires: [:js] do
|
|
27
28
|
@session.visit('/with_js')
|
|
28
29
|
@session.click_link('Click me')
|
|
29
30
|
@session.click_link_or_button('Has been clicked')
|
|
@@ -39,7 +40,7 @@ Capybara::SpecHelper.spec '#click_link_or_button' do
|
|
|
39
40
|
context "when `true`" do
|
|
40
41
|
it "clicks on approximately matching link" do
|
|
41
42
|
@session.visit('/with_html')
|
|
42
|
-
@session.click_link_or_button('abore', :
|
|
43
|
+
@session.click_link_or_button('abore', exact: false)
|
|
43
44
|
expect(@session).to have_content('Bar')
|
|
44
45
|
end
|
|
45
46
|
|
|
@@ -53,18 +54,18 @@ Capybara::SpecHelper.spec '#click_link_or_button' do
|
|
|
53
54
|
context "when `false`" do
|
|
54
55
|
it "does not click on link which matches approximately" do
|
|
55
56
|
@session.visit('/with_html')
|
|
56
|
-
msg = "Unable to find link or button \"abore\""
|
|
57
|
+
msg = "Unable to find visible link or button \"abore\""
|
|
57
58
|
expect do
|
|
58
|
-
@session.click_link_or_button('abore', :
|
|
59
|
+
@session.click_link_or_button('abore', exact: true)
|
|
59
60
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
|
60
61
|
end
|
|
61
62
|
|
|
62
63
|
it "does not click on approximately matching button" do
|
|
63
64
|
@session.visit('/form')
|
|
64
|
-
msg = "Unable to find link or button \"awe\""
|
|
65
|
+
msg = "Unable to find visible link or button \"awe\""
|
|
65
66
|
|
|
66
67
|
expect do
|
|
67
|
-
@session.click_link_or_button('awe', :
|
|
68
|
+
@session.click_link_or_button('awe', exact: true)
|
|
68
69
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
|
69
70
|
end
|
|
70
71
|
end
|
|
@@ -73,7 +74,7 @@ Capybara::SpecHelper.spec '#click_link_or_button' do
|
|
|
73
74
|
context "with a locator that doesn't exist" do
|
|
74
75
|
it "should raise an error" do
|
|
75
76
|
@session.visit('/with_html')
|
|
76
|
-
msg = "Unable to find link or button \"does not exist\""
|
|
77
|
+
msg = "Unable to find visible link or button \"does not exist\""
|
|
77
78
|
expect do
|
|
78
79
|
@session.click_link_or_button('does not exist')
|
|
79
80
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
|
@@ -84,7 +85,7 @@ Capybara::SpecHelper.spec '#click_link_or_button' do
|
|
|
84
85
|
it "ignores disabled buttons when false" do
|
|
85
86
|
@session.visit('/form')
|
|
86
87
|
expect do
|
|
87
|
-
@session.click_link_or_button('Disabled button', :
|
|
88
|
+
@session.click_link_or_button('Disabled button', disabled: false)
|
|
88
89
|
end.to raise_error(Capybara::ElementNotFound)
|
|
89
90
|
end
|
|
90
91
|
|
|
@@ -104,9 +105,14 @@ Capybara::SpecHelper.spec '#click_link_or_button' do
|
|
|
104
105
|
it "does nothing when button is disabled" do
|
|
105
106
|
@session.visit('/form')
|
|
106
107
|
expect do
|
|
107
|
-
@session.click_link_or_button('Disabled button', :
|
|
108
|
+
@session.click_link_or_button('Disabled button', disabled: false)
|
|
108
109
|
end.to raise_error(Capybara::ElementNotFound)
|
|
109
110
|
end
|
|
111
|
+
end
|
|
110
112
|
|
|
113
|
+
it "should return the element clicked" do
|
|
114
|
+
@session.visit('/with_html')
|
|
115
|
+
link = @session.find(:link, 'Blank Anchor')
|
|
116
|
+
expect(@session.click_link_or_button('Blank Anchor')).to eq link
|
|
111
117
|
end
|
|
112
118
|
end
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
Capybara::SpecHelper.spec '#click_link' do
|
|
2
3
|
before do
|
|
3
4
|
@session.visit('/with_html')
|
|
4
5
|
end
|
|
5
6
|
|
|
6
|
-
it "should wait for asynchronous load", :
|
|
7
|
+
it "should wait for asynchronous load", requires: [:js] do
|
|
7
8
|
@session.visit('/with_js')
|
|
8
9
|
@session.click_link('Click me')
|
|
9
10
|
@session.click_link('Has been clicked')
|
|
@@ -14,7 +15,7 @@ Capybara::SpecHelper.spec '#click_link' do
|
|
|
14
15
|
expect(@session).to have_content('Another World')
|
|
15
16
|
end
|
|
16
17
|
|
|
17
|
-
it "raises any errors caught inside the server", :
|
|
18
|
+
it "raises any errors caught inside the server", requires: [:server] do
|
|
18
19
|
quietly { @session.visit("/error") }
|
|
19
20
|
expect do
|
|
20
21
|
@session.click_link('foo')
|
|
@@ -66,7 +67,7 @@ Capybara::SpecHelper.spec '#click_link' do
|
|
|
66
67
|
|
|
67
68
|
context "with a locator that doesn't exist" do
|
|
68
69
|
it "should raise an error" do
|
|
69
|
-
msg = "Unable to find link \"does not exist\""
|
|
70
|
+
msg = "Unable to find visible link \"does not exist\""
|
|
70
71
|
expect do
|
|
71
72
|
@session.click_link('does not exist')
|
|
72
73
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
|
@@ -75,34 +76,45 @@ Capybara::SpecHelper.spec '#click_link' do
|
|
|
75
76
|
|
|
76
77
|
context "with :href option given" do
|
|
77
78
|
it "should find links with valid href" do
|
|
78
|
-
@session.click_link('labore', :
|
|
79
|
+
@session.click_link('labore', href: '/with_simple_html')
|
|
79
80
|
expect(@session).to have_content('Bar')
|
|
80
81
|
end
|
|
81
82
|
|
|
82
83
|
it "should raise error if link wasn't found" do
|
|
83
|
-
expect { @session.click_link('labore', :
|
|
84
|
+
expect { @session.click_link('labore', href: 'invalid_href') }.to raise_error(Capybara::ElementNotFound)
|
|
84
85
|
end
|
|
85
86
|
end
|
|
86
87
|
|
|
87
88
|
context "with a regex :href option given" do
|
|
88
89
|
it "should find a link matching an all-matching regex pattern" do
|
|
89
|
-
@session.click_link('labore', :
|
|
90
|
+
@session.click_link('labore', href: /.+/)
|
|
90
91
|
expect(@session).to have_content('Bar')
|
|
91
92
|
end
|
|
92
93
|
|
|
93
94
|
it "should find a link matching an exact regex pattern" do
|
|
94
|
-
@session.click_link('labore', :
|
|
95
|
+
@session.click_link('labore', href: /\/with_simple_html/)
|
|
95
96
|
expect(@session).to have_content('Bar')
|
|
96
97
|
end
|
|
97
98
|
|
|
98
99
|
it "should find a link matching a partial regex pattern" do
|
|
99
|
-
@session.click_link('labore', :
|
|
100
|
+
@session.click_link('labore', href: /\/with_simple/)
|
|
100
101
|
expect(@session).to have_content('Bar')
|
|
101
102
|
end
|
|
102
103
|
|
|
103
104
|
it "should raise an error if no link's href matched the pattern" do
|
|
104
|
-
expect { @session.click_link('labore', :
|
|
105
|
-
expect { @session.click_link('labore', :
|
|
105
|
+
expect { @session.click_link('labore', href: /invalid_pattern/) }.to raise_error(Capybara::ElementNotFound)
|
|
106
|
+
expect { @session.click_link('labore', href: /.+d+/) }.to raise_error(Capybara::ElementNotFound)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
context 'href: nil' do
|
|
110
|
+
it "should not raise an error on links with no href attribute" do
|
|
111
|
+
expect { @session.click_link('No Href', href: nil) }.not_to raise_error
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "should raise an error if href attribute exists" do
|
|
115
|
+
expect { @session.click_link('Blank Href', href: nil) }.to raise_error(Capybara::ElementNotFound)
|
|
116
|
+
expect { @session.click_link('Normal Anchor', href: nil) }.to raise_error(Capybara::ElementNotFound)
|
|
117
|
+
end
|
|
106
118
|
end
|
|
107
119
|
end
|
|
108
120
|
|
|
@@ -134,7 +146,7 @@ Capybara::SpecHelper.spec '#click_link' do
|
|
|
134
146
|
end
|
|
135
147
|
|
|
136
148
|
it "should do nothing on anchor links" do
|
|
137
|
-
@session.fill_in("test_field", :
|
|
149
|
+
@session.fill_in("test_field", with: 'blah')
|
|
138
150
|
@session.click_link('Normal Anchor')
|
|
139
151
|
expect(@session.find_field("test_field").value).to eq('blah')
|
|
140
152
|
@session.click_link('Blank Anchor')
|
|
@@ -144,7 +156,7 @@ Capybara::SpecHelper.spec '#click_link' do
|
|
|
144
156
|
end
|
|
145
157
|
|
|
146
158
|
it "should do nothing on URL+anchor links for the same page" do
|
|
147
|
-
@session.fill_in("test_field", :
|
|
159
|
+
@session.fill_in("test_field", with: 'blah')
|
|
148
160
|
@session.click_link('Anchor on same page')
|
|
149
161
|
expect(@session.find_field("test_field").value).to eq('blah')
|
|
150
162
|
end
|
|
@@ -160,7 +172,7 @@ Capybara::SpecHelper.spec '#click_link' do
|
|
|
160
172
|
expect(@session).to have_content('Bar')
|
|
161
173
|
end
|
|
162
174
|
|
|
163
|
-
it "raise an error with links with no href" do
|
|
175
|
+
it "should raise an error with links with no href" do
|
|
164
176
|
expect do
|
|
165
177
|
@session.click_link('No Href')
|
|
166
178
|
end.to raise_error(Capybara::ElementNotFound)
|
|
@@ -168,14 +180,26 @@ Capybara::SpecHelper.spec '#click_link' do
|
|
|
168
180
|
|
|
169
181
|
context "with :exact option" do
|
|
170
182
|
it "should accept partial matches when false" do
|
|
171
|
-
@session.click_link('abo', :
|
|
183
|
+
@session.click_link('abo', exact: false)
|
|
172
184
|
expect(@session).to have_content('Bar')
|
|
173
185
|
end
|
|
174
186
|
|
|
175
187
|
it "should not accept partial matches when true" do
|
|
176
188
|
expect do
|
|
177
|
-
@session.click_link('abo', :
|
|
189
|
+
@session.click_link('abo', exact: true)
|
|
178
190
|
end.to raise_error(Capybara::ElementNotFound)
|
|
179
191
|
end
|
|
180
192
|
end
|
|
193
|
+
|
|
194
|
+
context "without locator" do
|
|
195
|
+
it "uses options" do
|
|
196
|
+
@session.click_link(href: '/foo')
|
|
197
|
+
expect(@session).to have_content('Another World')
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
it "should return element clicked" do
|
|
202
|
+
el = @session.find(:link, 'Normal Anchor')
|
|
203
|
+
expect(@session.click_link('Normal Anchor')).to eq el
|
|
204
|
+
end
|
|
181
205
|
end
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require "capybara/spec/test_app"
|
|
2
3
|
|
|
3
4
|
Capybara::SpecHelper.spec '#current_url, #current_path, #current_host' do
|
|
4
5
|
before :all do
|
|
5
|
-
@servers = 2.times.map { Capybara::Server.new(TestApp.
|
|
6
|
+
@servers = 2.times.map { Capybara::Server.new(TestApp.new).boot }
|
|
6
7
|
# sanity check
|
|
7
8
|
expect(@servers[0].port).not_to eq(@servers[1].port)
|
|
8
9
|
expect(@servers.map { |s| s.port }).not_to include 80
|
|
@@ -84,15 +85,23 @@ Capybara::SpecHelper.spec '#current_url, #current_path, #current_host' do
|
|
|
84
85
|
should_be_on 0, "/landed"
|
|
85
86
|
end
|
|
86
87
|
|
|
87
|
-
it "is affected by pushState", :
|
|
88
|
+
it "is affected by pushState", requires: [:js] do
|
|
88
89
|
@session.visit("/with_js")
|
|
89
90
|
@session.execute_script("window.history.pushState({}, '', '/pushed')")
|
|
90
91
|
expect(@session.current_path).to eq("/pushed")
|
|
91
92
|
end
|
|
92
93
|
|
|
93
|
-
it "is affected by replaceState", :
|
|
94
|
+
it "is affected by replaceState", requires: [:js] do
|
|
94
95
|
@session.visit("/with_js")
|
|
95
96
|
@session.execute_script("window.history.replaceState({}, '', '/replaced')")
|
|
96
97
|
expect(@session.current_path).to eq("/replaced")
|
|
97
98
|
end
|
|
99
|
+
|
|
100
|
+
it "doesn't raise exception on a nil current_url" do
|
|
101
|
+
skip "Only makes sense when there is a real driver" unless @session.respond_to?(:driver)
|
|
102
|
+
allow(@session.driver).to receive(:current_url) { nil }
|
|
103
|
+
@session.visit("/")
|
|
104
|
+
expect { @session.current_url }.not_to raise_exception
|
|
105
|
+
expect { @session.current_path }.not_to raise_exception
|
|
106
|
+
end
|
|
98
107
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
Capybara::SpecHelper.spec '#dismiss_confirm', requires: [:modals] do
|
|
2
3
|
before do
|
|
3
4
|
@session.visit('/with_js')
|
|
4
5
|
end
|
|
@@ -9,14 +10,14 @@ Capybara::SpecHelper.spec '#dismiss_confirm', :requires => [:modals] do
|
|
|
9
10
|
end
|
|
10
11
|
expect(@session).to have_xpath("//a[@id='open-confirm' and @confirmed='false']")
|
|
11
12
|
end
|
|
12
|
-
|
|
13
|
+
|
|
13
14
|
it "should dismiss the confirm if the message matches" do
|
|
14
15
|
@session.dismiss_confirm 'Confirm opened' do
|
|
15
16
|
@session.click_link('Open confirm')
|
|
16
17
|
end
|
|
17
18
|
expect(@session).to have_xpath("//a[@id='open-confirm' and @confirmed='false']")
|
|
18
19
|
end
|
|
19
|
-
|
|
20
|
+
|
|
20
21
|
it "should not dismiss the confirm if the message doesn't match" do
|
|
21
22
|
expect do
|
|
22
23
|
@session.dismiss_confirm 'Incorrect Text' do
|
|
@@ -24,7 +25,7 @@ Capybara::SpecHelper.spec '#dismiss_confirm', :requires => [:modals] do
|
|
|
24
25
|
end
|
|
25
26
|
end.to raise_error(Capybara::ModalNotFound)
|
|
26
27
|
end
|
|
27
|
-
|
|
28
|
+
|
|
28
29
|
|
|
29
30
|
it "should return the message presented" do
|
|
30
31
|
message = @session.dismiss_confirm do
|
|
@@ -32,4 +33,4 @@ Capybara::SpecHelper.spec '#dismiss_confirm', :requires => [:modals] do
|
|
|
32
33
|
end
|
|
33
34
|
expect(message).to eq('Confirm opened')
|
|
34
35
|
end
|
|
35
|
-
end
|
|
36
|
+
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
Capybara::SpecHelper.spec '#dismiss_prompt', requires: [:modals] do
|
|
2
3
|
before do
|
|
3
4
|
@session.visit('/with_js')
|
|
4
5
|
end
|
|
@@ -9,11 +10,11 @@ Capybara::SpecHelper.spec '#dismiss_prompt', :requires => [:modals] do
|
|
|
9
10
|
end
|
|
10
11
|
expect(@session).to have_xpath("//a[@id='open-prompt' and @response='dismissed']")
|
|
11
12
|
end
|
|
12
|
-
|
|
13
|
+
|
|
13
14
|
it "should return the message presented" do
|
|
14
15
|
message = @session.dismiss_prompt do
|
|
15
16
|
@session.click_link('Open prompt')
|
|
16
17
|
end
|
|
17
18
|
expect(message).to eq('Prompt opened')
|
|
18
19
|
end
|
|
19
|
-
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
Capybara::SpecHelper.spec '#assert_matches_selector' do
|
|
2
|
+
before do
|
|
3
|
+
@session.visit('/with_html')
|
|
4
|
+
@element = @session.find(:css, 'span', text: '42')
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
it "should be true if the given selector matches the element" do
|
|
8
|
+
expect(@element.assert_matches_selector(:css, '.number')).to be true
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should be false if the given selector does not match the element" do
|
|
12
|
+
expect { @element.assert_matches_selector(:css, '.not_number') }.to raise_error(Capybara::ElementNotFound)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should not be callable on the session" do
|
|
16
|
+
expect { @session.assert_matches_selector(:css, '.number') }.to raise_error(NoMethodError)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should wait for match to occur", requires: [:js] do
|
|
20
|
+
@session.visit('/with_js')
|
|
21
|
+
input = @session.find(:css, '#disable-on-click')
|
|
22
|
+
|
|
23
|
+
expect(input.assert_matches_selector(:css, 'input:enabled')).to be true
|
|
24
|
+
input.click
|
|
25
|
+
expect(input.assert_matches_selector(:css, 'input:disabled')).to be true
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should not accept count options" do
|
|
29
|
+
expect { @element.assert_matches_selector(:css, '.number', count: 1) }.to raise_error(ArgumentError)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "should accept a filter block" do
|
|
33
|
+
@element.assert_matches_selector(:css, 'span') { |el| el[:class] == "number" }
|
|
34
|
+
@element.assert_not_matches_selector(:css,'span') { |el| el[:class] == "not_number" }
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Capybara::SpecHelper.spec '#match_css?' do
|
|
2
|
+
before do
|
|
3
|
+
@session.visit('/with_html')
|
|
4
|
+
@element = @session.find(:css, 'span', text: '42')
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
it "should be true if the given selector matches the element" do
|
|
8
|
+
expect(@element).to match_css("span")
|
|
9
|
+
expect(@element).to match_css("span.number")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should be false if the given selector does not match" do
|
|
13
|
+
expect(@element).not_to match_css("div")
|
|
14
|
+
expect(@element).not_to match_css("p a#doesnotexist")
|
|
15
|
+
expect(@element).not_to match_css("p.nosuchclass")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should accept an optional filter block" do
|
|
19
|
+
# This would be better done with
|
|
20
|
+
expect(@element).to match_css('span') { |el| el[:class] == "number" }
|
|
21
|
+
expect(@element).not_to match_css('span') { |el| el[:class] == "not_number" }
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Capybara::SpecHelper.spec '#match_xpath?' do
|
|
2
|
+
before do
|
|
3
|
+
@session.visit('/with_html')
|
|
4
|
+
@element = @session.find(:css, 'span.number')
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
it "should be true if the given selector is on the page" do
|
|
8
|
+
expect(@element).to match_xpath("//span")
|
|
9
|
+
expect(@element).to match_xpath("//span[@class='number']")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should be false if the given selector is not on the page" do
|
|
13
|
+
expect(@element).not_to match_xpath("//abbr")
|
|
14
|
+
expect(@element).not_to match_xpath("//div")
|
|
15
|
+
expect(@element).not_to match_xpath("//span[@class='not_a_number']")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should use xpath even if default selector is CSS" do
|
|
19
|
+
Capybara.default_selector = :css
|
|
20
|
+
expect(@element).not_to have_xpath("//span[@class='not_a_number']")
|
|
21
|
+
expect(@element).not_to have_xpath("//div[@class='number']")
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
Capybara::SpecHelper.spec '#match_selector?' do
|
|
2
|
+
before do
|
|
3
|
+
@session.visit('/with_html')
|
|
4
|
+
@element = @session.find('//span', text: '42')
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
it "should be true if the element matches the given selector" do
|
|
8
|
+
expect(@element).to match_selector(:xpath, "//span")
|
|
9
|
+
expect(@element).to match_selector(:css, 'span.number')
|
|
10
|
+
expect(@element.matches_selector?(:css, 'span.number')).to be true
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should be false if the element does not match the given selector" do
|
|
14
|
+
expect(@element).not_to match_selector(:xpath, "//div")
|
|
15
|
+
expect(@element).not_to match_selector(:css, "span.not_a_number")
|
|
16
|
+
expect(@element.matches_selector?(:css, "span.not_a_number")).to be false
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should use default selector" do
|
|
20
|
+
Capybara.default_selector = :css
|
|
21
|
+
expect(@element).not_to match_selector("span.not_a_number")
|
|
22
|
+
expect(@element).to match_selector("span.number")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
context "with text" do
|
|
26
|
+
it "should discard all matches where the given string is not contained" do
|
|
27
|
+
expect(@element).to match_selector("//span", text: "42")
|
|
28
|
+
expect(@element).not_to match_selector("//span", text: "Doesnotexist")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "should have css sugar" do
|
|
33
|
+
expect(@element.matches_css?('span.number')).to be true
|
|
34
|
+
expect(@element.matches_css?('span.not_a_number')).to be false
|
|
35
|
+
expect(@element.matches_css?('span.number', text: "42")).to be true
|
|
36
|
+
expect(@element.matches_css?('span.number', text: "Nope")).to be false
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should have xpath sugar" do
|
|
40
|
+
expect(@element.matches_xpath?("//span")).to be true
|
|
41
|
+
expect(@element.matches_xpath?("//div")).to be false
|
|
42
|
+
expect(@element.matches_xpath?("//span", text: '42')).to be true
|
|
43
|
+
expect(@element.matches_xpath?("//span", text: 'Nope')).to be false
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'should accept selector filters' do
|
|
47
|
+
@session.visit('/form')
|
|
48
|
+
cbox = @session.find(:css, '#form_pets_dog')
|
|
49
|
+
expect(cbox.matches_selector?(:checkbox, id: 'form_pets_dog', option: 'dog', name: 'form[pets][]', checked: true)).to be true
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'should accept a custom filter block' do
|
|
53
|
+
@session.visit('/form')
|
|
54
|
+
cbox = @session.find(:css, '#form_pets_dog')
|
|
55
|
+
expect(cbox).to match_selector(:checkbox){ |node| node[:id] == "form_pets_dog"}
|
|
56
|
+
expect(cbox).not_to match_selector(:checkbox){ |node| node[:id] != "form_pets_dog"}
|
|
57
|
+
expect(cbox.matches_selector?(:checkbox){ |node| node[:id] == "form_pets_dog"}).to be true
|
|
58
|
+
expect(cbox.matches_selector?(:checkbox){ |node| node[:id] != "form_pets_dog"}).to be false
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
Capybara::SpecHelper.spec '#not_matches_selector?' do
|
|
63
|
+
before do
|
|
64
|
+
@session.visit('/with_html')
|
|
65
|
+
@element = @session.find(:css, "span", text: 42)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "should be false if the given selector matches the element" do
|
|
69
|
+
expect(@element).not_to not_match_selector(:xpath, "//span")
|
|
70
|
+
expect(@element).not_to not_match_selector(:css, "span.number")
|
|
71
|
+
expect(@element.not_matches_selector?(:css, "span.number")).to be false
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it "should be true if the given selector does not match the element" do
|
|
75
|
+
expect(@element).to not_match_selector(:xpath, "//abbr")
|
|
76
|
+
expect(@element).to not_match_selector(:css, "p a#doesnotexist")
|
|
77
|
+
expect(@element.not_matches_selector?(:css, "p a#doesnotexist")).to be true
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should use default selector" do
|
|
81
|
+
Capybara.default_selector = :css
|
|
82
|
+
expect(@element).to not_match_selector("p a#doesnotexist")
|
|
83
|
+
expect(@element).not_to not_match_selector("span.number")
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
context "with text" do
|
|
87
|
+
it "should discard all matches where the given string is contained" do
|
|
88
|
+
expect(@element).not_to not_match_selector(:css, "span.number", text: "42")
|
|
89
|
+
expect(@element).to not_match_selector(:css, "span.number", text: "Doesnotexist")
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "should have CSS sugar" do
|
|
94
|
+
expect(@element.not_matches_css?("span.number")).to be false
|
|
95
|
+
expect(@element.not_matches_css?("p a#doesnotexist")).to be true
|
|
96
|
+
expect(@element.not_matches_css?("span.number", text: "42")).to be false
|
|
97
|
+
expect(@element.not_matches_css?("span.number", text: "Doesnotexist")).to be true
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it "should have xpath sugar" do
|
|
101
|
+
expect(@element.not_matches_xpath?("//span")).to be false
|
|
102
|
+
expect(@element.not_matches_xpath?("//div")).to be true
|
|
103
|
+
expect(@element.not_matches_xpath?("//span", text: "42")).to be false
|
|
104
|
+
expect(@element.not_matches_xpath?("//span", text: "Doesnotexist")).to be true
|
|
105
|
+
end
|
|
106
|
+
end if Gem::Version.new(RSpec::Expectations::Version::STRING) >= Gem::Version.new('3.1')
|