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,19 @@
|
|
|
1
|
+
Then /^I should be able to submit the form$/ do
|
|
2
|
+
@element.submit
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
When /^I locate the form by "([^\"]*)"$/ do |how|
|
|
6
|
+
@element = @page.send "form_#{how}_element"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
When /^I locate the form using "([^"]*)" and "([^"]*)"$/ do |param1, param2|
|
|
10
|
+
@element = @page.send "form_#{param1}_#{param2}_element"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
When /^I locate a form while the script is executing$/ do
|
|
14
|
+
@element = @page.form_element(:id => 'form_id')
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
Then /^I should see that the form exists$/ do
|
|
18
|
+
@page.form_id?.should == true
|
|
19
|
+
end
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
class FramePage
|
|
2
|
+
include PageObject
|
|
3
|
+
|
|
4
|
+
in_frame(:index => 1) do |frame|
|
|
5
|
+
text_field(:text_field_2_index, :name => 'recieverElement', :frame => frame)
|
|
6
|
+
end
|
|
7
|
+
in_frame(:index => 0) do |frame|
|
|
8
|
+
text_field(:text_field_1_index, :name => 'senderElement', :frame => frame)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
in_frame(:id => 'frame_two_2') do |frame|
|
|
12
|
+
text_field(:text_field_2_id, :name => 'recieverElement', :frame => frame)
|
|
13
|
+
end
|
|
14
|
+
in_frame(:id => 'frame_one_1') do |frame|
|
|
15
|
+
text_field(:text_field_1_id, :name => 'senderElement', :frame => frame)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
in_frame(:name => 'frame2') do |frame|
|
|
19
|
+
text_field(:text_field_2_name, :name => 'recieverElement', :frame => frame)
|
|
20
|
+
end
|
|
21
|
+
in_frame(:name => 'frame1') do |frame|
|
|
22
|
+
text_field(:text_field_1_name, :name => 'senderElement', :frame => frame)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
in_frame(:id => /frame_two_\d+/) do |frame|
|
|
26
|
+
text_field(:text_field_2_regex, :name => 'recieverElement', :frame => frame)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class IFramePage
|
|
32
|
+
include PageObject
|
|
33
|
+
|
|
34
|
+
in_iframe(:id => 'frame_two_2') do |frame|
|
|
35
|
+
text_field(:text_field_2_id, :name => 'recieverElement', :frame => frame)
|
|
36
|
+
end
|
|
37
|
+
in_iframe(:id => 'frame_one_1') do |frame|
|
|
38
|
+
text_field(:text_field_1_id, :name => 'senderElement', :frame => frame)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
in_iframe(:name => 'frame2') do |frame|
|
|
42
|
+
text_field(:text_field_2_name, :name => 'recieverElement', :frame => frame)
|
|
43
|
+
end
|
|
44
|
+
in_iframe(:name => 'frame1') do |frame|
|
|
45
|
+
text_field(:text_field_1_name, :name => 'senderElement', :frame => frame)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
in_iframe(:index => 1) do |frame|
|
|
49
|
+
text_field(:text_field_2_index, :name => 'recieverElement', :frame => frame)
|
|
50
|
+
end
|
|
51
|
+
in_iframe(:index => 0) do |frame|
|
|
52
|
+
text_field(:text_field_1_index, :name => 'senderElement', :frame => frame)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
in_iframe(:class => 'iframe', :name => 'frame2') do |frame|
|
|
56
|
+
text_field(:text_field_2_multiple_identifiers, :name => 'recieverElement', :frame => frame)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
Given /^I am on the frame elements page$/ do
|
|
62
|
+
@page = FramePage.new(@browser)
|
|
63
|
+
@page.navigate_to(UrlHelper.frame_elements)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
Given /^I am on the iframe elements page$/ do
|
|
67
|
+
@page = IFramePage.new(@browser)
|
|
68
|
+
@page.navigate_to(UrlHelper.iframe_elements)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
When /^I type "([^\"]*)" into the text field for frame 2 using "([^\"]*)"$/ do |text, arg_type|
|
|
72
|
+
@page.send "text_field_2_#{arg_type.gsub(' ', '_')}=".to_sym, text
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
Then /^I should verify "([^\"]*)" is in the text field for frame 2 using "([^\"]*)"$/ do |text, arg_type|
|
|
76
|
+
result = @page.send "text_field_2_#{arg_type.gsub(' ', '_')}".to_sym
|
|
77
|
+
result.should == text
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
#Then /^I should be able to get the text fields text from frame 2 using "([^\"]*)"$/ do |arg_type|
|
|
81
|
+
# @page.send("text_field_2_#{arg_type}_element").text
|
|
82
|
+
#end
|
|
83
|
+
|
|
84
|
+
When /^I type "([^\"]*)" into the text field from frame 1 using "([^\"]*)"$/ do |text, arg_type|
|
|
85
|
+
@page.send "text_field_1_#{arg_type.gsub(' ', '_')}=".to_sym, text
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
Then /^I should verify "([^\"]*)" is in the text field for frame 1 using "([^\"]*)"$/ do |text, arg_type|
|
|
89
|
+
result = @page.send "text_field_1_#{arg_type.gsub(' ', '_')}".to_sym
|
|
90
|
+
result.should == text
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
class NestedFramePage
|
|
94
|
+
include PageObject
|
|
95
|
+
|
|
96
|
+
in_frame(:id => 'two') do |frame|
|
|
97
|
+
in_iframe({:id => 'three'}, frame) do |nested_frame|
|
|
98
|
+
link(:nested_link, :id => 'four', :frame => nested_frame)
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
Given /^I am on the nested frame elements page$/ do
|
|
104
|
+
@page = NestedFramePage.new(@browser)
|
|
105
|
+
@page.navigate_to(UrlHelper.nested_frame_elements)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
Then /^I should be able to click the link in the frame$/ do
|
|
109
|
+
@page.nested_link
|
|
110
|
+
@page.text.should include "Success"
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
When /^I type "([^\"]*)" into the text field from frame 1 identified dynamically$/ do |value|
|
|
114
|
+
@page.in_frame(:id => 'frame_one_1') do |frame|
|
|
115
|
+
@page.text_field_element(:name => 'senderElement', :frame => frame).value = value
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
Then /^I should verify "([^\"]*)" in the text field for frame 1 identified dynamically$/ do |value|
|
|
120
|
+
@page.in_frame(:id => 'frame_one_1') do |frame|
|
|
121
|
+
@page.text_field_element(:name => 'senderElement', :frame => frame).value.should == value
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
When /^I type "([^\"]*)" into the text field from iframe 1 identified dynamically$/ do |value|
|
|
126
|
+
@page.in_iframe(:id => 'frame_one_1') do |frame|
|
|
127
|
+
@page.text_field_element(:name => 'senderElement', :frame => frame).value = value
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
Then /^I should verify "([^\"]*)" in the text field for iframe 1 identified dynamically$/ do |value|
|
|
132
|
+
@page.in_iframe(:id => 'frame_one_1') do |frame|
|
|
133
|
+
@page.text_field_element(:name => 'senderElement', :frame => frame).value.should == value
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
When /^I trigger an alert within a frame$/ do
|
|
138
|
+
@page.in_frame(:id => 'frame_three_3') do |frame|
|
|
139
|
+
@msg = @page.alert(frame) do
|
|
140
|
+
@page.button_element(:id => 'alert_button', :frame => frame).click
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
When /^I trigger a confirm within a frame$/ do
|
|
146
|
+
@page.in_frame(:id => 'frame_three_3') do |frame|
|
|
147
|
+
@msg = @page.confirm(true, frame) do
|
|
148
|
+
@page.button_element(:id => 'confirm_button', :frame => frame).click
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
When /^I trigger a prompt within a frame$/ do
|
|
154
|
+
@page.in_frame(:id => 'frame_three_3') do |frame|
|
|
155
|
+
@msg = @page.prompt("Cheezy", frame) do
|
|
156
|
+
@page.button_element(:id => 'prompt_button', :frame => frame).click
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
When /^I get the text from the article$/ do
|
|
2
|
+
@text = @page.article_id
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
When /^I get the text from the header$/ do
|
|
6
|
+
@text = @page.header_id
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
When /^I get the text from the footer$/ do
|
|
10
|
+
@text = @page.footer_id
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
When /^I get the text from the summary$/ do
|
|
14
|
+
@text = @page.summary_id
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
When /^I get the text from the details$/ do
|
|
18
|
+
@text = @page.details_id
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
When /^I get the svg element$/ do
|
|
22
|
+
@svg = @page.svg_id_element
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
Then /^the svg width should be "(.*?)"$/ do |width|
|
|
26
|
+
@svg.attribute('width').should == width
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
Then /^the svg height should be "(.*?)"$/ do |height|
|
|
30
|
+
@svg.attribute('height').should == height
|
|
31
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
|
|
2
|
+
def class_exists?(class_name)
|
|
3
|
+
begin
|
|
4
|
+
klass = Module.const_get(class_name)
|
|
5
|
+
return klass.is_a?(Class)
|
|
6
|
+
rescue NameError
|
|
7
|
+
return false
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
Given /^I am on the Gxt Examples page$/ do
|
|
12
|
+
visit GxtSamplePageObject
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
When /^I have the Basic Grid opened$/ do
|
|
16
|
+
on(GxtSamplePageObject).basic_grid_element.click
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
When /^I have defined a GxtTable class extending Table$/ do
|
|
20
|
+
class GxtTable < PageObject::Elements::Table
|
|
21
|
+
|
|
22
|
+
def self.accessor_methods(accessor, name)
|
|
23
|
+
accessor.send :define_method, "#{name}_rows" do
|
|
24
|
+
self.send("#{name}_element").rows
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
protected
|
|
29
|
+
def child_xpath
|
|
30
|
+
".//descendant::tr"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
When /^I define a page-object using that widget$/ do
|
|
36
|
+
class GxtSamplePageObject
|
|
37
|
+
include PageObject
|
|
38
|
+
|
|
39
|
+
page_url "http://gxtexamplegallery.appspot.com/"
|
|
40
|
+
|
|
41
|
+
div(:basic_grid, :class => "label_basic_grid")
|
|
42
|
+
gxt_table(:gxt_table, :class => "x-grid3")
|
|
43
|
+
end unless class_exists? 'GxtSamplePageObject'
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
When /^I have registered the GxtTable with PageObject$/ do
|
|
47
|
+
PageObject.register_widget :gxt_table, GxtTable, 'div'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
When /^I retrieve a GxtTable widget$/ do
|
|
51
|
+
@element = on(GxtSamplePageObject).gxt_table_element
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
When /^the GxtTable should have "(\d+)" rows$/ do |rows|
|
|
56
|
+
on(GxtSamplePageObject).gxt_table_rows.should == rows.to_i
|
|
57
|
+
end
|
|
58
|
+
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
When /^I get the text for the "([^\"]*)" element$/ do |el|
|
|
2
|
+
@heading = @page.send "#{el}_id"
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should see "([^\"]*)"$/ do |text|
|
|
6
|
+
@heading.should == text
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
When /^I search for the heading(\d+) by "([^"]*)"$/ do |head_type, type|
|
|
10
|
+
@heading = @page.send "h#{head_type}_#{type}"
|
|
11
|
+
end
|
|
12
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
When /^I retrieve the hidden field element$/ do
|
|
2
|
+
@element = @page.hidden_field_id_element
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should see the hidden field contains "([^\"]*)"$/ do |text|
|
|
6
|
+
@page.hidden_field_id.should == text
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
When /^I search for the hidden field by "([^\"]*)"$/ do |how|
|
|
10
|
+
@element = @page.send "hidden_field_#{how}_element"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Then /^the hidden field element should contain "([^\"]*)"$/ do |text|
|
|
14
|
+
@element.value.should == text
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
When /^I search for the hidden field by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
|
|
18
|
+
@element = @page.send "hidden_field_#{param1}_#{param2}_element"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
When /^I find a hidden field while the script is executing$/ do
|
|
22
|
+
@element = @page.hidden_field_element(:id => 'hidden_field_id')
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
Then /^I should see that the hidden field exists$/ do
|
|
26
|
+
@page.hidden_field_id?.should == true
|
|
27
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
When /^I get the image element$/ do
|
|
2
|
+
@element = @page.image_id_element
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^the image should be "([^\"]*)" pixels wide$/ do |width|
|
|
6
|
+
@element.width.should == width.to_i
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
Then /^the image should be "([^\"]*)" pixels tall$/ do |height|
|
|
10
|
+
@element.height.should == height.to_i
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
When /^I get the image element by "([^\"]*)"$/ do |how|
|
|
14
|
+
@element = @page.send "image_#{how}_element"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
When /^I get the image element by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
|
|
18
|
+
@element = @page.send "image_#{param1}_#{param2}_element"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
When /^I get the image element while the script is executing$/ do
|
|
22
|
+
@element = @page.image_element(:id => 'image_id')
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
Then /^I should see that the image exists$/ do
|
|
26
|
+
@page.image_id?.should == true
|
|
27
|
+
end
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
class IndexedPropertyPage
|
|
2
|
+
include PageObject
|
|
3
|
+
|
|
4
|
+
indexed_property :table, [[:text_field, :text_table, {:id => 'table[%s].text'}],
|
|
5
|
+
[:text_field, :text_name, {:name => 'tableName[%s].text'}],
|
|
6
|
+
[:radio_button, :radio, {:id => 'table[%s].radio'}],
|
|
7
|
+
[:checkbox, :check, {:id => 'table[%s].check'}],
|
|
8
|
+
[:text_area, :area, {:id => 'table[%s].area'}],
|
|
9
|
+
[:button, :button, {:id => 'table[%s].button'}],
|
|
10
|
+
[:div, :content, {:id => 'table[%s].content'}],
|
|
11
|
+
[:div, :nil?, {:id => 'table[%s].bad_name'}],
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
indexed_property :index_table, [[:radio_button, :radio, {:index => '%d'}]]
|
|
15
|
+
|
|
16
|
+
indexed_property :nottable, [[:text_field, :text_nottable, {:id => 'nottable[%s].text'}]]
|
|
17
|
+
|
|
18
|
+
indexed_property :other_table, [
|
|
19
|
+
[:text_field, :text_table, {:id => 'other_table[%s].text'}],
|
|
20
|
+
[:div, :content, {:id => 'other_table[%s].content'}]
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def page
|
|
26
|
+
@page ||= IndexedPropertyPage.new(@browser)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
Given /^I am on the indexed property page$/ do
|
|
30
|
+
# @page = IndexedPropertyPage.new(@browser)
|
|
31
|
+
page.navigate_to(UrlHelper.indexed)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
When /^I search for the elements for index "([^\"]*)"$/ do |index|
|
|
35
|
+
@index = index
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
Then /^I type "([^\"]*)" into the table's indexed text field by id$/ do |val|
|
|
39
|
+
page.table[@index].text_table = val
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
Then /^The table's indexed text field by id should contain "([^\"]*)"$/ do |val|
|
|
43
|
+
page.table[@index].text_table.should == val
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
Then /^I type "([^\"]*)" into the table's indexed text field by name$/ do |val|
|
|
47
|
+
page.table[@index].text_name = val
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
Then /^The table's indexed text field by name should contain "([^\"]*)"$/ do |val|
|
|
51
|
+
page.table[@index].text_name.should == val
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
Then /^I select the indexed radio button$/ do
|
|
55
|
+
page.table[@index].select_radio
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
Then /^The indexed radio button should be selected$/ do
|
|
59
|
+
page.table[@index].radio_selected?.should == true
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
Then /^I check the indexed checkbox$/ do
|
|
63
|
+
page.table[@index].check_check
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
Then /^The indexed checkbox should be checked$/ do
|
|
67
|
+
page.table[@index].check_checked?.should == true
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
Then /^I type "([^\"]*)" into the table's indexed text area$/ do |val|
|
|
71
|
+
page.table[@index].area = val
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
Then /^The table's indexed text area should contain "([^\"]*)"$/ do |val|
|
|
75
|
+
page.table[@index].area.should == val
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
Then /^I should see that the indexed button exists$/ do
|
|
79
|
+
page.table[@index].button?.should == true
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
Then /^I should be able to click the indexed button$/ do
|
|
83
|
+
page.table[@index].button
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
Then /^I type "([^\"]*)" into the regular indexed text field by id$/ do |val|
|
|
87
|
+
page.nottable[@index].text_nottable = val
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
Then /^The regular indexed text field by id should contain "([^\"]*)"$/ do |val|
|
|
91
|
+
page.nottable[@index].text_nottable.should == val
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
When(/^I search for an element not on my indexed property but on another$/) do
|
|
96
|
+
@index = 'foo'
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
Then(/^I should see that the element doesn't exist$/) do
|
|
100
|
+
expect { page.other_table[@index].radio_element.value }.to raise_error(NoMethodError)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
When(/^I search for an element that is on an indexed property$/) do
|
|
104
|
+
page.table['foo'].radio_element
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
And(/^I search for the element on another indexed property it is not on$/) do
|
|
108
|
+
@index = 'foo'
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
When(/^I search using the index which is not on another indexed property$/) do
|
|
112
|
+
@index = '123'
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
Then(/^I should see that the element doesn't exist for that index/) do
|
|
116
|
+
expect { page.other_table[@index].text_table_element.text }.to raise_error /unable to locate element|Selenium::WebDriver::Error::NoSuchElementError/
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
When(/^I search for an element by an index on an indexed property$/) do
|
|
120
|
+
page.table['123'].text_table_element.html
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
And(/^I search using an index which is on another indexed property$/) do
|
|
124
|
+
@index = 'bar'
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
Then(/^I should see the content of the element on the second indexed property$/) do
|
|
128
|
+
expect(page.other_table['bar'].content).to eq 'bar!'
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
When(/^I search for an element with text by an index on an indexed property$/) do
|
|
132
|
+
@indexed_property = page.table
|
|
133
|
+
@contents = [@indexed_property['123'].content]
|
|
134
|
+
expect(@contents[0]).to eq '123!'
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
And(/^I search for a different element with text by index on the indexed property$/) do
|
|
138
|
+
@contents << @indexed_property['12test'].content
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
Then(/^I should see the contents of both elements$/) do
|
|
142
|
+
expect(@contents).to eq ['123!','12test!']
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
When(/^I use a name that collides with a ruby method on an indexed property$/) do
|
|
146
|
+
#noop element is already defined on indexed property
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
Then(/^the original method remains$/) do
|
|
150
|
+
expect(page.table['foo'].nil?).to be false
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
When(/^I search for the elements with index (.*)$/) do |index|
|
|
154
|
+
@index = index.to_i
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
And(/^I select the table's indexed radio button$/) do
|
|
158
|
+
page.index_table[@index].select_radio
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
Then(/^The table's indexed radio button should be selected$/) do
|
|
162
|
+
expect(page.index_table[@index]).to be_radio_selected
|
|
163
|
+
end
|