page-object 0.2 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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 |