itms_automation 2.6.4 → 2.6.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/doc/installation.md +1 -1
- data/features-skeleton/Gemfile.lock +63 -0
- data/features-skeleton/README.md +128 -66
- data/features-skeleton/my_first.feature +19 -10
- data/features-skeleton/step_definitions/assertion_steps.rb +69 -0
- data/features-skeleton/step_definitions/click_elements_steps.rb +25 -0
- data/features-skeleton/step_definitions/configuration_steps.rb +8 -0
- data/features-skeleton/step_definitions/input_steps.rb +60 -0
- data/features-skeleton/step_definitions/javascript_handling_steps.rb +11 -0
- data/features-skeleton/step_definitions/my_first_steps.rb +14 -0
- data/features-skeleton/step_definitions/navigation_steps.rb +80 -0
- data/features-skeleton/step_definitions/progress_steps.rb +18 -0
- data/features-skeleton/step_definitions/repositories/project_object.yml +1 -1
- data/features-skeleton/support/env.rb +29 -98
- data/lib/itms_automation/input_steps.rb +1 -1
- data/lib/itms_automation/methods/assertion_methods.rb +2 -2
- data/lib/itms_automation/methods/misc_methods.rb +2 -1
- data/lib/itms_automation/methods/navigate_methods.rb +2 -4
- data/lib/itms_automation/version.rb +1 -1
- metadata +38 -53
- data/example/android/android_app/android_app_calculator.zip +0 -0
- data/example/android/android_app/android_app_calculator/AndroidCalculator.apk +0 -0
- data/example/android/android_app/android_app_calculator/features/calculator.feature +0 -36
- data/example/android/android_app/android_app_calculator/features/my_first.feature +0 -13
- data/example/android/android_app/android_app_calculator/features/screenshots/test.png +0 -0
- data/example/android/android_app/android_app_calculator/features/step_definitions/custom_steps.rb +0 -5
- data/example/android/android_app/android_app_calculator/features/support/env.rb +0 -52
- data/example/android/android_app/android_app_calculator/features/support/hooks.rb +0 -26
- data/example/android/android_web/android_web_gmail_login.zip +0 -0
- data/example/android/android_web/android_web_gmail_login/features/gmail_login.feature +0 -12
- data/example/android/android_web/android_web_gmail_login/features/my_first.feature +0 -1
- data/example/android/android_web/android_web_gmail_login/features/screenshots/test.png +0 -0
- data/example/android/android_web/android_web_gmail_login/features/step_definitions/custom_steps.rb +0 -5
- data/example/android/android_web/android_web_gmail_login/features/support/env.rb +0 -51
- data/example/android/android_web/android_web_gmail_login/features/support/hooks.rb +0 -27
- data/example/desktop web/desktop_web_gmail_login.zip +0 -0
- data/example/desktop web/desktop_web_gmail_login/features/gmail_login.feature +0 -9
- data/example/desktop web/desktop_web_gmail_login/features/gmail_multi_login.feature +0 -21
- data/example/desktop web/desktop_web_gmail_login/features/my_first.feature +0 -1
- data/example/desktop web/desktop_web_gmail_login/features/screenshots/test.png +0 -0
- data/example/desktop web/desktop_web_gmail_login/features/step_definitions/custom_steps.rb +0 -5
- data/example/desktop web/desktop_web_gmail_login/features/support/env.rb +0 -106
- data/example/desktop web/desktop_web_gmail_login/features/support/hooks.rb +0 -38
- data/features-skeleton/step_definitions/custom_steps.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3810d157ec68cf87cc39949f8eb93e440b0e947a8e51fc2434b4243ab8f4bb73
|
4
|
+
data.tar.gz: ad8c3dcef83f02bd5e8844707b4ebd265b9264d74e07cf1e7d1306e1b8b84cd3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b5a86caff363461ef904b6624dbea4ca1f68a7d3cb9fb394f1d4ac4bb20c389205da6971ef76b9afbe9295731997392479669407e718e87d7f4f5f592bca781
|
7
|
+
data.tar.gz: ae167b14afb228b6f83cbd09a9f4a05a6a7c860b7f630dd5b6ef307c3df2388a5628b1d5cb66cca85b4981ac3d8bd6de4945be4a135caff7ec819fd6a0bbd4e5
|
data/doc/installation.md
CHANGED
@@ -2,7 +2,7 @@ Installation
|
|
2
2
|
============
|
3
3
|
### Prerequisites
|
4
4
|
You need to have Ruby installed.
|
5
|
-
Verify your installation by running ruby -v in a terminal - it should print "ruby
|
5
|
+
Verify your installation by running ruby -v in a terminal - it should print "ruby 2.0.0" (or higher).
|
6
6
|
|
7
7
|
You need to have DevKit installed.
|
8
8
|
|
@@ -0,0 +1,63 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
appium_lib_core (3.10.1)
|
5
|
+
faye-websocket (~> 0.10.0)
|
6
|
+
selenium-webdriver (~> 3.14, >= 3.14.1)
|
7
|
+
backports (3.18.1)
|
8
|
+
builder (3.2.4)
|
9
|
+
childprocess (3.0.0)
|
10
|
+
cucumber (3.1.2)
|
11
|
+
builder (>= 2.1.2)
|
12
|
+
cucumber-core (~> 3.2.0)
|
13
|
+
cucumber-expressions (~> 6.0.1)
|
14
|
+
cucumber-wire (~> 0.0.1)
|
15
|
+
diff-lcs (~> 1.3)
|
16
|
+
gherkin (~> 5.1.0)
|
17
|
+
multi_json (>= 1.7.5, < 2.0)
|
18
|
+
multi_test (>= 0.1.2)
|
19
|
+
cucumber-core (3.2.1)
|
20
|
+
backports (>= 3.8.0)
|
21
|
+
cucumber-tag_expressions (~> 1.1.0)
|
22
|
+
gherkin (~> 5.0)
|
23
|
+
cucumber-expressions (6.0.1)
|
24
|
+
cucumber-tag_expressions (1.1.1)
|
25
|
+
cucumber-wire (0.0.1)
|
26
|
+
diff-lcs (1.4.4)
|
27
|
+
eventmachine (1.2.7)
|
28
|
+
faye-websocket (0.10.9)
|
29
|
+
eventmachine (>= 0.12.0)
|
30
|
+
websocket-driver (>= 0.5.1)
|
31
|
+
gherkin (5.1.0)
|
32
|
+
httparty (0.13.7)
|
33
|
+
json (~> 1.8)
|
34
|
+
multi_xml (>= 0.5.2)
|
35
|
+
itms_automation (2.6.1)
|
36
|
+
appium_lib_core (~> 3.10.1, >= 3.10.1)
|
37
|
+
cucumber (~> 3.1.2, >= 3.1.2)
|
38
|
+
httparty (~> 0.13.7, >= 0.13.7)
|
39
|
+
report_builder (~> 1.8, >= 1.8)
|
40
|
+
selenium-webdriver (~> 3.14, >= 3.14.1)
|
41
|
+
json (1.8.6)
|
42
|
+
multi_json (1.14.1)
|
43
|
+
multi_test (0.1.2)
|
44
|
+
multi_xml (0.6.0)
|
45
|
+
report_builder (1.8)
|
46
|
+
json (>= 1.8.1)
|
47
|
+
rubyzip (2.3.0)
|
48
|
+
selenium-webdriver (3.142.7)
|
49
|
+
childprocess (>= 0.5, < 4.0)
|
50
|
+
rubyzip (>= 1.2.2)
|
51
|
+
websocket-driver (0.7.2)
|
52
|
+
websocket-extensions (>= 0.1.0)
|
53
|
+
websocket-extensions (0.1.5)
|
54
|
+
|
55
|
+
PLATFORMS
|
56
|
+
ruby
|
57
|
+
|
58
|
+
DEPENDENCIES
|
59
|
+
itms_automation
|
60
|
+
report_builder
|
61
|
+
|
62
|
+
BUNDLED WITH
|
63
|
+
2.0.2
|
data/features-skeleton/README.md
CHANGED
@@ -17,102 +17,164 @@ Note : For some of the API paramtere values are fixed. Such values for paramater
|
|
17
17
|
|
18
18
|
Navigation API's
|
19
19
|
----------------
|
20
|
-
|
20
|
+
# method to open link
|
21
21
|
navigate_to("link")
|
22
|
-
|
22
|
+
# method to navigate back & forward
|
23
23
|
navigate(direction) # direction => "back" / "forward"
|
24
|
-
|
24
|
+
# method to quite webdriver instance
|
25
25
|
close_driver()
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
26
|
+
# method to return key by os wise
|
27
|
+
get_key()
|
28
|
+
# Method to zoom in/out page
|
29
|
+
zoom_in_out(in_out) # in_out => "in" / "out"
|
30
|
+
# Method to zoom in/out web page until web element dislays
|
31
|
+
zoom_in_out_till_element_display(element, in_out)
|
32
|
+
# Method to resize browser
|
33
|
+
resize_browser(width, heigth)
|
34
|
+
# Method to maximize browser
|
35
|
+
maximize_browser
|
36
|
+
# Method to refresh page
|
37
|
+
refresh_page
|
38
|
+
# Method to hover on element
|
39
|
+
hover_over_element(element)
|
40
|
+
# Method to scroll page to perticular element
|
41
|
+
scroll_to_element(element)
|
42
|
+
# method to scroll page to top or end
|
43
|
+
scroll_page(to)
|
44
|
+
# Method to switch to new window
|
45
|
+
switch_to_new_window
|
46
|
+
# Method to switch to old window
|
47
|
+
switch_to_old_window
|
48
|
+
# Method to close new window
|
49
|
+
close_new_window
|
41
50
|
|
42
51
|
Input API's
|
43
|
-
|
44
|
-
|
45
|
-
click(element)
|
46
|
-
|
47
|
-
double_click(element)
|
48
|
-
|
49
|
-
click_forcefully(element)
|
52
|
+
-------------------------
|
50
53
|
|
54
|
+
# method to enter text into textfield
|
51
55
|
enter_text(element, text)
|
52
|
-
|
56
|
+
# method to clear text from textfield
|
53
57
|
clear_text(element)
|
54
|
-
|
58
|
+
# method to select option from dropdwon list
|
59
|
+
select_option_from_dropdown(element, by, option)
|
60
|
+
# method to select all option from dropdwon list
|
61
|
+
select_all_option_from_multiselect_dropdown(element)
|
62
|
+
# method to unselect all option from dropdwon list
|
63
|
+
unselect_all_option_from_multiselect_dropdown(element)
|
64
|
+
# method to check checkbox
|
55
65
|
check_checkbox(element)
|
56
|
-
|
66
|
+
# method to uncheck checkbox
|
57
67
|
uncheck_checkbox(element)
|
58
|
-
|
68
|
+
# method to select radio button
|
59
69
|
toggle_checkbox(element)
|
60
|
-
|
70
|
+
# method to select radio button
|
61
71
|
select_radio_button(element)
|
72
|
+
# method to select option from radio button group
|
73
|
+
select_option_from_radio_button_group(element, by, option)
|
62
74
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
is_element_displayed(element)
|
72
|
-
|
73
|
-
hover_over_element(element)
|
74
|
-
|
75
|
-
by => "locators type" ("id", "name", "class", "xpath", "css")
|
76
|
-
|
77
|
-
access_value => "locator value"
|
78
|
-
|
75
|
+
Click API's
|
76
|
+
------------
|
77
|
+
# method to click on an element
|
78
|
+
click(element)
|
79
|
+
# method to double-click on an element
|
80
|
+
double_click(element)
|
81
|
+
# method to forcefully click on an element
|
82
|
+
click_forcefully(element)
|
79
83
|
|
80
84
|
Javascript Handling API
|
81
85
|
-----------------------
|
82
|
-
|
86
|
+
# method to interact with alert
|
83
87
|
handle_alert(decision) # decision => "accept" / "dismiss"
|
84
88
|
|
85
|
-
get_alert_text
|
86
|
-
|
87
|
-
|
88
89
|
Progress API's
|
89
90
|
--------------
|
90
|
-
|
91
|
+
# method to wait with second
|
91
92
|
wait(time_in_sec)
|
92
|
-
|
93
|
+
# method to wait for the element display
|
93
94
|
wait_for_element_to_display(element, duration)
|
94
|
-
|
95
|
+
# method to wait for the element enable
|
95
96
|
wait_for_element_to_enable(element, duration)
|
96
97
|
|
97
|
-
|
98
|
-
by => "locators type" ("id", "name", "class", "xpath", "css")
|
99
|
-
|
100
|
-
access_value => "locator value"
|
101
|
-
|
102
|
-
duration => duration in seconds.
|
103
|
-
|
104
|
-
|
105
|
-
Screenshot API
|
98
|
+
Screenshot API's
|
106
99
|
--------------
|
100
|
+
# method to take screenshot and save in screenshot folder
|
107
101
|
take_screenshots
|
108
102
|
|
109
|
-
|
110
|
-
Configuration API
|
103
|
+
Configuration API's
|
111
104
|
-----------------
|
112
|
-
|
105
|
+
# method to print configuration
|
113
106
|
print_congifugartion
|
107
|
+
# method to print desktop configuration
|
108
|
+
print_desktop_configuration
|
109
|
+
# method to print mobile configuration
|
110
|
+
print_mobile_configuration
|
114
111
|
|
115
|
-
|
112
|
+
Assertion API's
|
113
|
+
-----------------
|
114
|
+
# Method to return page title
|
115
|
+
get_page_title
|
116
|
+
# Method to verify title
|
117
|
+
# param 1 : String : expected title
|
118
|
+
# param 2 : Boolean : test case [true or flase]
|
119
|
+
check_title(title, test_case)
|
120
|
+
# Method to verify partial title
|
121
|
+
# param 1 : String : partial title string
|
122
|
+
# param 2 : Boolean : test case [true or flase]
|
123
|
+
check_partial_title(partial_text_title, test_case)
|
124
|
+
# Method to get element text
|
125
|
+
# param : String
|
126
|
+
get_element_text(element)
|
127
|
+
# Method to check element text
|
128
|
+
# param 1 : String : Element
|
129
|
+
# param 2 : String : Expected element text
|
130
|
+
# param 3 : Boolean : test case [true or flase]
|
131
|
+
check_element_text(element, expected_value, test_case)
|
132
|
+
# Method to check partial element text
|
133
|
+
# param 1 : String : Element
|
134
|
+
# param 2 : String : Expected element partial text
|
135
|
+
# param 3 : Boolean : test case [true or flase]
|
136
|
+
check_element_partial_text(element, expected_value, test_case)
|
137
|
+
# Method to return element status - enabled?
|
138
|
+
# param : String : Element
|
139
|
+
is_element_enabled(element)
|
140
|
+
# method to check element status - enabled?
|
141
|
+
# param 1 : String : Element
|
142
|
+
# param 2 : Boolean : test case [true or flase]
|
143
|
+
check_element_enable(element, test_case)
|
144
|
+
# method to get attribute value
|
145
|
+
# param 1 : String : Element
|
146
|
+
# param 2 : String : atrribute name
|
147
|
+
get_element_attribute(element, attribute_name)
|
148
|
+
# method to check attribute value
|
149
|
+
# param 1 : String : Element
|
150
|
+
# param 2 : String : atrribute name
|
151
|
+
# param 3 : String : atrribute value
|
152
|
+
# param 4 : Boolean : test case [true or flase]
|
153
|
+
check_element_attribute(element, attribute_name, attribute_value, test_case)
|
154
|
+
# method to get element status - displayed?
|
155
|
+
# param : String : Element
|
156
|
+
is_element_displayed(element)
|
157
|
+
# method to check element presence
|
158
|
+
# param 1 : String : Element
|
159
|
+
# param 2 : Boolean : test case [true or flase]
|
160
|
+
check_element_presence(element, test_case)
|
161
|
+
# method to assert checkbox check/uncheck
|
162
|
+
# param 1 : String : Element
|
163
|
+
# param 2 : Boolean : test case [true or flase]
|
164
|
+
is_checkbox_checked(element, should_be_checked = true)
|
165
|
+
# method to assert radio button selected/unselected
|
166
|
+
# param 1 : String : Element
|
167
|
+
# param 2 : Boolean : test case [true or flase]
|
168
|
+
is_radio_button_selected(element, should_be_selected = true)
|
169
|
+
# method to assert option from radio button group is selected/unselected
|
170
|
+
is_option_from_radio_button_group_selected(element, by, option, should_be_selected = true)
|
171
|
+
# method to get javascript pop-up alert text
|
172
|
+
get_alert_text
|
173
|
+
# method to check javascript pop-up alert text
|
174
|
+
check_alert_text(text)
|
175
|
+
# method to check dropdown status -> selected
|
176
|
+
is_option_from_dropdown_selected(element, by, option, should_be_selected=true)
|
177
|
+
|
116
178
|
Usage: itms_automation <command-name> [parameters] [options]
|
117
179
|
|
118
180
|
<command-name> can be one of
|
@@ -1,10 +1,19 @@
|
|
1
|
-
Feature:
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
1
|
+
# Feature: Login Functionality
|
2
|
+
# In order to ensure login functionality works,
|
3
|
+
# I want to run the cucumber test to verify it is working
|
4
|
+
|
5
|
+
# Background:
|
6
|
+
# Given the login page is opened successfully
|
7
|
+
|
8
|
+
# Scenario: Login Valid
|
9
|
+
# When user input username "tomsmith" and password "SuperSecretPassword!"
|
10
|
+
# Then the message "You logged into a secure area!×" should be displayed
|
11
|
+
|
12
|
+
# Scenario Outline: Login Invalid
|
13
|
+
# When user input username "<username>" and password "<password>"
|
14
|
+
# Then the message "<messsage>" should be displayed
|
15
|
+
|
16
|
+
# Examples:
|
17
|
+
# | username | password | messsage |
|
18
|
+
# | anhpham | SuperSecretPassword! | Your username is invalid!× |
|
19
|
+
# | tomsmith | wrong_password | Your password is invalid!× |
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# Do Not Remove This File
|
2
|
+
# Please adjust the below steps as your needed
|
3
|
+
# $driver is instance of webdriver use this instance to write your custom code
|
4
|
+
|
5
|
+
# # page title checking
|
6
|
+
# Then(/^I should\s*((?:not)?)\s+see page title as "(.*?)"$/) do |present, title|
|
7
|
+
# check_title(title, present.empty?)
|
8
|
+
# end
|
9
|
+
|
10
|
+
# Then(/^I should\s*((?:not)?)\s+see page title having partial text as "(.*?)"$/) do |present, partial_text_title|
|
11
|
+
# check_partial_title(partial_text_title, present.empty?)
|
12
|
+
# end
|
13
|
+
|
14
|
+
# # step to check element text
|
15
|
+
# Then(/^element "([^\"]*)" should\s*((?:not)?)\s+have text as "(.*?)"$/) do |element, present, value |
|
16
|
+
# check_element_text(element, value, present.empty?)
|
17
|
+
# end
|
18
|
+
|
19
|
+
# # step to check element partial text
|
20
|
+
# Then(/^element "([^\"]*)" should\s*((?:not)?)\s+have partial text as "(.*?)"$/) do |element, present, value |
|
21
|
+
# check_element_partial_text(element, value, present.empty?)
|
22
|
+
# end
|
23
|
+
|
24
|
+
# # step to check attribute value
|
25
|
+
# Then(/^element "([^\"]*)" should\s*((?:not)?)\s+have attribute "(.*?)" with value "(.*?)"$/) do |element, present, attrb, value|
|
26
|
+
# check_element_attribute(element, attrb, value, present.empty?)
|
27
|
+
# end
|
28
|
+
|
29
|
+
# # step to check element enabled or not
|
30
|
+
# Then(/^element "([^\"]*)" should\s*((?:not)?)\s+be (enabled|disabled)$/) do |element, present, state|
|
31
|
+
# flag = state == 'enabled'
|
32
|
+
# flag = !flag unless present.empty?
|
33
|
+
# check_element_enable(element, flag)
|
34
|
+
# end
|
35
|
+
|
36
|
+
# # step to check element present or not
|
37
|
+
# Then(/^element "(.*?)" should\s*((?:not)?)\s+be present$/) do |element, present|
|
38
|
+
# check_element_presence(element, present.empty?)
|
39
|
+
# end
|
40
|
+
|
41
|
+
# # step to assert checkbox is checked or unchecked
|
42
|
+
# Then(/^checkbox "(.*?)" should be (checked|unchecked)$/) do |element, state|
|
43
|
+
# flag = state == 'checked'
|
44
|
+
# is_checkbox_checked(element, flag)
|
45
|
+
# end
|
46
|
+
|
47
|
+
# # steps to assert radio button checked or unchecked
|
48
|
+
# Then(/^radio button"(.*?)" should be (selected|unselected)$/) do |element, state|
|
49
|
+
# flag = state == 'selected'
|
50
|
+
# is_radio_button_selected(element, flag)
|
51
|
+
# end
|
52
|
+
|
53
|
+
# # steps to assert option by text from radio button group selected/unselected
|
54
|
+
# Then(/^option "(.*?)" by (.+) from radio button group "(.*?)" should be (selected|unselected)$/) do |option, attrb, element, state|
|
55
|
+
# flag = state == 'selected'
|
56
|
+
# is_option_from_radio_button_group_selected(element, attrb, option, flag)
|
57
|
+
# end
|
58
|
+
|
59
|
+
# # step to assert javascript pop-up alert text
|
60
|
+
# Then(/^I should see alert text as "(.*?)"$/) do |actual_value|
|
61
|
+
# check_alert_text(actual_value)
|
62
|
+
# end
|
63
|
+
|
64
|
+
# # step to assert dropdown list
|
65
|
+
# Then(/^option "(.*?)" by (.+) from dropdown "(.*?)" should be (selected|unselected)$/) do |option, by, element, state|
|
66
|
+
# flag = state == 'selected'
|
67
|
+
# is_option_from_dropdown_selected(element, by, option, state)
|
68
|
+
# end
|
69
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Do Not Remove This File
|
2
|
+
# Please adjust the below steps as your needed
|
3
|
+
# $driver is instance of webdriver use this instance to write your custom code
|
4
|
+
|
5
|
+
# # click on web element
|
6
|
+
# When(/^I click on element"(.*?)"$/) do |element|
|
7
|
+
# click(element)
|
8
|
+
# end
|
9
|
+
|
10
|
+
# Then(/^I forcefully click on element "(.*?)"$/) do |element|
|
11
|
+
# click_forcefully(element)
|
12
|
+
# end
|
13
|
+
|
14
|
+
# # double click on web element
|
15
|
+
# Then(/^I double click on element "(.*?)"$/) do |element|
|
16
|
+
# double_click(element)
|
17
|
+
# end
|
18
|
+
|
19
|
+
# When(/^I tap on element"(.*?)"$/) do |element|
|
20
|
+
# click(element)
|
21
|
+
# end
|
22
|
+
|
23
|
+
# Then(/^I long press on element "(.*?)"$/) do |element|
|
24
|
+
# long_press(element, duration)
|
25
|
+
# end
|