itms_automation 2.6.6 → 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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/doc/installation.md +1 -1
  3. data/features-skeleton/my_first.feature +19 -10
  4. data/features-skeleton/step_definitions/input_steps.rb +3 -3
  5. data/features-skeleton/step_definitions/my_first_steps.rb +14 -0
  6. data/features-skeleton/step_definitions/repositories/project_object.yml +1 -1
  7. data/features-skeleton/support/env.rb +17 -88
  8. data/lib/itms_automation/input_steps.rb +1 -1
  9. data/lib/itms_automation/methods/assertion_methods.rb +26 -77
  10. data/lib/itms_automation/methods/click_elements_methods.rb +13 -6
  11. data/lib/itms_automation/methods/condition_methods.rb +13 -0
  12. data/lib/itms_automation/methods/configuration_methods.rb +8 -4
  13. data/lib/itms_automation/methods/input_methods.rb +17 -14
  14. data/lib/itms_automation/methods/javascript_handling_methods.rb +1 -1
  15. data/lib/itms_automation/methods/misc_methods.rb +2 -2
  16. data/lib/itms_automation/methods/navigate_methods.rb +52 -45
  17. data/lib/itms_automation/methods/progress_methods.rb +1 -1
  18. data/lib/itms_automation/version.rb +1 -1
  19. metadata +39 -40
  20. data/example/android/android_app/android_app_calculator.zip +0 -0
  21. data/example/android/android_app/android_app_calculator/AndroidCalculator.apk +0 -0
  22. data/example/android/android_app/android_app_calculator/features/calculator.feature +0 -36
  23. data/example/android/android_app/android_app_calculator/features/my_first.feature +0 -13
  24. data/example/android/android_app/android_app_calculator/features/screenshots/test.png +0 -0
  25. data/example/android/android_app/android_app_calculator/features/step_definitions/custom_steps.rb +0 -5
  26. data/example/android/android_app/android_app_calculator/features/support/env.rb +0 -52
  27. data/example/android/android_app/android_app_calculator/features/support/hooks.rb +0 -26
  28. data/example/android/android_web/android_web_gmail_login.zip +0 -0
  29. data/example/android/android_web/android_web_gmail_login/features/gmail_login.feature +0 -12
  30. data/example/android/android_web/android_web_gmail_login/features/my_first.feature +0 -1
  31. data/example/android/android_web/android_web_gmail_login/features/screenshots/test.png +0 -0
  32. data/example/android/android_web/android_web_gmail_login/features/step_definitions/custom_steps.rb +0 -5
  33. data/example/android/android_web/android_web_gmail_login/features/support/env.rb +0 -51
  34. data/example/android/android_web/android_web_gmail_login/features/support/hooks.rb +0 -27
  35. data/example/desktop web/desktop_web_gmail_login.zip +0 -0
  36. data/example/desktop web/desktop_web_gmail_login/features/gmail_login.feature +0 -9
  37. data/example/desktop web/desktop_web_gmail_login/features/gmail_multi_login.feature +0 -21
  38. data/example/desktop web/desktop_web_gmail_login/features/my_first.feature +0 -1
  39. data/example/desktop web/desktop_web_gmail_login/features/screenshots/test.png +0 -0
  40. data/example/desktop web/desktop_web_gmail_login/features/step_definitions/custom_steps.rb +0 -5
  41. data/example/desktop web/desktop_web_gmail_login/features/support/env.rb +0 -106
  42. data/example/desktop web/desktop_web_gmail_login/features/support/hooks.rb +0 -38
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a0debb622483ecc8f743af4f964ac19b076602ae62a0ecf149b4b85284bd5bd9
4
- data.tar.gz: a3d0dad052dd905099398484e92cb6a4e41a08f075bb69491cf9a374bf96104c
3
+ metadata.gz: '090afc5cfe29b875d3816ad9ca3e64c140c8b73a5fe2a7129d02b1641baa8d4f'
4
+ data.tar.gz: 9f36d46924317a25e1474668a4b22b19d487a155f2c24508310ee81230548196
5
5
  SHA512:
6
- metadata.gz: da38039d36ea506eb94609c605eb05a84da8f182e4a555ac8734bcdf2b4cd065ac2c07084626a5551e2f48049a7715bca2a5de7e67a1c5e4bec3643be7d28714
7
- data.tar.gz: f52d41f0474e7d606891093536673b5c108a00d4f7f3e8063e4a8fbb6dfbbd22699374a6daebb13be4fd058933d8fbf1bbbd5c5ca1361eac4cb9458a91e67734
6
+ metadata.gz: cf5d23c33daedaaa38c3e56cd689a8bb99ef720f8efe8ddfbdf6c0a686bf8749e208503b00e3ea1990608fd83d2c86f1159446d07314c02f159dcad892086989
7
+ data.tar.gz: 6b2052bc442d517c26186e412dacb3fb94f3b23c0aa21c24937686e1263ee9c3a07ecd21b139b49a5498a4787ea0ae8e12579e908acc86da530c2a1a5e5eca6a
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 1.9.3" (or higher).
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
 
@@ -1,10 +1,19 @@
1
- # Feature: Addition
2
- # As a math idiot
3
- # In order to not feel silly
4
- # I add two numbers
5
-
6
- # Scenario: Adding a and b
7
- # Given I have variable a
8
- # And I have variable b
9
- # When I add a and b
10
- # Then I display the sum
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!× |
@@ -4,12 +4,12 @@
4
4
 
5
5
  # # enter text into input field steps
6
6
  # Then(/^I enter "([^\"]*)" into element "(.*?)"$/) do |text, element|
7
- # enter_text(type, element)
7
+ # enter_text(element, text)
8
8
  # end
9
9
 
10
10
  # # clear input field steps
11
- # Then(/^I clear input element "(.*?)"$/) do |type, element|
12
- # clear_text(type, element)
11
+ # Then(/^I clear input element "(.*?)"$/) do |element|
12
+ # clear_text(element)
13
13
  # end
14
14
 
15
15
  # # select option by text/value from dropdown/multiselect
@@ -0,0 +1,14 @@
1
+ # Given('the login page is opened successfully') do
2
+ # $driver.get("http://the-internet.herokuapp.com/login")
3
+ # end
4
+
5
+ # When('user input username {string} and password {string}') do |string, string2|
6
+ # $driver.find_element(:id, 'username').send_keys(string)
7
+ # $driver.find_element(:id, 'password').send_keys(string2)
8
+ # $driver.find_element(:css, '[class="fa fa-2x fa-sign-in"]').click
9
+ # end
10
+
11
+ # Then('the message {string} should be displayed') do |string|
12
+ # message = $driver.find_element(:css, '#flash').text.delete("\n")
13
+ # expect(message).to eql(string)
14
+ # end
@@ -1 +1 @@
1
- button: { id: 'submit' }
1
+ test_object: {id: 'username'}
@@ -1,78 +1,14 @@
1
1
  require "rubygems"
2
2
  require "itms_automation"
3
3
  require "httparty"
4
- require "cucumber"
5
4
  require "report_builder"
6
- require "selenium-webdriver"
5
+ require "webdrivers"
7
6
 
8
7
  $browser_type = ENV["BROWSER"] || "firefox"
9
- $platform = ENV["PLATFORM"] || "desktop"
10
- $os_version = ENV["OS_VERSION"]
11
- $device_name = ENV["DEVICE_NAME"]
12
- $udid = ENV["UDID"]
13
- $app_path = ENV["APP_PATH"]
14
8
 
15
- # check for valid parameters
16
- validate_parameters $platform, $browser_type, $app_path
17
-
18
- # If platform is android or ios create driver instance for mobile browser
19
- if $platform == "android" or $platform == "iOS"
20
- if $browser_type == "native"
21
- $browser_type = "Browser"
22
- end
23
-
24
- if $platform == "android"
25
- $device_name, $os_version = get_device_info
26
- end
27
-
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,
53
- browserName: $browser_type,
54
- deviceName: $device_name,
55
- versionNumber: $os_version,
56
- app: "WikipediaSample.apk",
57
- },
58
- appium_lib: {
59
- wait: 30,
60
- },
61
- }
62
-
63
- begin
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
- rescue Exception => e
70
- puts e.message
71
- Process.exit(0)
72
- end
73
- else # else create driver instance for desktop browser
74
- begin
75
- $driver = case $browser_type
9
+ begin
10
+ $vars = {}
11
+ $driver = case $browser_type
76
12
  when "chrome"
77
13
  Selenium::WebDriver.for(:chrome)
78
14
  when "safari"
@@ -82,29 +18,22 @@ else # else create driver instance for desktop browser
82
18
  when "chrome_headless"
83
19
  Selenium::WebDriver.for(:chrome, :desired_capabilities => Selenium::WebDriver::Remote::Capabilities.chrome(chromeOptions: { args: %w(headless) }))
84
20
  when "remote"
85
- if ENV["SERVER_URL"].nil? || ENV["REMOTE_BROWSER"].nil?
86
- puts "\nMissing SERVER_URL : SERVER_URL=http://SERVER_URL:4444/wd/hub"
21
+ if ENV['SERVER_URL'].nil? || ENV['REMOTE_BROWSER'].nil?
22
+ puts "\nMissing SERVER_URL : SERVER_URL=http//SERVER_URL:4444/wd/hub"
87
23
  puts "\nMissing REMOTE_BROWSER: REMOTE_BROWSER=browser_name"
88
24
  Process.exit(0)
89
25
  else
90
- if ENV['SERVER_URL'].nil? || ENV['REMOTE_BROWSER'].nil?
91
- puts "\nMissing SERVER_URL : SERVER_URL=http//SERVER_URL:4444/wd/hub"
92
- puts "\nMissing REMOTE_BROWSER: REMOTE_BROWSER=browser_name"
93
- Process.exit(0)
94
- else
95
- caps = Selenium::WebDriver::Remote::Capabilities.new
96
- caps["browserName"] = ENV["REMOTE_BROWSER"]
97
- caps["enableVNC"] = true
98
- caps["enableVideo"] = true
99
- caps["resolution"] = ENV["resolution"] unless ENV["resolution"]
100
- Selenium::WebDriver.for(:remote, :url => ENV["SERVER_URL"], :desired_capabilities => caps)
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)
101
32
  end
102
- else
103
- Selenium::WebDriver.for(:firefox)
104
- end
105
- $driver.manage().window().maximize()
106
- rescue Exception => e
107
- puts e.message
108
- Process.exit(0)
33
+ else
34
+ Selenium::WebDriver.for(:firefox)
109
35
  end
36
+ rescue Exception => e
37
+ puts e.message
38
+ Process.exit(0)
110
39
  end
@@ -3,7 +3,7 @@
3
3
 
4
4
  # # enter text into input field steps
5
5
  # Then(/^I enter "([^\"]*)" into element "(.*?)"$/) do |text, element|
6
- # enter_text(type, element)
6
+ # enter_text(element, text)
7
7
  # end
8
8
 
9
9
  # # clear input field steps
@@ -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 : String : expected title
13
- # param 2 : Boolean : test case [true or flase]
14
- def check_title(title, test_case)
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
- WAIT.until { find_object(element) }.text
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
- # param 3 : Boolean : test case [true or flase]
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 check_element_presence(element, test_case)
141
- if test_case
142
- if !is_element_displayed(element)
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/uncheck
103
+ # method to assert checkbox check
159
104
  # param 1 : String : Element
160
- # param 2 : Boolean : test case [true or flase]
161
- def is_checkbox_checked(element, should_be_checked = true)
162
- checkbox = WAIT.until{ find_object(element) }
105
+ def assert_checked(element)
106
+ checkbox = find_object(element)
163
107
 
164
- if !checkbox.selected? && should_be_checked
165
- raise TestCaseFailed, 'Checkbox is not checked'
166
- elsif checkbox.selected? && !should_be_checked
167
- raise TestCaseFailed, 'Checkbox is checked'
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 check_alert_text(text)
206
- if get_alert_text != text
207
- raise TestCaseFailed, "Text on alert pop up not matched. Actual Value :#{get_alert_text}"
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
- WAIT.until { find_object(element) }.click
4
+ found_element = find_object(element)
5
+ found_element.click
5
6
  end
6
7
 
7
- def click_forcefully(element)
8
- $driver.execute_script('arguments[0].click();', WAIT.until { find_object(element) })
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 = WAIT.until { find_object(element) }
14
+ found_element = find_object(element)
13
15
  $driver.action.double_click(found_element).perform
14
16
  end
15
17
 
16
- def long_press( element, duration)
17
- found_element = WAIT.until { find_object(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