page-object 0.2.4 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +26 -2
- data/features/button.feature +5 -0
- data/features/check_box.feature +4 -2
- data/features/div.feature +4 -0
- data/features/form.feature +3 -0
- data/features/hidden_field.feature +4 -0
- data/features/image.feature +5 -0
- data/features/link.feature +4 -0
- data/features/list_item.feature +4 -0
- data/features/ordered_list.feature +5 -0
- data/features/radio_button.feature +4 -0
- data/features/select_list.feature +5 -1
- data/features/span.feature +4 -0
- data/features/step_definitions/accessor_steps.rb +0 -266
- data/features/step_definitions/button_steps.rb +23 -0
- data/features/step_definitions/check_box_steps.rb +31 -0
- data/features/step_definitions/div_steps.rb +15 -0
- data/features/step_definitions/element_steps.rb +0 -4
- data/features/step_definitions/form_steps.rb +15 -0
- data/features/step_definitions/hidden_field_steps.rb +23 -0
- data/features/step_definitions/image_steps.rb +23 -0
- data/features/step_definitions/link_steps.rb +20 -0
- data/features/step_definitions/list_item_steps.rb +15 -0
- data/features/step_definitions/ordered_list_steps.rb +15 -0
- data/features/step_definitions/radio_button_steps.rb +23 -0
- data/features/step_definitions/select_list_steps.rb +28 -0
- data/features/step_definitions/span_steps.rb +15 -0
- data/features/step_definitions/table_cell_steps.rb +11 -0
- data/features/step_definitions/table_steps.rb +12 -0
- data/features/step_definitions/text_area_steps.rb +27 -0
- data/features/step_definitions/text_field_steps.rb +27 -0
- data/features/step_definitions/unordered_list_steps.rb +16 -0
- data/features/table.feature +4 -0
- data/features/table_cell.feature +3 -0
- data/features/text_area.feature +4 -0
- data/features/text_field.feature +4 -0
- data/features/unordered_list.feature +5 -0
- data/lib/page-object.rb +8 -3
- data/lib/page-object/element_locators.rb +277 -0
- data/lib/page-object/platforms/selenium/page_object.rb +6 -5
- data/lib/page-object/platforms/watir/page_object.rb +2 -2
- data/lib/page-object/platforms/watir/text_area.rb +1 -1
- data/lib/page-object/version.rb +1 -1
- data/page-object.gemspec +2 -2
- data/spec/page-object/element_locators_spec.rb +113 -0
- data/spec/page-object/page-object_spec.rb +4 -4
- metadata +40 -5
@@ -0,0 +1,23 @@
|
|
1
|
+
When /^I click the button$/ do
|
2
|
+
@page.button_id
|
3
|
+
end
|
4
|
+
|
5
|
+
When /^I search for the button by "([^\"]*)"$/ do |how|
|
6
|
+
@how = how
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I search for the button by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
|
10
|
+
@how = "#{param1}_#{param2}"
|
11
|
+
end
|
12
|
+
|
13
|
+
Then /^I should be able to click the button$/ do
|
14
|
+
@page.send "button_#{@how}"
|
15
|
+
end
|
16
|
+
|
17
|
+
When /^I find a button while the script is executing$/ do
|
18
|
+
@button = @page.button_element(:id => 'button_id')
|
19
|
+
end
|
20
|
+
|
21
|
+
Then /^I should be able to click the button element$/ do
|
22
|
+
@button.click
|
23
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
When /^I select the First check box$/ do
|
2
|
+
@page.check_cb_id
|
3
|
+
end
|
4
|
+
|
5
|
+
Then /^the First check box should be selected$/ do
|
6
|
+
@page.cb_id_checked?.should be_true
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I unselect the First check box$/ do
|
10
|
+
@page.uncheck_cb_id
|
11
|
+
end
|
12
|
+
|
13
|
+
Then /^the First check box should not be selected$/ do
|
14
|
+
@page.cb_id_checked?.should be_false
|
15
|
+
end
|
16
|
+
|
17
|
+
When /^I search for the check box by "([^\"]*)"$/ do |how|
|
18
|
+
@how = how
|
19
|
+
end
|
20
|
+
|
21
|
+
When /^I search for the check box by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
|
22
|
+
@how = "#{param1}_#{param2}"
|
23
|
+
end
|
24
|
+
|
25
|
+
Then /^I should be able to check the check box$/ do
|
26
|
+
@page.send "check_cb_#{@how}".to_sym
|
27
|
+
end
|
28
|
+
|
29
|
+
When /^I select the first check box while the script is executing$/ do
|
30
|
+
@page.checkbox_element(:id => 'cb_id').check
|
31
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
When /^I get the text from the div$/ do
|
2
|
+
@text = @page.div_id
|
3
|
+
end
|
4
|
+
|
5
|
+
When /^I search for the div by "([^\"]*)"$/ do |how|
|
6
|
+
@text = @page.send "div_#{how}".to_sym
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I search for the div by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
|
10
|
+
@text = @page.send "div_#{param1}_#{param2}".to_sym
|
11
|
+
end
|
12
|
+
|
13
|
+
When /^I get the text from a div while the script is executing$/ do
|
14
|
+
@text = @page.div_element(:id => 'div_id').text
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
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
|
@@ -0,0 +1,23 @@
|
|
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 /^hidden field element should contains "([^\"]*)"$/ 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
|
@@ -0,0 +1,23 @@
|
|
1
|
+
When /^I get the image element$/ do
|
2
|
+
@element = @page.image_id_image
|
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
|
@@ -0,0 +1,20 @@
|
|
1
|
+
When /^I select the link labeled "([^\"]*)"$/ do |text|
|
2
|
+
@page.google_search_id
|
3
|
+
end
|
4
|
+
|
5
|
+
When /^I search for the link by "([^\"]*)"$/ do |how|
|
6
|
+
@how = how
|
7
|
+
end
|
8
|
+
|
9
|
+
Then /^I should be able to select the link$/ do
|
10
|
+
@page.send "google_search_#{@how}".to_sym
|
11
|
+
end
|
12
|
+
|
13
|
+
When /^I select a link labeled "([^"]*)" and index "([^"]*)"$/ do |label, index|
|
14
|
+
@page.send "#{label.downcase}#{index}".to_sym
|
15
|
+
end
|
16
|
+
|
17
|
+
When /^I select a link while the script is executing$/ do
|
18
|
+
link = @page.link_element(:id => 'link_id')
|
19
|
+
link.click
|
20
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
When /^I get the text from the list item$/ do
|
2
|
+
@text = @page.li_id
|
3
|
+
end
|
4
|
+
|
5
|
+
When /^I search for the list item by "([^\"]*)"$/ do |how|
|
6
|
+
@text = @page.send "li_#{how}"
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I search for the list item by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
|
10
|
+
@text = @page.send "li_#{param1}_#{param2}"
|
11
|
+
end
|
12
|
+
|
13
|
+
When /^I search for the list item while the script is executing$/ do
|
14
|
+
@text = @page.list_item_element(:id => 'li_id').text
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
When /^I get the first item from the ordered list$/ do
|
2
|
+
@element = @page.ol_id_element[0]
|
3
|
+
end
|
4
|
+
|
5
|
+
When /^I search for the ordered list by "([^\"]*)"$/ do |how|
|
6
|
+
@list = @page.send "ol_#{how}_element"
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I search for the ordered list by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
|
10
|
+
@list = @page.send "ol_#{param1}_#{param2}_element"
|
11
|
+
end
|
12
|
+
|
13
|
+
When /^I search for the ordered list while the script is executing$/ do
|
14
|
+
@list = @page.ordered_list_element(:id => 'ol_id')
|
15
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
When /^I select the "([^\"]*)" radio button$/ do |how|
|
2
|
+
@page.send "select_#{how.downcase}_id".to_sym
|
3
|
+
end
|
4
|
+
|
5
|
+
Then /^the "([^\"]*)" radio button should be selected$/ do |how|
|
6
|
+
@page.send "#{how.downcase}_id_selected?".to_sym
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I search for the radio button by "([^\"]*)"$/ do |how|
|
10
|
+
@how = how
|
11
|
+
end
|
12
|
+
|
13
|
+
When /^I search for the radio button by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
|
14
|
+
@how = "#{param1}_#{param2}"
|
15
|
+
end
|
16
|
+
|
17
|
+
When /^I select the radio button$/ do
|
18
|
+
@page.send "select_milk_#{@how}".to_sym
|
19
|
+
end
|
20
|
+
|
21
|
+
When /^I select the radio button while the script is executing$/ do
|
22
|
+
@page.radio_button_element(:id => 'milk_id').select
|
23
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
When /^I select "([^\"]*)" from the select list$/ do |text|
|
2
|
+
@page.sel_list_id = text
|
3
|
+
end
|
4
|
+
|
5
|
+
When /^I search for the select list by "([^\"]*)"$/ do |how|
|
6
|
+
@how = how
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I search for the select list by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
|
10
|
+
@how = "#{param1}_#{param2}"
|
11
|
+
end
|
12
|
+
|
13
|
+
Then /^I should be able to select "([^\"]*)"$/ do |value|
|
14
|
+
@page.send "sel_list_#{@how}=".to_sym, value
|
15
|
+
end
|
16
|
+
|
17
|
+
Then /^the value for the selected item should be "([^\"]*)"$/ do |value|
|
18
|
+
result = @page.send "sel_list_#{@how}".to_sym
|
19
|
+
result.should == value
|
20
|
+
end
|
21
|
+
|
22
|
+
When /^I find a select list while the script is executing$/ do
|
23
|
+
@select_list = @page.select_list_element(:id => 'sel_list_id')
|
24
|
+
end
|
25
|
+
|
26
|
+
Then /^I should be able to select "([^"]*)" from the list$/ do |value|
|
27
|
+
@select_list.select(value)
|
28
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
When /^I get the text from the span$/ do
|
2
|
+
@text = @page.span_id
|
3
|
+
end
|
4
|
+
|
5
|
+
When /^I search for the span by "([^\"]*)"$/ do |how|
|
6
|
+
@text = @page.send "span_#{how}".to_sym
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I search for the span by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
|
10
|
+
@text = @page.send "span_#{param1}_#{param2}".to_sym
|
11
|
+
end
|
12
|
+
|
13
|
+
When /^I get the text from a span while the script is executing$/ do
|
14
|
+
@text = @page.span_element(:id => 'span_id').text
|
15
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
When /^I search for the table cell by "([^\"]*)"$/ do |how|
|
2
|
+
@cell_data = @page.send "cell_#{how}"
|
3
|
+
end
|
4
|
+
|
5
|
+
When /^I retrieve a table cell element by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
|
6
|
+
@cell_data = @page.send "cell_#{param1}_#{param2}"
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I retrieve a table cell element while the script is executing$/ do
|
10
|
+
@cell_data = @page.cell_element(:id => 'cell_id').text
|
11
|
+
end
|
@@ -12,3 +12,15 @@ end
|
|
12
12
|
Then /^the cell data should be '([^"]*)'$/ do |expected|
|
13
13
|
@cell_data.should == expected
|
14
14
|
end
|
15
|
+
|
16
|
+
When /^I retrieve a table element by "([^\"]*)"$/ do |how|
|
17
|
+
@element = @page.send "table_#{how}_element"
|
18
|
+
end
|
19
|
+
|
20
|
+
When /^I retrieve a table element by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
|
21
|
+
@element = @page.send "table_#{param1}_#{param2}_element"
|
22
|
+
end
|
23
|
+
|
24
|
+
When /^I retrieve a table element while the script is executing$/ do
|
25
|
+
@element = @page.table_element(:id => 'table_id')
|
26
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
When /^I type "([^\"]*)" into the text area$/ do |text|
|
2
|
+
@page.text_area_id = text
|
3
|
+
end
|
4
|
+
|
5
|
+
Then /^the text area should contain "([^\"]*)"$/ do |expected_text|
|
6
|
+
@page.text_area_id.should == expected_text
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I search for the text area by "([^\"]*)"$/ do |how|
|
10
|
+
@how = how
|
11
|
+
end
|
12
|
+
|
13
|
+
When /^I search for the text area by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
|
14
|
+
@how = "#{param1}_#{param2}"
|
15
|
+
end
|
16
|
+
|
17
|
+
Then /^I should be able to type "([^\"]*)" into the area$/ do |value|
|
18
|
+
@page.send "text_area_#{@how}=".to_sym, value
|
19
|
+
end
|
20
|
+
|
21
|
+
When /^I find a text area while the script is executing$/ do
|
22
|
+
@text_area = @page.text_area_element(:id => 'text_area_id')
|
23
|
+
end
|
24
|
+
|
25
|
+
Then /^I should be able to type "([^"]*)" into the area element$/ do |value|
|
26
|
+
@text_area.value = value
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
When /^I type "([^\"]*)" into the text field$/ do |text|
|
2
|
+
@page.text_field_id = text
|
3
|
+
end
|
4
|
+
|
5
|
+
Then /^the text field should contain "([^\"]*)"$/ do |expected_text|
|
6
|
+
@page.text_field_id.should == expected_text
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I search for the text field by "([^\"]*)"$/ do |how|
|
10
|
+
@how = how
|
11
|
+
end
|
12
|
+
|
13
|
+
When /^I search for the text field by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
|
14
|
+
@how = "#{param1}_#{param2}"
|
15
|
+
end
|
16
|
+
|
17
|
+
Then /^I should be able to type "([^\"]*)" into the field$/ do |value|
|
18
|
+
@page.send "text_field_#{@how}=".to_sym, value
|
19
|
+
end
|
20
|
+
|
21
|
+
When /^I find a text field while the script is executing$/ do
|
22
|
+
@text_field = @page.text_field_element(:id => 'text_field_id')
|
23
|
+
end
|
24
|
+
|
25
|
+
Then /^I should be able to type "([^"]*)" into the field element$/ do |value|
|
26
|
+
@text_field.value = value
|
27
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
When /^I get the first item from the unordered list$/ do
|
2
|
+
@element = @page.ul_id_element[0]
|
3
|
+
end
|
4
|
+
|
5
|
+
When /^I search for the unordered list by "([^\"]*)"$/ do |how|
|
6
|
+
@list = @page.send "ul_#{how}_element"
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I search for the unordered list by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
|
10
|
+
@list = @page.send "ul_#{param1}_#{param2}_element"
|
11
|
+
end
|
12
|
+
|
13
|
+
When /^I search for the unordered list while the script is executing$/ do
|
14
|
+
@list = @page.unordered_list_element(:id => 'ul_id')
|
15
|
+
end
|
16
|
+
|
data/features/table.feature
CHANGED
data/features/table_cell.feature
CHANGED
data/features/text_area.feature
CHANGED
data/features/text_field.feature
CHANGED
@@ -37,3 +37,7 @@ Feature: Text Fields
|
|
37
37
|
When I retrieve a text field
|
38
38
|
Then I should know it exists
|
39
39
|
And I should know it is visible
|
40
|
+
|
41
|
+
Scenario: Finding a text field dynamically
|
42
|
+
When I find a text field while the script is executing
|
43
|
+
Then I should be able to type "I found it" into the field element
|
@@ -31,3 +31,8 @@ Feature: Unordered list
|
|
31
31
|
| param1 | param2 |
|
32
32
|
| class | index |
|
33
33
|
| name | index |
|
34
|
+
|
35
|
+
Scenario: Finding a unordered list dynamically
|
36
|
+
When I search for the unordered list while the script is executing
|
37
|
+
And I get the first item from the list
|
38
|
+
Then the list items text should be "Item One"
|
data/lib/page-object.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'page-object/version'
|
2
2
|
require 'page-object/accessors'
|
3
3
|
require 'page-object/platforms'
|
4
|
+
require 'page-object/element_locators'
|
4
5
|
|
5
6
|
#
|
6
7
|
# Module that when included adds functionality to a page object. This module
|
@@ -32,6 +33,8 @@ require 'page-object/platforms'
|
|
32
33
|
#
|
33
34
|
module PageObject
|
34
35
|
include LoadsPlatform
|
36
|
+
include ElementLocators
|
37
|
+
|
35
38
|
# @return [Watir::Browser or Selenium::WebDriver::Driver] the platform browser passed to the constructor
|
36
39
|
attr_reader :browser
|
37
40
|
# @return [PageObject::WatirPageObject or PageObject::SeleniumPageObject] the platform page object
|
@@ -160,13 +163,15 @@ module PageObject
|
|
160
163
|
#
|
161
164
|
# @param [Hash] either :title or :url of the other window. The url does not need to
|
162
165
|
# be the entire url - it can just be the page name like index.html
|
166
|
+
# @param block if present the block is executed and then execution is returned to the
|
167
|
+
# calling window
|
163
168
|
#
|
164
|
-
def attach_to_window(identifier)
|
169
|
+
def attach_to_window(identifier, &block)
|
165
170
|
begin
|
166
|
-
platform.attach_to_window(identifier)
|
171
|
+
platform.attach_to_window(identifier, &block)
|
167
172
|
rescue
|
168
173
|
sleep 1
|
169
|
-
platform.attach_to_window(identifier)
|
174
|
+
platform.attach_to_window(identifier, &block)
|
170
175
|
end
|
171
176
|
end
|
172
177
|
|