SimpliTest 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +22 -0
- data/SimpliTest.gemspec +42 -0
- data/bin/SimpliTest +22 -0
- data/lib/SimpliTest.rb +2 -0
- data/lib/SimpliTest/cli/main.rb +305 -0
- data/lib/SimpliTest/config/configuration.rb +107 -0
- data/lib/SimpliTest/config/directory_paths.rb +36 -0
- data/lib/SimpliTest/config/environment.rb +67 -0
- data/lib/SimpliTest/config/local_environment.rb +20 -0
- data/lib/SimpliTest/config/profiles/chrome.rb +18 -0
- data/lib/SimpliTest/config/profiles/firefox.rb +14 -0
- data/lib/SimpliTest/config/profiles/internet_explorer.rb +12 -0
- data/lib/SimpliTest/config/profiles/phantom.rb +9 -0
- data/lib/SimpliTest/config/profiles/phantom_debug.rb +12 -0
- data/lib/SimpliTest/config/profiles/selenium.rb +13 -0
- data/lib/SimpliTest/config/screen_size.rb +25 -0
- data/lib/SimpliTest/config/steps.rb +8 -0
- data/lib/SimpliTest/helpers/data_validation.rb +60 -0
- data/lib/SimpliTest/helpers/file.rb +38 -0
- data/lib/SimpliTest/helpers/project_setup.rb +186 -0
- data/lib/SimpliTest/helpers/step_helpers/custom_chrome_helpers.rb +14 -0
- data/lib/SimpliTest/helpers/step_helpers/custom_date_helpers.rb +64 -0
- data/lib/SimpliTest/helpers/step_helpers/custom_form_helpers.rb +66 -0
- data/lib/SimpliTest/helpers/step_helpers/custom_phantomjs_helpers.rb +49 -0
- data/lib/SimpliTest/helpers/step_helpers/custom_selenium_helpers.rb +41 -0
- data/lib/SimpliTest/helpers/step_helpers/html_selectors_helpers.rb +154 -0
- data/lib/SimpliTest/helpers/step_helpers/navigation_helpers.rb +196 -0
- data/lib/SimpliTest/helpers/step_helpers/tolerance_for_sync_issues.rb +38 -0
- data/lib/SimpliTest/helpers/step_helpers/within_helpers.rb +6 -0
- data/lib/SimpliTest/helpers/windows_ui.rb +52 -0
- data/lib/SimpliTest/steps/debugging_steps.rb +19 -0
- data/lib/SimpliTest/steps/form_steps.rb +352 -0
- data/lib/SimpliTest/steps/form_verification_steps.rb +190 -0
- data/lib/SimpliTest/steps/navigation_steps.rb +47 -0
- data/lib/SimpliTest/steps/scoper.rb +42 -0
- data/lib/SimpliTest/steps/verification_steps.rb +306 -0
- data/lib/SimpliTest/tasks/document.rb +169 -0
- data/lib/SimpliTest/tasks/examples.rb +18 -0
- data/lib/SimpliTest/tasks/internal_release.rb +39 -0
- data/lib/SimpliTest/tasks/testinstall.rb +5 -0
- data/lib/SimpliTest/templates/NewSimpliTestProject/Readme.txt +5 -0
- data/lib/SimpliTest/templates/NewSimpliTestProject/cucumber.yml +26 -0
- data/lib/SimpliTest/templates/NewSimpliTestProject/documentation/step_definitions.html +87 -0
- data/lib/SimpliTest/templates/NewSimpliTestProject/features/specifications/RegressionTests/HelloWorld.feature +4 -0
- data/lib/SimpliTest/templates/NewSimpliTestProject/features/specifications/SmokeTest/HelloWorld.feature +4 -0
- data/lib/SimpliTest/templates/NewSimpliTestProject/features/specifications/accessibilityTests/HelloWorld.feature +4 -0
- data/lib/SimpliTest/templates/NewSimpliTestProject/features/support/config/environments.yml +11 -0
- data/lib/SimpliTest/templates/NewSimpliTestProject/features/support/config/pages.yml +26 -0
- data/lib/SimpliTest/templates/NewSimpliTestProject/features/support/config/selectors.yml +44 -0
- data/lib/SimpliTest/templates/NewSimpliTestProject/features/support/config/settings.yml +26 -0
- data/lib/SimpliTest/templates/NewSimpliTestProject/features/support/env.rb +33 -0
- data/lib/SimpliTest/templates/NewSimpliTestProject/license.txt +30 -0
- data/lib/SimpliTest/templates/document/css/style.css +28 -0
- data/lib/SimpliTest/templates/document/index.html +60 -0
- data/lib/version.rb +3 -0
- metadata +395 -0
@@ -0,0 +1,190 @@
|
|
1
|
+
|
2
|
+
#************************ TEXT FIELDS ********************************************
|
3
|
+
|
4
|
+
#Example: Then the "Name" field should contain "my name"
|
5
|
+
Then /^the "([^"]*)" field(?: within (.*))? should contain "([^"]*)"$/ do |field, parent, value|
|
6
|
+
with_scope(parent) do
|
7
|
+
field = get_element_from(field)
|
8
|
+
field_value = field.value
|
9
|
+
patiently { field_value.should =~ /#{value}/ }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
#Example: And the "Name" field should not contain "not my name"
|
14
|
+
Then /^the "([^"]*)" field(?: within (.*))? should not contain "([^"]*)"$/ do |field, parent, value|
|
15
|
+
with_scope(parent) do
|
16
|
+
field = get_element_from(field)
|
17
|
+
field_value = field.value
|
18
|
+
patiently { field_value.should_not =~ /#{value}/ }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
#************************ END TEXT FIELDS ****************************************
|
24
|
+
|
25
|
+
|
26
|
+
#************************ DROP DOWNS *********************************************
|
27
|
+
|
28
|
+
|
29
|
+
#Example: Then the select "Your favorite colors": Table
|
30
|
+
Then /^the select "([^"]*)" should have following options:$/ do |field, options|
|
31
|
+
options = options.transpose.raw
|
32
|
+
if options.size > 1
|
33
|
+
raise 'table should have only one column in this step!'
|
34
|
+
else
|
35
|
+
options = options.first
|
36
|
+
end
|
37
|
+
|
38
|
+
actual_options = get_element_from(field).all('option').map { |option| option.text }
|
39
|
+
patiently { options.should eq(actual_options) }
|
40
|
+
end
|
41
|
+
|
42
|
+
#Example: And the following values should be selected in "Your favorite colors": Table
|
43
|
+
Then /^the following values should be selected in "([^"]*)":$/ do |select_box, values|
|
44
|
+
values = values.transpose.raw
|
45
|
+
if values.size > 1
|
46
|
+
raise 'table should have only one column in this step!'
|
47
|
+
else
|
48
|
+
values = values.first
|
49
|
+
end
|
50
|
+
|
51
|
+
select_box= get_element_from(select_box)
|
52
|
+
unless select_box['multiple']
|
53
|
+
raise "this is not multiple select box!"
|
54
|
+
else
|
55
|
+
values.each do |value|
|
56
|
+
patiently { select_box.value.should include(value) }
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
#Example: And the following values should not be selected in "Your favorite colors":
|
62
|
+
Then /^the following values should not be selected in "([^"]*)":$/ do |select_box, values|
|
63
|
+
values = values.transpose.raw
|
64
|
+
if values.size > 1
|
65
|
+
raise 'table should have only one column in this step!'
|
66
|
+
else
|
67
|
+
values = values.first
|
68
|
+
end
|
69
|
+
|
70
|
+
select_box= get_element_from(select_box)
|
71
|
+
unless select_box['multiple']
|
72
|
+
raise "this is not multiple select box!"
|
73
|
+
else
|
74
|
+
values.each do |value|
|
75
|
+
patiently { select_box.value.should_not include(value) }
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
#************************ END DROP DOWNS******************************************
|
82
|
+
|
83
|
+
|
84
|
+
#************************ CHECKBOXES *********************************************
|
85
|
+
|
86
|
+
#Example: And the "Accept user agrement" checkbox should be checked
|
87
|
+
Then /^the "([^"]*)" checkbox(?: within (.*))? should be checked$/ do |label, parent|
|
88
|
+
with_scope(parent) do
|
89
|
+
field_checked = get_element_from(label)['checked']
|
90
|
+
patiently { field_checked.should be_truthy }
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
#Example: And the "Do not touch me" checkbox should not be checked
|
95
|
+
Then /^the "([^"]*)" checkbox(?: within (.*))? should not be checked$/ do |label, parent|
|
96
|
+
with_scope(parent) do
|
97
|
+
field_checked = get_element_from(label)['checked']
|
98
|
+
patiently { field_checked.should be_falsey }
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
#Example: And the "Sex" selectbox should contain: Table
|
103
|
+
Then /^the "(.*?)" selectbox should contain:$/ do |locator, options|
|
104
|
+
patiently do
|
105
|
+
select_options_for(locator).should == options.raw.join(' ')
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
#************************ END CHECKBOXES *****************************************
|
111
|
+
|
112
|
+
|
113
|
+
#************************ RADIO BUTTONS*******************************************
|
114
|
+
|
115
|
+
|
116
|
+
#Example: And the "radio 1" radio should be selected
|
117
|
+
Then /^the "(.*?)" radio should be selected$/ do |locator|
|
118
|
+
patiently do
|
119
|
+
element = get_element_from(locator)
|
120
|
+
element.should be_checked
|
121
|
+
end
|
122
|
+
end
|
123
|
+
#Example: And the "radio 2" radio should not be selected
|
124
|
+
Then /^the "(.*?)" radio should not be selected$/ do |locator|
|
125
|
+
patiently do
|
126
|
+
element = get_element_from(locator)
|
127
|
+
element.should_not be_checked
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
|
132
|
+
#************************ END RADIO BUTTONS***************************************
|
133
|
+
|
134
|
+
|
135
|
+
#************************ DATE FIELD *********************************************
|
136
|
+
|
137
|
+
|
138
|
+
#Example: Then "12/31/2013" should be the default date for "datepicker"
|
139
|
+
Then /^"(.*?)" should be the default date for "(.*?)"$/ do |date_rule, field|
|
140
|
+
patiently do
|
141
|
+
date_field = get_element_from(field)
|
142
|
+
date_field.value.should == calculated_date_from(date_rule)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
|
147
|
+
#************************ END DATE FIELD *****************************************
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
#****************Read from Excel
|
152
|
+
|
153
|
+
#****************User Name Field
|
154
|
+
|
155
|
+
#Example: Then I enter user name from excel in "Username"
|
156
|
+
Then /^I enter user name from excel in "(.*?)"$/ do |locator|
|
157
|
+
element = get_element_from(locator)
|
158
|
+
|
159
|
+
require 'spreadsheet'
|
160
|
+
Spreadsheet.client_encoding = 'UTF-8'
|
161
|
+
workbook = Spreadsheet.open 'C:\cmsmoketest\features\specifications\SmokeTest\book5.xls'
|
162
|
+
sheet1 = workbook.worksheet 0
|
163
|
+
sheet1.each 1 do |row|
|
164
|
+
#puts "#{row[0]} - #{row[1]} - #{row[2]}"
|
165
|
+
resolt = "#{row[0]}"
|
166
|
+
element.set resolt
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
|
171
|
+
#****************Password Field
|
172
|
+
|
173
|
+
#Example: Then I enter user name from excel in "Username"
|
174
|
+
Then(/^I enter password from excel in "([^"]*)" field$/) do |locator|
|
175
|
+
element = get_element_from(locator)
|
176
|
+
require 'spreadsheet'
|
177
|
+
Spreadsheet.client_encoding = 'UTF-8'
|
178
|
+
workbook = Spreadsheet.open 'C:\cmsmoketest\features\specifications\SmokeTest\book5.xls'
|
179
|
+
sheet1 = workbook.worksheet 0
|
180
|
+
sheet1.each 1 do |row|
|
181
|
+
resolt = "#{row[1]}"
|
182
|
+
element.set resolt
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
# Reads a plain text file
|
188
|
+
Then /[Rr]ead file "(.*?)"$/ do |filepath|
|
189
|
+
File.foreach(filepath) { |x| print 'Got ', x }
|
190
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#Example: Given I am on the "home" page
|
2
|
+
Given /^(?:|I )am on the "(.*)" (?:page|Page)$/ do |page_name|
|
3
|
+
visit path_to(page_name)
|
4
|
+
maximize_window
|
5
|
+
end
|
6
|
+
|
7
|
+
#Example: When I go to the "other" page
|
8
|
+
When /^(?:|I )go to the "(.*)" page$/ do |page_name|
|
9
|
+
visit path_to(page_name)
|
10
|
+
end
|
11
|
+
|
12
|
+
#Example: When I follow "Privacy Policy"
|
13
|
+
When /^(?:|I )follow "([^"]*)"$/ do |link|
|
14
|
+
patiently { click_link(link) }
|
15
|
+
end
|
16
|
+
|
17
|
+
#Example: When I maximize the window
|
18
|
+
And /^(?:|I )maximize the window$/ do
|
19
|
+
maximize_window
|
20
|
+
end
|
21
|
+
|
22
|
+
#Example: And I switch to the last window
|
23
|
+
And /^(?:|I )switch to the (.*) window$/ do |first_or_last|
|
24
|
+
change_window(first_or_last)
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
#Example: And I switch to the frame
|
29
|
+
And /^(?:|I )[Ss]witch to the frame$/ do
|
30
|
+
page.driver.browser.switch_to.frame(1)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Accepts modal popups if they exist or fails gracefully if not
|
34
|
+
|
35
|
+
#Example: Then I Accept the popup window
|
36
|
+
Then /^(?:|I )[Aa]ccept (?:|the )popup(?:| window)$/ do
|
37
|
+
page.driver.browser.switch_to.alert.accept rescue Selenium::WebDriver::Error::NoAlertPresentError
|
38
|
+
end
|
39
|
+
|
40
|
+
#Dismisses modal popups if they exist or fails gracefully if not
|
41
|
+
|
42
|
+
#Example: Then I Dismiss the popup window
|
43
|
+
Then /^(?:|I )[Dd]ismiss (?:|the )popup(?:| window)$/ do
|
44
|
+
page.driver.browser.switch_to.alert.dismiss rescue Selenium::WebDriver::Error::NoAlertPresentError
|
45
|
+
end
|
46
|
+
|
47
|
+
#-------------------------------------------------------
|
@@ -0,0 +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
|
+
|
@@ -0,0 +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
|