itms_automation 2.6.6 → 2.7.1

Sign up to get free protection for your applications and to get access to all the features.
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