SimpliTest 0.0.4 → 0.0.5
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 +4 -4
- data/README.md +21 -21
- data/SimpliTest.gemspec +42 -42
- data/bin/SimpliTest +22 -22
- data/lib/SimpliTest.rb +2 -2
- data/lib/SimpliTest/cli/main.rb +333 -333
- data/lib/SimpliTest/config/configuration.rb +107 -107
- data/lib/SimpliTest/config/directory_paths.rb +36 -36
- data/lib/SimpliTest/config/environment.rb +67 -67
- data/lib/SimpliTest/config/local_environment.rb +20 -20
- data/lib/SimpliTest/config/profiles/chrome.rb +18 -18
- data/lib/SimpliTest/config/profiles/firefox.rb +14 -14
- data/lib/SimpliTest/config/profiles/internet_explorer.rb +11 -11
- data/lib/SimpliTest/config/profiles/phantom.rb +9 -9
- data/lib/SimpliTest/config/profiles/phantom_debug.rb +12 -12
- data/lib/SimpliTest/config/profiles/selenium.rb +13 -13
- data/lib/SimpliTest/config/screen_size.rb +25 -25
- data/lib/SimpliTest/config/steps.rb +8 -8
- data/lib/SimpliTest/helpers/data_validation.rb +60 -60
- data/lib/SimpliTest/helpers/file.rb +38 -38
- data/lib/SimpliTest/helpers/project_setup.rb +186 -186
- data/lib/SimpliTest/helpers/step_helpers/custom_chrome_helpers.rb +14 -14
- data/lib/SimpliTest/helpers/step_helpers/custom_date_helpers.rb +64 -64
- data/lib/SimpliTest/helpers/step_helpers/custom_form_helpers.rb +66 -66
- data/lib/SimpliTest/helpers/step_helpers/custom_phantomjs_helpers.rb +49 -49
- data/lib/SimpliTest/helpers/step_helpers/custom_selenium_helpers.rb +41 -41
- data/lib/SimpliTest/helpers/step_helpers/html_selectors_helpers.rb +154 -154
- data/lib/SimpliTest/helpers/step_helpers/navigation_helpers.rb +206 -206
- data/lib/SimpliTest/helpers/step_helpers/tolerance_for_sync_issues.rb +38 -38
- data/lib/SimpliTest/helpers/step_helpers/within_helpers.rb +6 -6
- data/lib/SimpliTest/helpers/windows_ui.rb +51 -51
- data/lib/SimpliTest/steps/debugging_steps.rb +19 -19
- data/lib/SimpliTest/steps/form_steps.rb +348 -352
- data/lib/SimpliTest/steps/form_verification_steps.rb +189 -189
- data/lib/SimpliTest/steps/navigation_steps.rb +58 -47
- data/lib/SimpliTest/steps/scoper.rb +42 -42
- data/lib/SimpliTest/steps/verification_steps.rb +306 -306
- data/lib/SimpliTest/tasks/document.rb +169 -169
- data/lib/SimpliTest/tasks/examples.rb +18 -18
- data/lib/SimpliTest/tasks/testinstall.rb +5 -5
- data/lib/SimpliTest/templates/NewSimpliTestProject/Readme.txt +4 -4
- data/lib/SimpliTest/templates/NewSimpliTestProject/cucumber.yml +26 -26
- data/lib/SimpliTest/templates/NewSimpliTestProject/documentation/step_definitions.html +88 -87
- data/lib/SimpliTest/templates/NewSimpliTestProject/features/specifications/RegressionTests/HelloWorld.feature +3 -3
- data/lib/SimpliTest/templates/NewSimpliTestProject/features/specifications/SmokeTest/HelloWorld.feature +3 -3
- data/lib/SimpliTest/templates/NewSimpliTestProject/features/specifications/accessibilityTests/HelloWorld.feature +3 -3
- data/lib/SimpliTest/templates/NewSimpliTestProject/features/support/config/environments.yml +10 -10
- data/lib/SimpliTest/templates/NewSimpliTestProject/features/support/config/pages.yml +26 -26
- data/lib/SimpliTest/templates/NewSimpliTestProject/features/support/config/selectors.yml +44 -44
- data/lib/SimpliTest/templates/NewSimpliTestProject/features/support/config/settings.yml +26 -26
- data/lib/SimpliTest/templates/NewSimpliTestProject/features/support/env.rb +33 -33
- data/lib/SimpliTest/templates/NewSimpliTestProject/license.txt +29 -29
- data/lib/SimpliTest/templates/document/css/style.css +28 -28
- data/lib/SimpliTest/templates/document/index.html +60 -60
- data/lib/version.rb +3 -3
- metadata +4 -4
@@ -1,42 +1,42 @@
|
|
1
|
-
require 'axe/cucumber/step_definitions'
|
2
|
-
|
3
|
-
# :nocov:
|
4
|
-
# Single-line step scoper
|
5
|
-
When /^(.*) within(?: the| an?)? (.*)$/ do |step_def, parent|
|
6
|
-
selector, selector_type = selector_for(parent)
|
7
|
-
patiently do
|
8
|
-
if selector_type == 'xpath'
|
9
|
-
within(:xpath, selector) do
|
10
|
-
step step_def
|
11
|
-
end
|
12
|
-
elsif selector_type == 'css'
|
13
|
-
within(:css, selector) do
|
14
|
-
step step_def
|
15
|
-
end
|
16
|
-
else
|
17
|
-
with_scope(parent) { step step_def }
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
# Multi-line step scoper
|
23
|
-
When /^(.*) within(?: the| an?)? (.*):$/ do |step_def, parent, table_or_string|
|
24
|
-
selector, selector_type = selector_for(parent)
|
25
|
-
patiently do
|
26
|
-
if selector_type == 'xpath'
|
27
|
-
within(:xpath, xpath) do
|
28
|
-
step "#{step_def}:", table_or_string
|
29
|
-
end
|
30
|
-
else
|
31
|
-
with_scope(parent) { step "#{step_def}:", table_or_string }
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
# :nocov:
|
36
|
-
|
37
|
-
# Execute step in the last opened window
|
38
|
-
When /^(.*) in the new window$/ do |step_def|
|
39
|
-
change_window 'last'
|
40
|
-
step step_def
|
41
|
-
end
|
42
|
-
|
1
|
+
require 'axe/cucumber/step_definitions'
|
2
|
+
|
3
|
+
# :nocov:
|
4
|
+
# Single-line step scoper
|
5
|
+
When /^(.*) within(?: the| an?)? (.*)$/ do |step_def, parent|
|
6
|
+
selector, selector_type = selector_for(parent)
|
7
|
+
patiently do
|
8
|
+
if selector_type == 'xpath'
|
9
|
+
within(:xpath, selector) do
|
10
|
+
step step_def
|
11
|
+
end
|
12
|
+
elsif selector_type == 'css'
|
13
|
+
within(:css, selector) do
|
14
|
+
step step_def
|
15
|
+
end
|
16
|
+
else
|
17
|
+
with_scope(parent) { step step_def }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Multi-line step scoper
|
23
|
+
When /^(.*) within(?: the| an?)? (.*):$/ do |step_def, parent, table_or_string|
|
24
|
+
selector, selector_type = selector_for(parent)
|
25
|
+
patiently do
|
26
|
+
if selector_type == 'xpath'
|
27
|
+
within(:xpath, xpath) do
|
28
|
+
step "#{step_def}:", table_or_string
|
29
|
+
end
|
30
|
+
else
|
31
|
+
with_scope(parent) { step "#{step_def}:", table_or_string }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
# :nocov:
|
36
|
+
|
37
|
+
# Execute step in the last opened window
|
38
|
+
When /^(.*) in the new window$/ do |step_def|
|
39
|
+
change_window 'last'
|
40
|
+
step step_def
|
41
|
+
end
|
42
|
+
|
@@ -1,306 +1,306 @@
|
|
1
|
-
|
2
|
-
#************************ NAVIGATION *********************************************
|
3
|
-
|
4
|
-
#Example: Then I should be redirected to the "congratulations" page
|
5
|
-
Then /^I should be redirected to the "(.*)" page$/ do |page_name|
|
6
|
-
definition = <<-def
|
7
|
-
I should be on the "#{page_name}" page
|
8
|
-
def
|
9
|
-
step definition
|
10
|
-
end
|
11
|
-
|
12
|
-
#Example: Then I should be redirected to the "Results" page with some parameters
|
13
|
-
Then(/^I should be redirected to the "(.*?)" page with some parameters$/) do |page_name|
|
14
|
-
sleep SimpliTest.wait_for_page_load
|
15
|
-
target_url = without_trailing_slash(path_to(page_name)).downcase
|
16
|
-
patiently do
|
17
|
-
current_url = without_trailing_slash page.current_url.downcase
|
18
|
-
if current_url.index(target_url)
|
19
|
-
current_url.index(target_url).should_not be_nil
|
20
|
-
else
|
21
|
-
current_url.should == target_url
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
#Example: Then I should be on the "congratulations" page
|
27
|
-
Then /^(?:|I )should be on the "(.*)" page$/ do |page_name|
|
28
|
-
sleep SimpliTest.wait_for_page_load
|
29
|
-
target_url, current_url = comparable_urls_for(path_to(page_name), page.current_url)
|
30
|
-
current_url.should == target_url
|
31
|
-
end
|
32
|
-
|
33
|
-
|
34
|
-
#************************ END NAVIGATION *****************************************
|
35
|
-
|
36
|
-
|
37
|
-
#************************ LABELS AND TEXT ****************************************
|
38
|
-
|
39
|
-
|
40
|
-
#Example: And I should see "Great, you can click links!"
|
41
|
-
Then /^(?:|I )should see "(.*)"$/ do |text|
|
42
|
-
patiently { page.should have_content(text) }
|
43
|
-
end
|
44
|
-
|
45
|
-
|
46
|
-
#Example: And I should not see "some bla-bla"
|
47
|
-
Then /^(?:|I )should not see "(.*)"$/ do |text|
|
48
|
-
patiently { page.should have_no_content(text) }
|
49
|
-
end
|
50
|
-
|
51
|
-
#Example: Then I should see /great/i
|
52
|
-
Then /^(?:|I )should see \/([^\/]*)\/([imxo])?$/ do |regexp,flags|
|
53
|
-
regexp_opts = [regexp,flags].compact
|
54
|
-
regexp = Regexp.new(*regexp_opts)
|
55
|
-
patiently { page.should have_xpath('//*', :text => regexp) }
|
56
|
-
end
|
57
|
-
|
58
|
-
#Example: Then I should not see /bla-bla/i
|
59
|
-
Then /^(?:|I )should not see \/([^\/]*)\/([imxo])?$/ do |regexp,flags|
|
60
|
-
regexp_opts = [regexp,flags].compact
|
61
|
-
regexp = Regexp.new(*regexp_opts)
|
62
|
-
patiently { page.should have_no_xpath('//*', :text => regexp) }
|
63
|
-
end
|
64
|
-
|
65
|
-
#Example: Then I should see all of the texts: <pass a table with text values>
|
66
|
-
Then /^I should see all of the texts:?$/ do |table|
|
67
|
-
table.raw.each do |text|
|
68
|
-
step "I should see \"#{text[0]}\""
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
#TODO: No test case for this
|
73
|
-
#TODO: This step is redundant, deprecate it
|
74
|
-
#Example: Then I should see the "ZipInlineFeedback" text as "Hello"
|
75
|
-
#Example: Not yet implemented
|
76
|
-
Then /^I should see the "(.*?)" text as "(.*)"$/ do |locator, text|
|
77
|
-
patiently do
|
78
|
-
element = get_element_from(locator, false)
|
79
|
-
element.text.should == text
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
|
84
|
-
#************************ END LABELS AND TEXT ************************************
|
85
|
-
|
86
|
-
|
87
|
-
#************************ BUTTONS AND LINKS **************************************
|
88
|
-
|
89
|
-
#Example: Then I should see the "Submit" button
|
90
|
-
Then /^(?: |I )should see the "(.*)"(?: button| link)$/ do |link_or_button_text|
|
91
|
-
patiently do
|
92
|
-
selector, selector_type = selector_for(link_or_button_text)
|
93
|
-
if selector_type == 'other'
|
94
|
-
begin
|
95
|
-
should have_link(link_or_button_text)
|
96
|
-
rescue RSpec::Expectations::ExpectationNotMetError
|
97
|
-
should have_button(link_or_button_text)
|
98
|
-
end
|
99
|
-
else
|
100
|
-
find(selector_type.to_sym, selector)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
|
106
|
-
#TODO: the double patiently block makes me sad
|
107
|
-
#Example: And I should not see the "Click Me" link
|
108
|
-
Then /^(?: |I )should not see the "(.*)"(?: button| link)$/ do |button_or_link_text|
|
109
|
-
validate_absence_of button_or_link_text
|
110
|
-
end
|
111
|
-
|
112
|
-
#Example: Then I should see a link that points to "http://www.google.com/"
|
113
|
-
Then /^I should see an? link that points to "([^"]*)"$/ do |href_destination|
|
114
|
-
page.should have_xpath("//a[@href='#{href_destination}']")
|
115
|
-
end
|
116
|
-
|
117
|
-
#Example: Then the 5th instance of "Page1PaginationLinks" should be disabled
|
118
|
-
Then /^the (first|last|[0-9]+(?:th|st|rd|nd)) instance of "(.*?)" should be disabled$/ do |index, button_or_link|
|
119
|
-
selector, selector_type = selector_for(button_or_link)
|
120
|
-
index = numerize index
|
121
|
-
if selector_type == 'css'
|
122
|
-
elements = all(:css, selector)
|
123
|
-
else
|
124
|
-
raise "Only CSS Selectors are supported. Please add a Valid CSS Selector in selectors.yml"
|
125
|
-
end
|
126
|
-
elements[index].should be_disabled if elements
|
127
|
-
end
|
128
|
-
|
129
|
-
#Example: Then I should see that all asset references on the page are valid
|
130
|
-
Then /^I should see that all asset references on the page are valid$/ do
|
131
|
-
patiently do
|
132
|
-
document = parse_dom_tree(current_url)
|
133
|
-
valid_assets_links_from(document).each do |link|
|
134
|
-
validate_response_from(current_url, link)
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
#Example: And I should see that all links on the page are valid
|
140
|
-
Then /^I should see that all links on the page are valid$/ do
|
141
|
-
document = parse_dom_tree(current_url)
|
142
|
-
links_on(document).each do |link|
|
143
|
-
validate_response_from(current_url, link)
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
|
148
|
-
#************************ BUTTONS AND LINKS **************************************
|
149
|
-
|
150
|
-
#************************ PAGINATION **************************************
|
151
|
-
|
152
|
-
#Example: Then I should be on page 2
|
153
|
-
Then /^I should be on page (\d+)$/ do |page_number|
|
154
|
-
pagination_links_for(page_number).collect(&:disabled?).uniq.should == [true]
|
155
|
-
end
|
156
|
-
|
157
|
-
#************************ PAGINATION **************************************
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
#************************ LIST/ ERROR MESSAGES ***********************************
|
162
|
-
|
163
|
-
#TODO: Add a test
|
164
|
-
#Example: Then I should see the following errors: Accepts Gherkin Table
|
165
|
-
#Example: Not yet implemented
|
166
|
-
Then /^I should see the following(?: errors| list):$/ do |table|
|
167
|
-
column_header, *list = table.raw
|
168
|
-
list.flatten.each do |message|
|
169
|
-
patiently { page.should have_content(message) }
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
|
174
|
-
#************************ END LIST/ ERROR MESSAGES *******************************
|
175
|
-
|
176
|
-
|
177
|
-
#************************ TAGS ***************************************************
|
178
|
-
|
179
|
-
#Example: Then I should see a "td" tag around "bla"
|
180
|
-
Then /^I should see an? "([^"]*)" tag around the text "([^"]*)"$/ do |tag_name, text|
|
181
|
-
page.should have_xpath("//#{tag_name}[text()=\"#{text}\"]")
|
182
|
-
end
|
183
|
-
|
184
|
-
#Example: Then I should see a "div" with "id" of "ui-datepicker-div"
|
185
|
-
Then /^I should see an? "([^"]*)" with "([^"]*)" of "([^"]*)"$/ do |tag_name, attribute_name, attribute_value|
|
186
|
-
page.should have_xpath("//#{tag_name}[@#{attribute_name}=\"#{attribute_value}\"]")
|
187
|
-
end
|
188
|
-
|
189
|
-
|
190
|
-
#************************ END TAGS ***********************************************
|
191
|
-
|
192
|
-
|
193
|
-
#************************ IMAGES *************************************************
|
194
|
-
|
195
|
-
#TODO: Add Examples
|
196
|
-
#Example: Then I should see the image "Image1.jpg"
|
197
|
-
Then /^I should see the image "([^"]*)"$/ do |image_name|
|
198
|
-
page.should have_xpath("//img[contains(@src, \"#{image_name}\")]")
|
199
|
-
end
|
200
|
-
|
201
|
-
#Example: Then I should see all of the images: <accepts a list of image names(src)>
|
202
|
-
Then /^I should see all of the images:?$/ do |table|
|
203
|
-
table.raw.each do |text|
|
204
|
-
step "I should see the image \"#{text[0]}\""
|
205
|
-
end
|
206
|
-
end
|
207
|
-
|
208
|
-
#Example: Then I should see text "some alt text" as alt text for ImageSelector
|
209
|
-
Then /^(?:|I )should see text "(.*)" as alt text for (.*)$/ do |alt_text, locator|
|
210
|
-
selector, selector_type = selector_for(locator)
|
211
|
-
if selector_type == 'xpath'
|
212
|
-
patiently { page.should have_xpath("#{selector}[@alt='#{alt_text}']") }
|
213
|
-
elsif selector_type == 'css'
|
214
|
-
patiently { page.should have_css("#{selector}[alt='#{alt_text}']") }
|
215
|
-
else
|
216
|
-
patiently { page.should have_xpath("//img[contains(@src, '#{unquoted(selector)}')][@alt='#{alt_text}']") }
|
217
|
-
end
|
218
|
-
end
|
219
|
-
|
220
|
-
|
221
|
-
#************************ END IMAGES *********************************************
|
222
|
-
|
223
|
-
|
224
|
-
#************************ AUDIO **************************************************
|
225
|
-
|
226
|
-
#TODO: Add Examples
|
227
|
-
#Example: Then I should see the HTML5 audio source "Audio.mp3"
|
228
|
-
Then /^I should see the HTML5 audio source "([^"]*)"$/ do |audio_name|
|
229
|
-
page.should have_xpath("//audio[contains(@src, \"#{audio_name}\")] | //audio/source[contains(@src, \"#{audio_name}\")]")
|
230
|
-
end
|
231
|
-
#Example: Then I should see the HTML5 audio sources: <Accepts a list of audio file names>
|
232
|
-
Then /^I should see all of the HTML5 audio sources:?$/ do |table|
|
233
|
-
table.raw.each do |text|
|
234
|
-
step "I should see the HTML5 audio source \"#{text[0]}\""
|
235
|
-
end
|
236
|
-
end
|
237
|
-
|
238
|
-
|
239
|
-
#************************ END AUDIO **********************************************
|
240
|
-
|
241
|
-
|
242
|
-
#************************ VIDEO **************************************************
|
243
|
-
|
244
|
-
#TODO: Add Examples
|
245
|
-
#Example: Then I should see the HTML5 video source "video1.mp4"
|
246
|
-
Then /^I should see the HTML5 video source "([^"]*)"$/ do |video_name|
|
247
|
-
page.should have_xpath("//video[contains(@src, \"#{video_name}\")] | //video/source[contains(@src, \"#{video_name}\")]")
|
248
|
-
end
|
249
|
-
|
250
|
-
#Example: Then I should see the HTML5 video sources: <accepts a table of video sources>
|
251
|
-
Then /^I should see all of the HTML5 video sources:$/ do |table|
|
252
|
-
table.raw.each do |text|
|
253
|
-
step "I should see the HTML5 video source \"#{text[0]}\""
|
254
|
-
end
|
255
|
-
end
|
256
|
-
|
257
|
-
|
258
|
-
#************************ VIDEO **************************************************
|
259
|
-
|
260
|
-
|
261
|
-
#************************ OTHER ELEMENTS *****************************************
|
262
|
-
|
263
|
-
|
264
|
-
#TODO: Hate the language here, need to fix this
|
265
|
-
#Example: Then I should see 2 elements kind of table's header
|
266
|
-
Then /^I should see (\d+) elements? kind of (.+)$/ do |count, locator|
|
267
|
-
selector, xpath = selector_for(locator)
|
268
|
-
patiently do
|
269
|
-
actual_count = all(selector).count
|
270
|
-
count = count.to_i
|
271
|
-
actual_count.should eq(count)
|
272
|
-
end
|
273
|
-
end
|
274
|
-
|
275
|
-
#Example: And I should not see elements kind of paragraphs
|
276
|
-
Then /^I should not see elements? kind of (.+)$/ do |locator|
|
277
|
-
patiently { page.should_not have_css(selector_for(locator).first) }
|
278
|
-
end
|
279
|
-
|
280
|
-
|
281
|
-
#************************ END OTHER ELEMENTS *************************************
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
#Example: Not Implemented yet
|
286
|
-
Then /^I should see "(.*?)" as "(.*?)" value$/ do |arg1, arg2|
|
287
|
-
pending # express the regexp above with the code you wish you had
|
288
|
-
end
|
289
|
-
|
290
|
-
|
291
|
-
#*********************** SELECTOR SECTION ********************************
|
292
|
-
|
293
|
-
|
294
|
-
#Example: Then I should see the correct "MedicareGovHeader"
|
295
|
-
Then /^I should see the correct "(.*)"$/ do |section|
|
296
|
-
locators = selectors_from_section(section)
|
297
|
-
locators.each do |locator|
|
298
|
-
if is_css?(locator)
|
299
|
-
should have_css(selector_from(locator).first)
|
300
|
-
elsif is_xpath?(locator)
|
301
|
-
should have_xpath(selector_from(locator).first)
|
302
|
-
else
|
303
|
-
raise "Could not determine selector type for #{selector}"
|
304
|
-
end
|
305
|
-
end
|
306
|
-
end
|
1
|
+
|
2
|
+
#************************ NAVIGATION *********************************************
|
3
|
+
|
4
|
+
#Example: Then I should be redirected to the "congratulations" page
|
5
|
+
Then /^I should be redirected to the "(.*)" page$/ do |page_name|
|
6
|
+
definition = <<-def
|
7
|
+
I should be on the "#{page_name}" page
|
8
|
+
def
|
9
|
+
step definition
|
10
|
+
end
|
11
|
+
|
12
|
+
#Example: Then I should be redirected to the "Results" page with some parameters
|
13
|
+
Then(/^I should be redirected to the "(.*?)" page with some parameters$/) do |page_name|
|
14
|
+
sleep SimpliTest.wait_for_page_load
|
15
|
+
target_url = without_trailing_slash(path_to(page_name)).downcase
|
16
|
+
patiently do
|
17
|
+
current_url = without_trailing_slash page.current_url.downcase
|
18
|
+
if current_url.index(target_url)
|
19
|
+
current_url.index(target_url).should_not be_nil
|
20
|
+
else
|
21
|
+
current_url.should == target_url
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
#Example: Then I should be on the "congratulations" page
|
27
|
+
Then /^(?:|I )should be on the "(.*)" page$/ do |page_name|
|
28
|
+
sleep SimpliTest.wait_for_page_load
|
29
|
+
target_url, current_url = comparable_urls_for(path_to(page_name), page.current_url)
|
30
|
+
current_url.should == target_url
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
#************************ END NAVIGATION *****************************************
|
35
|
+
|
36
|
+
|
37
|
+
#************************ LABELS AND TEXT ****************************************
|
38
|
+
|
39
|
+
|
40
|
+
#Example: And I should see "Great, you can click links!"
|
41
|
+
Then /^(?:|I )should see "(.*)"$/ do |text|
|
42
|
+
patiently { page.should have_content(text) }
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
#Example: And I should not see "some bla-bla"
|
47
|
+
Then /^(?:|I )should not see "(.*)"$/ do |text|
|
48
|
+
patiently { page.should have_no_content(text) }
|
49
|
+
end
|
50
|
+
|
51
|
+
#Example: Then I should see /great/i
|
52
|
+
Then /^(?:|I )should see \/([^\/]*)\/([imxo])?$/ do |regexp,flags|
|
53
|
+
regexp_opts = [regexp,flags].compact
|
54
|
+
regexp = Regexp.new(*regexp_opts)
|
55
|
+
patiently { page.should have_xpath('//*', :text => regexp) }
|
56
|
+
end
|
57
|
+
|
58
|
+
#Example: Then I should not see /bla-bla/i
|
59
|
+
Then /^(?:|I )should not see \/([^\/]*)\/([imxo])?$/ do |regexp,flags|
|
60
|
+
regexp_opts = [regexp,flags].compact
|
61
|
+
regexp = Regexp.new(*regexp_opts)
|
62
|
+
patiently { page.should have_no_xpath('//*', :text => regexp) }
|
63
|
+
end
|
64
|
+
|
65
|
+
#Example: Then I should see all of the texts: <pass a table with text values>
|
66
|
+
Then /^I should see all of the texts:?$/ do |table|
|
67
|
+
table.raw.each do |text|
|
68
|
+
step "I should see \"#{text[0]}\""
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
#TODO: No test case for this
|
73
|
+
#TODO: This step is redundant, deprecate it
|
74
|
+
#Example: Then I should see the "ZipInlineFeedback" text as "Hello"
|
75
|
+
#Example: Not yet implemented
|
76
|
+
Then /^I should see the "(.*?)" text as "(.*)"$/ do |locator, text|
|
77
|
+
patiently do
|
78
|
+
element = get_element_from(locator, false)
|
79
|
+
element.text.should == text
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
#************************ END LABELS AND TEXT ************************************
|
85
|
+
|
86
|
+
|
87
|
+
#************************ BUTTONS AND LINKS **************************************
|
88
|
+
|
89
|
+
#Example: Then I should see the "Submit" button
|
90
|
+
Then /^(?: |I )should see the "(.*)"(?: button| link)$/ do |link_or_button_text|
|
91
|
+
patiently do
|
92
|
+
selector, selector_type = selector_for(link_or_button_text)
|
93
|
+
if selector_type == 'other'
|
94
|
+
begin
|
95
|
+
should have_link(link_or_button_text)
|
96
|
+
rescue RSpec::Expectations::ExpectationNotMetError
|
97
|
+
should have_button(link_or_button_text)
|
98
|
+
end
|
99
|
+
else
|
100
|
+
find(selector_type.to_sym, selector)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
|
106
|
+
#TODO: the double patiently block makes me sad
|
107
|
+
#Example: And I should not see the "Click Me" link
|
108
|
+
Then /^(?: |I )should not see the "(.*)"(?: button| link)$/ do |button_or_link_text|
|
109
|
+
validate_absence_of button_or_link_text
|
110
|
+
end
|
111
|
+
|
112
|
+
#Example: Then I should see a link that points to "http://www.google.com/"
|
113
|
+
Then /^I should see an? link that points to "([^"]*)"$/ do |href_destination|
|
114
|
+
page.should have_xpath("//a[@href='#{href_destination}']")
|
115
|
+
end
|
116
|
+
|
117
|
+
#Example: Then the 5th instance of "Page1PaginationLinks" should be disabled
|
118
|
+
Then /^the (first|last|[0-9]+(?:th|st|rd|nd)) instance of "(.*?)" should be disabled$/ do |index, button_or_link|
|
119
|
+
selector, selector_type = selector_for(button_or_link)
|
120
|
+
index = numerize index
|
121
|
+
if selector_type == 'css'
|
122
|
+
elements = all(:css, selector)
|
123
|
+
else
|
124
|
+
raise "Only CSS Selectors are supported. Please add a Valid CSS Selector in selectors.yml"
|
125
|
+
end
|
126
|
+
elements[index].should be_disabled if elements
|
127
|
+
end
|
128
|
+
|
129
|
+
#Example: Then I should see that all asset references on the page are valid
|
130
|
+
Then /^I should see that all asset references on the page are valid$/ do
|
131
|
+
patiently do
|
132
|
+
document = parse_dom_tree(current_url)
|
133
|
+
valid_assets_links_from(document).each do |link|
|
134
|
+
validate_response_from(current_url, link)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
#Example: And I should see that all links on the page are valid
|
140
|
+
Then /^I should see that all links on the page are valid$/ do
|
141
|
+
document = parse_dom_tree(current_url)
|
142
|
+
links_on(document).each do |link|
|
143
|
+
validate_response_from(current_url, link)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
|
148
|
+
#************************ BUTTONS AND LINKS **************************************
|
149
|
+
|
150
|
+
#************************ PAGINATION **************************************
|
151
|
+
|
152
|
+
#Example: Then I should be on page 2
|
153
|
+
Then /^I should be on page (\d+)$/ do |page_number|
|
154
|
+
pagination_links_for(page_number).collect(&:disabled?).uniq.should == [true]
|
155
|
+
end
|
156
|
+
|
157
|
+
#************************ PAGINATION **************************************
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
#************************ LIST/ ERROR MESSAGES ***********************************
|
162
|
+
|
163
|
+
#TODO: Add a test
|
164
|
+
#Example: Then I should see the following errors: Accepts Gherkin Table
|
165
|
+
#Example: Not yet implemented
|
166
|
+
Then /^I should see the following(?: errors| list):$/ do |table|
|
167
|
+
column_header, *list = table.raw
|
168
|
+
list.flatten.each do |message|
|
169
|
+
patiently { page.should have_content(message) }
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
|
174
|
+
#************************ END LIST/ ERROR MESSAGES *******************************
|
175
|
+
|
176
|
+
|
177
|
+
#************************ TAGS ***************************************************
|
178
|
+
|
179
|
+
#Example: Then I should see a "td" tag around "bla"
|
180
|
+
Then /^I should see an? "([^"]*)" tag around the text "([^"]*)"$/ do |tag_name, text|
|
181
|
+
page.should have_xpath("//#{tag_name}[text()=\"#{text}\"]")
|
182
|
+
end
|
183
|
+
|
184
|
+
#Example: Then I should see a "div" with "id" of "ui-datepicker-div"
|
185
|
+
Then /^I should see an? "([^"]*)" with "([^"]*)" of "([^"]*)"$/ do |tag_name, attribute_name, attribute_value|
|
186
|
+
page.should have_xpath("//#{tag_name}[@#{attribute_name}=\"#{attribute_value}\"]")
|
187
|
+
end
|
188
|
+
|
189
|
+
|
190
|
+
#************************ END TAGS ***********************************************
|
191
|
+
|
192
|
+
|
193
|
+
#************************ IMAGES *************************************************
|
194
|
+
|
195
|
+
#TODO: Add Examples
|
196
|
+
#Example: Then I should see the image "Image1.jpg"
|
197
|
+
Then /^I should see the image "([^"]*)"$/ do |image_name|
|
198
|
+
page.should have_xpath("//img[contains(@src, \"#{image_name}\")]")
|
199
|
+
end
|
200
|
+
|
201
|
+
#Example: Then I should see all of the images: <accepts a list of image names(src)>
|
202
|
+
Then /^I should see all of the images:?$/ do |table|
|
203
|
+
table.raw.each do |text|
|
204
|
+
step "I should see the image \"#{text[0]}\""
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
#Example: Then I should see text "some alt text" as alt text for ImageSelector
|
209
|
+
Then /^(?:|I )should see text "(.*)" as alt text for (.*)$/ do |alt_text, locator|
|
210
|
+
selector, selector_type = selector_for(locator)
|
211
|
+
if selector_type == 'xpath'
|
212
|
+
patiently { page.should have_xpath("#{selector}[@alt='#{alt_text}']") }
|
213
|
+
elsif selector_type == 'css'
|
214
|
+
patiently { page.should have_css("#{selector}[alt='#{alt_text}']") }
|
215
|
+
else
|
216
|
+
patiently { page.should have_xpath("//img[contains(@src, '#{unquoted(selector)}')][@alt='#{alt_text}']") }
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
|
221
|
+
#************************ END IMAGES *********************************************
|
222
|
+
|
223
|
+
|
224
|
+
#************************ AUDIO **************************************************
|
225
|
+
|
226
|
+
#TODO: Add Examples
|
227
|
+
#Example: Then I should see the HTML5 audio source "Audio.mp3"
|
228
|
+
Then /^I should see the HTML5 audio source "([^"]*)"$/ do |audio_name|
|
229
|
+
page.should have_xpath("//audio[contains(@src, \"#{audio_name}\")] | //audio/source[contains(@src, \"#{audio_name}\")]")
|
230
|
+
end
|
231
|
+
#Example: Then I should see the HTML5 audio sources: <Accepts a list of audio file names>
|
232
|
+
Then /^I should see all of the HTML5 audio sources:?$/ do |table|
|
233
|
+
table.raw.each do |text|
|
234
|
+
step "I should see the HTML5 audio source \"#{text[0]}\""
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
|
239
|
+
#************************ END AUDIO **********************************************
|
240
|
+
|
241
|
+
|
242
|
+
#************************ VIDEO **************************************************
|
243
|
+
|
244
|
+
#TODO: Add Examples
|
245
|
+
#Example: Then I should see the HTML5 video source "video1.mp4"
|
246
|
+
Then /^I should see the HTML5 video source "([^"]*)"$/ do |video_name|
|
247
|
+
page.should have_xpath("//video[contains(@src, \"#{video_name}\")] | //video/source[contains(@src, \"#{video_name}\")]")
|
248
|
+
end
|
249
|
+
|
250
|
+
#Example: Then I should see the HTML5 video sources: <accepts a table of video sources>
|
251
|
+
Then /^I should see all of the HTML5 video sources:$/ do |table|
|
252
|
+
table.raw.each do |text|
|
253
|
+
step "I should see the HTML5 video source \"#{text[0]}\""
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
|
258
|
+
#************************ VIDEO **************************************************
|
259
|
+
|
260
|
+
|
261
|
+
#************************ OTHER ELEMENTS *****************************************
|
262
|
+
|
263
|
+
|
264
|
+
#TODO: Hate the language here, need to fix this
|
265
|
+
#Example: Then I should see 2 elements kind of table's header
|
266
|
+
Then /^I should see (\d+) elements? kind of (.+)$/ do |count, locator|
|
267
|
+
selector, xpath = selector_for(locator)
|
268
|
+
patiently do
|
269
|
+
actual_count = all(selector).count
|
270
|
+
count = count.to_i
|
271
|
+
actual_count.should eq(count)
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
#Example: And I should not see elements kind of paragraphs
|
276
|
+
Then /^I should not see elements? kind of (.+)$/ do |locator|
|
277
|
+
patiently { page.should_not have_css(selector_for(locator).first) }
|
278
|
+
end
|
279
|
+
|
280
|
+
|
281
|
+
#************************ END OTHER ELEMENTS *************************************
|
282
|
+
|
283
|
+
|
284
|
+
|
285
|
+
#Example: Not Implemented yet
|
286
|
+
Then /^I should see "(.*?)" as "(.*?)" value$/ do |arg1, arg2|
|
287
|
+
pending # express the regexp above with the code you wish you had
|
288
|
+
end
|
289
|
+
|
290
|
+
|
291
|
+
#*********************** SELECTOR SECTION ********************************
|
292
|
+
|
293
|
+
|
294
|
+
#Example: Then I should see the correct "MedicareGovHeader"
|
295
|
+
Then /^I should see the correct "(.*)"$/ do |section|
|
296
|
+
locators = selectors_from_section(section)
|
297
|
+
locators.each do |locator|
|
298
|
+
if is_css?(locator)
|
299
|
+
should have_css(selector_from(locator).first)
|
300
|
+
elsif is_xpath?(locator)
|
301
|
+
should have_xpath(selector_from(locator).first)
|
302
|
+
else
|
303
|
+
raise "Could not determine selector type for #{selector}"
|
304
|
+
end
|
305
|
+
end
|
306
|
+
end
|