page-object 0.2 → 0.2.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.
Files changed (134) hide show
  1. data/.gitignore +1 -0
  2. data/.rvmrc +1 -1
  3. data/ChangeLog +12 -6
  4. data/README.md +1 -1
  5. data/Rakefile +3 -19
  6. data/features/async.feature +8 -8
  7. data/features/button.feature +7 -7
  8. data/features/check_box.feature +8 -8
  9. data/features/div.feature +7 -6
  10. data/features/element_attributes.feature +14 -14
  11. data/features/form.feature +5 -5
  12. data/features/frames.feature +12 -0
  13. data/features/hidden_field.feature +5 -5
  14. data/features/html/frame_1.html +18 -0
  15. data/features/html/frame_2.html +16 -0
  16. data/features/html/frames.html +11 -0
  17. data/features/html/iframes.html +12 -0
  18. data/features/html/static_elements.html +50 -42
  19. data/features/html/success.html +5 -5
  20. data/features/image.feature +11 -11
  21. data/features/link.feature +1 -1
  22. data/features/list_item.feature +5 -5
  23. data/features/ordered_list.feature +6 -6
  24. data/features/page_level_actions.feature +16 -5
  25. data/features/radio_button.feature +12 -12
  26. data/features/select_list.feature +12 -12
  27. data/features/span.feature +5 -5
  28. data/features/step_definitions/accessor_steps.rb +2 -2
  29. data/features/step_definitions/async_steps.rb +1 -1
  30. data/features/step_definitions/element_steps.rb +1 -1
  31. data/features/step_definitions/frames_steps.rb +21 -0
  32. data/features/step_definitions/page_level_actions_steps.rb +24 -2
  33. data/features/step_definitions/page_traversal_steps.rb +0 -1
  34. data/features/support/env.rb +20 -6
  35. data/features/support/page.rb +14 -11
  36. data/features/support/url_helper.rb +4 -0
  37. data/features/table.feature +9 -9
  38. data/features/table_cell.feature +6 -6
  39. data/features/text_area.feature +6 -6
  40. data/features/text_field.feature +7 -7
  41. data/features/unordered_list.feature +6 -6
  42. data/lib/page-object.rb +40 -16
  43. data/lib/page-object/accessors.rb +15 -15
  44. data/lib/page-object/elements.rb +0 -1
  45. data/lib/page-object/elements/button.rb +24 -24
  46. data/lib/page-object/elements/div.rb +8 -3
  47. data/lib/page-object/elements/element.rb +27 -28
  48. data/lib/page-object/elements/form.rb +7 -7
  49. data/lib/page-object/elements/hidden_field.rb +5 -5
  50. data/lib/page-object/elements/image.rb +8 -8
  51. data/lib/page-object/elements/link.rb +9 -9
  52. data/lib/page-object/elements/list_item.rb +1 -1
  53. data/lib/page-object/elements/option.rb +1 -1
  54. data/lib/page-object/elements/ordered_list.rb +13 -13
  55. data/lib/page-object/elements/select_list.rb +6 -6
  56. data/lib/page-object/elements/span.rb +2 -2
  57. data/lib/page-object/elements/table.rb +11 -11
  58. data/lib/page-object/elements/table_row.rb +9 -9
  59. data/lib/page-object/elements/text_area.rb +4 -4
  60. data/lib/page-object/elements/text_field.rb +4 -4
  61. data/lib/page-object/elements/unordered_list.rb +13 -13
  62. data/lib/page-object/loads_platform.rb +24 -0
  63. data/lib/page-object/page_factory.rb +3 -3
  64. data/lib/page-object/platforms.rb +18 -0
  65. data/lib/page-object/platforms/selenium.rb +16 -0
  66. data/lib/page-object/platforms/selenium/button.rb +15 -0
  67. data/lib/page-object/platforms/selenium/element.rb +168 -0
  68. data/lib/page-object/platforms/selenium/form.rb +16 -0
  69. data/lib/page-object/platforms/selenium/image.rb +28 -0
  70. data/lib/page-object/platforms/selenium/link.rb +16 -0
  71. data/lib/page-object/platforms/selenium/ordered_list.rb +33 -0
  72. data/lib/page-object/platforms/selenium/page_object.rb +524 -0
  73. data/lib/page-object/platforms/selenium/select_list.rb +32 -0
  74. data/lib/page-object/platforms/selenium/table.rb +40 -0
  75. data/lib/page-object/platforms/selenium/table_row.rb +32 -0
  76. data/lib/page-object/platforms/selenium/unordered_list.rb +33 -0
  77. data/lib/page-object/platforms/watir.rb +16 -0
  78. data/lib/page-object/platforms/watir/element.rb +154 -0
  79. data/lib/page-object/platforms/watir/form.rb +16 -0
  80. data/lib/page-object/platforms/watir/image.rb +22 -0
  81. data/lib/page-object/platforms/watir/ordered_list.rb +32 -0
  82. data/lib/page-object/{watir_page_object.rb → platforms/watir/page_object.rb} +62 -35
  83. data/lib/page-object/platforms/watir/select_list.rb +33 -0
  84. data/lib/page-object/platforms/watir/table.rb +27 -0
  85. data/lib/page-object/platforms/watir/table_row.rb +24 -0
  86. data/lib/page-object/platforms/watir/unordered_list.rb +33 -0
  87. data/lib/page-object/version.rb +1 -1
  88. data/page-object.gemspec +13 -13
  89. data/spec/page-object/accessors_spec.rb +142 -108
  90. data/spec/page-object/elements/button_spec.rb +33 -33
  91. data/spec/page-object/elements/check_box_spec.rb +1 -1
  92. data/spec/page-object/elements/div_spec.rb +3 -3
  93. data/spec/page-object/elements/element_spec.rb +51 -41
  94. data/spec/page-object/elements/form_spec.rb +3 -3
  95. data/spec/page-object/elements/hidden_field_spec.rb +3 -3
  96. data/spec/page-object/elements/image_spec.rb +7 -7
  97. data/spec/page-object/elements/link_spec.rb +8 -8
  98. data/spec/page-object/elements/list_item_spec.rb +1 -1
  99. data/spec/page-object/elements/ordered_list_spec.rb +9 -9
  100. data/spec/page-object/elements/radio_button_spec.rb +1 -1
  101. data/spec/page-object/elements/select_list_spec.rb +2 -2
  102. data/spec/page-object/elements/span_spec.rb +1 -1
  103. data/spec/page-object/elements/table_row_spec.rb +6 -6
  104. data/spec/page-object/elements/table_spec.rb +9 -9
  105. data/spec/page-object/elements/text_area_spec.rb +3 -3
  106. data/spec/page-object/elements/text_field_spec.rb +3 -3
  107. data/spec/page-object/elements/unordered_list_spec.rb +10 -10
  108. data/spec/page-object/loads_platform_spec.rb +38 -0
  109. data/spec/page-object/page-object_spec.rb +70 -10
  110. data/spec/page-object/page_factory_spec.rb +3 -3
  111. data/spec/page-object/{selenium_page_object_spec.rb → platforms/selenium/selenium_page_object_spec.rb} +10 -3
  112. data/spec/page-object/platforms/selenium_spec.rb +26 -0
  113. data/spec/page-object/platforms/watir_spec.rb +27 -0
  114. data/spec/spec_helper.rb +18 -5
  115. metadata +48 -26
  116. data/lib/page-object/platforms/selenium_button.rb +0 -13
  117. data/lib/page-object/platforms/selenium_element.rb +0 -142
  118. data/lib/page-object/platforms/selenium_form.rb +0 -14
  119. data/lib/page-object/platforms/selenium_image.rb +0 -26
  120. data/lib/page-object/platforms/selenium_link.rb +0 -13
  121. data/lib/page-object/platforms/selenium_ordered_list.rb +0 -31
  122. data/lib/page-object/platforms/selenium_select_list.rb +0 -29
  123. data/lib/page-object/platforms/selenium_table.rb +0 -38
  124. data/lib/page-object/platforms/selenium_table_row.rb +0 -29
  125. data/lib/page-object/platforms/selenium_unordered_list.rb +0 -31
  126. data/lib/page-object/platforms/watir_element.rb +0 -136
  127. data/lib/page-object/platforms/watir_form.rb +0 -14
  128. data/lib/page-object/platforms/watir_image.rb +0 -20
  129. data/lib/page-object/platforms/watir_ordered_list.rb +0 -30
  130. data/lib/page-object/platforms/watir_select_list.rb +0 -30
  131. data/lib/page-object/platforms/watir_table.rb +0 -24
  132. data/lib/page-object/platforms/watir_table_row.rb +0 -22
  133. data/lib/page-object/platforms/watir_unordered_list.rb +0 -31
  134. data/lib/page-object/selenium_page_object.rb +0 -486
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
3
+ <head>
4
+ <title>Frames</title>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ </head>
7
+ <frameset cols="50%, 50%">
8
+ <frame src="frame_1.html" id="frame_1" name="frame1" class="half" />
9
+ <frame src="frame_2.html" id="frame_2" name="frame2" class="half" />
10
+ </frameset>
11
+ </html>
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
3
+ <head>
4
+ <title>Iframes</title>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ </head>
7
+ <body>
8
+ <h1>Iframes</h1>
9
+ <iframe src="frame_1.html" id="frame_1" name="frame1" class="iframe"></iframe>
10
+ <iframe src="frame_2.html" id="frame_2" name="frame2" class="iframe"></iframe>
11
+ </body>
12
+ </html>
@@ -1,94 +1,102 @@
1
- <html>
2
- <head>
1
+ html>
2
+ <head>
3
3
  <title>Static Elements Page</title>
4
- </head>
4
+ </head>
5
5
  <body>
6
6
  <h2>Static Elements Page</h2>
7
-
7
+
8
8
 
9
9
  <h3>Text Field</h3>
10
- <input id="text_field_id" name="text_field_name" class="text_field_class"
11
- size="40" type="text" />
10
+ <input id="text_field_id" name="text_field_name" class="text_field_class"
11
+ size="40" type="text"/>
12
12
 
13
13
  <h3>Hidden Field</h3>
14
- <input id="hidden_field_id" name="hidden_field_name" class="hidden_field_class"
15
- size="40" type="hidden" value="12345" />
16
-
14
+ <input id="hidden_field_id" name="hidden_field_name" class="hidden_field_class"
15
+ size="40" type="hidden" value="12345"/>
16
+
17
17
  <h3>Text Area</h3>
18
18
  <textarea rows="2" cols="20" id="text_area_id" class="text_area_class" name="text_area_name"></textarea>
19
19
 
20
20
  <h3>Select List</h3>
21
21
  <select name="sel_list_name" id="sel_list_id", class="sel_list_class">
22
- <option value="option1">Test 1</option>
23
- <option value="option2">Test 2</option>
22
+ <option value="option1">Test 1</option>
23
+ <option value="option2">Test 2</option>
24
24
  </select>
25
25
 
26
26
 
27
27
  <h3>Link</h3>
28
- <a href="success.html" id="link_id" name="link_name" class="link_class" >Google Search</a>
29
-
28
+ <a href="success.html" id="link_id" name="link_name" class="link_class">Google Search</a>
29
+
30
30
  <h3>Check Boxes</h3>
31
- <input id="cb_id" name="cb_name" class="cb_class" type="checkbox" value="1" />
32
-
31
+ <input id="cb_id" name="cb_name" class="cb_class" type="checkbox" value="1"/>
32
+
33
33
  <h3>Radio Buttons</h3>
34
- <input type="radio" id="milk_id" name="milk_name" class="milk_class" value="Milk"> Milk <br />
34
+ <input type="radio" id="milk_id" name="milk_name" class="milk_class" value="Milk"> Milk <br/>
35
35
  <input type="radio" id="butter_id" name="butter_name" class="butter_class" value="Butter">Butter
36
-
36
+
37
37
  <h3>Div</h3>
38
+
38
39
  <div id="div_id" name="div_name" class="div_class">
39
- page-object rocks!
40
+ page-object rocks!
40
41
  </div>
41
-
42
+
42
43
  <h3>Span</h3>
43
- <span id="span_id" name="span_name" class="span_class">
44
- My alert
45
- </span>
46
-
44
+ <span id="span_id" name="span_name" class="span_class">
45
+ My alert
46
+ </span>
47
+
47
48
  <h3>Table</h3>
48
49
  <table id='table_id' name='table_name' class='table_class' border='1'>
49
- <tr>
50
- <td>Data1</td><td>Data2</td>
51
- </tr>
52
- <tr>
53
- <td>Data3</td><td id='cell_id', name='cell_name' class='cell_class'>Data4</td>
54
- </tr>
50
+ <tr>
51
+ <td>Data1</td>
52
+ <td>Data2</td>
53
+ </tr>
54
+ <tr>
55
+ <td>Data3</td>
56
+ <td id='cell_id'
57
+ , name='cell_name' class='cell_class'>Data4</td>
58
+ </tr>
55
59
  </table>
56
-
60
+
57
61
  <h3>Button</h3>
62
+
58
63
  <form method="get" action="success.html">
59
- <input id='button_id' name='button_name' class='button_class' type="submit" value="Click Me">
64
+ <input id='button_id' name='button_name' class='button_class' type="submit" value="Click Me">
60
65
  </form>
61
-
66
+
62
67
  <h3>Image</h3>
63
68
  <img src="images/circle.png" id="image_id" name="image_name" class="image_class">
64
-
69
+
65
70
  <h3>Form</h3>
71
+
66
72
  <form id="form_id" class="form_class" name="form_name" action="/">
67
73
  </form>
68
-
74
+
69
75
  <h3>Unordered List</h3>
70
76
  <ul id="ul_id" name="ul_name" class="ul_class">
71
- <li id="li_id" name="li_name" class="li_class">Item One</li>
72
- <li>Item Two</li>
73
- <li>Item Three</li>
77
+ <li id="li_id" name="li_name" class="li_class">Item One</li>
78
+ <li>Item Two</li>
79
+ <li>Item Three</li>
74
80
  </ul>
75
-
81
+
76
82
  <h3>Ordered List</h3>
77
83
  <ol id="ol_id" name="ol_name" class="ol_class">
78
- <li>Number One</li>
79
- <li>Number Two</li>
80
- <li>Number Three</li>
84
+ <li>Number One</li>
85
+ <li>Number Two</li>
86
+ <li>Number Three</li>
81
87
  </ol>
82
88
 
83
89
  <h3>Links for multi select</h3>
84
90
  <a href="success.html">Hello</a>
85
91
  <a href="success.html">Hello</a>
86
92
  <a href="success.html">Hello</a>
87
-
93
+
88
94
  <h3>Alerts / Confirms / Prompts</h3>
89
95
  <input id=alert_button type=button onclick="alert('I am an alert')" value=Alert>
90
96
  <input id=confirm_button type=button onclick="this.value = confirm('set the value')" value=Confirm>
91
97
  <input id=prompt_button type=button onclick='this.value = prompt("enter your name", "John Doe")' value=Prompt>
98
+ <h3>New Window</h3>
99
+ <a href="success.html" target="_blank">New Window</a>
92
100
  </body>
93
101
  </html>
94
102
 
@@ -1,8 +1,8 @@
1
1
  <html>
2
- <head>
2
+ <head>
3
3
  <title>Success</title>
4
- </head>
5
- <body>
6
- <h1>Success</h1>
7
- </body>
4
+ </head>
5
+ <body>
6
+ <h1>Success</h1>
7
+ </body>
8
8
  </html>
@@ -2,7 +2,7 @@ Feature: Image
2
2
 
3
3
  Background:
4
4
  Given I am on the static elements page
5
-
5
+
6
6
  Scenario: Getting the image element
7
7
  When I get the image element
8
8
  Then the image should be "106" pixels wide
@@ -13,13 +13,13 @@ Feature: Image
13
13
  Then the image should be "106" pixels wide
14
14
  And the image should be "106" pixels tall
15
15
 
16
- Scenarios:
17
- | search_by |
18
- | id |
19
- | class |
20
- | name |
21
- | xpath |
22
- | index |
16
+ Scenarios:
17
+ | search_by |
18
+ | id |
19
+ | class |
20
+ | name |
21
+ | xpath |
22
+ | index |
23
23
 
24
24
  Scenario Outline: Locating an image using multiple parameters
25
25
  When I get the image element by "<param1>" and "<param2>"
@@ -27,6 +27,6 @@ Feature: Image
27
27
  And the image should be "106" pixels tall
28
28
 
29
29
  Scenarios:
30
- | param1 | param2 |
31
- | class | index |
32
- | name | index |
30
+ | param1 | param2 |
31
+ | class | index |
32
+ | name | index |
@@ -4,7 +4,7 @@ Feature: Links
4
4
 
5
5
  Background:
6
6
  Given I am on the static elements page
7
-
7
+
8
8
  Scenario: Selecting a link
9
9
  When I select the link labeled "Google Search"
10
10
  Then the page should contain the text "Success"
@@ -2,7 +2,7 @@ Feature: List item
2
2
 
3
3
  Background:
4
4
  Given I am on the static elements page
5
-
5
+
6
6
  Scenario: Getting the text from a list item
7
7
  When I get the text from the list item
8
8
  Then the text should be "Item One"
@@ -15,7 +15,7 @@ Feature: List item
15
15
  | search_by |
16
16
  | id |
17
17
  | class |
18
- | xpath |
18
+ | xpath |
19
19
  | index |
20
20
  | name |
21
21
 
@@ -24,6 +24,6 @@ Feature: List item
24
24
  Then the text should be "Item One"
25
25
 
26
26
  Scenarios:
27
- | param1 | param2 |
28
- | class | index |
29
- | name | index |
27
+ | param1 | param2 |
28
+ | class | index |
29
+ | name | index |
@@ -2,7 +2,7 @@ Feature: Ordered list
2
2
 
3
3
  Background:
4
4
  Given I am on the static elements page
5
-
5
+
6
6
  Scenario: Getting the first element from the ordered list
7
7
  When I get the first item from the ordered list
8
8
  Then the list items text should be "Number One"
@@ -13,12 +13,12 @@ Feature: Ordered list
13
13
  Then the list items text should be "Number One"
14
14
  And the list should contain 3 items
15
15
  And each item should contain "Number"
16
-
16
+
17
17
  Scenarios:
18
18
  | search_by |
19
19
  | id |
20
20
  | class |
21
- | xpath |
21
+ | xpath |
22
22
  | index |
23
23
  | name |
24
24
 
@@ -28,6 +28,6 @@ Feature: Ordered list
28
28
  Then the list items text should be "Number One"
29
29
 
30
30
  Scenarios:
31
- | param1 | param2 |
32
- | class | index |
33
- | name | index |
31
+ | param1 | param2 |
32
+ | class | index |
33
+ | name | index |
@@ -14,18 +14,29 @@ Feature: Page level actions
14
14
 
15
15
  Scenario: Getting the title from a web page
16
16
  Then the page should have the title "Static Elements Page"
17
-
17
+
18
18
  Scenario: Waiting for something
19
19
  Then I should be able to wait for a block to return true
20
-
20
+
21
21
  Scenario: Handling alert popups
22
- When I handle the alert
22
+ When I handle the alert
23
23
  Then I should be able to get the alert's message
24
-
24
+
25
25
  Scenario: Handling confirm popups
26
26
  When I handle the confirm
27
27
  Then I should be able to get the confirm message
28
-
28
+
29
29
  Scenario: Handling prompt popups
30
30
  When I handle the prompt
31
31
  Then I should be able to get the message and default value
32
+
33
+ Scenario: Attach to window using title
34
+ When I open a second window
35
+ Then I should be able to attach to a page object using title
36
+
37
+ Scenario: Attach to window using url
38
+ When I open a second window
39
+ Then I should be able to attach to a page object using url
40
+
41
+ Scenario: Refreshing the page
42
+ Then I should be able to refresh the page
@@ -2,10 +2,10 @@ Feature: Radio Buttons
2
2
  In order to interact with radio buttons
3
3
  Testers will need access and interrogation ability
4
4
 
5
-
5
+
6
6
  Background:
7
7
  Given I am on the static elements page
8
-
8
+
9
9
  Scenario: Selecting and clearing a radio button
10
10
  When I select the "Milk" radio button
11
11
  Then the "Milk" radio button should be selected
@@ -17,13 +17,13 @@ Feature: Radio Buttons
17
17
  And I select the radio button
18
18
  Then the "Milk" radio button should be selected
19
19
 
20
- Scenarios:
21
- | search_by |
22
- | id |
23
- | class |
24
- | name |
25
- | xpath |
26
- | index |
20
+ Scenarios:
21
+ | search_by |
22
+ | id |
23
+ | class |
24
+ | name |
25
+ | xpath |
26
+ | index |
27
27
 
28
28
  Scenario Outline: Locating radio buttons using multiple parameters
29
29
  When I search for the radio button by "<param1>" and "<param2>"
@@ -31,9 +31,9 @@ Feature: Radio Buttons
31
31
  Then the "Milk" radio button should be selected
32
32
 
33
33
  Scenarios:
34
- | param1 | param2 |
35
- | class | index |
36
- | name | index |
34
+ | param1 | param2 |
35
+ | class | index |
36
+ | name | index |
37
37
 
38
38
  Scenario: Retrieve a radio button
39
39
  When I retrieve a radio button
@@ -2,10 +2,10 @@ Feature: Select List
2
2
  In order to interact with select lists
3
3
  Testers will need access and interrogation ability
4
4
 
5
-
5
+
6
6
  Background:
7
7
  Given I am on the static elements page
8
-
8
+
9
9
  Scenario: Selecting an element on the select list
10
10
  When I select "Test 2" from the select list
11
11
  Then the current item should be "option2"
@@ -15,13 +15,13 @@ Feature: Select List
15
15
  Then I should be able to select "Test 2"
16
16
  And the value for the selected item should be "option2"
17
17
 
18
- Scenarios:
19
- | search_by |
20
- | id |
21
- | class |
22
- | name |
23
- | xpath |
24
- | index |
18
+ Scenarios:
19
+ | search_by |
20
+ | id |
21
+ | class |
22
+ | name |
23
+ | xpath |
24
+ | index |
25
25
 
26
26
  Scenario Outline: Locating a hidden field using multiple parameters
27
27
  When I search for the select list by "<param1>" and "<param2>"
@@ -29,9 +29,9 @@ Feature: Select List
29
29
  And the value for the selected item should be "option2"
30
30
 
31
31
  Scenarios:
32
- | param1 | param2 |
33
- | class | index |
34
- | name | index |
32
+ | param1 | param2 |
33
+ | class | index |
34
+ | name | index |
35
35
 
36
36
  Scenario: Iterating through the options in the select list
37
37
  When I search for the select list by "id"
@@ -2,7 +2,7 @@ Feature: Span
2
2
 
3
3
  Background:
4
4
  Given I am on the static elements page
5
-
5
+
6
6
  Scenario: Getting the text from a span
7
7
  When I get the text from the span
8
8
  Then the text should be "My alert"
@@ -15,7 +15,7 @@ Feature: Span
15
15
  | search_by |
16
16
  | id |
17
17
  | class |
18
- | xpath |
18
+ | xpath |
19
19
  | index |
20
20
  | name |
21
21
 
@@ -24,6 +24,6 @@ Feature: Span
24
24
  Then the text should be "My alert"
25
25
 
26
26
  Scenarios:
27
- | param1 | param2 |
28
- | class | index |
29
- | name | index |
27
+ | param1 | param2 |
28
+ | class | index |
29
+ | name | index |