page-object 0.2.5 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +25 -0
- data/Rakefile +3 -3
- data/features/element.feature +232 -1
- data/features/frames.feature +1 -1
- 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/nested_elements.html +42 -0
- data/features/html/static_elements.html +1 -0
- data/features/modal_dialog.feature +15 -0
- data/features/nested_elements.feature +73 -0
- data/features/step_definitions/frames_steps.rb +1 -1
- data/features/step_definitions/modal_dialog_steps.rb +62 -0
- data/features/step_definitions/nested_elements_steps.rb +165 -0
- data/features/support/page.rb +1 -0
- data/features/support/url_helper.rb +8 -0
- data/lib/page-object.rb +26 -0
- data/lib/page-object/accessors.rb +36 -36
- data/lib/page-object/elements/button.rb +3 -3
- data/lib/page-object/elements/check_box.rb +7 -7
- data/lib/page-object/elements/element.rb +16 -10
- data/lib/page-object/elements/form.rb +7 -7
- data/lib/page-object/elements/image.rb +7 -7
- data/lib/page-object/elements/link.rb +3 -3
- data/lib/page-object/elements/ordered_list.rb +7 -7
- data/lib/page-object/elements/radio_button.rb +7 -7
- data/lib/page-object/elements/select_list.rb +7 -7
- data/lib/page-object/elements/table.rb +7 -7
- data/lib/page-object/elements/table_row.rb +7 -7
- data/lib/page-object/elements/text_area.rb +7 -7
- data/lib/page-object/elements/text_field.rb +7 -7
- data/lib/page-object/elements/unordered_list.rb +7 -7
- data/lib/page-object/nested_elements.rb +72 -0
- data/lib/page-object/platforms.rb +2 -2
- data/lib/page-object/platforms/selenium_webdriver.rb +17 -0
- data/lib/page-object/platforms/{selenium → selenium_webdriver}/button.rb +1 -1
- data/lib/page-object/platforms/{selenium → selenium_webdriver}/check_box.rb +1 -1
- data/lib/page-object/platforms/{selenium → selenium_webdriver}/element.rb +1 -1
- data/lib/page-object/platforms/{watir → selenium_webdriver}/form.rb +1 -1
- data/lib/page-object/platforms/{selenium → selenium_webdriver}/image.rb +1 -1
- data/lib/page-object/platforms/{selenium → selenium_webdriver}/link.rb +1 -1
- data/lib/page-object/platforms/{selenium → selenium_webdriver}/ordered_list.rb +2 -2
- data/lib/page-object/platforms/{selenium → selenium_webdriver}/page_object.rb +59 -59
- data/lib/page-object/platforms/{selenium → selenium_webdriver}/radio_button.rb +1 -1
- data/lib/page-object/platforms/{selenium → selenium_webdriver}/select_list.rb +2 -2
- data/lib/page-object/platforms/{selenium → selenium_webdriver}/table.rb +2 -2
- data/lib/page-object/platforms/{selenium → selenium_webdriver}/table_row.rb +2 -2
- data/lib/page-object/platforms/{selenium → selenium_webdriver}/text_area.rb +1 -1
- data/lib/page-object/platforms/{selenium → selenium_webdriver}/text_field.rb +1 -1
- data/lib/page-object/platforms/{selenium → selenium_webdriver}/unordered_list.rb +2 -2
- data/lib/page-object/platforms/watir_webdriver.rb +17 -0
- data/lib/page-object/platforms/{watir → watir_webdriver}/check_box.rb +1 -1
- data/lib/page-object/platforms/{watir → watir_webdriver}/element.rb +1 -1
- data/lib/page-object/platforms/{selenium → watir_webdriver}/form.rb +1 -1
- data/lib/page-object/platforms/{watir → watir_webdriver}/image.rb +1 -1
- data/lib/page-object/platforms/{watir → watir_webdriver}/ordered_list.rb +2 -2
- data/lib/page-object/platforms/watir_webdriver/page_object.rb +486 -0
- data/lib/page-object/platforms/{watir → watir_webdriver}/radio_button.rb +1 -1
- data/lib/page-object/platforms/{watir → watir_webdriver}/select_list.rb +3 -3
- data/lib/page-object/platforms/{watir → watir_webdriver}/table.rb +2 -2
- data/lib/page-object/platforms/{watir → watir_webdriver}/table_row.rb +2 -2
- data/lib/page-object/platforms/{watir → watir_webdriver}/text_area.rb +1 -1
- data/lib/page-object/platforms/{watir → watir_webdriver}/text_field.rb +1 -1
- data/lib/page-object/platforms/{watir → watir_webdriver}/unordered_list.rb +2 -2
- data/lib/page-object/version.rb +1 -1
- data/page-object.gemspec +1 -1
- data/spec/page-object/elements/button_spec.rb +1 -1
- data/spec/page-object/elements/check_box_spec.rb +1 -1
- data/spec/page-object/elements/element_spec.rb +9 -5
- data/spec/page-object/elements/form_spec.rb +2 -2
- data/spec/page-object/elements/image_spec.rb +4 -4
- data/spec/page-object/elements/link_spec.rb +1 -1
- data/spec/page-object/elements/nested_element_spec.rb +185 -0
- data/spec/page-object/elements/ordered_list_spec.rb +6 -6
- data/spec/page-object/elements/radio_button_spec.rb +1 -1
- data/spec/page-object/elements/select_list_spec.rb +5 -5
- data/spec/page-object/elements/table_row_spec.rb +6 -6
- data/spec/page-object/elements/table_spec.rb +2 -2
- data/spec/page-object/elements/text_area_spec.rb +1 -1
- data/spec/page-object/elements/text_field_spec.rb +1 -1
- data/spec/page-object/elements/unordered_list_spec.rb +6 -6
- data/spec/page-object/page-object_spec.rb +12 -2
- data/spec/page-object/platforms/{selenium → selenium_webdriver}/selenium_page_object_spec.rb +2 -2
- data/spec/page-object/platforms/selenium_webdriver_spec.rb +29 -0
- data/spec/page-object/platforms/{watir_spec.rb → watir_webdriver_spec.rb} +11 -6
- metadata +58 -39
- data/lib/page-object/platforms/selenium.rb +0 -16
- data/lib/page-object/platforms/watir.rb +0 -16
- data/lib/page-object/platforms/watir/page_object.rb +0 -482
- data/spec/page-object/platforms/selenium_spec.rb +0 -26
data/ChangeLog
CHANGED
@@ -1,3 +1,28 @@
|
|
1
|
+
=== Version 0.3.0 / 2011-09-04
|
2
|
+
* Enhancements
|
3
|
+
* Changed namespace for selenium and watir to include webdriver
|
4
|
+
* Support for locating the following elements when nested
|
5
|
+
* Link
|
6
|
+
* Button
|
7
|
+
* TextField
|
8
|
+
* HiddenField
|
9
|
+
* TextArea
|
10
|
+
* SelectList
|
11
|
+
* Checkbox
|
12
|
+
* RadioButton
|
13
|
+
* Div
|
14
|
+
* Span
|
15
|
+
* Table
|
16
|
+
* TableCell
|
17
|
+
* Image
|
18
|
+
* Form
|
19
|
+
* OrderedList
|
20
|
+
* UnorderedList
|
21
|
+
* ListItem
|
22
|
+
* Added #modal_dialog to PageObject to override the default modal dialog behavior
|
23
|
+
* Changed element keys to include _webdriver
|
24
|
+
* Updated to use selenium-webdriver 2.5.0
|
25
|
+
|
1
26
|
=== Version 0.2.5 / 2011-08-19
|
2
27
|
* Enhancements
|
3
28
|
* #attach_to_window takes an optional block - will return to calling window after block executes
|
data/Rakefile
CHANGED
@@ -13,16 +13,16 @@ end
|
|
13
13
|
task :spec
|
14
14
|
|
15
15
|
namespace :features do
|
16
|
-
Cucumber::Rake::Task.new(:
|
16
|
+
Cucumber::Rake::Task.new(:watir_webdriver, "Run features with Watir") do |t|
|
17
17
|
t.profile = "watir"
|
18
18
|
end
|
19
19
|
|
20
|
-
Cucumber::Rake::Task.new(:
|
20
|
+
Cucumber::Rake::Task.new(:selenium_webdriver, "Run features with Selenium") do |t|
|
21
21
|
t.profile = "selenium"
|
22
22
|
end
|
23
23
|
|
24
24
|
desc 'Run all features'
|
25
|
-
task :all => [:
|
25
|
+
task :all => [:watir_webdriver, :selenium_webdriver]
|
26
26
|
end
|
27
27
|
|
28
28
|
desc 'Run all specs and cukes'
|
data/features/element.feature
CHANGED
@@ -1,8 +1,239 @@
|
|
1
1
|
Feature: Elements
|
2
2
|
|
3
|
-
|
3
|
+
Background:
|
4
4
|
Given I am on the static elements page
|
5
|
+
|
6
|
+
Scenario: Clear an element
|
5
7
|
When I type "abcDEF" into the text field
|
6
8
|
Then the text field should contain "abcDEF"
|
7
9
|
When I clear the text field
|
8
10
|
Then the text field should contain ""
|
11
|
+
|
12
|
+
Scenario: Link element methods
|
13
|
+
When I retrieve a link element
|
14
|
+
Then I should know it exists
|
15
|
+
And I should know it is visible
|
16
|
+
And I should know its' text is "Google Search"
|
17
|
+
And I should know it is equal to itself
|
18
|
+
And I should know its' tag name is "a"
|
19
|
+
And I should know the attribute "readonly" is false
|
20
|
+
And I should be able to click it
|
21
|
+
|
22
|
+
@watir_only
|
23
|
+
Scenario: Link element methods for watir
|
24
|
+
When I retrieve a link element
|
25
|
+
Then I should know its' value is ""
|
26
|
+
|
27
|
+
|
28
|
+
Scenario: Button element methods
|
29
|
+
When I retrieve a button element
|
30
|
+
Then I should know it exists
|
31
|
+
And I should know it is visible
|
32
|
+
And I should know its' value is "Click Me"
|
33
|
+
And I should know it is equal to itself
|
34
|
+
And I should know its' tag name is "input"
|
35
|
+
And I should know the attribute "readonly" is false
|
36
|
+
And I should be able to click it
|
37
|
+
|
38
|
+
@watir_only
|
39
|
+
Scenario: Button element methods for watir
|
40
|
+
When I retrieve a button element
|
41
|
+
Then I should know its' text is "Click Me"
|
42
|
+
|
43
|
+
Scenario: Check Box element methods
|
44
|
+
When I retrieve a check box element
|
45
|
+
Then I should know it exists
|
46
|
+
And I should know it is visible
|
47
|
+
And I should know its' text is ""
|
48
|
+
And I should know its' value is "1"
|
49
|
+
And I should know it is equal to itself
|
50
|
+
And I should know its' tag name is "input"
|
51
|
+
And I should know the attribute "readonly" is false
|
52
|
+
And I should be able to click it
|
53
|
+
|
54
|
+
Scenario: Div element methods
|
55
|
+
When I retrieve the div element
|
56
|
+
Then I should know it exists
|
57
|
+
And I should know it is visible
|
58
|
+
And I should know its' text is "page-object rocks!"
|
59
|
+
And I should know it is equal to itself
|
60
|
+
And I should know its' tag name is "div"
|
61
|
+
And I should know the attribute "readonly" is false
|
62
|
+
And I should be able to click it
|
63
|
+
|
64
|
+
@watir_only
|
65
|
+
Scenario: Div element methods for watir
|
66
|
+
When I retrieve the div element
|
67
|
+
Then I should know its' value is ""
|
68
|
+
|
69
|
+
@selenium_only
|
70
|
+
Scenario: Div element methods for selenium
|
71
|
+
When I retrieve the div element
|
72
|
+
Then I should know its' value is nil
|
73
|
+
|
74
|
+
Scenario: Radio Button element methods
|
75
|
+
When I retrieve a radio button
|
76
|
+
Then I should know it exists
|
77
|
+
And I should know it is visible
|
78
|
+
And I should know its' text is ""
|
79
|
+
And I should know its' value is "Milk"
|
80
|
+
And I should know it is equal to itself
|
81
|
+
And I should know its' tag name is "input"
|
82
|
+
And I should know the attribute "readonly" is false
|
83
|
+
And I should be able to click it
|
84
|
+
|
85
|
+
Scenario: Select List element methods
|
86
|
+
When I retrieve a select list
|
87
|
+
Then I should know it exists
|
88
|
+
And I should know it is visible
|
89
|
+
And I should know its' text includes "Test 1"
|
90
|
+
And I should know its' value is "option1"
|
91
|
+
And I should know it is equal to itself
|
92
|
+
And I should know its' tag name is "select"
|
93
|
+
And I should know the attribute "readonly" is false
|
94
|
+
And I should be able to click it
|
95
|
+
|
96
|
+
Scenario: Table element methods
|
97
|
+
When I retrieve a table element
|
98
|
+
Then I should know it is visible
|
99
|
+
And I should know its' text includes "Data1"
|
100
|
+
And I should know it is equal to itself
|
101
|
+
And I should know its' tag name is "table"
|
102
|
+
And I should know the attribute "readonly" is false
|
103
|
+
And I should be able to click it
|
104
|
+
|
105
|
+
@watir_only
|
106
|
+
Scenario: Table element methods in watir
|
107
|
+
When I retrieve a table element
|
108
|
+
Then I should know it exists
|
109
|
+
And I should know its' value is ""
|
110
|
+
|
111
|
+
@selenium_only
|
112
|
+
Scenario: Table element methods in selenium
|
113
|
+
When I retrieve a table element
|
114
|
+
Then I should know its' value is nil
|
115
|
+
|
116
|
+
Scenario: Table Cell element methods
|
117
|
+
When I retrieve table cell
|
118
|
+
Then I should know it exists
|
119
|
+
And I should know it is visible
|
120
|
+
And I should know its' text includes "Data4"
|
121
|
+
And I should know it is equal to itself
|
122
|
+
And I should know its' tag name is "td"
|
123
|
+
And I should know the attribute "readonly" is false
|
124
|
+
And I should be able to click it
|
125
|
+
|
126
|
+
@watir_only
|
127
|
+
Scenario: Table Cell element methods in watir
|
128
|
+
When I retrieve table cell
|
129
|
+
Then I should know its' value is ""
|
130
|
+
|
131
|
+
@selenium_only
|
132
|
+
Scenario: Table Cell element methods in selenium
|
133
|
+
When I retrieve table cell
|
134
|
+
Then I should know its' value is nil
|
135
|
+
|
136
|
+
Scenario: Text Field element methods
|
137
|
+
When I retrieve a text field
|
138
|
+
Then I should know it exists
|
139
|
+
And I should know it is visible
|
140
|
+
And I should know its' text includes ""
|
141
|
+
And I should know its' value is ""
|
142
|
+
And I should know it is equal to itself
|
143
|
+
And I should know its' tag name is "input"
|
144
|
+
And I should know the attribute "readonly" is false
|
145
|
+
And I should be able to click it
|
146
|
+
|
147
|
+
Scenario: Text Area element methods
|
148
|
+
When I retrieve the text area
|
149
|
+
Then I should know it exists
|
150
|
+
And I should know it is visible
|
151
|
+
And I should know its' text includes ""
|
152
|
+
And I should know its' value is ""
|
153
|
+
And I should know it is equal to itself
|
154
|
+
And I should know its' tag name is "textarea"
|
155
|
+
And I should know the attribute "readonly" is false
|
156
|
+
And I should be able to click it
|
157
|
+
|
158
|
+
Scenario: Image element methods
|
159
|
+
When I get the image element
|
160
|
+
Then I should know it exists
|
161
|
+
And I should know it is visible
|
162
|
+
And I should know its' text includes ""
|
163
|
+
And I should know it is equal to itself
|
164
|
+
And I should know its' tag name is "img"
|
165
|
+
And I should know the attribute "readonly" is false
|
166
|
+
And I should be able to click it
|
167
|
+
|
168
|
+
@watir_only
|
169
|
+
Scenario: Image element methods in watir
|
170
|
+
When I get the image element
|
171
|
+
Then I should know its' value is ""
|
172
|
+
|
173
|
+
@selenium_only
|
174
|
+
Scenario: Image element methods in selenium
|
175
|
+
When I get the image element
|
176
|
+
Then I should know its' value is nil
|
177
|
+
|
178
|
+
Scenario: Hidden Field element methods
|
179
|
+
When I retrieve the hidden field element
|
180
|
+
Then I should know it exists
|
181
|
+
And I should know it is not visible
|
182
|
+
And I should know its' text includes ""
|
183
|
+
And I should know its' value is "12345"
|
184
|
+
And I should know it is equal to itself
|
185
|
+
And I should know its' tag name is "input"
|
186
|
+
And I should know the attribute "readonly" is false
|
187
|
+
|
188
|
+
Scenario: Form element methods
|
189
|
+
When I locate the form
|
190
|
+
Then I should know it exists
|
191
|
+
And I should know it is visible
|
192
|
+
And I should know its' text includes ""
|
193
|
+
And I should know it is equal to itself
|
194
|
+
And I should know its' tag name is "form"
|
195
|
+
And I should know the attribute "readonly" is false
|
196
|
+
|
197
|
+
@watir_only
|
198
|
+
Scenario: Form element methods in watir
|
199
|
+
When I locate the form
|
200
|
+
Then I should know its' value is ""
|
201
|
+
|
202
|
+
@selenium_only
|
203
|
+
Scenario: Form element methods in selenium
|
204
|
+
When I locate the form
|
205
|
+
Then I should know its' value is nil
|
206
|
+
|
207
|
+
Scenario: List item element methods
|
208
|
+
When I retrieve a list item element
|
209
|
+
Then I should know it exists
|
210
|
+
And I should know it is visible
|
211
|
+
And I should know its' text is "Item One"
|
212
|
+
And I should know it is equal to itself
|
213
|
+
And I should know its' tag name is "li"
|
214
|
+
And I should know the attribute "readonly" is false
|
215
|
+
And I should be able to click it
|
216
|
+
|
217
|
+
Scenario: Unordered list element methods
|
218
|
+
When I retrieve an unordered list element
|
219
|
+
Then I should know it exists
|
220
|
+
And I should know it is visible
|
221
|
+
And I should know its' text includes "Item One"
|
222
|
+
And I should know its' text includes "Item Two"
|
223
|
+
And I should know its' text includes "Item Three"
|
224
|
+
And I should know it is equal to itself
|
225
|
+
And I should know its' tag name is "ul"
|
226
|
+
And I should know the attribute "readonly" is false
|
227
|
+
And I should be able to click it
|
228
|
+
|
229
|
+
Scenario: Ordered list element methods
|
230
|
+
When I retrieve an ordered list element
|
231
|
+
Then I should know it exists
|
232
|
+
And I should know it is visible
|
233
|
+
And I should know its' text includes "Number One"
|
234
|
+
And I should know its' text includes "Number Two"
|
235
|
+
And I should know its' text includes "Number Three"
|
236
|
+
And I should know it is equal to itself
|
237
|
+
And I should know its' tag name is "ol"
|
238
|
+
And I should know the attribute "readonly" is false
|
239
|
+
And I should be able to click it
|
data/features/frames.feature
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>modal dialog test page</title>
|
4
|
+
</head>
|
5
|
+
<body>
|
6
|
+
|
7
|
+
<script type="text/javascript">
|
8
|
+
function modal() {
|
9
|
+
var retValue = window.showModalDialog(
|
10
|
+
"modal_1.html", self,
|
11
|
+
"status:no;resizable:Yes;help:no;maximize:no;minimize:no;scrollbars:no;");
|
12
|
+
}
|
13
|
+
</script>
|
14
|
+
|
15
|
+
<input id=launch_modal_button type=button onclick='return modal();' value="Launch a modal" />
|
16
|
+
</body>
|
17
|
+
</html>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<html>
|
2
|
+
|
3
|
+
<head>
|
4
|
+
<title>Modal 1</title>
|
5
|
+
|
6
|
+
<script>
|
7
|
+
function delay_action(other_function) {
|
8
|
+
setTimeout(other_function, 3000);
|
9
|
+
}
|
10
|
+
|
11
|
+
function close_window() {
|
12
|
+
window.returnValue = 22
|
13
|
+
window.close()
|
14
|
+
}
|
15
|
+
|
16
|
+
function modal1() {
|
17
|
+
var retValue = window.showModalDialog(
|
18
|
+
"modal_2.html", self,
|
19
|
+
"status:no;resizable:Yes;help:no;maximize:no;minimize:no;scrollbars:no;");
|
20
|
+
}
|
21
|
+
|
22
|
+
</script>
|
23
|
+
|
24
|
+
</head>
|
25
|
+
|
26
|
+
<body>
|
27
|
+
|
28
|
+
<h2>Modal 1</h2>
|
29
|
+
|
30
|
+
<h3>Close buttons</h3>
|
31
|
+
<input id=close_window type=button onclick="close_window()" value="Close window"/>
|
32
|
+
<input id=delayed_close type=button onclick="delay_action('close_window()')" value="Close window with delay" />
|
33
|
+
|
34
|
+
<h3>Nested modal</h3>
|
35
|
+
<input id=launch_modal_button type=button onclick='return modal1();' value="Launch another modal"/>
|
36
|
+
|
37
|
+
</body>
|
38
|
+
</html>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<html>
|
2
|
+
|
3
|
+
<head>
|
4
|
+
<title>Modal 2</title>
|
5
|
+
|
6
|
+
<script>
|
7
|
+
function delay_action(other_function) {
|
8
|
+
setTimeout(other_function, 3000);
|
9
|
+
}
|
10
|
+
|
11
|
+
function close_window() {
|
12
|
+
self.close()
|
13
|
+
}
|
14
|
+
</script>
|
15
|
+
|
16
|
+
</head>
|
17
|
+
|
18
|
+
<body>
|
19
|
+
|
20
|
+
<h2>Modal 2</h2>
|
21
|
+
|
22
|
+
<h3>Close buttons</h3>
|
23
|
+
<input id=close_window2 type="button" onclick="close_window()" value="Close window"/>
|
24
|
+
<input id=delayed_close2 type=button onclick="delay_action('close_window()')" value="Close window with delay" />
|
25
|
+
|
26
|
+
</body>
|
27
|
+
</html>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>Nested Elements</title>
|
4
|
+
</head>
|
5
|
+
<body>
|
6
|
+
<h1>Nested Elements</h1>
|
7
|
+
|
8
|
+
<div id="div_id">
|
9
|
+
<a href="success.html">Success</a>
|
10
|
+
<form method="get" action="success.html">
|
11
|
+
<input type="submit" value="Click Me">
|
12
|
+
</form>
|
13
|
+
<input size="40" type="text"/>
|
14
|
+
<input size="40" type="hidden" value="LeanDog"/>
|
15
|
+
<textarea rows="2" cols="20"></textarea>
|
16
|
+
<select>
|
17
|
+
<option value="option1">Test 1</option>
|
18
|
+
<option value="option2">Test 2</option>
|
19
|
+
</select>
|
20
|
+
<input type="checkbox" value="0"/>
|
21
|
+
<input type="radio" value="Milk">
|
22
|
+
<div>
|
23
|
+
page-object rocks!
|
24
|
+
</div>
|
25
|
+
<span>
|
26
|
+
My alert
|
27
|
+
</span>
|
28
|
+
<table>
|
29
|
+
<tr><td>Data1</td><td>Data2</td></tr>
|
30
|
+
</table>
|
31
|
+
<img src="images/circle.png">
|
32
|
+
<ol>
|
33
|
+
<li>Number One</li>
|
34
|
+
<li>Number Two</li>
|
35
|
+
</ol>
|
36
|
+
<ul>
|
37
|
+
<li>Item One</li>
|
38
|
+
<li>Item Two</li>
|
39
|
+
</ul>
|
40
|
+
</div>
|
41
|
+
</body>
|
42
|
+
</html>
|
@@ -94,6 +94,7 @@
|
|
94
94
|
<input id=alert_button type=button onclick="alert('I am an alert')" value=Alert>
|
95
95
|
<input id=confirm_button type=button onclick="this.value = confirm('set the value')" value=Confirm>
|
96
96
|
<input id=prompt_button type=button onclick='this.value = prompt("enter your name", "John Doe")' value=Prompt>
|
97
|
+
|
97
98
|
<h3>New Window</h3>
|
98
99
|
<a href="success.html" target="_blank">New Window</a>
|
99
100
|
</body>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Feature: handing modal dialogs
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I am on the modal page
|
5
|
+
|
6
|
+
|
7
|
+
Scenario: Interacting with a modal dialog
|
8
|
+
When I open a modal dialog
|
9
|
+
Then I should be able to close the modal
|
10
|
+
|
11
|
+
Scenario: Nested modal dialogs
|
12
|
+
When I open a modal dialog
|
13
|
+
And I open another modal dialog from that one
|
14
|
+
#Then I should be able to close both modals
|
15
|
+
|