itms_automation 2.3 → 2.6.0

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 (83) hide show
  1. checksums.yaml +4 -4
  2. data/bin/generate.rb +3 -37
  3. data/bin/helper.rb +23 -10
  4. data/bin/itms_automation +18 -23
  5. data/doc/installation.md +16 -0
  6. data/doc/itms-automation-API.md +103 -0
  7. data/doc/itms-automation-help.md +18 -0
  8. data/example/android/android_app/android_app_calculator.zip +0 -0
  9. data/example/android/android_app/android_app_calculator/AndroidCalculator.apk +0 -0
  10. data/example/android/android_app/android_app_calculator/features/calculator.feature +36 -0
  11. data/example/android/android_app/android_app_calculator/features/my_first.feature +13 -0
  12. data/example/android/android_app/android_app_calculator/features/screenshots/test.png +0 -0
  13. data/example/android/android_app/android_app_calculator/features/step_definitions/custom_steps.rb +5 -0
  14. data/example/android/android_app/android_app_calculator/features/support/env.rb +52 -0
  15. data/example/android/android_app/android_app_calculator/features/support/hooks.rb +26 -0
  16. data/example/android/android_web/android_web_gmail_login.zip +0 -0
  17. data/example/android/android_web/android_web_gmail_login/features/gmail_login.feature +12 -0
  18. data/example/android/android_web/android_web_gmail_login/features/my_first.feature +1 -0
  19. data/example/android/android_web/android_web_gmail_login/features/screenshots/test.png +0 -0
  20. data/example/android/android_web/android_web_gmail_login/features/step_definitions/custom_steps.rb +5 -0
  21. data/example/android/android_web/android_web_gmail_login/features/support/env.rb +51 -0
  22. data/example/android/android_web/android_web_gmail_login/features/support/hooks.rb +27 -0
  23. data/example/desktop web/desktop_web_gmail_login.zip +0 -0
  24. data/example/desktop web/desktop_web_gmail_login/features/gmail_login.feature +9 -0
  25. data/example/desktop web/desktop_web_gmail_login/features/gmail_multi_login.feature +21 -0
  26. data/example/desktop web/desktop_web_gmail_login/features/my_first.feature +1 -0
  27. data/example/desktop web/desktop_web_gmail_login/features/screenshots/test.png +0 -0
  28. data/example/desktop web/desktop_web_gmail_login/features/step_definitions/custom_steps.rb +5 -0
  29. data/example/desktop web/desktop_web_gmail_login/features/support/env.rb +106 -0
  30. data/example/desktop web/desktop_web_gmail_login/features/support/hooks.rb +38 -0
  31. data/features-skeleton/my_first.feature +5 -0
  32. data/features-skeleton/screenshots/test.png +0 -0
  33. data/features-skeleton/step_definitions/custom_steps.rb +5 -0
  34. data/features-skeleton/step_definitions/repositories/project_object.yml +1 -0
  35. data/features-skeleton/support/env.rb +108 -0
  36. data/features-skeleton/support/hooks.rb +38 -0
  37. data/lib/itms_automation.rb +1 -3
  38. data/lib/itms_automation/assertion_steps.rb +68 -0
  39. data/lib/itms_automation/click_elements_steps.rb +24 -0
  40. data/lib/itms_automation/configuration_steps.rb +7 -0
  41. data/lib/itms_automation/input_steps.rb +59 -0
  42. data/lib/itms_automation/javascript_handling_steps.rb +10 -0
  43. data/lib/itms_automation/methods/assertion_methods.rb +333 -0
  44. data/lib/itms_automation/methods/click_elements_methods.rb +23 -0
  45. data/lib/itms_automation/methods/configuration_methods.rb +35 -0
  46. data/lib/itms_automation/methods/error_handling_methods.rb +93 -0
  47. data/lib/itms_automation/methods/input_methods.rb +69 -0
  48. data/lib/itms_automation/methods/javascript_handling_methods.rb +9 -0
  49. data/lib/itms_automation/methods/misc_methods.rb +63 -0
  50. data/lib/itms_automation/methods/navigate_methods.rb +123 -0
  51. data/lib/itms_automation/methods/progress_methods.rb +15 -0
  52. data/lib/itms_automation/methods/required_files.rb +9 -0
  53. data/lib/itms_automation/methods/screenshot_methods.rb +6 -0
  54. data/lib/itms_automation/navigation_steps.rb +79 -0
  55. data/lib/itms_automation/progress_steps.rb +17 -0
  56. data/lib/itms_automation/screenshot_steps.rb +6 -0
  57. data/lib/itms_automation/version.rb +5 -3
  58. metadata +93 -90
  59. data/bin/console +0 -14
  60. data/bin/documentation_generator.rb +0 -119
  61. data/bin/setup +0 -8
  62. data/lib/itms_automation/all_steps.rb +0 -8
  63. data/lib/itms_automation/assertion_helper.rb +0 -29
  64. data/lib/itms_automation/auto_util.rb +0 -702
  65. data/lib/itms_automation/database_steps_helper.rb +0 -125
  66. data/lib/itms_automation/web_steps_helper.rb +0 -844
  67. data/project/Gemfile +0 -3
  68. data/project/Gemfile.lock +0 -92
  69. data/project/README.md +0 -34
  70. data/project/Rakefile +0 -24
  71. data/project/config/chrome_headless_options.yaml +0 -1
  72. data/project/config/chrome_options.yaml +0 -6
  73. data/project/config/firefox_headless_options.yaml +0 -1
  74. data/project/config/firefox_options.yaml +0 -1
  75. data/project/config/ie_options.yaml +0 -1
  76. data/project/config/remote_options.yaml +0 -6
  77. data/project/config/safari_options.yaml +0 -1
  78. data/project/cucumber.yml +0 -4
  79. data/project/features/TestSuite/WebGUI.feature +0 -5
  80. data/project/features/step_definitions/lib_steps/steps_definition.rb +0 -46
  81. data/project/features/step_definitions/repositories/project_object.yml +0 -26
  82. data/project/features/support/env.rb +0 -9
  83. data/project/features/support/hooks.rb +0 -128
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 904e4a78575ac33d7dface663087ef82e4ab44ad5113847e6202f270a1b24810
4
- data.tar.gz: 712af3032a9d31b2c87faa33b2160d813ad8b86e64c9a2295cc8a4e33cb5dde4
3
+ metadata.gz: e02d6e102acd4013bf31802636ca701aaadd1608bee6248aa09e5888b9c9cd7a
4
+ data.tar.gz: 0f1b6cc243aa17c47973df3a5ea3c6b1a29926a03bc9b45b7834d70cefef9ebb
5
5
  SHA512:
6
- metadata.gz: '0458938e63e8abf1dcf8b08af8aa1558e16b880cde45e59f37721ec1d17ec943a47995287f7ecb6a5336f9c5d946b6db420ac896e37e72fac0c5f6bd5d2a755d'
7
- data.tar.gz: c9d84f9eaaf65f3eac427bcd7eb582376dba266d26e7d3aa7522b224609e59138174e732b0d5e88dbd9a2badfb1a99dde45f150fe8a0cc10e0806aa65e6444c4
6
+ metadata.gz: 297c5058d791dca51294a6100cd8893b389621aa6e367ef4dd3a4008a0d2521ca95e494644e9f098824b73ea584c63cc0bff4e169c0042a30e13f9e9303ce85a
7
+ data.tar.gz: fb64697cd37e37bc7885abe33fe0d2be8be4eb4f6ec035331b613abe9d0ff14383c1eff0a54ab3c71f8ef0c6e3bdae3c109223bb3ccd24c1be2b54bc4f50a6f6
@@ -1,7 +1,6 @@
1
-
2
1
  def itms_automation_scaffold
3
2
  if File.exists?(@features_dir)
4
- puts 'There is already cucumber directory. Please move existing cucumber directory to carry on '
3
+ puts "A features directory already exists. Stopping..."
5
4
  exit 1
6
5
  end
7
6
  msg("Question") do
@@ -13,41 +12,8 @@ def itms_automation_scaffold
13
12
 
14
13
  FileUtils.cp_r(@source_dir, @features_dir)
15
14
 
16
- msg('Info') do
17
- puts "iTMS Automation is creating 'cucumber' framework. Please have a look which files are being created\n"
18
- end
19
- msg('Gemfile') do
20
- puts "iTMS Automation created Gemfile containing all required Gems\n"
21
- end
22
- msg('cucumber.yml') do
23
- puts "iTMS Automation created cucumber.yml file with profiles of all needed configurations\n"
24
- end
25
- msg('config/chrome_headless_options.yaml') do
26
- puts "iTMS Automation created chrome_headless_options.yml file with profiles of all needed configurations\n"
27
- end
28
- msg('config/firefox_headless_options.yaml') do
29
- puts "iTMS Automation created firefox_headless_options.yml file with profiles of all needed configurations\n"
30
- end
31
- msg('config/chrome_options.yaml') do
32
- puts "iTMS Automation created chrome_options.yml file with profiles of all needed configurations\n"
33
- end
34
- msg('config/firefox_options.yaml') do
35
- puts "iTMS Automation created firefox_options.yml file with profiles of all needed configurations\n"
36
- end
37
- msg('config/ie_options.yaml') do
38
- puts "iTMS Automation created ie_options.yml file with profiles of all needed configurations\n"
39
- end
40
- msg('config/remote_options.yaml') do
41
- puts "iTMS Automation created remote_options.yml file with profiles of all needed configurations\n"
42
- end
43
- msg('config/safari_options.yaml') do
44
- puts "iTMS Automation created safari_options.yml file with profiles of all needed configurations\n"
45
- end
46
- msg('README.md') do
47
- puts "iTMS Automation created README.md file with template usage\n"
48
- end
49
- msg('Info') do
50
- puts "All Config files created. \n"
15
+ msg("Info") do
16
+ puts "features subdirectory created. \n"
51
17
  end
52
18
 
53
19
  end
@@ -3,15 +3,31 @@ require 'json'
3
3
  require "rubygems"
4
4
 
5
5
  def msg(title, &block)
6
- puts "\n" + '-' * 10 + title + '-' * 10
7
- yield
8
- puts '-' * 10 + '-------' + '-' * 10 + "\n"
9
- sleep 1
6
+ puts "\n" + "-"*10 + title + "-"*10
7
+ block.call
8
+ puts "-"*10 + "-------" + "-"*10 + "\n"
9
+ end
10
+
11
+ def print_usage
12
+ puts <<EOF
13
+
14
+ Usage: itms_automation <command-name> [parameters] [options]
15
+
16
+ <command-name> can be one of
17
+ help
18
+ prints more detailed help information.
19
+ gen
20
+ generate a features folder structure.
21
+ version
22
+ prints the gem version
23
+
24
+ <options> can be
25
+ -v, --verbose Turns on verbose logging
26
+ EOF
10
27
  end
11
28
 
12
29
  def print_help
13
30
  puts <<EOF
14
- Author: iTMS
15
31
 
16
32
  Usage: itms_automation <command-name> [parameters] [options]
17
33
 
@@ -19,19 +35,16 @@ def print_help
19
35
  help
20
36
  gen
21
37
  version
22
- ls
23
38
 
24
39
  Commands:
25
40
  help : prints more detailed help information.
26
41
 
27
- gen : creates a features dir. This is usually used once when
28
- setting up itms_automation to ensure that the features folder contains
42
+ gen : creates a skeleton features dir. This is usually used once when
43
+ setting up selnium-cucumber to ensure that the features folder contains
29
44
  the right step definitions and environment to run with cucumber.
30
45
 
31
46
  version : prints the gem version
32
47
 
33
- ls: list all steps name of itms_automation framework
34
-
35
48
  <Options>
36
49
  -v, --verbose Turns on verbose logging
37
50
  EOF
@@ -1,32 +1,27 @@
1
1
  #!/usr/bin/env ruby
2
+
2
3
  require_relative 'helper.rb'
3
4
  require_relative 'generate.rb'
4
- require_relative 'documentation_generator.rb'
5
5
  require 'itms_automation/version'
6
6
 
7
- @features_dir = File.join(FileUtils.pwd, "project")
8
- @source_dir = File.join(File.dirname(__FILE__), '..', 'project')
9
-
10
- search_string = ARGV.shift
11
- case search_string
12
- when /version/
13
- puts ItmsAutomation::VERSION
14
- when /gen/
15
- itms_automation_scaffold
16
- when /ls/
17
- ORDERED_KINDS = %w[Given When Then]
18
- heading = 'All itms_automation steps'
7
+ @features_dir = File.join(FileUtils.pwd, "features")
8
+ @support_dir = File.join(@features_dir, "support")
9
+ @support_dir = File.join(@features_dir, "screenshots")
10
+ @source_dir = File.join(File.dirname(__FILE__), '..', 'features-skeleton')
19
11
 
20
- # collect
21
- steps_glob = File.expand_path('../../lib/itms_automation/*_steps.rb', __FILE__)
22
- step_names = `cat #{steps_glob}`.split($/).select { |line| line =~ /^\s*(Given|When|Then)/ }
12
+ if (ARGV.length == 0)
13
+ print_usage
14
+ else
15
+ cmd = ARGV.shift
23
16
 
24
- # Output
25
- puts "\e[4;34m\n# #{heading}\e[0m" # blue underline
26
- puts step_names
27
- else
28
- print_help
17
+ if cmd == "help"
18
+ print_help
19
+ elsif cmd == "gen"
20
+ itms_automation_scaffold
21
+ elsif cmd == "version"
22
+ puts ITMS::Automation::VERSION
23
+ else
24
+ print_usage
25
+ end
29
26
  end
30
27
 
31
-
32
-
@@ -0,0 +1,16 @@
1
+ Installation
2
+ ============
3
+ ### Prerequisites
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).
6
+
7
+ You need to have DevKit installed.
8
+
9
+ You can get Ruby and DevKit from [RubyInstaller.org](http://rubyinstaller.org/)
10
+
11
+ ### Installation
12
+
13
+ Install `itms_automation` gem by running
14
+
15
+ - `gem install itms_automation`
16
+
@@ -0,0 +1,103 @@
1
+ itms_automation Ruby API's
2
+ ============================
3
+
4
+ If you are writing code for your custom steps you can use the following methods :
5
+
6
+ Note : For some of the API paramtere values are fixed. Such values for paramaters are mentioned below.
7
+
8
+ Navigation API's
9
+ ----------------
10
+
11
+ navigate_to("link")
12
+
13
+ navigate(direction) # direction => "back" / "forward"
14
+
15
+ close_driver()
16
+
17
+
18
+ Browser Interaction API's
19
+ -------------------------
20
+
21
+ resize_browser(width, height)
22
+
23
+ scroll_page(to) # to => "top" / "end"
24
+
25
+ scroll_to_element(by, access_value)
26
+
27
+ zoom_in_out(in_out) # in_out => "add" / "subtract"
28
+
29
+ zoom_in_out_till_element_display(by, in_out, access_value) # in_out => "add" / "subtract"
30
+
31
+
32
+ Input API's
33
+ ------------
34
+
35
+ click(element)
36
+
37
+ double_click(element)
38
+
39
+ click_forcefully(element)
40
+
41
+ enter_text(element, text)
42
+
43
+ clear_text(element)
44
+
45
+ check_checkbox(element)
46
+
47
+ uncheck_checkbox(element)
48
+
49
+ toggle_checkbox(element)
50
+
51
+ select_radio_button(element)
52
+
53
+ get_page_title()
54
+
55
+ get_element_text(element)
56
+
57
+ get_element_attribute(element, attribute)
58
+
59
+ is_element_enabled(element)
60
+
61
+ is_element_displayed(element)
62
+
63
+ hover_over_element(element)
64
+
65
+ by => "locators type" ("id", "name", "class", "xpath", "css")
66
+
67
+ access_value => "locator value"
68
+
69
+
70
+ Javascript Handling API
71
+ -----------------------
72
+
73
+ handle_alert(decision) # decision => "accept" / "dismiss"
74
+
75
+ get_alert_text
76
+
77
+
78
+ Progress API's
79
+ --------------
80
+
81
+ wait(time_in_sec)
82
+
83
+ wait_for_element_to_display(element, duration)
84
+
85
+ wait_for_element_to_enable(element, duration)
86
+
87
+
88
+ by => "locators type" ("id", "name", "class", "xpath", "css")
89
+
90
+ access_value => "locator value"
91
+
92
+ duration => duration in seconds.
93
+
94
+
95
+ Screenshot API
96
+ --------------
97
+ take_screenshots
98
+
99
+
100
+ Configuration API
101
+ -----------------
102
+
103
+ print_congifugartion
@@ -0,0 +1,18 @@
1
+
2
+ Usage: itms_automation <command-name> [parameters] [options]
3
+
4
+ <command-name> can be one of
5
+ help
6
+ gen
7
+ version
8
+
9
+ Commands:
10
+ help : prints more detailed help information.
11
+
12
+ gen : creates a skeleton features dir. This is usually used once when
13
+ setting up selnium-cucumber to ensure that the features folder contains
14
+ the right step definitions and environment to run with cucumber.
15
+
16
+ version : prints the gem version
17
+
18
+ Options: -v, --verbose Turns on verbose logging
@@ -0,0 +1,36 @@
1
+ Feature: Verify Calculator functionalities
2
+
3
+ Scenario: Click on OK button
4
+ Then I click on element having id "com.android2.calculator3:id/cling_dismiss"
5
+
6
+ Scenario: Addirion
7
+ Then I click on element having id "com.android2.calculator3:id/digit5"
8
+ Then I click on element having id "com.android2.calculator3:id/plus"
9
+ Then I click on element having id "com.android2.calculator3:id/digit9"
10
+ When I click on element having id "com.android2.calculator3:id/equal"
11
+ Then element having xpath "//android.widget.EditText[@index=0]" should have text as "14"
12
+
13
+
14
+ Scenario: Substraction
15
+ Then I click on element having id "com.android2.calculator3:id/digit9"
16
+ Then I click on element having id "com.android2.calculator3:id/minus"
17
+ Then I click on element having id "com.android2.calculator3:id/digit5"
18
+ When I click on element having id "com.android2.calculator3:id/equal"
19
+ Then element having xpath "//android.widget.EditText[@index=0]" should have text as "4"
20
+
21
+ Scenario: Multiplication
22
+ Then I click on element having id "com.android2.calculator3:id/digit9"
23
+ Then I click on element having id "com.android2.calculator3:id/mul"
24
+ Then I click on element having id "com.android2.calculator3:id/digit5"
25
+ When I click on element having id "com.android2.calculator3:id/equal"
26
+ Then element having xpath "//android.widget.EditText[@index=0]" should have text as "45"
27
+
28
+ Scenario: Division
29
+ Then I click on element having id "com.android2.calculator3:id/digit8"
30
+ Then I click on element having id "com.android2.calculator3:id/div"
31
+ Then I click on element having id "com.android2.calculator3:id/digit2"
32
+ When I click on element having id "com.android2.calculator3:id/equal"
33
+ Then element having xpath "//android.widget.EditText[@index=0]" should have text as "4"
34
+
35
+ Scenario: Clear output
36
+ Then I click on element having id "com.android2.calculator3:id/clear"
@@ -0,0 +1,13 @@
1
+ #Scenario: Division
2
+ # Then I click on element having id "com.android2.calculator3:id/digit8"
3
+ # Then I click on element having id "com.android2.calculator3:id/div"
4
+ # Then I click on element having id "com.android2.calculator3:id/digit4"
5
+ # When I click on element having id "com.android2.calculator3:id/equal"
6
+ # Then element having xpath "//android.widget.EditText[@index=0]" should have text as "2"
7
+
8
+ # Scenario: Multiplication
9
+ # Then I click on element having id "com.android2.calculator3:id/digit6"
10
+ # Then I click on element having id "com.android2.calculator3:id/mul"
11
+ # Then I click on element having id "com.android2.calculator3:id/digit5"
12
+ # When I click on element having id "com.android2.calculator3:id/equal"
13
+ # Then element having xpath "//android.widget.EditText[@index=0]" should have text as "30"
@@ -0,0 +1,5 @@
1
+ require 'itms_automation'
2
+
3
+ # Do Not Remove This File
4
+ # Add your custom steps here
5
+ # $driver is instance of webdriver use this instance to write your custom code
@@ -0,0 +1,52 @@
1
+ require 'rubygems'
2
+ require 'itms_automation'
3
+
4
+ # Store command line arguments
5
+ $browser_type = ENV['BROWSER'] || 'ff'
6
+ $platform = ENV['PLATFORM'] || 'desktop'
7
+ $os_version = ENV['OS_VERSION']
8
+ $device_name = ENV['DEVICE_NAME']
9
+ $udid = ENV['UDID']
10
+ $app_path = ENV['APP_PATH']
11
+
12
+ # check for valid parameters
13
+ validate_parameters $platform, $browser_type, $app_path
14
+
15
+ # If platform is android or ios create driver instance for mobile browser
16
+ if $platform == 'android' or $platform == 'iOS'
17
+
18
+ if $browser_type == 'native'
19
+ $browser_type = "Browser"
20
+ end
21
+
22
+ if $platform == 'android'
23
+ $device_name, $os_version = get_device_info
24
+ end
25
+
26
+ desired_caps = {
27
+ caps: {
28
+ platformName: $platform,
29
+ browserName: $browser_type,
30
+ versionNumber: $os_version,
31
+ deviceName: $device_name,
32
+ udid: $udid,
33
+ app: ".//#{$app_path}"
34
+ },
35
+ appium_lib: { server_url: 'http://localhost:4723/wd/hub' }
36
+ }
37
+
38
+ begin
39
+ $driver = Appium::Driver.new(desired_caps).start_driver
40
+ rescue Exception => e
41
+ puts e.message
42
+ Process.exit(0)
43
+ end
44
+ else # else create driver instance for desktop browser
45
+ begin
46
+ $driver = Selenium::WebDriver.for(:"#{$browser_type}")
47
+ $driver.manage().window().maximize()
48
+ rescue Exception => e
49
+ puts e.message
50
+ Process.exit(0)
51
+ end
52
+ end
@@ -0,0 +1,26 @@
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