itms_automation 2.7.0 → 2.7.1
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/features-skeleton/support/env.rb +22 -21
- data/lib/itms_automation/methods/assertion_methods.rb +26 -77
- data/lib/itms_automation/methods/click_elements_methods.rb +13 -6
- data/lib/itms_automation/methods/condition_methods.rb +13 -0
- data/lib/itms_automation/methods/configuration_methods.rb +8 -4
- data/lib/itms_automation/methods/input_methods.rb +17 -14
- data/lib/itms_automation/methods/javascript_handling_methods.rb +1 -1
- data/lib/itms_automation/methods/misc_methods.rb +1 -1
- data/lib/itms_automation/methods/navigate_methods.rb +52 -45
- data/lib/itms_automation/methods/progress_methods.rb +1 -1
- data/lib/itms_automation/version.rb +1 -1
- metadata +23 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '090afc5cfe29b875d3816ad9ca3e64c140c8b73a5fe2a7129d02b1641baa8d4f'
|
4
|
+
data.tar.gz: 9f36d46924317a25e1474668a4b22b19d487a155f2c24508310ee81230548196
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf5d23c33daedaaa38c3e56cd689a8bb99ef720f8efe8ddfbdf6c0a686bf8749e208503b00e3ea1990608fd83d2c86f1159446d07314c02f159dcad892086989
|
7
|
+
data.tar.gz: 6b2052bc442d517c26186e412dacb3fb94f3b23c0aa21c24937686e1263ee9c3a07ecd21b139b49a5498a4787ea0ae8e12579e908acc86da530c2a1a5e5eca6a
|
@@ -7,28 +7,29 @@ require "webdrivers"
|
|
7
7
|
$browser_type = ENV["BROWSER"] || "firefox"
|
8
8
|
|
9
9
|
begin
|
10
|
+
$vars = {}
|
10
11
|
$driver = case $browser_type
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
12
|
+
when "chrome"
|
13
|
+
Selenium::WebDriver.for(:chrome)
|
14
|
+
when "safari"
|
15
|
+
Selenium::WebDriver.for(:safari)
|
16
|
+
when "internet_explorer"
|
17
|
+
Selenium::WebDriver.for(:internet_explorer)
|
18
|
+
when "chrome_headless"
|
19
|
+
Selenium::WebDriver.for(:chrome, :desired_capabilities => Selenium::WebDriver::Remote::Capabilities.chrome(chromeOptions: { args: %w(headless) }))
|
20
|
+
when "remote"
|
21
|
+
if ENV['SERVER_URL'].nil? || ENV['REMOTE_BROWSER'].nil?
|
22
|
+
puts "\nMissing SERVER_URL : SERVER_URL=http//SERVER_URL:4444/wd/hub"
|
23
|
+
puts "\nMissing REMOTE_BROWSER: REMOTE_BROWSER=browser_name"
|
24
|
+
Process.exit(0)
|
25
|
+
else
|
26
|
+
caps = Selenium::WebDriver::Remote::Capabilities.new
|
27
|
+
caps["browserName"] = ENV["REMOTE_BROWSER"]
|
28
|
+
caps["enableVNC"] = false
|
29
|
+
caps["enableVideo"] = false
|
30
|
+
caps["resolution"] = ENV["resolution"] unless ENV["resolution"]
|
31
|
+
Selenium::WebDriver.for(:remote, :url => ENV["SERVER_URL"], :desired_capabilities => caps)
|
32
|
+
end
|
32
33
|
else
|
33
34
|
Selenium::WebDriver.for(:firefox)
|
34
35
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'net/https'
|
2
2
|
require_relative 'required_files'
|
3
|
+
require 'rspec'
|
3
4
|
|
4
5
|
# This file contains assertion methods which are called from assertion_steps.rb
|
5
6
|
|
@@ -9,59 +10,23 @@ def get_page_title
|
|
9
10
|
end
|
10
11
|
|
11
12
|
# Method to verify title
|
12
|
-
# param 1
|
13
|
-
|
14
|
-
|
15
|
-
page_title = get_page_title
|
16
|
-
if test_case
|
17
|
-
if page_title != "#{title}"
|
18
|
-
raise TestCaseFailed, "Page Title Not Matched, Actual Page Title : #{page_title}"
|
19
|
-
end
|
20
|
-
else
|
21
|
-
if page_title == "#{title}"
|
22
|
-
raise TestCaseFailed, "Page Title Matched, Actual Page Title:#{page_title}"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
# Method to verify partial title
|
28
|
-
# param 1 : String : partial title string
|
29
|
-
# param 2 : Boolean : test case [true or flase]
|
30
|
-
def check_partial_title(partial_text_title, test_case)
|
31
|
-
page_title = get_page_title
|
32
|
-
if test_case
|
33
|
-
if not page_title.include? "#{partial_text_title}"
|
34
|
-
raise TestCaseFailed, 'Partial Page Title Not Present'
|
35
|
-
end
|
36
|
-
else
|
37
|
-
if page_title.include? "#{partial_text_title}"
|
38
|
-
raise TestCaseFailed, 'Page Title Matched'
|
39
|
-
end
|
40
|
-
end
|
13
|
+
# param 1: String : expected title
|
14
|
+
def assert_title(title)
|
15
|
+
expect(get_page_title).to eq(title)
|
41
16
|
end
|
42
17
|
|
43
18
|
# Method to get element text
|
44
19
|
# param : String
|
45
20
|
def get_element_text(element)
|
46
|
-
|
21
|
+
find_object(element).text
|
47
22
|
end
|
48
23
|
|
49
24
|
# Method to check element text
|
50
25
|
# param 1 : String : Element
|
51
26
|
# param 2 : String : Expected element text
|
52
|
-
|
53
|
-
def check_element_text(element, expected_value, test_case)
|
27
|
+
def assert_text(element, expected_value)
|
54
28
|
element_text = get_element_text(element)
|
55
|
-
|
56
|
-
if test_case
|
57
|
-
if element_text != expected_value
|
58
|
-
raise TestCaseFailed, "Text Not Matched. Actual Value :#{expected_value}"
|
59
|
-
end
|
60
|
-
else
|
61
|
-
if element_text == expected_value
|
62
|
-
raise TestCaseFailed, "Text Matched. Actual Value :#{expected_value}"
|
63
|
-
end
|
64
|
-
end
|
29
|
+
expect(element_text).to eq(expected_value)
|
65
30
|
end
|
66
31
|
|
67
32
|
# Method to check partial element text
|
@@ -101,13 +66,6 @@ def check_element_enable(element, test_case)
|
|
101
66
|
end
|
102
67
|
end
|
103
68
|
|
104
|
-
# method to get attribute value
|
105
|
-
# param 1 : String : Element
|
106
|
-
# param 2 : String : atrribute name
|
107
|
-
def get_element_attribute(element, attribute_name)
|
108
|
-
WAIT.until{ find_object(element) }.attribute("#{attribute_name}")
|
109
|
-
end
|
110
|
-
|
111
69
|
# method to check attribute value
|
112
70
|
# param 1 : String : Element
|
113
71
|
# param 2 : String : atrribute name
|
@@ -137,34 +95,26 @@ end
|
|
137
95
|
# method to check element presence
|
138
96
|
# param 1 : String : Element
|
139
97
|
# param 2 : Boolean : test case [true or flase]
|
140
|
-
def
|
141
|
-
|
142
|
-
|
143
|
-
raise TestCaseFailed, 'Element Not Present'
|
144
|
-
end
|
145
|
-
else
|
146
|
-
begin
|
147
|
-
if is_element_displayed(element)
|
148
|
-
raise 'Present' # since it is negative test and we found element
|
149
|
-
end
|
150
|
-
rescue Exception => e
|
151
|
-
if e.message == 'Present' # only raise if it present
|
152
|
-
raise TestCaseFailed, 'Element Present'
|
153
|
-
end
|
154
|
-
end
|
155
|
-
end
|
98
|
+
def assert_element_present(element)
|
99
|
+
found_element = find_object(element)
|
100
|
+
raise TestCaseFailed, 'Element Not Present' unless found_element.length > 0
|
156
101
|
end
|
157
102
|
|
158
|
-
# method to assert checkbox check
|
103
|
+
# method to assert checkbox check
|
159
104
|
# param 1 : String : Element
|
160
|
-
|
161
|
-
|
162
|
-
checkbox = WAIT.until{ find_object(element) }
|
105
|
+
def assert_checked(element)
|
106
|
+
checkbox = find_object(element)
|
163
107
|
|
164
|
-
if !checkbox.selected?
|
165
|
-
raise TestCaseFailed,
|
166
|
-
|
167
|
-
|
108
|
+
if !checkbox.selected?
|
109
|
+
raise TestCaseFailed, "Checkbox is not checked"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def assert_not_checked(element)
|
114
|
+
checkbox = find_object(element)
|
115
|
+
|
116
|
+
if checkbox.selected?
|
117
|
+
raise TestCaseFailed, "Checkbox is checked"
|
168
118
|
end
|
169
119
|
end
|
170
120
|
|
@@ -202,10 +152,9 @@ def get_alert_text
|
|
202
152
|
end
|
203
153
|
|
204
154
|
# method to check javascript pop-up alert text
|
205
|
-
def
|
206
|
-
|
207
|
-
|
208
|
-
end
|
155
|
+
def assert_alert(text)
|
156
|
+
alert_text = $driver.switch_to.alert.text
|
157
|
+
expect(alert_text).to eq(text)
|
209
158
|
end
|
210
159
|
|
211
160
|
def is_option_from_dropdown_selected(element, by, option, should_be_selected=true)
|
@@ -1,20 +1,27 @@
|
|
1
1
|
require_relative 'required_files'
|
2
2
|
|
3
3
|
def click(element)
|
4
|
-
|
4
|
+
found_element = find_object(element)
|
5
|
+
found_element.click
|
5
6
|
end
|
6
7
|
|
7
|
-
def
|
8
|
-
|
8
|
+
def click_at(element)
|
9
|
+
found_element = find_object(element)
|
10
|
+
found_element.click
|
9
11
|
end
|
10
12
|
|
11
13
|
def double_click(element)
|
12
|
-
found_element =
|
14
|
+
found_element = find_object(element)
|
13
15
|
$driver.action.double_click(found_element).perform
|
14
16
|
end
|
15
17
|
|
16
|
-
def
|
17
|
-
found_element =
|
18
|
+
def double_click_at(element, location)
|
19
|
+
found_element = find_object(element)
|
20
|
+
$driver.action.double_click(found_element).perform
|
21
|
+
end
|
22
|
+
|
23
|
+
def long_press(element, duration)
|
24
|
+
found_element = find_object(element)
|
18
25
|
parameters = { "element" => "#{found_element}", "duration" => "#{duration}" }
|
19
26
|
args = parameters.select { |k, v| [:element, :duration].include? k }
|
20
27
|
args = args_with_ele_ref(args)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require_relative 'required_files'
|
2
|
+
|
3
|
+
def if(condition_script)
|
4
|
+
return $driver.execute_script(condition_script)
|
5
|
+
end
|
6
|
+
|
7
|
+
def else_if(condition_script)
|
8
|
+
return $driver.execute_script(condition_script)
|
9
|
+
end
|
10
|
+
|
11
|
+
def while(condition_script)
|
12
|
+
return $driver.execute_script(condition_script)
|
13
|
+
end
|
@@ -22,14 +22,18 @@ end
|
|
22
22
|
|
23
23
|
# method to print mobile configuration
|
24
24
|
def print_mobile_configuration
|
25
|
-
puts "Platform : #{$platform.upcase}"
|
26
|
-
puts "OS version : #{$os_version}"
|
27
|
-
puts "Device : #{$device_name}"
|
25
|
+
puts "Platform : #{$platform.upcase}"
|
26
|
+
puts "OS version : #{$os_version}"
|
27
|
+
puts "Device : #{$device_name}"
|
28
28
|
|
29
29
|
if $app_path.nil?
|
30
30
|
puts 'Browser : ' + $driver.capabilities.browser_name.to_s.upcase + " " + $driver.capabilities.version.to_s
|
31
31
|
else
|
32
|
-
puts "App Tested : #{$app_path}"
|
32
|
+
puts "App Tested : #{$app_path}"
|
33
33
|
end
|
34
34
|
puts ''
|
35
35
|
end
|
36
|
+
|
37
|
+
def echo(message)
|
38
|
+
puts(message)
|
39
|
+
end
|
@@ -1,15 +1,21 @@
|
|
1
1
|
require_relative 'required_files'
|
2
2
|
|
3
3
|
# method to enter text into textfield
|
4
|
-
def
|
4
|
+
def type(element, text)
|
5
5
|
foundElement = find_object(element)
|
6
|
-
|
6
|
+
foundElement.send_keys(text)
|
7
7
|
end
|
8
8
|
|
9
|
-
# method to
|
10
|
-
def
|
9
|
+
# method to send keys
|
10
|
+
def send_keys(element, key)
|
11
|
+
keys_support = ["KEY_LEFT", "KEY_UP", "KEY_RIGHT", "KEY_DOWN", "KEY_PAGE_UP", "KEY_PAGE_DOWN", "KEY_BACKSPACE", "KEY_DELETE", "KEY_ENTER", "KEY_TAB"]
|
11
12
|
foundElement = find_object(element)
|
12
|
-
|
13
|
+
if key
|
14
|
+
get_key = key.strip[/^\$\{(.*?)\}$/, 1]
|
15
|
+
raise TestCaseFailed, "${get_key} key is not supported. Supported keys: KEY_LEFT, KEY_UP, KEY_RIGHT, KEY_DOWN, KEY_PAGE_UP, KEY_PAGE_DOWN, KEY_BACKSPACE, KEY_DELETE, KEY_ENTER, KEY_TAB" unless keys_support.include?(get_key)
|
16
|
+
key_convert = get_key[/^KEY_(.*?)$/, 1].downcase.to_sym
|
17
|
+
foundElement.send_keys(key_convert)
|
18
|
+
end
|
13
19
|
end
|
14
20
|
|
15
21
|
# method to select option from dropdwon list
|
@@ -34,21 +40,18 @@ def unselect_all_option_from_multiselect_dropdown(element)
|
|
34
40
|
end
|
35
41
|
|
36
42
|
# method to check checkbox
|
37
|
-
def
|
38
|
-
checkbox =
|
43
|
+
def check(element)
|
44
|
+
checkbox = find_object(element)
|
39
45
|
checkbox.click unless checkbox.selected?
|
40
46
|
end
|
41
47
|
|
42
48
|
# method to uncheck checkbox
|
43
|
-
def
|
44
|
-
checkbox =
|
45
|
-
|
46
|
-
if checkbox.selected?
|
47
|
-
checkbox.click
|
48
|
-
end
|
49
|
+
def uncheck(element)
|
50
|
+
checkbox = find_object(element)
|
51
|
+
checkbox.click if checkbox.selected?
|
49
52
|
end
|
50
53
|
|
51
|
-
# method to
|
54
|
+
# method to toggle checkbox checked
|
52
55
|
def toggle_checkbox(element)
|
53
56
|
WAIT.until { find_object(element) }.click
|
54
57
|
end
|
@@ -1,21 +1,25 @@
|
|
1
1
|
require_relative 'required_files'
|
2
2
|
|
3
3
|
# method to open link
|
4
|
-
def
|
4
|
+
def open(link)
|
5
5
|
$driver.get link
|
6
6
|
end
|
7
7
|
|
8
8
|
# method to navigate back & forward
|
9
9
|
def navigate(direction)
|
10
10
|
if direction == 'back'
|
11
|
-
|
11
|
+
$driver.navigate.back
|
12
12
|
else
|
13
13
|
$driver.navigate.forward
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
+
def close
|
18
|
+
$drive.close
|
19
|
+
end
|
20
|
+
|
17
21
|
# method to quite webdriver instance
|
18
|
-
def
|
22
|
+
def quit
|
19
23
|
$driver.quit
|
20
24
|
end
|
21
25
|
|
@@ -39,7 +43,7 @@ end
|
|
39
43
|
# Method to zoom in/out web page until web element dislays
|
40
44
|
def zoom_in_out_till_element_display(element, in_out)
|
41
45
|
while true
|
42
|
-
if
|
46
|
+
if find_object(element).displayed?
|
43
47
|
break
|
44
48
|
else
|
45
49
|
$driver.action.key_down(:"#{get_key}").send_keys(:"#{in_out}").key_up(:"#{get_key}").perform
|
@@ -48,8 +52,10 @@ def zoom_in_out_till_element_display(element, in_out)
|
|
48
52
|
end
|
49
53
|
|
50
54
|
# Method to resize browser
|
51
|
-
def
|
52
|
-
|
55
|
+
def set_window_size(resolution)
|
56
|
+
raise TestCaseFailed, 'Wrong format of resolution. (e.g., 1280x800)' unless resolution.match(/^\d+x\d+$/)
|
57
|
+
width, height = resolution.split("x")
|
58
|
+
$driver.manage.resize_to(width, heigth)
|
53
59
|
end
|
54
60
|
|
55
61
|
# Method to maximize browser
|
@@ -63,14 +69,50 @@ def refresh_page
|
|
63
69
|
end
|
64
70
|
|
65
71
|
# Method to hover on element
|
66
|
-
def
|
67
|
-
element =
|
68
|
-
$driver.action.
|
72
|
+
def mouse_over(element)
|
73
|
+
element = find_object(element)
|
74
|
+
$driver.action.move_to_element(element).perform
|
75
|
+
end
|
76
|
+
|
77
|
+
# mouse_down
|
78
|
+
def mouse_down(element)
|
79
|
+
element = find_object(element)
|
80
|
+
$driver.action.move_to_element(element).click_and_hold.perform
|
81
|
+
end
|
82
|
+
|
83
|
+
# mouse_down_at
|
84
|
+
def mouse_down_at(element, location)
|
85
|
+
element = find_object(element)
|
86
|
+
$driver.action.move_to_element(element).click_and_hold.perform
|
87
|
+
end
|
88
|
+
|
89
|
+
# mouse_out
|
90
|
+
def mouse_out
|
91
|
+
element = $driver.find_element(By.CSS_SELECTOR, 'body')
|
92
|
+
$driver.action.move_to_element(element, 0, 0).perform
|
93
|
+
end
|
94
|
+
|
95
|
+
#mouse_up
|
96
|
+
def mouse_up(element)
|
97
|
+
element = find_object(element)
|
98
|
+
$driver.action.move_to_element(element).release.perform
|
99
|
+
end
|
100
|
+
|
101
|
+
#mouse_up_at
|
102
|
+
def mouse_up_at
|
103
|
+
element = find_object(element)
|
104
|
+
$driver.action.move_to_element(element).release.perform
|
105
|
+
end
|
106
|
+
|
107
|
+
#mouse_move_at
|
108
|
+
def mouse_move_at
|
109
|
+
element = find_object(element)
|
110
|
+
$driver.action.move_to_element(element).perform
|
69
111
|
end
|
70
112
|
|
71
113
|
# Method to scroll page to perticular element
|
72
114
|
def scroll_to_element(element)
|
73
|
-
ele_scroll =
|
115
|
+
ele_scroll = find_object(element)
|
74
116
|
ele_scroll.location_once_scrolled_into_view
|
75
117
|
end
|
76
118
|
|
@@ -84,38 +126,3 @@ def scroll_page(to)
|
|
84
126
|
raise "Exception : Invalid Direction (only scroll \"top\" or \"end\")"
|
85
127
|
end
|
86
128
|
end
|
87
|
-
|
88
|
-
$old_win = nil
|
89
|
-
|
90
|
-
# Method to switch to new window
|
91
|
-
def switch_to_new_window
|
92
|
-
$old_win = $driver.window_handle
|
93
|
-
$driver.switch_to.window($driver.window_handles[1])
|
94
|
-
end
|
95
|
-
|
96
|
-
# Method to switch to old window
|
97
|
-
def switch_to_old_window
|
98
|
-
$driver.switch_to.window($old_win)
|
99
|
-
end
|
100
|
-
|
101
|
-
# Method to close new window
|
102
|
-
def close_new_window
|
103
|
-
$driver.close
|
104
|
-
end
|
105
|
-
|
106
|
-
=begin
|
107
|
-
def switch_to_new_window
|
108
|
-
win_handles = $driver.window_handles
|
109
|
-
|
110
|
-
puts $driver.title
|
111
|
-
puts win_handles.length
|
112
|
-
|
113
|
-
$driver.switch_to.window($driver.window_handles[1])
|
114
|
-
puts $driver.window_handles[1]
|
115
|
-
puts $driver.title
|
116
|
-
|
117
|
-
$driver.switch_to.window($driver.window_handles[2])
|
118
|
-
puts $driver.window_handles[2]
|
119
|
-
puts $driver.title
|
120
|
-
end
|
121
|
-
=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.7.
|
4
|
+
version: 2.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- INFOdation
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-04-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cucumber
|
@@ -110,6 +110,26 @@ dependencies:
|
|
110
110
|
- - "~>"
|
111
111
|
- !ruby/object:Gem::Version
|
112
112
|
version: '1.8'
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: rspec
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '3.5'
|
120
|
+
- - "~>"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '3.5'
|
123
|
+
type: :runtime
|
124
|
+
prerelease: false
|
125
|
+
version_requirements: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '3.5'
|
130
|
+
- - "~>"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '3.5'
|
113
133
|
description: Behavior driven development (BDD) approach to write automation test script
|
114
134
|
to test Web and Android applications.
|
115
135
|
email: anh.pham@infodation.vn
|
@@ -149,6 +169,7 @@ files:
|
|
149
169
|
- lib/itms_automation/javascript_handling_steps.rb
|
150
170
|
- lib/itms_automation/methods/assertion_methods.rb
|
151
171
|
- lib/itms_automation/methods/click_elements_methods.rb
|
172
|
+
- lib/itms_automation/methods/condition_methods.rb
|
152
173
|
- lib/itms_automation/methods/configuration_methods.rb
|
153
174
|
- lib/itms_automation/methods/error_handling_methods.rb
|
154
175
|
- lib/itms_automation/methods/input_methods.rb
|