bdd-helper 0.0.4 → 1.0
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 +5 -5
- data/lib/bdd-helper.rb +15 -9
- data/lib/demo.feature +141 -0
- data/lib/steps/action/check_steps.rb +19 -0
- data/lib/steps/action/choose_steps.rb +11 -0
- data/lib/steps/action/click_steps.rb +37 -0
- data/lib/steps/action/fill_steps.rb +77 -0
- data/lib/steps/action/key_action_steps.rb +59 -0
- data/lib/steps/action/select_steps.rb +16 -0
- data/lib/steps/assertion/assertion_steps.rb +202 -0
- data/lib/steps/config.rb +18 -3
- data/lib/steps/customized/customized_steps.rb +37 -0
- data/lib/steps/global/global_context.rb +9 -0
- data/lib/steps/util/browser_util_methods.rb +12 -0
- data/lib/steps/util/browser_util_steps.rb +178 -0
- metadata +48 -42
- data/lib/steps/assertion.rb +0 -92
- data/lib/steps/browser.rb +0 -35
- data/lib/steps/check.rb +0 -24
- data/lib/steps/click.rb +0 -26
- data/lib/steps/fill.rb +0 -44
- data/lib/steps/select.rb +0 -38
- data/lib/steps/unclassified.rb +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7a2f6404fb5d8c81b9e9537f34038036725ee9f8081cc336b6656efb23d14418
|
4
|
+
data.tar.gz: c219637921c7e57893839c417ee330a3dae119bc2363c518ca3cfe9373d842ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f03a9b36f0e1e47104df4672db7295f24a66832c184478468cf3f15bcc66a9daaf0d44e5f89227e4187df7215f1dbed5f30ca2671bbc1704afbb5a134d44de7
|
7
|
+
data.tar.gz: 9739cee85ca0997bafa0e52ddd0da7c111bbbc7a894e608ba267f80c90448d91a1aa9f2d1ea8b6174752a4be38741a5f17b779656026e5f59f74913d8ac690b3
|
data/lib/bdd-helper.rb
CHANGED
@@ -1,17 +1,23 @@
|
|
1
1
|
require 'capybara'
|
2
|
-
require 'capybara/cucumber'
|
3
|
-
require 'capybara/dsl'
|
4
2
|
require 'capybara/rspec'
|
5
3
|
require 'rspec'
|
6
4
|
require 'rspec/expectations'
|
7
5
|
require 'rspec/matchers'
|
8
6
|
require 'selenium/webdriver'
|
9
7
|
require 'selenium/webdriver/common/wait'
|
8
|
+
require 'faker'
|
10
9
|
|
11
|
-
|
12
|
-
require 'steps/
|
13
|
-
require 'steps/
|
14
|
-
require 'steps/
|
15
|
-
require 'steps/
|
16
|
-
require 'steps/
|
17
|
-
require 'steps/
|
10
|
+
|
11
|
+
require 'steps/action/check_steps'
|
12
|
+
require 'steps/action/choose_steps'
|
13
|
+
require 'steps/action/click_steps'
|
14
|
+
require 'steps/action/fill_steps'
|
15
|
+
require 'steps/action/key_action_steps'
|
16
|
+
require 'steps/action/select_steps'
|
17
|
+
require 'steps/assertion/assertion_steps'
|
18
|
+
require 'steps/customized/customized_steps'
|
19
|
+
require 'steps/util/browser_util_steps'
|
20
|
+
require 'steps/util/browser_util_methods'
|
21
|
+
require 'steps/config'
|
22
|
+
require 'steps/global/global_context'
|
23
|
+
require 'steps/config'
|
data/lib/demo.feature
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
Feature: demo features
|
2
|
+
|
3
|
+
|
4
|
+
Scenario: steps
|
5
|
+
####################################
|
6
|
+
# BROWSER UTIL
|
7
|
+
When visit base page
|
8
|
+
When visit "http://www.example.com" url
|
9
|
+
When get current url
|
10
|
+
When get window title
|
11
|
+
|
12
|
+
When scroll top of the page
|
13
|
+
When scroll bottom of the page
|
14
|
+
When scroll 250 px up the page
|
15
|
+
When scroll 250 px down the page
|
16
|
+
|
17
|
+
When focus to element by "Agree Button" text
|
18
|
+
|
19
|
+
When go back
|
20
|
+
When go forward
|
21
|
+
When refresh the page
|
22
|
+
|
23
|
+
When accept alert
|
24
|
+
When dismiss alert
|
25
|
+
|
26
|
+
When open a new window
|
27
|
+
When switch to first window
|
28
|
+
When switch to last window
|
29
|
+
When switch to first window
|
30
|
+
When open a new tab
|
31
|
+
When switch to first tab
|
32
|
+
When switch to last tab
|
33
|
+
When switch to window by "Welcome" title
|
34
|
+
|
35
|
+
When close window
|
36
|
+
When maximize window
|
37
|
+
When get window size
|
38
|
+
When resize window to 123 width 123 height
|
39
|
+
# BROWSER UTIL
|
40
|
+
####################################
|
41
|
+
|
42
|
+
########################################################################
|
43
|
+
|
44
|
+
####################################
|
45
|
+
# ASSERTION
|
46
|
+
Then verify below texts are displayed:
|
47
|
+
| Welcome |
|
48
|
+
| Thank you |
|
49
|
+
Then verify below texts are not displayed:
|
50
|
+
| Welcome |
|
51
|
+
| Thank you |
|
52
|
+
Then verify "text" text is displayed
|
53
|
+
Then verify "text" text is not displayed
|
54
|
+
|
55
|
+
|
56
|
+
Then verify ".success-message" element has "Welcome" text
|
57
|
+
Then verify ".fail-message" element has not "Welcome" text
|
58
|
+
|
59
|
+
Then verify "Login" button is displayed
|
60
|
+
Then verify "Sign In " button is not displayed
|
61
|
+
|
62
|
+
Then verify "Login" button is enabled
|
63
|
+
Then verify "Logout" button is disabled
|
64
|
+
|
65
|
+
Then verify current url is "http:www.example.com"
|
66
|
+
Then verify current path is "/login"
|
67
|
+
|
68
|
+
Then verify page title is "Welcome"
|
69
|
+
Then verify page title contains "Welcome"
|
70
|
+
|
71
|
+
Then verify "Successful Login" alert message is displayed
|
72
|
+
Then verify "Incorrect login or password." alert message is not displayed
|
73
|
+
|
74
|
+
|
75
|
+
Then verify "Terms & Conditions" checkbox is checked
|
76
|
+
Then verify "Terms & Conditions" checkbox is unchecked
|
77
|
+
|
78
|
+
Then verify "Male" radio button is selected
|
79
|
+
Then verify "Female" radio button is not selected
|
80
|
+
Then verify "cars" dropdown contains "audi" option
|
81
|
+
Then verify "cars" dropdown does not contain "audi" option
|
82
|
+
Then verify "cars" dropdown contains the options below:
|
83
|
+
| au |
|
84
|
+
| bm |
|
85
|
+
|
86
|
+
Then verify "audi" options is selected from "cars" dropdown
|
87
|
+
Then verify "audi" options is not selected from "cars" dropdown
|
88
|
+
# ASSERTION
|
89
|
+
####################################
|
90
|
+
|
91
|
+
########################################################################
|
92
|
+
|
93
|
+
####################################
|
94
|
+
# ACTION
|
95
|
+
When fill "Username" with "value"
|
96
|
+
When fill "First Name" with random first name
|
97
|
+
When fill "Last Name" with random last name
|
98
|
+
When fill "Email" with random email
|
99
|
+
When fill "Phone Number" with random phone number
|
100
|
+
When fill "Address" with random address
|
101
|
+
When fill "Zip Code" with random zip code
|
102
|
+
|
103
|
+
When fill inputs:
|
104
|
+
| username | test user |
|
105
|
+
| password | pas123 |
|
106
|
+
|
107
|
+
When click "Contact Us" link
|
108
|
+
When click "Sign In" button
|
109
|
+
|
110
|
+
When check "Terms & Conditions" checkbox
|
111
|
+
When uncheck "Privacy Policy" checkbox
|
112
|
+
|
113
|
+
When choose "Male" radio button
|
114
|
+
|
115
|
+
When clear "First Name" input
|
116
|
+
When select "audi" from "cars" dropdown
|
117
|
+
|
118
|
+
When press "#login" enter
|
119
|
+
When press "#username" delete
|
120
|
+
When press ".list-selector" down
|
121
|
+
When press ".list-selector" up
|
122
|
+
When press ".list-selector" left
|
123
|
+
When press ".list-selector" right
|
124
|
+
|
125
|
+
When click "Logout" under ".account-menu"
|
126
|
+
When click "Logout" item 0 under ".account-menu" menu item 0
|
127
|
+
|
128
|
+
When hover over "Account"
|
129
|
+
# ACTION
|
130
|
+
####################################
|
131
|
+
|
132
|
+
########################################################################
|
133
|
+
|
134
|
+
####################################
|
135
|
+
# CUSTOMIZED
|
136
|
+
When hover to "css" value ".list_item" web element
|
137
|
+
When wait 2 seconds
|
138
|
+
When generate 10 char random string and type into type "css" value ".username"
|
139
|
+
When execute javascript code "window.location.reload()"
|
140
|
+
# CUSTOMIZED
|
141
|
+
####################################
|
@@ -0,0 +1,19 @@
|
|
1
|
+
begin
|
2
|
+
When(/^check "([^"]*)" checkbox$/) do |checkbox_name_id_or_label|
|
3
|
+
"
|
4
|
+
Checkbox can be name, id and label text
|
5
|
+
"
|
6
|
+
# E.g : And check "Terms & Conditions" checkbox
|
7
|
+
check(checkbox_name_id_or_label, wait: BddHelper.timeout)
|
8
|
+
end
|
9
|
+
|
10
|
+
When(/^uncheck "([^"]*)" checkbox$/) do |checkbox_name_id_or_label|
|
11
|
+
"
|
12
|
+
Checkbox can be name, id and label text
|
13
|
+
"
|
14
|
+
# E.g : And uncheck "Privacy Policy" checkbox
|
15
|
+
uncheck(checkbox_name_id_or_label, wait: BddHelper.timeout)
|
16
|
+
end
|
17
|
+
rescue StandardError => e
|
18
|
+
puts e
|
19
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
begin
|
2
|
+
When(/^choose "([^"]*)" radio button$/) do |radio_button_id_name_or_label|
|
3
|
+
"
|
4
|
+
Radio Button can be name, id and label text
|
5
|
+
"
|
6
|
+
# E.g : And choose "Male" radio button
|
7
|
+
choose(radio_button_id_name_or_label, wait: BddHelper.timeout)
|
8
|
+
end
|
9
|
+
rescue StandardError => e
|
10
|
+
puts e
|
11
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
begin
|
2
|
+
When(/^click "([^"]*)" button$/) do |button_id_title_or_text|
|
3
|
+
"
|
4
|
+
Button can be name, id, value or title
|
5
|
+
"
|
6
|
+
# E.g : And click "Sign In" button
|
7
|
+
click_button(button_id_title_or_text, wait: BddHelper.timeout)
|
8
|
+
end
|
9
|
+
|
10
|
+
When(/^click "([^"]*)" link$/) do |link_id_title_or_text|
|
11
|
+
"
|
12
|
+
Link can be id, text or title
|
13
|
+
"
|
14
|
+
# E.g : And click "Contact Us" link
|
15
|
+
click_link(link_id_title_or_text, wait: BddHelper.timeout)
|
16
|
+
end
|
17
|
+
|
18
|
+
When(/^click "([^"]*)" under "([^"]*)"$/) do |link, menu|
|
19
|
+
"
|
20
|
+
Finds a element with capybara default_selector, link can be id, text or title
|
21
|
+
"
|
22
|
+
# E.g : And click "Logout" under ".account-menu"
|
23
|
+
find(menu, wait: BddHelper.timeout).hover
|
24
|
+
click_link(link, wait: BddHelper.timeout)
|
25
|
+
end
|
26
|
+
|
27
|
+
When(/^click "([^"]*)" item (\d+) under "([^"]*)" menu item (\d+)$/) do |link, link_item, menu, menu_item|
|
28
|
+
"
|
29
|
+
Link can be id, text or title, menu can be text content
|
30
|
+
"
|
31
|
+
# E.g : And click "Logout" item 2 under "Account" menu item 1
|
32
|
+
(page.all(:xpath, "//*[text()='#{menu}']", wait: BddHelper.timeout)[menu_item]).hover
|
33
|
+
(page.all(:link, link, wait: BddHelper.timeout)[link_item]).click
|
34
|
+
end
|
35
|
+
rescue StandardError => e
|
36
|
+
puts e
|
37
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
begin
|
2
|
+
When(/^fill "([^"]*)" with "([^"]*)"$/) do |locator, text|
|
3
|
+
"
|
4
|
+
Fillable field can be name, id, placeholder or label text
|
5
|
+
"
|
6
|
+
# E.g : And fill "Name" with "John"
|
7
|
+
fill_in(locator, with: text, wait: BddHelper.timeout)
|
8
|
+
end
|
9
|
+
|
10
|
+
When(/^fill inputs:$/) do |table|
|
11
|
+
"
|
12
|
+
Fillable field can be name, id, placeholder or label text
|
13
|
+
"
|
14
|
+
# E.g : And fill inputs:
|
15
|
+
# | username | test user |
|
16
|
+
# | password | pass123 |
|
17
|
+
table.raw.each { |raw| fill_in(raw[0], with: raw[1], wait: BddHelper.timeout) }
|
18
|
+
end
|
19
|
+
|
20
|
+
When(/^fill "([^"]*)" with random (first name)$/) do |locator, arg|
|
21
|
+
"
|
22
|
+
Fillable field can be name, id, placeholder or label text
|
23
|
+
"
|
24
|
+
# E.g : And fill "First Name" with random first name
|
25
|
+
fill_in(locator, with: Faker::Name.first_name, wait: BddHelper.timeout)
|
26
|
+
end
|
27
|
+
|
28
|
+
When(/^fill "([^"]*)" with random (last name)$/) do |locator, arg|
|
29
|
+
"
|
30
|
+
Fillable field can be name, id, placeholder or label text
|
31
|
+
"
|
32
|
+
# E.g : And fill "Last Name" with random last name
|
33
|
+
fill_in(locator, with: Faker::Name.last_name, wait: BddHelper.timeout)
|
34
|
+
end
|
35
|
+
|
36
|
+
When(/^fill "([^"]*)" with random (email)$/) do |locator, arg|
|
37
|
+
"
|
38
|
+
Fillable field can be name, id, placeholder or label text
|
39
|
+
"
|
40
|
+
# E.g : And fill "Email" with random email
|
41
|
+
fill_in(locator, with: Faker::Internet.safe_email, wait: BddHelper.timeout)
|
42
|
+
end
|
43
|
+
|
44
|
+
When(/^fill "([^"]*)" with random (phone number)$/) do |locator, arg|
|
45
|
+
"
|
46
|
+
Fillable field can be name, id, placeholder or label text
|
47
|
+
"
|
48
|
+
# E.g : And fill "Phone Number" with random phone number
|
49
|
+
fill_in(locator, with: Array.new(7) { Array(0..9).sample }.join, wait: BddHelper.timeout)
|
50
|
+
end
|
51
|
+
|
52
|
+
When(/^fill "([^"]*)" with random (address)$/) do |locator, arg|
|
53
|
+
"
|
54
|
+
Fillable field can be name, id, placeholder or label text
|
55
|
+
"
|
56
|
+
# E.g : And fill "Address" with random address
|
57
|
+
fill_in(locator, with: Faker::Address.full_address, wait: BddHelper.timeout)
|
58
|
+
end
|
59
|
+
|
60
|
+
When(/^fill "([^"]*)" with random (zip code)$/) do |locator, arg|
|
61
|
+
"
|
62
|
+
Fillable field can be name, id, placeholder or label text
|
63
|
+
"
|
64
|
+
# E.g : And fill "Zip Code" with random zip code
|
65
|
+
fill_in(locator, with: Faker::Address.zip_code, wait: BddHelper.timeout)
|
66
|
+
end
|
67
|
+
|
68
|
+
When(/^clear "([^"]*)" input$/) do |locator|
|
69
|
+
"
|
70
|
+
Fillable field can be name, id, placeholder or label text
|
71
|
+
"
|
72
|
+
# E.g : And clear "Name" input
|
73
|
+
fill_in(locator, with: '', fill_options: { clear: :backspace }, wait: BddHelper.timeout)
|
74
|
+
end
|
75
|
+
rescue StandardError => e
|
76
|
+
puts e
|
77
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
begin
|
2
|
+
When(/^press "([^"]*)" (enter)$/) do |locator, arg|
|
3
|
+
"
|
4
|
+
Locator should be capybara default_selector
|
5
|
+
"
|
6
|
+
# E.g : And press "#login" enter
|
7
|
+
find(locator, wait: BddHelper.timeout).native.send_keys(:return)
|
8
|
+
end
|
9
|
+
|
10
|
+
When(/^press "([^"]*)" (down)$/) do |locator, arg|
|
11
|
+
"
|
12
|
+
Locator should be capybara default_selector
|
13
|
+
"
|
14
|
+
# E.g : And press ".list-selector" down
|
15
|
+
find(locator, wait: BddHelper.timeout).native.send_keys(:down)
|
16
|
+
end
|
17
|
+
|
18
|
+
When(/^press "([^"]*)" (up)$/) do |locator, arg|
|
19
|
+
"
|
20
|
+
Locator should be capybara default_selector
|
21
|
+
"
|
22
|
+
# E.g : And press ".list-selector" up
|
23
|
+
find(locator, wait: BddHelper.timeout).native.send_keys(:up)
|
24
|
+
end
|
25
|
+
|
26
|
+
When(/^press "([^"]*)" (delete)$/) do |locator, arg|
|
27
|
+
"
|
28
|
+
Locator should be capybara default_selector
|
29
|
+
"
|
30
|
+
# E.g : And press "#username" delete
|
31
|
+
find(locator, wait: BddHelper.timeout).native.clear
|
32
|
+
end
|
33
|
+
|
34
|
+
When(/^press "([^"]*)" (left)$/) do |locator, arg|
|
35
|
+
"
|
36
|
+
Locator should be capybara default_selector
|
37
|
+
"
|
38
|
+
# E.g : And press ".list-selector" left
|
39
|
+
find(locator, wait: BddHelper.timeout).native.send_keys(:left)
|
40
|
+
end
|
41
|
+
|
42
|
+
When(/^press "([^"]*)" (right)$/) do |locator, arg|
|
43
|
+
"
|
44
|
+
Locator should be capybara default_selector
|
45
|
+
"
|
46
|
+
# E.g : And press ".list-selector" right
|
47
|
+
find(locator, wait: BddHelper.timeout).native.send_keys(:right)
|
48
|
+
end
|
49
|
+
|
50
|
+
When(/^hover over "([^"]*)"$/) do |text|
|
51
|
+
# E.g : And hover over "Account"
|
52
|
+
find(:xpath, "//*[text()='#{text}']", wait: BddHelper.timeout).hover
|
53
|
+
end
|
54
|
+
|
55
|
+
rescue StandardError => e
|
56
|
+
puts e
|
57
|
+
|
58
|
+
end
|
59
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
begin
|
2
|
+
When(/^select "([^"]*)" from "([^"]*)" dropdown$/) do |option, dropdown_id_name_or_label_text|
|
3
|
+
"
|
4
|
+
Dropdown can be id, name, label
|
5
|
+
"
|
6
|
+
# E.g : And select "United States" from "Country" dropdown
|
7
|
+
unless has_select?(dropdown_id_name_or_label_text)
|
8
|
+
raise "#{dropdown_id_name_or_label_text} is not a select box."
|
9
|
+
end
|
10
|
+
select(option, from: dropdown_id_name_or_label_text, wait: BddHelper.timeout)
|
11
|
+
page.should have_select(dropdown_id_name_or_label_text, selected: option)
|
12
|
+
end
|
13
|
+
|
14
|
+
rescue StandardError => e
|
15
|
+
puts e
|
16
|
+
end
|
@@ -0,0 +1,202 @@
|
|
1
|
+
# frozen_string = true
|
2
|
+
begin
|
3
|
+
Then(/^verify "([^"]*)" text is displayed$/) do |text|
|
4
|
+
# E.g : Then verify "Thank you for filling in the form" text is displayed
|
5
|
+
page.should have_text(text, wait: BddHelper.timeout)
|
6
|
+
end
|
7
|
+
|
8
|
+
Then(/^verify "([^"]*)" text is not displayed$/) do |text|
|
9
|
+
# E.g : Then verify "Thank you for filling in the form" text is not displayed
|
10
|
+
page.should_not have_text(text, wait: BddHelper.timeout)
|
11
|
+
end
|
12
|
+
|
13
|
+
Then(/^verify "([^"]*)" element has "([^"]*)" text$/) do |selector, text|
|
14
|
+
"
|
15
|
+
Selector should be a css selector
|
16
|
+
"
|
17
|
+
# E.g : Then verify ".success-message" element has "Welcome" text
|
18
|
+
page.should have_selector(selector, text: text, wait: BddHelper.timeout)
|
19
|
+
end
|
20
|
+
|
21
|
+
Then(/^verify "([^"]*)" element has not "([^"]*)" text$/) do |selector, text|
|
22
|
+
"
|
23
|
+
Selector should be a css selector
|
24
|
+
"
|
25
|
+
# E.g : Then verify ".success-message" element has not "Welcome" text
|
26
|
+
page.should_not have_selector(selector, text: text, wait: BddHelper.timeout)
|
27
|
+
end
|
28
|
+
|
29
|
+
Then(/^verify "([^"]*)" button is displayed$/) do |button|
|
30
|
+
"
|
31
|
+
Button can be id, name, value, or title
|
32
|
+
"
|
33
|
+
# E.g : Then verify "Login" button is displayed
|
34
|
+
page.should have_button(button, wait: BddHelper.timeout)
|
35
|
+
end
|
36
|
+
|
37
|
+
Then(/^verify "([^"]*)" button is not displayed$/) do |button|
|
38
|
+
"
|
39
|
+
Button can be id, name, value, or title
|
40
|
+
"
|
41
|
+
# E.g : Then verify "Login" button is not displayed
|
42
|
+
page.should_not have_button(button, wait: BddHelper.timeout)
|
43
|
+
end
|
44
|
+
|
45
|
+
Then(/^verify "([^"]*)" button is enabled$/) do |button|
|
46
|
+
"
|
47
|
+
Button can be id, name, value, or title
|
48
|
+
"
|
49
|
+
# E.g : Then verify "Login" button is enabled
|
50
|
+
page.should have_button(button, disabled: false, wait: BddHelper.timeout)
|
51
|
+
end
|
52
|
+
|
53
|
+
Then(/^verify "([^"]*)" button is disabled$/) do |button|
|
54
|
+
"
|
55
|
+
Button can be id, name, value, or title
|
56
|
+
"
|
57
|
+
# E.g : Then verify "Login" button is disabled
|
58
|
+
page.should have_button(button, disabled: true, wait: BddHelper.timeout)
|
59
|
+
end
|
60
|
+
|
61
|
+
Then(/^verify current url is "([^"]*)"$/) do |expected_url|
|
62
|
+
"
|
63
|
+
Expected url should be fully URL of the current page
|
64
|
+
"
|
65
|
+
# E.g : Then verify current url is "http:www.example.com"
|
66
|
+
current_url.should == expected_url
|
67
|
+
end
|
68
|
+
|
69
|
+
Then(/^verify current path is "([^"]*)"$/) do |current_path|
|
70
|
+
"
|
71
|
+
Path should be path+query of the current page
|
72
|
+
"
|
73
|
+
# E.g : Then verify current path is "/login"
|
74
|
+
assert_current_path(current_path)
|
75
|
+
end
|
76
|
+
|
77
|
+
Then(/^verify page title is "([^"]*)"$/) do |page_title|
|
78
|
+
"
|
79
|
+
Title should be title of the current page
|
80
|
+
"
|
81
|
+
# E.g : Then verify page title is "Welcome"
|
82
|
+
assert_title(page_title, wait: BddHelper.timeout)
|
83
|
+
end
|
84
|
+
|
85
|
+
Then(/^verify page title contains "([^"]*)"$/) do |text|
|
86
|
+
"
|
87
|
+
Title should be contains of the current page title
|
88
|
+
"
|
89
|
+
# E.g : Then verify page title contains "Welcome"
|
90
|
+
title.should include(text)
|
91
|
+
end
|
92
|
+
|
93
|
+
Then(/^verify below texts are displayed:$/) do |table|
|
94
|
+
# E.g : Then verify below texts are displayed:
|
95
|
+
# | Welcome |
|
96
|
+
# | Thank you |
|
97
|
+
table.raw.each { |raw| page.should have_text(raw[0], wait: BddHelper.timeout) }
|
98
|
+
end
|
99
|
+
|
100
|
+
Then(/^verify below texts are not displayed:$/) do |table|
|
101
|
+
# E.g : Then verify below texts are not displayed:
|
102
|
+
# | Welcome |
|
103
|
+
# | Thank you |
|
104
|
+
table.raw.each { |raw| page.should_not have_text(raw[0], wait: BddHelper.timeout) }
|
105
|
+
end
|
106
|
+
|
107
|
+
Then(/^verify "([^"]*)" alert message is displayed$/) do |text|
|
108
|
+
# E.g : Then verify "Successful" alert message is displayed
|
109
|
+
text.should == page.driver.browser.switch_to.alert.text
|
110
|
+
end
|
111
|
+
|
112
|
+
Then(/^verify "([^"]*)" alert message is not displayed$/) do |text|
|
113
|
+
# E.g : Then verify "Successful" alert message is not displayed
|
114
|
+
text.should_not == page.driver.browser.switch_to.alert.text
|
115
|
+
end
|
116
|
+
|
117
|
+
Then(/^verify "([^"]*)" checkbox is checked$/) do |checkbox|
|
118
|
+
"
|
119
|
+
Checkbox can be name, id and label text
|
120
|
+
"
|
121
|
+
# E.g : Then verify "Terms & Conditions" checkbox is checked
|
122
|
+
expect(page).to have_field(checkbox, checked: true, visible: true, wait: BddHelper.timeout)
|
123
|
+
end
|
124
|
+
|
125
|
+
Then(/^verify "([^"]*)" checkbox is unchecked/) do |checkbox|
|
126
|
+
"
|
127
|
+
Checkbox can be name, id and label text
|
128
|
+
"
|
129
|
+
# E.g : Then verify "Terms & Conditions" checkbox is unchecked
|
130
|
+
expect(page).to have_field(checkbox, checked: false, visible: true, wait: BddHelper.timeout)
|
131
|
+
end
|
132
|
+
|
133
|
+
Then(/^verify "([^"]*)" radio button is selected$/) do |radio_button|
|
134
|
+
"
|
135
|
+
Radio Button can be name, id and label text
|
136
|
+
"
|
137
|
+
# E.g : Then verify "Male" radio button is selected
|
138
|
+
expect(page).to have_field(radio_button, checked: true, visible: true, wait: BddHelper.timeout)
|
139
|
+
end
|
140
|
+
|
141
|
+
Then(/^verify "([^"]*)" radio button is not selected$/) do |radio_button|
|
142
|
+
"
|
143
|
+
Radio Button can be name, id and label text
|
144
|
+
"
|
145
|
+
# E.g : Then verify "Female" radio button is not selected
|
146
|
+
expect(page).to have_field(radio_button, checked: false, visible: true, wait: BddHelper.timeout)
|
147
|
+
end
|
148
|
+
|
149
|
+
Then(/^verify "([^"]*)" dropdown contains "([^"]*)" option$/) do |dropdown, option_text|
|
150
|
+
"
|
151
|
+
Dropdown can be id, name, label
|
152
|
+
"
|
153
|
+
# E.g : Then verify "Country" dropdown contains "United States" option
|
154
|
+
page.should have_select(dropdown, with_options: [option_text], wait: BddHelper.timeout)
|
155
|
+
end
|
156
|
+
|
157
|
+
Then(/^verify "([^"]*)" dropdown does not contain "([^"]*)" option$/) do |dropdown, option_text|
|
158
|
+
"
|
159
|
+
Dropdown can be id, name, label
|
160
|
+
"
|
161
|
+
# E.g : Then verify "Country" dropdown does not contain "United States" option
|
162
|
+
page.should_not have_select(dropdown, with_options: [option_text], wait: BddHelper.timeout)
|
163
|
+
end
|
164
|
+
|
165
|
+
Then(/^verify "([^"]*)" dropdown contains the options below:$/) do |dropdown, table|
|
166
|
+
"
|
167
|
+
Dropdown can be id, name, label
|
168
|
+
"
|
169
|
+
# E.g : Then verify "Country" dropdown contains the options below:
|
170
|
+
# |United States|
|
171
|
+
# |Turkey |
|
172
|
+
table.raw.each { |raw| page.should have_select(dropdown, with_options: [raw[0]], wait: BddHelper.timeout) }
|
173
|
+
end
|
174
|
+
|
175
|
+
Then(/^verify "([^"]*)" dropdown does not contain the options below:$/) do |dropdown, table|
|
176
|
+
"
|
177
|
+
Dropdown can be id, name, label
|
178
|
+
"
|
179
|
+
# E.g : Then verify "Country" dropdown does not contain the options below:
|
180
|
+
# |United States|
|
181
|
+
# |Turkey |
|
182
|
+
table.raw.each { |raw| page.should_not have_select(dropdown, with_options: [raw[0]], wait: BddHelper.timeout) }
|
183
|
+
end
|
184
|
+
|
185
|
+
Then(/^verify "([^"]*)" options is selected from "([^"]*)" dropdown$/) do |option, dropdown|
|
186
|
+
"
|
187
|
+
Dropdown can be id, name, label
|
188
|
+
"
|
189
|
+
# E.g : Then verify "United States" options is selected from "Country" dropdown
|
190
|
+
page.should have_select(dropdown, selected: option, wait: BddHelper.timeout)
|
191
|
+
end
|
192
|
+
|
193
|
+
Then(/^verify "([^"]*)" options is not selected from "([^"]*)" dropdown$/) do |option, dropdown|
|
194
|
+
"
|
195
|
+
Dropdown can be id, name, label
|
196
|
+
"
|
197
|
+
# E.g : Then verify "United States" options is not selected from "Country" dropdown
|
198
|
+
page.should_not have_select(dropdown, selected: option, wait: BddHelper.timeout)
|
199
|
+
end
|
200
|
+
rescue StandardError => e
|
201
|
+
puts e
|
202
|
+
end
|
data/lib/steps/config.rb
CHANGED
@@ -1,5 +1,20 @@
|
|
1
|
-
module
|
1
|
+
module BddHelper
|
2
|
+
class << self
|
3
|
+
attr_accessor :timeout, :base_url
|
2
4
|
|
3
|
-
|
5
|
+
def timeout
|
6
|
+
@timeout || 20
|
7
|
+
end
|
4
8
|
|
5
|
-
|
9
|
+
def base_url
|
10
|
+
unless @base_url.nil? || @base_url.match?(URI::DEFAULT_PARSER.make_regexp)
|
11
|
+
raise ArgumentError, "BddHelper.base_url should be set to a url (http://www.example.com). Attempted to set #{@base_url.inspect}."
|
12
|
+
end
|
13
|
+
@base_url || nil
|
14
|
+
end
|
15
|
+
|
16
|
+
def configure
|
17
|
+
yield self
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
begin
|
2
|
+
When(/^hover to "([^"]*)" value "([^"]*)" web element$/) do |web_element_type, web_element|
|
3
|
+
"
|
4
|
+
Web element type can be css, xpath, id, field, link, button, link_or_button or label
|
5
|
+
"
|
6
|
+
# E.g: And hover to "css" value ".list_item" web element
|
7
|
+
find(:"#{web_element_type}".to_sym, web_element).hover
|
8
|
+
end
|
9
|
+
|
10
|
+
When(/^wait (\d+) (?:second|seconds)$/) do |sec_value|
|
11
|
+
"
|
12
|
+
Second's value should be integer
|
13
|
+
"
|
14
|
+
# E.g: And wait 2 seconds
|
15
|
+
sleep sec_value.to_i
|
16
|
+
end
|
17
|
+
|
18
|
+
And(/^generate (\d+) char random string and type into type "([^"]*)" value "([^"]*)"$/) do |count, web_element_type, web_element|
|
19
|
+
"
|
20
|
+
Web element type can be css, xpath, id, field, fillable_field or label
|
21
|
+
"
|
22
|
+
# E.g: And generate "10" char random string and type into type "id" value "mobile"
|
23
|
+
charset = (0...count).map { rand(65..90).chr }.join
|
24
|
+
find(:"#{web_element_type}".to_sym, web_element, wait: BddHelper.timeout).set(charset)
|
25
|
+
end
|
26
|
+
|
27
|
+
And(/^execute javascript code "([^"]*)"/) do |code|
|
28
|
+
"
|
29
|
+
Code should be javascript code
|
30
|
+
"
|
31
|
+
# E.g : And execute javascript code "window.location.reload()"
|
32
|
+
page.execute_script(code)
|
33
|
+
end
|
34
|
+
|
35
|
+
rescue StandardError => e
|
36
|
+
puts e
|
37
|
+
end
|
@@ -0,0 +1,178 @@
|
|
1
|
+
begin
|
2
|
+
When(/^scroll (\d+) px (down) the page$/) do |pixel, arg|
|
3
|
+
"
|
4
|
+
This scrolls down the page by the given amount of pixel.
|
5
|
+
"
|
6
|
+
# E.g : And scroll 500 px down the page
|
7
|
+
page.execute_script("window.scrollBy(0,#{pixel})")
|
8
|
+
end
|
9
|
+
|
10
|
+
When(/^scroll (\d+) px (up) the page$/) do |pixel, arg|
|
11
|
+
"
|
12
|
+
This scrolls up the page by the given amount of pixel.
|
13
|
+
"
|
14
|
+
# E.g : And scroll 500 px up the page
|
15
|
+
page.execute_script("window.scrollBy(0,#{-pixel})")
|
16
|
+
end
|
17
|
+
|
18
|
+
When(/^scroll (bottom) of the page$/) do |arg|
|
19
|
+
"
|
20
|
+
This scrolls the page to the bottom
|
21
|
+
"
|
22
|
+
# E.g : And scroll bottom of the page
|
23
|
+
page.execute_script('window.scrollTo(0, document.body.scrollHeight)')
|
24
|
+
end
|
25
|
+
|
26
|
+
When(/^scroll (top) of the page$/) do |arg|
|
27
|
+
"
|
28
|
+
This scrolls the page to the top
|
29
|
+
"
|
30
|
+
# E.g : And scroll top of the page
|
31
|
+
page.execute_script('window.scrollTo(document.body.scrollHeight,0)')
|
32
|
+
end
|
33
|
+
|
34
|
+
When(/^focus to element by "([^"]*)" text$/) do |text|
|
35
|
+
# E.g : And focus to element by "Agree Button" text
|
36
|
+
scroll_to(find(xpath: "//*[contains(text(), '#{text}')]"))
|
37
|
+
end
|
38
|
+
|
39
|
+
When(/^refresh the page$/) do
|
40
|
+
"
|
41
|
+
This refreshes the current page
|
42
|
+
"
|
43
|
+
# E.g : And refresh the page
|
44
|
+
page.evaluate_script('window.location.reload()')
|
45
|
+
end
|
46
|
+
|
47
|
+
When(/^open a (new window)$/) do |args|
|
48
|
+
# E.g : And open a new window
|
49
|
+
open_new_window(:window)
|
50
|
+
end
|
51
|
+
|
52
|
+
When(/^open a (new tab)$/) do |args|
|
53
|
+
# E.g : And open a new tab
|
54
|
+
open_new_window
|
55
|
+
end
|
56
|
+
|
57
|
+
When(/^switch to (last window|last tab)$/) do |arg|
|
58
|
+
# E.g : And switch to last window
|
59
|
+
# E.g : And switch to last tab
|
60
|
+
page.driver.browser.switch_to.window(page.driver.browser.window_handles.last)
|
61
|
+
end
|
62
|
+
|
63
|
+
When(/^switch to (first window|first tab)$/) do |arg|
|
64
|
+
# E.g : And switch to first window
|
65
|
+
# E.g : And switch to first tab
|
66
|
+
page.driver.browser.switch_to.window(page.driver.browser.window_handles.first)
|
67
|
+
end
|
68
|
+
|
69
|
+
When(/^switch to window by "([^"]*)" title$/) do |window_title|
|
70
|
+
"
|
71
|
+
Window title should be title of the target window
|
72
|
+
"
|
73
|
+
# E.g : And switch to window by "Welcome" title
|
74
|
+
switch_to_window { title == window_title }
|
75
|
+
end
|
76
|
+
|
77
|
+
When(/^resize window to (\d+) width (\d+) height$/) do |width, height|
|
78
|
+
"
|
79
|
+
This resize to the current window by the given width and height
|
80
|
+
"
|
81
|
+
# E.g : And resize window to 1280 width 720 height
|
82
|
+
page.driver.browser.manage.window.resize_to(width, height)
|
83
|
+
end
|
84
|
+
|
85
|
+
When(/^get window size$/) do
|
86
|
+
"
|
87
|
+
This gets the current window's size then defines it to the global variable
|
88
|
+
"
|
89
|
+
# E.g : And get window size
|
90
|
+
$window_size = page.driver.browser.manage.window.size
|
91
|
+
end
|
92
|
+
|
93
|
+
When(/^close window$/) do
|
94
|
+
"
|
95
|
+
This closes the current window
|
96
|
+
"
|
97
|
+
# E.g : And close window
|
98
|
+
page.driver.browser.close
|
99
|
+
end
|
100
|
+
|
101
|
+
When(/^get current url$/) do
|
102
|
+
"
|
103
|
+
This get full URL of the current page then defines it to the global variable
|
104
|
+
"
|
105
|
+
# E.g : And get current url
|
106
|
+
$current_url = current_url
|
107
|
+
end
|
108
|
+
|
109
|
+
When(/^go back$/) do
|
110
|
+
"
|
111
|
+
This move back a single entry in the browser's history
|
112
|
+
"
|
113
|
+
# E.g : And go back
|
114
|
+
go_back
|
115
|
+
end
|
116
|
+
|
117
|
+
When(/^go forward$/) do
|
118
|
+
"
|
119
|
+
This move forward a single entry in the browser's history
|
120
|
+
"
|
121
|
+
# E.g : And go forward
|
122
|
+
go_forward
|
123
|
+
end
|
124
|
+
|
125
|
+
When(/^visit base page$/) do
|
126
|
+
"
|
127
|
+
Should configure base_url from bdd-helper config
|
128
|
+
"
|
129
|
+
# E.g : And visit base page
|
130
|
+
visit BddHelper.base_url
|
131
|
+
end
|
132
|
+
|
133
|
+
When(/^visit "([^"]*)" url$/) do |url|
|
134
|
+
"
|
135
|
+
The URL can either be a relative URL or an absolute URL
|
136
|
+
"
|
137
|
+
# E.g : And visit "http://www.example.com" url
|
138
|
+
visit url
|
139
|
+
end
|
140
|
+
|
141
|
+
When(/^visit relative url "([^"]*)"$/) do |url|
|
142
|
+
"
|
143
|
+
The URL can be a relative URL
|
144
|
+
"
|
145
|
+
# E.g : And visit relative url '/login'
|
146
|
+
visit BddHelper.base_url + url
|
147
|
+
end
|
148
|
+
|
149
|
+
When(/^maximize window$/) do
|
150
|
+
"
|
151
|
+
This maximizes the current window
|
152
|
+
"
|
153
|
+
# E.g : And maximize window
|
154
|
+
page.driver.browser.manage.window.maximize
|
155
|
+
end
|
156
|
+
|
157
|
+
When(/^accept alert$/) do
|
158
|
+
# E.g : And accept alert
|
159
|
+
page.driver.browser.switch_to.alert.accept
|
160
|
+
end
|
161
|
+
|
162
|
+
When(/^dismiss alert$/) do
|
163
|
+
# E.g : And dismiss alert
|
164
|
+
page.driver.browser.switch_to.alert.dismiss
|
165
|
+
end
|
166
|
+
|
167
|
+
When(/^get window title$/) do
|
168
|
+
"
|
169
|
+
This gets title of the current page then defines it to the global variable
|
170
|
+
"
|
171
|
+
# E.g : And get window title
|
172
|
+
$page_title = title
|
173
|
+
end
|
174
|
+
|
175
|
+
rescue StandardError => e
|
176
|
+
puts e
|
177
|
+
end
|
178
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bdd-helper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: '1.0'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kloia
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capybara
|
@@ -16,94 +16,101 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
-
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 2.11.0
|
19
|
+
version: '3.36'
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
24
|
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
30
|
-
- - ">="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 2.11.0
|
26
|
+
version: '3.36'
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: cucumber
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
36
30
|
requirements:
|
37
31
|
- - "~>"
|
38
32
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
40
|
-
- - ">="
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: 2.4.0
|
33
|
+
version: '7.1'
|
43
34
|
type: :runtime
|
44
35
|
prerelease: false
|
45
36
|
version_requirements: !ruby/object:Gem::Requirement
|
46
37
|
requirements:
|
47
38
|
- - "~>"
|
48
39
|
- !ruby/object:Gem::Version
|
49
|
-
version: '
|
50
|
-
- - ">="
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: 2.4.0
|
40
|
+
version: '7.1'
|
53
41
|
- !ruby/object:Gem::Dependency
|
54
42
|
name: rspec
|
55
43
|
requirement: !ruby/object:Gem::Requirement
|
56
44
|
requirements:
|
57
45
|
- - "~>"
|
58
46
|
- !ruby/object:Gem::Version
|
59
|
-
version: '3.
|
47
|
+
version: '3.10'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.10'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: selenium-webdriver
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '4.0'
|
60
62
|
- - ">="
|
61
63
|
- !ruby/object:Gem::Version
|
62
|
-
version:
|
64
|
+
version: 4.0.3
|
63
65
|
type: :runtime
|
64
66
|
prerelease: false
|
65
67
|
version_requirements: !ruby/object:Gem::Requirement
|
66
68
|
requirements:
|
67
69
|
- - "~>"
|
68
70
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
71
|
+
version: '4.0'
|
70
72
|
- - ">="
|
71
73
|
- !ruby/object:Gem::Version
|
72
|
-
version:
|
74
|
+
version: 4.0.3
|
73
75
|
- !ruby/object:Gem::Dependency
|
74
|
-
name:
|
76
|
+
name: faker
|
75
77
|
requirement: !ruby/object:Gem::Requirement
|
76
78
|
requirements:
|
77
|
-
- -
|
79
|
+
- - "~>"
|
78
80
|
- !ruby/object:Gem::Version
|
79
|
-
version:
|
81
|
+
version: '2.19'
|
80
82
|
type: :runtime
|
81
83
|
prerelease: false
|
82
84
|
version_requirements: !ruby/object:Gem::Requirement
|
83
85
|
requirements:
|
84
|
-
- -
|
86
|
+
- - "~>"
|
85
87
|
- !ruby/object:Gem::Version
|
86
|
-
version:
|
87
|
-
description: Package of helper
|
88
|
-
email:
|
88
|
+
version: '2.19'
|
89
|
+
description: Package of helper steps for BDD testing with Cucumber
|
90
|
+
email: burak@kloia.com
|
89
91
|
executables: []
|
90
92
|
extensions: []
|
91
93
|
extra_rdoc_files: []
|
92
94
|
files:
|
93
95
|
- lib/bdd-helper.rb
|
94
|
-
- lib/
|
95
|
-
- lib/steps/
|
96
|
-
- lib/steps/
|
97
|
-
- lib/steps/
|
96
|
+
- lib/demo.feature
|
97
|
+
- lib/steps/action/check_steps.rb
|
98
|
+
- lib/steps/action/choose_steps.rb
|
99
|
+
- lib/steps/action/click_steps.rb
|
100
|
+
- lib/steps/action/fill_steps.rb
|
101
|
+
- lib/steps/action/key_action_steps.rb
|
102
|
+
- lib/steps/action/select_steps.rb
|
103
|
+
- lib/steps/assertion/assertion_steps.rb
|
98
104
|
- lib/steps/config.rb
|
99
|
-
- lib/steps/
|
100
|
-
- lib/steps/
|
101
|
-
- lib/steps/
|
105
|
+
- lib/steps/customized/customized_steps.rb
|
106
|
+
- lib/steps/global/global_context.rb
|
107
|
+
- lib/steps/util/browser_util_methods.rb
|
108
|
+
- lib/steps/util/browser_util_steps.rb
|
102
109
|
homepage: http://rubygems.org/gems/bdd-helper
|
103
110
|
licenses:
|
104
111
|
- MIT
|
105
112
|
metadata: {}
|
106
|
-
post_install_message:
|
113
|
+
post_install_message:
|
107
114
|
rdoc_options: []
|
108
115
|
require_paths:
|
109
116
|
- lib
|
@@ -118,9 +125,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
125
|
- !ruby/object:Gem::Version
|
119
126
|
version: '0'
|
120
127
|
requirements: []
|
121
|
-
|
122
|
-
|
123
|
-
signing_key:
|
128
|
+
rubygems_version: 3.2.22
|
129
|
+
signing_key:
|
124
130
|
specification_version: 4
|
125
|
-
summary: Helper
|
131
|
+
summary: Helper steps for client-based automation testing
|
126
132
|
test_files: []
|
data/lib/steps/assertion.rb
DELETED
@@ -1,92 +0,0 @@
|
|
1
|
-
require_relative 'config'
|
2
|
-
|
3
|
-
include BaseConstants
|
4
|
-
|
5
|
-
Then(/^page (should|should_not) contain "([^"]*)" content$/) do |condition, content|
|
6
|
-
# E.g. : page should contain "Test" content
|
7
|
-
# E.g. : page should_not contain "Test" content
|
8
|
-
# page.should have_content(content, count: count, wait: $timeout)
|
9
|
-
sleep 1
|
10
|
-
if condition == 'should'
|
11
|
-
page.should have_content(content, wait: $timeout)
|
12
|
-
|
13
|
-
elsif condition == 'should_not'
|
14
|
-
page.should_not have_content(content, wait: $timeout)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
Then(/^page (should|should_not) contain the following contents:$/) do |condition, table|
|
19
|
-
sleep 1
|
20
|
-
values = table.raw
|
21
|
-
values.each {|raw|
|
22
|
-
if condition == 'should'
|
23
|
-
page.should have_content(raw[0], wait: $timeout)
|
24
|
-
elsif condition == 'should_not'
|
25
|
-
page.should_not have_content(raw[0], wait: $timeout)
|
26
|
-
end
|
27
|
-
}
|
28
|
-
end
|
29
|
-
|
30
|
-
Then(/^page (should|should_not) contain "([^"]*)" "([^"]*)" web element/) do |condition, web_element_type, web_element|
|
31
|
-
# E.g. : page should contain "css" "#test .form" web element
|
32
|
-
sleep 1
|
33
|
-
if condition == 'should'
|
34
|
-
page.should have_selector(:"#{web_element_type}", web_element, wait: $timeout)
|
35
|
-
|
36
|
-
elsif condition == 'should_not'
|
37
|
-
page.should_not have_selector(:"#{web_element_type}", web_element, wait: $timeout)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
Then(/^page (should|should_not) contain "([^"]*)" button$/) do |condition, button|
|
42
|
-
# E.g. : page should contain "Save" button
|
43
|
-
# E.g. : page should_not contain "Save" button
|
44
|
-
# page.should have_content(content, count: count, wait: $timeout)
|
45
|
-
sleep 1
|
46
|
-
if condition == 'should'
|
47
|
-
page.should have_button(button, wait: $timeout)
|
48
|
-
|
49
|
-
elsif condition == 'should_not'
|
50
|
-
page.should_not have_button(button, wait: $timeout)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
Then(/^"([^"]*)" button (should|should_not) be disabled$/) do |button, condition|
|
55
|
-
sleep 1
|
56
|
-
if condition == 'should'
|
57
|
-
find_button button, disabled: true
|
58
|
-
|
59
|
-
elsif condition == 'should_not'
|
60
|
-
find_button button, disabled: false
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
When(/^"([^"]*)" checkbox should be (checked|unchecked)$/) do |checkbox, condition|
|
65
|
-
# E.g. : "Agree" checkbox should be checked
|
66
|
-
# checkbox can be label, value or id
|
67
|
-
if condition == 'checked'
|
68
|
-
expect(page).to have_field(checkbox, checked: true, visible: true)
|
69
|
-
elsif condition == 'unchecked'
|
70
|
-
expect(page).to have_field(checkbox, checked: false, visible: true)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
When(/^"([^"]*)" radio button should be (selected|unselected)$/) do |radio_button, condition|
|
75
|
-
# E.g. : "Yes" radio button should be selected
|
76
|
-
# radio_button can be name, id or label
|
77
|
-
if condition == 'checked'
|
78
|
-
expect(page).to have_field(radio_button, checked: true, visible: true)
|
79
|
-
elsif condition == 'unchecked'
|
80
|
-
expect(page).to have_field(radio_button, checked: false, visible: true)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
Then(/^validation message should be "([^"]*)" about "([^"]*)" field$/) do |expected_message, element_value|
|
85
|
-
sleep 1.5
|
86
|
-
if page.has_css?(element_value)
|
87
|
-
expected_message.should == page.execute_script("return document.querySelector('#{element_value}').innerHTML.trim();")
|
88
|
-
|
89
|
-
elsif page.has_no_css?(element_value)
|
90
|
-
expected_message.should == ''
|
91
|
-
end
|
92
|
-
end
|
data/lib/steps/browser.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require_relative 'config'
|
2
|
-
|
3
|
-
include BaseConstants
|
4
|
-
|
5
|
-
And(/^refresh the page$/) do
|
6
|
-
page.evaluate_script('window.location.reload()')
|
7
|
-
sleep 1
|
8
|
-
end
|
9
|
-
|
10
|
-
When(/^navigate browser to "([^"]*)" url$/) do |url|
|
11
|
-
visit url
|
12
|
-
end
|
13
|
-
|
14
|
-
And(/^switch window to (first|last) opened$/) do |condition|
|
15
|
-
if condition == 'first'
|
16
|
-
page.driver.browser.switch_to.window(page.driver.browser.window_handles.first)
|
17
|
-
elsif condition == 'last'
|
18
|
-
page.driver.browser.switch_to.window(page.driver.browser.window_handles.last)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
Then(/^user should redirected to "([^"]*)" path$/) do |path|
|
23
|
-
page.should have_current_path(path, wait: $timeout)
|
24
|
-
end
|
25
|
-
|
26
|
-
Then(/^alert message (should|should_not) be "([^"]*)"$/) do |condition, message|
|
27
|
-
if condition == 'should'
|
28
|
-
resp = page.driver.browser.switch_to.alert.text
|
29
|
-
resp.should == message
|
30
|
-
|
31
|
-
elsif condition == 'should_not'
|
32
|
-
resp = page.driver.browser.switch_to.alert.text
|
33
|
-
resp.should_not == message
|
34
|
-
end
|
35
|
-
end
|
data/lib/steps/check.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
require_relative 'config'
|
2
|
-
|
3
|
-
include BaseConstants
|
4
|
-
|
5
|
-
When(/^(check|uncheck) "([^"]*)" checkbox$/) do |condition, checkbox|
|
6
|
-
# E.g. : check "Agree" checkbox
|
7
|
-
# checkbox can be name, id or label
|
8
|
-
if condition == 'check'
|
9
|
-
check(checkbox)
|
10
|
-
elsif condition == 'uncheck'
|
11
|
-
uncheck(checkbox)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
When(/^choose "([^"]*)" radio button$/) do |radio_button|
|
16
|
-
# E.g. : choose "Yes" radio button
|
17
|
-
# radio_button can be name, id or label
|
18
|
-
choose(radio_button)
|
19
|
-
end
|
20
|
-
|
21
|
-
And(/^check type "([^"]*)" value "([^"]*)" web element$/) do |web_element_type, web_element|
|
22
|
-
page.should have_selector(:"#{web_element_type}", web_element, wait: $timeout)
|
23
|
-
find(:"#{web_element_type}", web_element).set(true)
|
24
|
-
end
|
data/lib/steps/click.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
When(/^click "([^"]*)" (link|button) by (id|title|text)$/) do |identifier, identifier_type, condition|
|
2
|
-
# E.g: click "Save" button by text
|
3
|
-
Capybara.ignore_hidden_elements = false
|
4
|
-
|
5
|
-
if condition == 'title' || condition == 'text'
|
6
|
-
page.should have_content(identifier)
|
7
|
-
|
8
|
-
elsif condition == 'id'
|
9
|
-
page.should have_selector(:id, identifier)
|
10
|
-
end
|
11
|
-
|
12
|
-
if identifier_type == 'link'
|
13
|
-
# link can be id, title or text
|
14
|
-
click_link(identifier)
|
15
|
-
|
16
|
-
elsif identifier_type == 'button'
|
17
|
-
# button can be id, title or text
|
18
|
-
click_button(identifier)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
Then(/^click type "([^"]*)" value "([^"]*)" web element$/) do |web_element_type, web_element|
|
23
|
-
# E.g: click type "id" value "save" web element
|
24
|
-
page.should have_selector(:"#{web_element_type}", web_element)
|
25
|
-
find(:"#{web_element_type}", web_element).click
|
26
|
-
end
|
data/lib/steps/fill.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
require_relative 'config'
|
2
|
-
|
3
|
-
include BaseConstants
|
4
|
-
|
5
|
-
And(/^fill "([^"]*)" with "([^"]*)"$/) do |field, value|
|
6
|
-
# E.g : fill "Phone Number" with "5555555555"
|
7
|
-
# field can be name, id or label
|
8
|
-
fill_in(field, with: value)
|
9
|
-
end
|
10
|
-
|
11
|
-
And(/^fill input boxes with these values:$/) do |table|
|
12
|
-
values = table.raw
|
13
|
-
values.each {|raw| fill_in(raw[0], with: raw[1])}
|
14
|
-
end
|
15
|
-
|
16
|
-
Then(/^fill type "([^"]*)" value "([^"]*)" web element with "([^"]*)"$/) do |web_element_type, web_element, value|
|
17
|
-
# E.g: fill type "id" value "mobilePhone" web element with "5555555555"
|
18
|
-
page.should have_selector(:"#{web_element_type}", web_element, wait: $timeout)
|
19
|
-
find(:"#{web_element_type}", web_element).set(value)
|
20
|
-
end
|
21
|
-
|
22
|
-
And(/^fill "([^"]*)" with random (email|password|name|gsm)$/) do |field, condition|
|
23
|
-
def generate_code(number, condition)
|
24
|
-
if condition == 'email'
|
25
|
-
charset = Array('A'..'Z') + Array('a'..'z') + Array(0..9)
|
26
|
-
Array.new(number) {charset.sample}.join + "@gmail.com"
|
27
|
-
|
28
|
-
elsif condition == 'password'
|
29
|
-
charset = Array('A'..'Z') + Array('a'..'z') + Array(0..9)
|
30
|
-
Array.new(number) {charset.sample}.join
|
31
|
-
|
32
|
-
elsif condition == 'name'
|
33
|
-
charset = Array('A'..'Z') + Array('a'..'z')
|
34
|
-
Array.new(number) {charset.sample}.join
|
35
|
-
|
36
|
-
elsif condition == 'gsm'
|
37
|
-
charset = Array(0..9)
|
38
|
-
Array.new(7) {charset.sample}.join
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
var = generate_code(10, condition)
|
43
|
-
fill_in(field, with: var)
|
44
|
-
end
|
data/lib/steps/select.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
And(/^select "([^"]*)" as "([^"]*)" from dropdown$/) do |dropdown, option|
|
2
|
-
# E.g : select "Country" as "United States" from dropdown
|
3
|
-
# E.g : select "United States", from: "Country", :match => :first ===>> to select first matched option
|
4
|
-
# dropdown can be id, name, label text
|
5
|
-
select(option, from: dropdown) # OR ==>> find('#select_id').select('value')
|
6
|
-
end
|
7
|
-
|
8
|
-
Then /^"([^"]*)" (should|should_not) be selected for "([^"]*)" dropdown$/ do |selected_option, condition, dropdown|
|
9
|
-
# E.g : "United States" should be selected for "Country" dropdown
|
10
|
-
if condition == 'should'
|
11
|
-
page.should have_select(dropdown, selected: selected_option)
|
12
|
-
|
13
|
-
elsif condition == 'should_not'
|
14
|
-
page.should_not have_select(dropdown, selected: selected_option)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
Then /^"([^"]*)" dropdown (should|should_not) contain "([^"]*)" option$/ do |dropdown, condition, option_text|
|
19
|
-
# E.g : "Country" dropdown should contain "United States" option
|
20
|
-
if condition == 'should'
|
21
|
-
page.should have_select(dropdown, with_options: [option_text])
|
22
|
-
|
23
|
-
elsif condition == 'should_not'
|
24
|
-
page.should_not have_select(dropdown, with_options: [option_text])
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
Then /^"([^"]*)" dropdown (should|should_not) contain following options:$/ do |dropdown, condition, table|
|
29
|
-
values = table.raw
|
30
|
-
sleep 1
|
31
|
-
values.each {|raw|
|
32
|
-
if condition == 'should'
|
33
|
-
page.should have_select(dropdown, with_options: [raw[0]])
|
34
|
-
|
35
|
-
elsif condition == 'should_not'
|
36
|
-
page.should_not have_select(dropdown, with_options: [raw[0]])
|
37
|
-
end}
|
38
|
-
end
|
data/lib/steps/unclassified.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
When(/^hover to "([^"]*)" value "([^"]*)" web element$/) do |web_element_type, web_element|
|
2
|
-
# E.g: hover to "css" value ".map" web element
|
3
|
-
find(:"#{web_element_type}", web_element).trigger(:mouseover)
|
4
|
-
end
|
5
|
-
|
6
|
-
When(/^wait "([^"]*)" seconds$/) do |sec_value|
|
7
|
-
sleep sec_value.to_i
|
8
|
-
end
|
9
|
-
|
10
|
-
And(/^generate "([^"]*)" char random string and type into type "([^"]*)" value "([^"]*)"$/) do |count, web_element_type, web_element|
|
11
|
-
# E.g: generate "10" char random string and type into type "id" value "mobile"
|
12
|
-
charset = (0...count).map {(65 + rand(26)).chr}.join
|
13
|
-
find(:"#{web_element_type}", web_element).set(charset)
|
14
|
-
end
|
15
|
-
|
16
|
-
And(/^execute javascript code "([^"]*)"/) do |code|
|
17
|
-
page.execute_script(code)
|
18
|
-
sleep 2
|
19
|
-
end
|