page_object 1.1.1
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 +7 -0
- data/.gitignore +7 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +7 -0
- data/ChangeLog +809 -0
- data/Gemfile +14 -0
- data/Guardfile +20 -0
- data/LICENSE +20 -0
- data/README.md +111 -0
- data/Rakefile +35 -0
- data/cucumber.yml +10 -0
- data/features/area.feature +35 -0
- data/features/async.feature +30 -0
- data/features/audio.feature +68 -0
- data/features/bold.feature +21 -0
- data/features/button.feature +98 -0
- data/features/canvas.feature +37 -0
- data/features/check_box.feature +55 -0
- data/features/div.feature +45 -0
- data/features/element.feature +322 -0
- data/features/file_field.feature +40 -0
- data/features/form.feature +43 -0
- data/features/frames.feature +75 -0
- data/features/generic_elements.feature +29 -0
- data/features/gxt_table_extension.feature +24 -0
- data/features/headings.feature +97 -0
- data/features/hidden_field.feature +45 -0
- data/features/html/04-Death_Becomes_Fur.mp4 +0 -0
- data/features/html/04-Death_Becomes_Fur.oga +0 -0
- data/features/html/async.html +36 -0
- data/features/html/double_click.html +13 -0
- data/features/html/failure.html +8 -0
- data/features/html/frame_1.html +18 -0
- data/features/html/frame_2.html +16 -0
- data/features/html/frame_3.html +14 -0
- data/features/html/frames.html +12 -0
- data/features/html/hover.html +12 -0
- data/features/html/iframes.html +12 -0
- data/features/html/images/circle.png +0 -0
- data/features/html/images/img_pulpit.jpg +0 -0
- data/features/html/images/submit.gif +0 -0
- data/features/html/indexed_property.html +55 -0
- data/features/html/modal.html +17 -0
- data/features/html/modal_1.html +38 -0
- data/features/html/modal_2.html +27 -0
- data/features/html/movie.mp4 +0 -0
- data/features/html/movie.ogg +0 -0
- data/features/html/multi_elements.html +144 -0
- data/features/html/nested_elements.html +77 -0
- data/features/html/nested_frame_1.html +1 -0
- data/features/html/nested_frame_2.html +11 -0
- data/features/html/nested_frame_3.html +14 -0
- data/features/html/nested_frames.html +10 -0
- data/features/html/planets.gif +0 -0
- data/features/html/static_elements.html +207 -0
- data/features/html/success.html +8 -0
- data/features/html/sun.gif +0 -0
- data/features/html/sun.html +7 -0
- data/features/image.feature +50 -0
- data/features/indexed_property.feature +117 -0
- data/features/javascript.feature +28 -0
- data/features/label.feature +46 -0
- data/features/link.feature +52 -0
- data/features/list_item.feature +36 -0
- data/features/modal_dialog.feature +15 -0
- data/features/multi_elements.feature +492 -0
- data/features/nested_elements.feature +117 -0
- data/features/ordered_list.feature +56 -0
- data/features/page_level_actions.feature +90 -0
- data/features/paragraph.feature +35 -0
- data/features/radio_button.feature +58 -0
- data/features/radio_button_group.feature +29 -0
- data/features/sample-app/public/jquery-1.3.2.js +4376 -0
- data/features/sample-app/public/jquery.html +30 -0
- data/features/sample-app/public/prototype-1.6.0.3.js +4320 -0
- data/features/sample-app/public/prototype.html +35 -0
- data/features/sample-app/sample_app.rb +35 -0
- data/features/section.feature +132 -0
- data/features/select_list.feature +86 -0
- data/features/span.feature +37 -0
- data/features/step_definitions/accessor_steps.rb +64 -0
- data/features/step_definitions/area_steps.rb +19 -0
- data/features/step_definitions/async_steps.rb +83 -0
- data/features/step_definitions/audio_steps.rb +27 -0
- data/features/step_definitions/bold_steps.rb +12 -0
- data/features/step_definitions/button_steps.rb +48 -0
- data/features/step_definitions/canvas_steps.rb +15 -0
- data/features/step_definitions/check_box_steps.rb +35 -0
- data/features/step_definitions/div_steps.rb +19 -0
- data/features/step_definitions/element_steps.rb +266 -0
- data/features/step_definitions/file_field_steps.rb +19 -0
- data/features/step_definitions/form_steps.rb +19 -0
- data/features/step_definitions/frames_steps.rb +159 -0
- data/features/step_definitions/generic_element_steps.rb +31 -0
- data/features/step_definitions/gxt_table_steps.rb +58 -0
- data/features/step_definitions/headings_steps.rb +12 -0
- data/features/step_definitions/hidden_field_steps.rb +27 -0
- data/features/step_definitions/image_steps.rb +27 -0
- data/features/step_definitions/indexed_property_steps.rb +163 -0
- data/features/step_definitions/javascript_steps.rb +53 -0
- data/features/step_definitions/label_steps.rb +19 -0
- data/features/step_definitions/link_steps.rb +40 -0
- data/features/step_definitions/list_item_steps.rb +19 -0
- data/features/step_definitions/modal_dialog_steps.rb +62 -0
- data/features/step_definitions/multi_elements_steps.rb +541 -0
- data/features/step_definitions/nested_elements_steps.rb +212 -0
- data/features/step_definitions/ordered_list_steps.rb +23 -0
- data/features/step_definitions/page_level_actions_steps.rb +135 -0
- data/features/step_definitions/page_traversal_steps.rb +4 -0
- data/features/step_definitions/paragraph_steps.rb +28 -0
- data/features/step_definitions/radio_button_group_steps.rb +36 -0
- data/features/step_definitions/radio_button_steps.rb +27 -0
- data/features/step_definitions/section_steps.rb +268 -0
- data/features/step_definitions/select_list_steps.rb +65 -0
- data/features/step_definitions/span_steps.rb +19 -0
- data/features/step_definitions/table_cell_steps.rb +15 -0
- data/features/step_definitions/table_row_steps.rb +23 -0
- data/features/step_definitions/table_steps.rb +70 -0
- data/features/step_definitions/text_area_steps.rb +35 -0
- data/features/step_definitions/text_field_steps.rb +35 -0
- data/features/step_definitions/unordered_list_steps.rb +23 -0
- data/features/step_definitions/video_steps.rb +45 -0
- data/features/support/ajax_text_environment.rb +26 -0
- data/features/support/env.rb +8 -0
- data/features/support/hooks.rb +8 -0
- data/features/support/page.rb +382 -0
- data/features/support/persistent_browser.rb +70 -0
- data/features/support/targets/firefox14_osx.rb +6 -0
- data/features/support/targets/firefox14_windows7.rb +6 -0
- data/features/support/url_helper.rb +57 -0
- data/features/table.feature +122 -0
- data/features/table_cell.feature +45 -0
- data/features/table_row.feature +43 -0
- data/features/text_area.feature +51 -0
- data/features/text_field.feature +70 -0
- data/features/unordered_list.feature +56 -0
- data/features/video.feature +73 -0
- data/lib/page-object.rb +421 -0
- data/lib/page-object/accessors.rb +1412 -0
- data/lib/page-object/core_ext/string.rb +5 -0
- data/lib/page-object/element_locators.rb +21 -0
- data/lib/page-object/elements.rb +60 -0
- data/lib/page-object/elements/area.rb +31 -0
- data/lib/page-object/elements/audio.rb +9 -0
- data/lib/page-object/elements/bold.rb +11 -0
- data/lib/page-object/elements/button.rb +35 -0
- data/lib/page-object/elements/canvas.rb +23 -0
- data/lib/page-object/elements/check_box.rb +37 -0
- data/lib/page-object/elements/div.rb +19 -0
- data/lib/page-object/elements/element.rb +226 -0
- data/lib/page-object/elements/file_field.rb +38 -0
- data/lib/page-object/elements/form.rb +36 -0
- data/lib/page-object/elements/heading.rb +15 -0
- data/lib/page-object/elements/hidden_field.rb +22 -0
- data/lib/page-object/elements/image.rb +36 -0
- data/lib/page-object/elements/label.rb +19 -0
- data/lib/page-object/elements/link.rb +46 -0
- data/lib/page-object/elements/list_item.rb +19 -0
- data/lib/page-object/elements/media.rb +45 -0
- data/lib/page-object/elements/option.rb +10 -0
- data/lib/page-object/elements/ordered_list.rb +50 -0
- data/lib/page-object/elements/paragraph.rb +9 -0
- data/lib/page-object/elements/radio_button.rb +37 -0
- data/lib/page-object/elements/select_list.rb +42 -0
- data/lib/page-object/elements/span.rb +19 -0
- data/lib/page-object/elements/table.rb +79 -0
- data/lib/page-object/elements/table_cell.rb +28 -0
- data/lib/page-object/elements/table_row.rb +50 -0
- data/lib/page-object/elements/text_area.rb +38 -0
- data/lib/page-object/elements/text_field.rb +42 -0
- data/lib/page-object/elements/unordered_list.rb +51 -0
- data/lib/page-object/elements/video.rb +18 -0
- data/lib/page-object/indexed_properties.rb +40 -0
- data/lib/page-object/javascript/angularjs.rb +14 -0
- data/lib/page-object/javascript/jquery.rb +14 -0
- data/lib/page-object/javascript/prototype.rb +14 -0
- data/lib/page-object/javascript/yui.rb +19 -0
- data/lib/page-object/javascript_framework_facade.rb +80 -0
- data/lib/page-object/loads_platform.rb +45 -0
- data/lib/page-object/locator_generator.rb +131 -0
- data/lib/page-object/nested_elements.rb +17 -0
- data/lib/page-object/page_factory.rb +108 -0
- data/lib/page-object/page_populator.rb +83 -0
- data/lib/page-object/platforms.rb +18 -0
- data/lib/page-object/platforms/selenium_webdriver.rb +30 -0
- data/lib/page-object/platforms/selenium_webdriver/button.rb +15 -0
- data/lib/page-object/platforms/selenium_webdriver/check_box.rb +29 -0
- data/lib/page-object/platforms/selenium_webdriver/element.rb +291 -0
- data/lib/page-object/platforms/selenium_webdriver/file_field.rb +16 -0
- data/lib/page-object/platforms/selenium_webdriver/form.rb +16 -0
- data/lib/page-object/platforms/selenium_webdriver/image.rb +28 -0
- data/lib/page-object/platforms/selenium_webdriver/link.rb +23 -0
- data/lib/page-object/platforms/selenium_webdriver/ordered_list.rb +39 -0
- data/lib/page-object/platforms/selenium_webdriver/page_object.rb +1237 -0
- data/lib/page-object/platforms/selenium_webdriver/radio_button.rb +22 -0
- data/lib/page-object/platforms/selenium_webdriver/select_list.rb +93 -0
- data/lib/page-object/platforms/selenium_webdriver/surrogate_selenium_element.rb +42 -0
- data/lib/page-object/platforms/selenium_webdriver/table.rb +42 -0
- data/lib/page-object/platforms/selenium_webdriver/table_row.rb +43 -0
- data/lib/page-object/platforms/selenium_webdriver/text_area.rb +17 -0
- data/lib/page-object/platforms/selenium_webdriver/text_field.rb +17 -0
- data/lib/page-object/platforms/selenium_webdriver/unordered_list.rb +39 -0
- data/lib/page-object/platforms/watir_webdriver.rb +30 -0
- data/lib/page-object/platforms/watir_webdriver/check_box.rb +29 -0
- data/lib/page-object/platforms/watir_webdriver/element.rb +249 -0
- data/lib/page-object/platforms/watir_webdriver/file_field.rb +16 -0
- data/lib/page-object/platforms/watir_webdriver/form.rb +16 -0
- data/lib/page-object/platforms/watir_webdriver/image.rb +22 -0
- data/lib/page-object/platforms/watir_webdriver/link.rb +15 -0
- data/lib/page-object/platforms/watir_webdriver/ordered_list.rb +35 -0
- data/lib/page-object/platforms/watir_webdriver/page_object.rb +1082 -0
- data/lib/page-object/platforms/watir_webdriver/radio_button.rb +22 -0
- data/lib/page-object/platforms/watir_webdriver/select_list.rb +74 -0
- data/lib/page-object/platforms/watir_webdriver/table.rb +38 -0
- data/lib/page-object/platforms/watir_webdriver/table_row.rb +37 -0
- data/lib/page-object/platforms/watir_webdriver/text_area.rb +23 -0
- data/lib/page-object/platforms/watir_webdriver/text_field.rb +16 -0
- data/lib/page-object/platforms/watir_webdriver/unordered_list.rb +36 -0
- data/lib/page-object/sections.rb +29 -0
- data/lib/page-object/version.rb +4 -0
- data/lib/page-object/widgets.rb +133 -0
- data/page_object.gemspec +31 -0
- data/pageobject.gems +1 -0
- data/spec/page-object/accessors_spec.rb +40 -0
- data/spec/page-object/element_locators_spec.rb +1122 -0
- data/spec/page-object/elements/area_spec.rb +45 -0
- data/spec/page-object/elements/bold_spec.rb +29 -0
- data/spec/page-object/elements/button_spec.rb +64 -0
- data/spec/page-object/elements/canvas_spec.rb +40 -0
- data/spec/page-object/elements/check_box_spec.rb +49 -0
- data/spec/page-object/elements/div_spec.rb +28 -0
- data/spec/page-object/elements/element_spec.rb +114 -0
- data/spec/page-object/elements/file_field_spec.rb +39 -0
- data/spec/page-object/elements/form_spec.rb +28 -0
- data/spec/page-object/elements/heading_spec.rb +48 -0
- data/spec/page-object/elements/hidden_field_spec.rb +28 -0
- data/spec/page-object/elements/image_spec.rb +66 -0
- data/spec/page-object/elements/label_spec.rb +29 -0
- data/spec/page-object/elements/link_spec.rb +49 -0
- data/spec/page-object/elements/list_item_spec.rb +29 -0
- data/spec/page-object/elements/nested_element_spec.rb +254 -0
- data/spec/page-object/elements/option_spec.rb +11 -0
- data/spec/page-object/elements/ordered_list_spec.rb +94 -0
- data/spec/page-object/elements/paragraph_spec.rb +27 -0
- data/spec/page-object/elements/select_list_spec.rb +142 -0
- data/spec/page-object/elements/selenium/radio_button_spec.rb +44 -0
- data/spec/page-object/elements/selenium/text_field_spec.rb +49 -0
- data/spec/page-object/elements/selenium_element_spec.rb +177 -0
- data/spec/page-object/elements/span_spec.rb +26 -0
- data/spec/page-object/elements/table_cell_spec.rb +21 -0
- data/spec/page-object/elements/table_row_spec.rb +70 -0
- data/spec/page-object/elements/table_spec.rb +98 -0
- data/spec/page-object/elements/text_area_spec.rb +39 -0
- data/spec/page-object/elements/unordered_list_spec.rb +94 -0
- data/spec/page-object/elements/watir_element_spec.rb +145 -0
- data/spec/page-object/javascript_framework_facade_spec.rb +61 -0
- data/spec/page-object/loads_platform_spec.rb +53 -0
- data/spec/page-object/page-object_spec.rb +407 -0
- data/spec/page-object/page_factory_spec.rb +238 -0
- data/spec/page-object/page_populator_spec.rb +122 -0
- data/spec/page-object/page_section_spec.rb +73 -0
- data/spec/page-object/platforms/selenium_webdriver/selenium_page_object_spec.rb +68 -0
- data/spec/page-object/platforms/selenium_webdriver_spec.rb +29 -0
- data/spec/page-object/platforms/watir_webdriver/watir_page_object_spec.rb +29 -0
- data/spec/page-object/platforms/watir_webdriver_spec.rb +9 -0
- data/spec/page-object/selenium_accessors_spec.rb +609 -0
- data/spec/page-object/watir_accessors_spec.rb +1134 -0
- data/spec/page-object/widget_spec.rb +226 -0
- data/spec/spec_helper.rb +47 -0
- metadata +601 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<htmL>
|
|
2
|
+
<head>
|
|
3
|
+
<title>Prototype - Sample App</title>
|
|
4
|
+
<script type="application/x-javascript" src="/prototype-1.6.0.3.js"></script>
|
|
5
|
+
</head>
|
|
6
|
+
<body>
|
|
7
|
+
<div id="ajax-demo">
|
|
8
|
+
<h2>AJAX Calculator</h2>
|
|
9
|
+
<form id="calculator-form" action="#" method="post" onSubmit="return false;">
|
|
10
|
+
<input id="calculator-expression" name="calculator-expression"/>
|
|
11
|
+
<input type="submit" id="calculator-button" value="Compute" />
|
|
12
|
+
<br/><br/>
|
|
13
|
+
<div>Result: <input id="calculator-result" disabled /></div>
|
|
14
|
+
</form>
|
|
15
|
+
|
|
16
|
+
<script type="text/javascript" language="javascript">
|
|
17
|
+
Event.observe(window, 'load', function() {
|
|
18
|
+
|
|
19
|
+
Event.observe('calculator-button', 'click', function (event) {
|
|
20
|
+
new Ajax.Request('/compute', {
|
|
21
|
+
method: 'post',
|
|
22
|
+
parameters: $('calculator-form').serialize(true),
|
|
23
|
+
onSuccess: function(transport) {
|
|
24
|
+
$('calculator-result').value = transport.responseText;
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
return false;
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
});
|
|
31
|
+
</script>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
</body>
|
|
35
|
+
</html>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'rack'
|
|
3
|
+
require 'webrick'
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class SampleApp
|
|
7
|
+
|
|
8
|
+
def self.start(host, port)
|
|
9
|
+
Rack::Handler::WEBrick.run new,
|
|
10
|
+
:Host => host,
|
|
11
|
+
:Port => port,
|
|
12
|
+
:Logger => ::WEBrick::Log.new(RUBY_PLATFORM =~ /mswin|mingw/ ? 'NUL:' : '/dev/null'),
|
|
13
|
+
:AccessLog => [nil, nil]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def initialize
|
|
17
|
+
@public = Rack::File.new(File.expand_path("../public", __FILE__))
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def call(env)
|
|
21
|
+
req = Rack::Request.new(env)
|
|
22
|
+
|
|
23
|
+
case req.path
|
|
24
|
+
when "/"
|
|
25
|
+
[200, {}, ["Sample Application"]]
|
|
26
|
+
when "/compute"
|
|
27
|
+
sleep 3
|
|
28
|
+
resp = eval(req.params['calculator-expression']).to_s
|
|
29
|
+
[200, {}, [resp]]
|
|
30
|
+
else
|
|
31
|
+
@public.call(env)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
Feature: Sections
|
|
2
|
+
|
|
3
|
+
Background:
|
|
4
|
+
Given I am on the section elements page
|
|
5
|
+
|
|
6
|
+
Scenario: Getting the text from a section
|
|
7
|
+
When I get the text from the section
|
|
8
|
+
Then the text should include "page-object rocks!"
|
|
9
|
+
|
|
10
|
+
Scenario: Cannot find elements not in the section
|
|
11
|
+
When I access an element that is outside of the section
|
|
12
|
+
Then I should see that it doesn't exist in the section
|
|
13
|
+
|
|
14
|
+
Scenario: Finding a link within a section
|
|
15
|
+
When I search for a link located in a section
|
|
16
|
+
Then I should be able to click the section link
|
|
17
|
+
|
|
18
|
+
Scenario: Finding a button within a section
|
|
19
|
+
When I search for a button located in a section
|
|
20
|
+
Then I should be able to click the section button
|
|
21
|
+
|
|
22
|
+
Scenario: Finding a text field within a section
|
|
23
|
+
When I search for a text field located in a section
|
|
24
|
+
Then I should be able to type "123abc" in the section text field
|
|
25
|
+
|
|
26
|
+
Scenario: Finding a hidden field within a section
|
|
27
|
+
When I search for a hidden field located in a section
|
|
28
|
+
Then I should be able to see that the section hidden field contains "LeanDog"
|
|
29
|
+
|
|
30
|
+
Scenario: Finding a text area within a section
|
|
31
|
+
When I search for a text area located in a section
|
|
32
|
+
Then I should be able to type "abcdefg" in the section text area
|
|
33
|
+
|
|
34
|
+
Scenario: Finding a select list within a section
|
|
35
|
+
When I search for a select list located in a section
|
|
36
|
+
Then I should be able to select "Test 2" in the section select list
|
|
37
|
+
|
|
38
|
+
Scenario: Finding a file field within a section
|
|
39
|
+
When I search for a file field located in a section
|
|
40
|
+
Then I should be able to set the section file field
|
|
41
|
+
|
|
42
|
+
Scenario: Finding a checkbox within a section
|
|
43
|
+
When I search for a checkbox located in a section
|
|
44
|
+
Then I should be able to check the section checkbox
|
|
45
|
+
|
|
46
|
+
Scenario: Finding a radio button witin a section
|
|
47
|
+
When I search for a radio button located in a section
|
|
48
|
+
Then I should be able to select the section radio button
|
|
49
|
+
|
|
50
|
+
Scenario: Finding a div within a section
|
|
51
|
+
When I search for a div located in a section
|
|
52
|
+
Then I should see the text "page-object rocks!" in the section div
|
|
53
|
+
|
|
54
|
+
Scenario: Finding a span within a section
|
|
55
|
+
When I search for a span located in a section
|
|
56
|
+
Then I should see the text "My alert" in the section span
|
|
57
|
+
|
|
58
|
+
Scenario: Finding a table within a section
|
|
59
|
+
When I search for a table located in a section
|
|
60
|
+
Then the data for row "1" of the section table should be "Data1" and "Data2"
|
|
61
|
+
|
|
62
|
+
Scenario: Finding a table cell within a section
|
|
63
|
+
When I search the second table cell located in a table in a section
|
|
64
|
+
Then the section table cell should contain "Data2"
|
|
65
|
+
|
|
66
|
+
Scenario: Finding an image within a section
|
|
67
|
+
When I search for an image located in a section
|
|
68
|
+
Then the section image should be "106" pixels wide
|
|
69
|
+
And the section image should be "106" pixels tall
|
|
70
|
+
|
|
71
|
+
Scenario: Finding a form within a section
|
|
72
|
+
When I search for a form located in a section
|
|
73
|
+
Then I should be able to submit the section form
|
|
74
|
+
|
|
75
|
+
Scenario: Finding an ordered list within a section
|
|
76
|
+
When I search for an ordered list located in a section
|
|
77
|
+
Then the first section list items text should be "Number One"
|
|
78
|
+
|
|
79
|
+
Scenario: Finding an unordered list within a section
|
|
80
|
+
When I search for an unordered list located in a section
|
|
81
|
+
Then the first section list items text should be "Item One"
|
|
82
|
+
|
|
83
|
+
Scenario: Finding a list item section in an ordered list within a section
|
|
84
|
+
When I search for a list item section in an ordered list in a section
|
|
85
|
+
Then I should see the section list items text should be "Number One"
|
|
86
|
+
|
|
87
|
+
Scenario: Finding a h1 within a section
|
|
88
|
+
When I search for a h1 located in a section
|
|
89
|
+
Then I should see the section h1s text should be "h1's are cool"
|
|
90
|
+
|
|
91
|
+
Scenario: Finding a h2 within a section
|
|
92
|
+
When I search for a h2 located in a section
|
|
93
|
+
Then I should see the section h2s text should be "h2's are cool"
|
|
94
|
+
|
|
95
|
+
Scenario: Finding a h3 within a section
|
|
96
|
+
When I search for a h3 located in a section
|
|
97
|
+
Then I should see the section h3s text should be "h3's are cool"
|
|
98
|
+
|
|
99
|
+
Scenario: Finding a h4 within a section
|
|
100
|
+
When I search for a h4 located in a section
|
|
101
|
+
Then I should see the section h4s text should be "h4's are cool"
|
|
102
|
+
|
|
103
|
+
Scenario: Finding a h5 within a section
|
|
104
|
+
When I search for a h5 located in a section
|
|
105
|
+
Then I should see the section h5s text should be "h5's are cool"
|
|
106
|
+
|
|
107
|
+
Scenario: Finding a h6 within a section
|
|
108
|
+
When I search for a h6 located in a section
|
|
109
|
+
Then I should see the section h6s text should be "h6's are cool"
|
|
110
|
+
|
|
111
|
+
Scenario: Finding a paragraph within a section
|
|
112
|
+
When I search for a paragraph located in a section
|
|
113
|
+
Then I should see the section paragraphs text should be "This is a paragraph."
|
|
114
|
+
|
|
115
|
+
Scenario: Indexed property in section
|
|
116
|
+
Given I search for a link in an indexed property located in a section
|
|
117
|
+
Then I should see the text "Success" in the section indexed link
|
|
118
|
+
|
|
119
|
+
Scenario: Selecting multiple sections
|
|
120
|
+
When I select multiple sections
|
|
121
|
+
Then I should have a section collection containing the sections
|
|
122
|
+
And I can access any index of that collection of sections
|
|
123
|
+
|
|
124
|
+
Scenario: Searching section collection
|
|
125
|
+
Given I select multiple sections
|
|
126
|
+
When I search by a specific value of the section
|
|
127
|
+
Then I will find the first section with that value
|
|
128
|
+
|
|
129
|
+
Scenario: Filtering section collection
|
|
130
|
+
Given I select multiple sections
|
|
131
|
+
When I filter by a specific value of the sections
|
|
132
|
+
Then I will find all sections with that value
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
Feature: Select List
|
|
2
|
+
In order to interact with select lists
|
|
3
|
+
Testers will need access and interrogation ability
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
Background:
|
|
7
|
+
Given I am on the static elements page
|
|
8
|
+
|
|
9
|
+
Scenario: Selecting an element on the select list
|
|
10
|
+
When I select "Test 2" from the select list
|
|
11
|
+
Then the current item should be "Test 2"
|
|
12
|
+
|
|
13
|
+
Scenario: Selecting an element when there is a forward slash
|
|
14
|
+
When I select "Test/Test 3" from the select list
|
|
15
|
+
Then the current item should be "Test/Test 3"
|
|
16
|
+
|
|
17
|
+
Scenario Outline: Locating select lists on the Page
|
|
18
|
+
When I search for the select list by "<search_by>"
|
|
19
|
+
Then I should be able to select "Test 2"
|
|
20
|
+
And the value for the selected item should be "Test 2"
|
|
21
|
+
And the value for the option should be "option2"
|
|
22
|
+
|
|
23
|
+
Scenarios:
|
|
24
|
+
| search_by |
|
|
25
|
+
| id |
|
|
26
|
+
| class |
|
|
27
|
+
| name |
|
|
28
|
+
| xpath |
|
|
29
|
+
| index |
|
|
30
|
+
| label |
|
|
31
|
+
|
|
32
|
+
@selenium_only
|
|
33
|
+
Scenario Outline: Locating select lists on the Page using Selenium
|
|
34
|
+
When I search for the select list by "<search_by>"
|
|
35
|
+
Then I should be able to select "Test 2"
|
|
36
|
+
And the value for the selected item should be "Test 2"
|
|
37
|
+
And the value for the option should be "option2"
|
|
38
|
+
|
|
39
|
+
Examples:
|
|
40
|
+
| search_by |
|
|
41
|
+
| css |
|
|
42
|
+
|
|
43
|
+
Scenario Outline: Locating a select list using multiple parameters
|
|
44
|
+
When I search for the select list by "<param1>" and "<param2>"
|
|
45
|
+
Then I should be able to select "Test 2"
|
|
46
|
+
And the value for the selected item should be "Test 2"
|
|
47
|
+
And the value for the option should be "option2"
|
|
48
|
+
|
|
49
|
+
Scenarios:
|
|
50
|
+
| param1 | param2 |
|
|
51
|
+
| class | index |
|
|
52
|
+
| name | index |
|
|
53
|
+
|
|
54
|
+
Scenario: Iterating through the options in the select list
|
|
55
|
+
When I search for the select list by "id"
|
|
56
|
+
Then option "1" should contain "Test 1"
|
|
57
|
+
And option "2" should contain "Test 2"
|
|
58
|
+
And each option should contain "Test"
|
|
59
|
+
|
|
60
|
+
Scenario: Finding a select list dynamically
|
|
61
|
+
When I find a select list while the script is executing
|
|
62
|
+
Then I should see that the select list exists
|
|
63
|
+
And I should be able to select "Test 2" from the list
|
|
64
|
+
|
|
65
|
+
Scenario: Getting the selected option
|
|
66
|
+
When I select "Test 2" from the select list
|
|
67
|
+
Then the selected option should be "Test 2"
|
|
68
|
+
|
|
69
|
+
Scenario: Determining if a select list includes some option
|
|
70
|
+
Then the select list should include "Test 2"
|
|
71
|
+
|
|
72
|
+
Scenario: It should know if an option is selected
|
|
73
|
+
When I select "Test 2" from the select list
|
|
74
|
+
Then the select list should know that "Test 2" is selected
|
|
75
|
+
|
|
76
|
+
Scenario: Clearing multiple select list
|
|
77
|
+
When I clear multiple select list
|
|
78
|
+
Then multiple select list should have no selected options
|
|
79
|
+
|
|
80
|
+
Scenario: Selecting an option by its value
|
|
81
|
+
When I select an option using the value "option2"
|
|
82
|
+
Then the selected option should be "Test 2"
|
|
83
|
+
|
|
84
|
+
Scenario: Getting the value from a selected option
|
|
85
|
+
When I select an option using the value "option2"
|
|
86
|
+
Then the selected option should have a value of "option2"
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
Feature: Span
|
|
2
|
+
|
|
3
|
+
Background:
|
|
4
|
+
Given I am on the static elements page
|
|
5
|
+
|
|
6
|
+
Scenario: Getting the text from a span
|
|
7
|
+
When I get the text from the span
|
|
8
|
+
Then the text should be "My alert"
|
|
9
|
+
|
|
10
|
+
Scenario Outline: Locating spans on the page
|
|
11
|
+
When I search for the span by "<search_by>"
|
|
12
|
+
Then the text should be "My alert"
|
|
13
|
+
|
|
14
|
+
Scenarios:
|
|
15
|
+
| search_by |
|
|
16
|
+
| id |
|
|
17
|
+
| class |
|
|
18
|
+
| xpath |
|
|
19
|
+
| index |
|
|
20
|
+
| name |
|
|
21
|
+
| text |
|
|
22
|
+
| title |
|
|
23
|
+
| css |
|
|
24
|
+
|
|
25
|
+
Scenario Outline: Locating span using multiple parameters
|
|
26
|
+
When I search for the span by "<param1>" and "<param2>"
|
|
27
|
+
Then the text should be "My alert"
|
|
28
|
+
|
|
29
|
+
Scenarios:
|
|
30
|
+
| param1 | param2 |
|
|
31
|
+
| class | index |
|
|
32
|
+
| name | index |
|
|
33
|
+
|
|
34
|
+
Scenario: Finding a span dynamically
|
|
35
|
+
When I get the text from a span while the script is executing
|
|
36
|
+
Then I should see that the span exists
|
|
37
|
+
And the text should be "My alert"
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
Then /^the current item should be "([^\"]*)"$/ do |expected_text|
|
|
2
|
+
@page.sel_list_id.should == expected_text
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^the text should be "([^\"]*)"$/ do |expected_text|
|
|
6
|
+
@text.should == expected_text
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
Then /^the text should include "([^\"]*)"$/ do |expected_text|
|
|
10
|
+
expect(@text).to include expected_text
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Then /^I should be on the success page$/ do
|
|
14
|
+
@page.text.should include 'Success'
|
|
15
|
+
@page.title.should == 'Success'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
Then /^the list items text should be "([^\"]*)"$/ do |expected_text|
|
|
19
|
+
@element.text.should == expected_text
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
When /^I get the first item from the list$/ do
|
|
23
|
+
@element = @list[0]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
Then /^the table should have "([^\"]*)" rows$/ do |rows|
|
|
27
|
+
@element.rows.should == rows.to_i
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
Then /^each row should contain "([^\"]*)"$/ do |text|
|
|
31
|
+
@element.each do |row|
|
|
32
|
+
row.text.should include text
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
Then /^row "([^\"]*)" should have "([^\"]*)" columns$/ do |row, cols|
|
|
37
|
+
@element[row.to_i - 1].columns.should == cols.to_i
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
Then /^each column should contain "([^\"]*)"$/ do |text|
|
|
41
|
+
row = @element[0]
|
|
42
|
+
row.each do |column|
|
|
43
|
+
column.text.should include text
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
Then /^the list should contain (\d+) items$/ do |items|
|
|
48
|
+
@list.items.should == items.to_i
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
Then /^each item should contain "([^\"]*)"$/ do |text|
|
|
52
|
+
@list.each { |item| item.text.should include text }
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
Then /^option "([^\"]*)" should contain "([^\"]*)"$/ do |opt_num, text|
|
|
56
|
+
@element = @page.send "sel_list_#{@how}_element".to_sym
|
|
57
|
+
@element[opt_num.to_i - 1].text.should == text
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
Then /^each option should contain "([^\"]*)"$/ do |text|
|
|
61
|
+
@element.options.each do |option|
|
|
62
|
+
option.text.should include text
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
When /^I search for the area by "([^\"]*)"$/ do |how|
|
|
2
|
+
@how = how
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should be able to click the area$/ do
|
|
6
|
+
@page.send("area_#{@how}")
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
Then /^I should see the coordinates are "([^\"]*)"$/ do |coords|
|
|
10
|
+
@element.coords.should == coords
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Then /^I should see the shape is "([^\"]*)"$/ do |shape|
|
|
14
|
+
@element.shape.should == shape
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
Then /^I should see the href is "([^\"]*)"$/ do |href|
|
|
18
|
+
@element.href.should include href
|
|
19
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
def success
|
|
2
|
+
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should be able to wait until it is present$/ do
|
|
6
|
+
@element.when_present do
|
|
7
|
+
success
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
Then /^I should be able to wait until it is visible$/ do
|
|
12
|
+
@element.when_visible do
|
|
13
|
+
success
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
Then /^I should be able to wait until it is not visible$/ do
|
|
18
|
+
begin
|
|
19
|
+
@element.when_not_visible do
|
|
20
|
+
fail
|
|
21
|
+
end
|
|
22
|
+
rescue
|
|
23
|
+
success
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
Then /^I should be able to wait until a block returns true$/ do
|
|
28
|
+
@element.wait_until do
|
|
29
|
+
@element.visible?
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class AsyncPage
|
|
34
|
+
include PageObject
|
|
35
|
+
button(:target, :value => 'Target')
|
|
36
|
+
button(:hide, :value => 'Hide Button')
|
|
37
|
+
button(:unhide, :value => 'Unhide Button')
|
|
38
|
+
button(:create_button, :value => 'Create Button')
|
|
39
|
+
button(:remove_button, :value => 'Remove Button')
|
|
40
|
+
button(:created_button, :value => 'New Button')
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
Given /^I am on the async elements page$/ do
|
|
44
|
+
@page = AsyncPage.new(@browser)
|
|
45
|
+
@page.navigate_to(UrlHelper.async)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
When /^I make the button invisible$/ do
|
|
49
|
+
@page.hide
|
|
50
|
+
sleep 2
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
Then /^I should be able to click it when it becomses visible$/ do
|
|
54
|
+
@page.unhide
|
|
55
|
+
@page.target_element.when_visible do
|
|
56
|
+
@page.target
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
Then /^I should be able to wait until the button becomes invisible$/ do
|
|
61
|
+
@page.hide
|
|
62
|
+
@page.target_element.when_not_visible do
|
|
63
|
+
@page.target_element.attribute("block").should == "none"
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
When /^I add a button a few seconds from now$/ do
|
|
68
|
+
@page.create_button
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
Then /^I should be able to click it when it gets added$/ do
|
|
72
|
+
@page.created_button_element.when_present.click
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
When /^I remove a button a few seconds from now$/ do
|
|
76
|
+
@page.created_button_element.when_present
|
|
77
|
+
@page.remove_button
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
Then /^I should not be able to find the button$/ do
|
|
81
|
+
@page.created_button_element.when_not_present
|
|
82
|
+
@page.created_button_element.exists?.should be false
|
|
83
|
+
end
|