itms_automation 2.5.6 → 2.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/example/desktop web/desktop_web_gmail_login/features/support/env.rb +67 -12
- data/example/desktop web/desktop_web_gmail_login/features/support/hooks.rb +34 -22
- data/features-skeleton/step_definitions/repositories/project_object.yml +1 -0
- data/features-skeleton/support/env.rb +4 -2
- data/features-skeleton/support/hooks.rb +5 -41
- data/lib/itms_automation/methods/assertion_methods.rb +20 -31
- data/lib/itms_automation/methods/click_elements_methods.rb +6 -6
- data/lib/itms_automation/methods/error_handling_methods.rb +6 -0
- data/lib/itms_automation/methods/misc_methods.rb +16 -0
- data/lib/itms_automation/version.rb +1 -1
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 03c38ca27fff8e41d5bc25a5f98019cbf4e4cc90f1be655b0264b2da1301a2f7
|
4
|
+
data.tar.gz: 6ef0427780ea0b6cfade74682e8d60529fa7194bea56b56546fd786034871bf1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e4d5042bb36effd440cda7b75e0ea9547a3b5039b6b360fe77d940113480fb82fa5bff6ed3719177c2489f8fd4d6d1e43c48db00562f766a5552b5a01025f69
|
7
|
+
data.tar.gz: 4ac9c825eb5584fece56a3106430de1991c439cdbf4040afe8028091dfb5d2555d8cc03caac65a323fc30b88df8ea66451ebacb8257407f5381b198f761ae5f3
|
@@ -1,8 +1,10 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require 'itms_automation'
|
3
|
-
|
2
|
+
# require 'itms_automation'
|
3
|
+
require_relative '../../../lib/itms_automation.rb'
|
4
|
+
# require 'appium_lib'
|
5
|
+
require 'appium_lib_core'
|
4
6
|
# Store command line arguments
|
5
|
-
$browser_type = ENV['BROWSER'] || '
|
7
|
+
$browser_type = ENV['BROWSER'] || 'firefox'
|
6
8
|
$platform = ENV['PLATFORM'] || 'desktop'
|
7
9
|
$os_version = ENV['OS_VERSION']
|
8
10
|
$device_name = ENV['DEVICE_NAME']
|
@@ -23,29 +25,82 @@ if $platform == 'android' or $platform == 'iOS'
|
|
23
25
|
$device_name, $os_version = get_device_info
|
24
26
|
end
|
25
27
|
|
26
|
-
desired_caps = {
|
27
|
-
|
28
|
-
|
28
|
+
# desired_caps = {
|
29
|
+
# caps: {
|
30
|
+
# platformName: $platform,
|
31
|
+
# browserName: $browser_type,
|
32
|
+
# versionNumber: $os_version,
|
33
|
+
# deviceName: $device_name,
|
34
|
+
# udid: $udid,
|
35
|
+
# app: ".//#{$app_path}"
|
36
|
+
# }
|
37
|
+
# }
|
38
|
+
# appium_url = 'http://localhost:4723/wd/hub'
|
39
|
+
# opts = {
|
40
|
+
# desired_capabilities: { # or { caps: {....} }
|
41
|
+
# platformName: :android,
|
42
|
+
# deviceName: 'Android Simulator',
|
43
|
+
# app: "WikipediaSample.apk"
|
44
|
+
# },
|
45
|
+
# appium_lib: {
|
46
|
+
# wait: 30
|
47
|
+
# }
|
48
|
+
# }
|
49
|
+
|
50
|
+
opts = {
|
51
|
+
desired_capabilities: { # or { caps: {....} }
|
52
|
+
platformName: $platform,
|
29
53
|
browserName: $browser_type,
|
30
|
-
versionNumber: $os_version,
|
31
54
|
deviceName: $device_name,
|
32
|
-
|
33
|
-
app: "
|
34
|
-
|
55
|
+
versionNumber: $os_version,
|
56
|
+
app: "WikipediaSample.apk"
|
57
|
+
},
|
58
|
+
appium_lib: {
|
59
|
+
wait: 30
|
35
60
|
}
|
61
|
+
}
|
36
62
|
|
37
63
|
begin
|
38
|
-
$driver = Appium::Driver.new(desired_caps).start_driver
|
64
|
+
# $driver = Appium::Driver.new(desired_caps, url: appium_url).start_driver
|
65
|
+
|
66
|
+
# $driver = Selenium::WebDriver.for(:remote, :url => appium_url, :desired_capabilities => desired_caps)
|
67
|
+
@core = Appium::Core.for(opts) # create a core driver with `opts`
|
68
|
+
$driver = @core.start_driver
|
69
|
+
|
39
70
|
rescue Exception => e
|
40
71
|
puts e.message
|
41
72
|
Process.exit(0)
|
42
73
|
end
|
43
74
|
else # else create driver instance for desktop browser
|
44
75
|
begin
|
45
|
-
$driver =
|
76
|
+
$driver = case $browser_type
|
77
|
+
when "chrome"
|
78
|
+
Selenium::WebDriver.for(:chrome)
|
79
|
+
when "safari"
|
80
|
+
Selenium::WebDriver.for(:safari)
|
81
|
+
when "internet_explorer"
|
82
|
+
Selenium::WebDriver.for(:internet_explorer)
|
83
|
+
when "chrome_headless"
|
84
|
+
Selenium::WebDriver.for(:chrome, :desired_capabilities => Selenium::WebDriver::Remote::Capabilities.chrome(chromeOptions: { args: %w(headless) }))
|
85
|
+
when "remote"
|
86
|
+
if ENV['SERVER_URL'].nil? || ENV['REMOTE_BROWSER'].nil?
|
87
|
+
puts "\nMissing SERVER_URL : SERVER_URL=http//SERVER_URL:4444/wd/hub"
|
88
|
+
puts "\nMissing REMOTE_BROWSER: REMOTE_BROWSER=browser_name"
|
89
|
+
Process.exit(0)
|
90
|
+
else
|
91
|
+
caps = Selenium::WebDriver::Remote::Capabilities.new
|
92
|
+
caps["browserName"] = ENV['REMOTE_BROWSER']
|
93
|
+
Selenium::WebDriver.for(:remote, :url => ENV['SERVER_URL'], :desired_capabilities => caps)
|
94
|
+
end
|
95
|
+
|
96
|
+
else
|
97
|
+
Selenium::WebDriver.for(:firefox)
|
98
|
+
end
|
46
99
|
$driver.manage().window().maximize()
|
100
|
+
p "session_id: #{$driver.session_id}"
|
47
101
|
rescue Exception => e
|
48
102
|
puts e.message
|
49
103
|
Process.exit(0)
|
50
104
|
end
|
51
105
|
end
|
106
|
+
|
@@ -1,26 +1,38 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
# executed.
|
11
|
-
end
|
12
|
-
|
13
|
-
After do
|
14
|
-
# Do something after each scenario.
|
1
|
+
def validate_params_exist
|
2
|
+
raise "❌ ERROR: Missing param SERVER_URL." if ENV['SERVER_URL'].nil?
|
3
|
+
raise "❌ ERROR: Missing param BROWSER." if ENV['BROWSER'].nil?
|
4
|
+
if ENV['REPORT']
|
5
|
+
raise "❌ ERROR: Missing param TESTSUITE." if ENV['TESTSUITE'].nil?
|
6
|
+
raise "❌ ERROR: Missing param TESTCASE_REPORT_NAME." if ENV['TESTCASE_REPORT_NAME'].nil?
|
7
|
+
$report_path = "Reports/#{ENV['TESTSUITE']}"
|
8
|
+
$testcase_report_name = ENV['TESTCASE_REPORT_NAME']
|
9
|
+
end
|
15
10
|
end
|
16
11
|
|
17
|
-
|
18
|
-
#
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
12
|
+
at_exit do
|
13
|
+
# quite driver
|
14
|
+
$driver.close()
|
15
|
+
if ENV['REPORT']
|
16
|
+
begin
|
17
|
+
# validateReport
|
18
|
+
time = Time.now.getutc
|
19
|
+
ReportBuilder.configure do |config|
|
20
|
+
config.report_path = "#{$report_path}/#{$testcase_report_name}"
|
21
|
+
config.input_path = "#{$report_path}/#{$testcase_report_name}.json"
|
22
|
+
config.report_types = [:json, :html]
|
23
|
+
config.color = 'blue'
|
24
|
+
config.additional_info = {
|
25
|
+
'Browser' => $browser_type,
|
26
|
+
'Platform' => $platform ,
|
27
|
+
'OS Version' => $os_version,
|
28
|
+
'Report Generated' => time
|
29
|
+
}
|
30
|
+
end
|
31
|
+
options = { report_title: "INFODation - Test Management System" }
|
32
|
+
ReportBuilder.build_report options
|
33
|
+
rescue Exception => e
|
34
|
+
puts e.message
|
35
|
+
Process.exit( 0 )
|
36
|
+
end
|
25
37
|
end
|
26
38
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
button: { id: 'submit' }
|
@@ -93,9 +93,11 @@ else # else create driver instance for desktop browser
|
|
93
93
|
Selenium::WebDriver.for(:firefox)
|
94
94
|
end
|
95
95
|
$driver.manage().window().maximize()
|
96
|
-
p "session_id: #{$driver.session_id}"
|
97
96
|
if ENV["UPDATE_SESSION_ID_API"]
|
98
|
-
|
97
|
+
begin
|
98
|
+
HTTParty.post(ENV["UPDATE_SESSION_ID_API"], body: { session_id: $driver.session_id })
|
99
|
+
rescue => exception
|
100
|
+
end
|
99
101
|
end
|
100
102
|
rescue Exception => e
|
101
103
|
puts e.message
|
@@ -1,43 +1,3 @@
|
|
1
|
-
#Cucumber provides a number of hooks which allow us to run blocks at various points in the Cucumber test cycle
|
2
|
-
|
3
|
-
Before do
|
4
|
-
# Do something before each scenario.
|
5
|
-
end
|
6
|
-
|
7
|
-
Before do |scenario|
|
8
|
-
# The +scenario+ argument is optional, but if you use it, you can get the title,
|
9
|
-
# description, or name (title + description) of the scenario that is about to be
|
10
|
-
# executed.
|
11
|
-
end
|
12
|
-
|
13
|
-
After do
|
14
|
-
# Do something after each scenario.
|
15
|
-
end
|
16
|
-
|
17
|
-
After do |scenario|
|
18
|
-
# Do something after each scenario.
|
19
|
-
# The +scenario+ argument is optional, but
|
20
|
-
# if you use it, you can inspect status with
|
21
|
-
# the #failed?, #passed? and #exception methods.
|
22
|
-
|
23
|
-
if(scenario.failed?)
|
24
|
-
#Do something if scenario fails.
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
|
29
|
-
AfterConfiguration do
|
30
|
-
$OBJECT = loadYAMLfile("features/step_definitions/repositories/project_object.yml")
|
31
|
-
end
|
32
|
-
|
33
|
-
def loadYAMLfile(filename)
|
34
|
-
begin
|
35
|
-
return YAML.load_file(filename)
|
36
|
-
rescue Psych::SyntaxError => ex
|
37
|
-
raise "❌ SyntaxError when reading file: #{ex}"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
1
|
def validate_params_exist
|
42
2
|
raise "❌ ERROR: Missing param SERVER_URL." if ENV['SERVER_URL'].nil?
|
43
3
|
raise "❌ ERROR: Missing param BROWSER." if ENV['BROWSER'].nil?
|
@@ -50,6 +10,8 @@ def validate_params_exist
|
|
50
10
|
end
|
51
11
|
|
52
12
|
at_exit do
|
13
|
+
# quite driver
|
14
|
+
$driver.close()
|
53
15
|
if ENV['REPORT']
|
54
16
|
begin
|
55
17
|
# validateReport
|
@@ -68,7 +30,9 @@ at_exit do
|
|
68
30
|
end
|
69
31
|
options = { report_title: "INFODation - Test Management System" }
|
70
32
|
ReportBuilder.build_report options
|
71
|
-
rescue
|
33
|
+
rescue Exception => e
|
34
|
+
puts e.message
|
35
|
+
Process.exit( 0 )
|
72
36
|
end
|
73
37
|
end
|
74
38
|
end
|
@@ -41,17 +41,15 @@ def check_partial_title(partial_text_title, test_case)
|
|
41
41
|
end
|
42
42
|
|
43
43
|
# Method to get element text
|
44
|
-
# param
|
45
|
-
# param 2 : String : Locator value
|
44
|
+
# param : String
|
46
45
|
def get_element_text(element)
|
47
46
|
WAIT.until { find_object(element) }.text
|
48
47
|
end
|
49
48
|
|
50
49
|
# Method to check element text
|
51
|
-
# param 1 : String :
|
50
|
+
# param 1 : String : Element
|
52
51
|
# param 2 : String : Expected element text
|
53
|
-
# param 3 :
|
54
|
-
# param 4 : Boolean : test case [true or flase]
|
52
|
+
# param 3 : Boolean : test case [true or flase]
|
55
53
|
def check_element_text(element, actual_value, test_case)
|
56
54
|
element_text = get_element_text(element)
|
57
55
|
|
@@ -67,10 +65,9 @@ def check_element_text(element, actual_value, test_case)
|
|
67
65
|
end
|
68
66
|
|
69
67
|
# Method to check partial element text
|
70
|
-
# param 1 : String :
|
68
|
+
# param 1 : String : Element
|
71
69
|
# param 2 : String : Expected element partial text
|
72
|
-
# param 3 :
|
73
|
-
# param 4 : Boolean : test case [true or flase]
|
70
|
+
# param 3 : Boolean : test case [true or flase]
|
74
71
|
def check_element_partial_text(element, actual_value, test_case)
|
75
72
|
element_text = get_element_text(element)
|
76
73
|
|
@@ -86,16 +83,14 @@ def check_element_partial_text(element, actual_value, test_case)
|
|
86
83
|
end
|
87
84
|
|
88
85
|
# Method to return element status - enabled?
|
89
|
-
# param
|
90
|
-
# param 2 : String : Locator value
|
86
|
+
# param : String : Element
|
91
87
|
def is_element_enabled(element)
|
92
88
|
WAIT.until{ find_object(element) }.enabled?
|
93
89
|
end
|
94
90
|
|
95
91
|
# Element enabled checking
|
96
|
-
# param 1 : String :
|
97
|
-
# param 2 :
|
98
|
-
# param 4 : Boolean : test case [true or flase]
|
92
|
+
# param 1 : String : Element
|
93
|
+
# param 2 : Boolean : test case [true or flase]
|
99
94
|
def check_element_enable(element, test_case)
|
100
95
|
result = is_element_enabled(element)
|
101
96
|
|
@@ -107,19 +102,17 @@ def check_element_enable(element, test_case)
|
|
107
102
|
end
|
108
103
|
|
109
104
|
# method to get attribute value
|
110
|
-
# param 1 : String :
|
111
|
-
# param 2 : String :
|
112
|
-
# param 3 : String : atrribute name
|
105
|
+
# param 1 : String : Element
|
106
|
+
# param 2 : String : atrribute name
|
113
107
|
def get_element_attribute(element, attribute_name)
|
114
108
|
WAIT.until{ find_object(element) }.attribute("#{attribute_name}")
|
115
109
|
end
|
116
110
|
|
117
111
|
# method to check attribute value
|
118
|
-
# param 1 : String :
|
112
|
+
# param 1 : String : Element
|
119
113
|
# param 2 : String : atrribute name
|
120
114
|
# param 3 : String : atrribute value
|
121
|
-
# param 4 :
|
122
|
-
# param 5 : Boolean : test case [true or flase]
|
115
|
+
# param 4 : Boolean : test case [true or flase]
|
123
116
|
def check_element_attribute(element, attribute_name, attribute_value, test_case)
|
124
117
|
|
125
118
|
attr_val = get_element_attribute(element, attribute_name)
|
@@ -136,16 +129,14 @@ def check_element_attribute(element, attribute_name, attribute_value, test_case)
|
|
136
129
|
end
|
137
130
|
|
138
131
|
# method to get element status - displayed?
|
139
|
-
# param
|
140
|
-
|
141
|
-
def is_element_displayed(access_type, access_name)
|
132
|
+
# param : String : Element
|
133
|
+
def is_element_displayed(element)
|
142
134
|
WAIT.until{ find_object(element) }.displayed?
|
143
135
|
end
|
144
136
|
|
145
137
|
# method to check element presence
|
146
|
-
# param 1 : String :
|
147
|
-
# param 2 :
|
148
|
-
# param 3 : Boolean : test case [true or flase]
|
138
|
+
# param 1 : String : Element
|
139
|
+
# param 2 : Boolean : test case [true or flase]
|
149
140
|
def check_element_presence(element, test_case)
|
150
141
|
if test_case
|
151
142
|
if !is_element_displayed(element)
|
@@ -165,9 +156,8 @@ def check_element_presence(element, test_case)
|
|
165
156
|
end
|
166
157
|
|
167
158
|
# method to assert checkbox check/uncheck
|
168
|
-
# param 1 : String :
|
169
|
-
# param 2 :
|
170
|
-
# param 3 : Boolean : test case [true or flase]
|
159
|
+
# param 1 : String : Element
|
160
|
+
# param 2 : Boolean : test case [true or flase]
|
171
161
|
def is_checkbox_checked(element, should_be_checked = true)
|
172
162
|
checkbox = WAIT.until{ find_object(element) }
|
173
163
|
|
@@ -179,9 +169,8 @@ def is_checkbox_checked(element, should_be_checked = true)
|
|
179
169
|
end
|
180
170
|
|
181
171
|
# method to assert radio button selected/unselected
|
182
|
-
# param 1 : String :
|
183
|
-
# param 2 :
|
184
|
-
# param 3 : Boolean : test case [true or flase]
|
172
|
+
# param 1 : String : Element
|
173
|
+
# param 2 : Boolean : test case [true or flase]
|
185
174
|
def is_radio_button_selected(element, should_be_selected = true)
|
186
175
|
radio_button = WAIT.until{ find_object(element) }
|
187
176
|
|
@@ -8,15 +8,15 @@ def click_forcefully(element)
|
|
8
8
|
$driver.execute_script('arguments[0].click();', WAIT.until { find_object(element) })
|
9
9
|
end
|
10
10
|
|
11
|
-
def double_click(
|
12
|
-
|
13
|
-
$driver.action.double_click(
|
11
|
+
def double_click(element)
|
12
|
+
found_element = WAIT.until { find_object(element) }
|
13
|
+
$driver.action.double_click(found_element).perform
|
14
14
|
end
|
15
15
|
|
16
16
|
|
17
|
-
def long_press(
|
18
|
-
|
19
|
-
parameters = { "element" => "#{
|
17
|
+
def long_press( element, duration)
|
18
|
+
found_element = WAIT.until { find_object(element) }
|
19
|
+
parameters = { "element" => "#{found_element}", "duration" => "#{duration}" }
|
20
20
|
args = parameters.select { |k, v| [:element, :duration].include? k }
|
21
21
|
args = args_with_ele_ref(args)
|
22
22
|
chain_method(:longPress, args)
|
@@ -85,3 +85,9 @@ def print_invalid_platform
|
|
85
85
|
puts "\nTo run on Desktop no need to mention platform."
|
86
86
|
Process.exit(0)
|
87
87
|
end
|
88
|
+
|
89
|
+
def print_error_object_repository
|
90
|
+
puts "\nNo Object Repository found."
|
91
|
+
puts "\nPlease create file \"project_object.yml\" in path \"features/step_definitions/repositories/\""
|
92
|
+
Process.exit(0)
|
93
|
+
end
|
@@ -34,6 +34,7 @@ def get_device_info
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def find_object(string_object)
|
37
|
+
$OBJECT = load_object_repository
|
37
38
|
string_object = string_object.gsub(/"/, "'")
|
38
39
|
hash_object = $OBJECT[string_object]
|
39
40
|
if hash_object == nil
|
@@ -45,3 +46,18 @@ def find_object(string_object)
|
|
45
46
|
$driver.find_element(:"#{locator_type}" => "#{locator_value}")
|
46
47
|
end
|
47
48
|
|
49
|
+
def load_object_repository
|
50
|
+
begin
|
51
|
+
loadYAMLfile("features/step_definitions/repositories/project_object.yml")
|
52
|
+
rescue => exception
|
53
|
+
print_error_object_repository
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def loadYAMLfile(filename)
|
58
|
+
begin
|
59
|
+
return YAML.load_file(filename)
|
60
|
+
rescue Psych::SyntaxError => ex
|
61
|
+
raise "❌ SyntaxError when reading file: #{ex}"
|
62
|
+
end
|
63
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: itms_automation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.5.
|
4
|
+
version: 2.5.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- INFOdation
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cucumber
|
@@ -16,20 +16,20 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 3.1.2
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.
|
22
|
+
version: 3.1.2
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 3.1.2
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 1.
|
32
|
+
version: 3.1.2
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: selenium-webdriver
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,6 +130,7 @@ files:
|
|
130
130
|
- features-skeleton/my_first.feature
|
131
131
|
- features-skeleton/screenshots/test.png
|
132
132
|
- features-skeleton/step_definitions/custom_steps.rb
|
133
|
+
- features-skeleton/step_definitions/repositories/project_object.yml
|
133
134
|
- features-skeleton/support/env.rb
|
134
135
|
- features-skeleton/support/hooks.rb
|
135
136
|
- lib/itms_automation.rb
|