SurfCustomCalabash 0.2.0 → 1.0.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 (68) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -0
  3. data/README.md +68 -4
  4. data/SurfCustomCalabash.gemspec +3 -3
  5. data/bin/SurfCustomCalabash +54 -0
  6. data/bin/surf-calabash-console.rb +62 -0
  7. data/bin/surf-calabash-gen.rb +17 -0
  8. data/bin/surf-calabash-helpers.rb +34 -0
  9. data/lib/SurfCustomCalabash/CommonMethods.rb +3 -3
  10. data/lib/SurfCustomCalabash/DroidMethods.rb +2 -1
  11. data/lib/SurfCustomCalabash/IosMethods.rb +2 -2
  12. data/lib/SurfCustomCalabash/version.rb +1 -1
  13. data/sources/Backdoors list b/data/sources/Backdoors → list +0 -0
  14. data/sources/Gemfile +27 -0
  15. data/sources/Scripts/and.sh +5 -0
  16. data/sources/Scripts/ca.sh +5 -0
  17. data/sources/Scripts/ci.sh +5 -0
  18. data/sources/Scripts/data +7 -0
  19. data/sources/Scripts/fa.sh +6 -0
  20. data/sources/Scripts/fi.sh +5 -0
  21. data/sources/Scripts/get_apk.rb +68 -0
  22. data/sources/Scripts/get_scenarios.rb +193 -0
  23. data/sources/Scripts/import_scenarios.rb +172 -0
  24. data/sources/Scripts/ios.sh +5 -0
  25. data/sources/Scripts/parallel_android_smoke.sh +4 -0
  26. data/sources/Scripts/parallel_android_test.sh +4 -0
  27. data/sources/Scripts/ra.sh +12 -0
  28. data/sources/Scripts/ri.sh +9 -0
  29. data/sources/Scripts/smoke_and.sh +5 -0
  30. data/sources/Scripts/smoke_ios.sh +5 -0
  31. data/sources/Scripts/ta.sh +5 -0
  32. data/sources/Scripts/ti.sh +5 -0
  33. data/sources/Scripts/to_exec.sh +19 -0
  34. data/sources/Scripts/update.sh +24 -0
  35. data/sources/Scripts/update_exec.rb +96 -0
  36. data/sources/TestFolder/small.gif +0 -0
  37. data/sources/ci/JenkinsfileUiTestAndroid.groovy +22 -0
  38. data/sources/ci/JenkinsfileUiTestIos.groovy +23 -0
  39. data/sources/config/cucumber.yml +24 -0
  40. data/sources/features/android/pages/standard/DroidCommon.rb +33 -0
  41. data/sources/features/android/pages/standard/Init_android.rb +8 -0
  42. data/sources/features/android/pages/test.rb +43 -0
  43. data/sources/features/android/support/app_life_cycle_hooks.rb +147 -0
  44. data/sources/features/android/support/log_hooks_and.rb +40 -0
  45. data/sources/features/android/support/video_hooks_and.rb +110 -0
  46. data/sources/features/ios/pages/standard/Init_ios.rb +5 -0
  47. data/sources/features/ios/pages/standard/IosCommon.rb +30 -0
  48. data/sources/features/ios/pages/test.rb +37 -0
  49. data/sources/features/ios/support/01_launch.rb +194 -0
  50. data/sources/features/ios/support/log_hooks_ios.rb +40 -0
  51. data/sources/features/ios/support/video_hooks_ios.rb +58 -0
  52. data/sources/features/net/net.rb +28 -0
  53. data/sources/features/net/screentest_api.rb +186 -0
  54. data/sources/features/scenarios/eng.feature +8 -0
  55. data/sources/features/scenarios/rus.feature +8 -0
  56. data/sources/features/step_definitions/test.rb +43 -0
  57. data/sources/features/support/credentials.rb +11 -0
  58. data/sources/features/support/env.rb +8 -0
  59. data/sources/features/support/hooks.rb +21 -0
  60. data/sources/features/support/localization.rb +8 -0
  61. data/sources/find_id.rb +95 -0
  62. data/sources/group_steps.rb +39 -0
  63. data/sources/irbrcs/android/irbrc +105 -0
  64. data/sources/irbrcs/ios/irbrc +132 -0
  65. data/sources/start.sh +134 -0
  66. metadata +63 -6
  67. data/bin/console +0 -14
  68. data/bin/setup +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2584314c724fb94ff419dd4513cf5ff7aff9cfa1aa096e57ee788b2f2f8eb14f
4
- data.tar.gz: ba9ac40807f121a1dfab4e34b646528cc970c097cb1d32dcb08907231e88f1c7
3
+ metadata.gz: 10324a3851f0d2c8a774575861c3489d6519d9a6fed70ac48244565ed9c03da6
4
+ data.tar.gz: 70572d7c07b601e2407cc9cf8e0d3317a680b919afb56faca9be2d3cb9f68f04
5
5
  SHA512:
6
- metadata.gz: 19a77b8a812760dfc779faf6580e315014ba9628919b6912744d63baab971bd6880edbd56a4c4d0466d57093b302bb2c49dcb42ecb7872e51607d55a6ec22495
7
- data.tar.gz: b1e7895eade91dc479e2afffda0feabc4fb3cc639183e0f40e885827eac7a345f15e58f6a8ba1257fd7762019cc1d2c284516311bb8fb4578abb65b69a61cd78
6
+ metadata.gz: 4092df2ff8c18a451ad3e0132accbb3eae2c66ee24526e43d7c0adfa51f17e47234f8573999d248df0de0eb24a91f264fed8cd1310a8784309e44eb5776bdc57
7
+ data.tar.gz: 89d7c2269fd6aa04b72eb58ace406dad941a2dcaf2ae84559729802ff1ea65e65e39db5d1902577e70df131b35f5e4e13f8abdebfe3b2054e798caa336eac22d
@@ -0,0 +1,11 @@
1
+ # Change Log
2
+ All notable changes to this project will be documented in this file.
3
+
4
+
5
+ ## v1.0.0 - 28.08.2020
6
+ ### Added
7
+ - Changelog.md
8
+ - Added template file for initializing a new autotest project (use **SurfCustomCalabash gen**)
9
+
10
+ ### Changed
11
+ - method close_keybord can now be called with optional parameters **x_start** and **y_start** (by default **x_start:** 100, **y_start:** 150)
data/README.md CHANGED
@@ -21,11 +21,75 @@ Or install it yourself as:
21
21
 
22
22
  This gem provides methods for easier use Calabash.
23
23
 
24
- Install gem in your project, add require 'SurfCustomCalabash/IosCommon' and 'SurfCustomCalabash/DroidCommon' in your ios or android ruby files.
24
+ Install gem in your exist project, add in your ios or android ruby files.
25
25
 
26
- IosCommon contains custom swipe methods for ios.
26
+ $require 'SurfCustomCalabash/IosCommon'
27
+
28
+ $require 'SurfCustomCalabash/DroidCommon'
29
+
30
+ **IosCommon** contains custom swipe methods for ios.
31
+
32
+ **DroidCommon** contains custom swipe methods for android.
33
+
34
+ **CommonMethods** contains different methods (taps, swipes, waits and other) for both platforms.
35
+
36
+ ### Create new project
37
+ You should move to the directory which would contains folder with your tests.
38
+ surf-calabash will create it by itself with the name **Change_it_to_your_own_project_name**:
39
+
40
+ $ SurfCustomCalabash gen
41
+
42
+ After that you'll see many folders inside them. Each of them will be describe below.
43
+
44
+ #### ci
45
+
46
+ It is used for all scripts for continuous integration. In Surfstudio we have .groovy files for them.
27
47
 
28
- DroidCommon contains custom swipe methods for android.
48
+
49
+ #### config
50
+
51
+ Contains only cucumber.yml file. It named arguments are called profiles - e.g. iOS or Android for run.
52
+
53
+
54
+ #### features
55
+
56
+ Main folder of all project. Every feature, step definition, support files and page objects are here. You can read about it more in each file of this folder.
57
+
58
+
59
+ #### irbrcs
60
+
61
+ Our own shtick. We change calabash-android console and calabash-ios console a little, so you can write your own complex functions, which you'll implement in the step_definitions or in page objects. So for the correct work we had to change irbrc-files of gems too.
62
+
63
+ #### reports
64
+
65
+ Folder with screenshots of errors.
66
+
67
+
68
+ #### test_servers
69
+
70
+ Standard calabash-android folder with signed apk-files.
71
+
72
+ #### TestFolder
73
+
74
+ Contains some additional files, e.g. jpg-pictures or other data which can be used in tests.
75
+
76
+ #### Backdoors list
77
+
78
+ We use backdoors for our applications for get around the limit of nativity of calabash.
79
+
80
+ #### Gemfile
81
+
82
+ All required gems for surf-calabash. You should run installing all gems by bundle after initializing project when you rename **Change_it_to_your_own_project_name** to your own name.
83
+
84
+ $bundle install
85
+
86
+ #### Scripts
87
+
88
+ Some shell scripts which can help to start tests faster because of typing smaller count of symbols. :)
89
+ Also it shows some integration with Xray Jira plugin.
90
+
91
+ #### start.sh
29
92
 
30
- CommonMethods contains different methods (taps, swipes, waits and other) for both platforms.
93
+ Shell script for useful launch all helpful scripts of folder above.
31
94
 
95
+
@@ -32,9 +32,9 @@ Gem::Specification.new do |spec|
32
32
  spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
33
33
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
34
34
  end
35
- spec.bindir = "exe"
36
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
37
- spec.require_paths = ["lib"]
35
+ # spec.bindir = "exe"
36
+ spec.executables = ["SurfCustomCalabash"]
37
+ # spec.require_paths = ["lib"]
38
38
 
39
39
  spec.add_development_dependency "bundler", "~> 1.17"
40
40
  spec.add_development_dependency "rake", "~> 10.0"
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fileutils'
4
+ require 'rbconfig'
5
+
6
+ # for ruby 1.9.1 and earlier
7
+ unless defined? RbConfig.ruby
8
+ def RbConfig.ruby
9
+ File.join(RbConfig::CONFIG["bindir"], RbConfig::CONFIG["ruby_install_name"] + RbConfig::CONFIG["EXEEXT"])
10
+ end
11
+ end
12
+
13
+ require File.join(File.dirname(__FILE__), "surf-calabash-helpers")
14
+
15
+ @hierarchy = File.join(FileUtils.pwd, "Change_it_to_your_own_project_name")
16
+ @source_dir = File.join(File.dirname(__FILE__), '..', 'sources')
17
+
18
+ if ARGV.length == 0
19
+ print_usage
20
+ else
21
+ cmd = ARGV.shift
22
+
23
+ case cmd
24
+ when 'help'
25
+ print_help
26
+ when 'gen'
27
+ gen = File.join(File.dirname(__FILE__), "surf-calabash-gen")
28
+ require gen
29
+ surf_gen
30
+ when 'android_console'
31
+ require 'calabash-android/helpers'
32
+ require 'calabash-android/utils'
33
+ require 'calabash-android/java_keystore'
34
+ require 'calabash-android/env'
35
+ require File.join(File.dirname(__FILE__), "surf-calabash-console")
36
+
37
+ if ARGV.empty? or not is_apk_file?(ARGV.first)
38
+ Kernel.puts "The first parameter must be the path to the apk file."
39
+ exit 1
40
+ else
41
+ android_console(relative_to_full_path(ARGV.shift))
42
+ end
43
+
44
+ when 'ios_console'
45
+ require File.join(File.dirname(__FILE__), "surf-calabash-console")
46
+ ios_console
47
+ when 'version'
48
+ require_relative '../lib/SurfCustomCalabash/version'
49
+ Kernel.puts SurfCustomCalabash::VERSION
50
+ else
51
+ Kernel.puts "Invalid command '#{cmd}'"
52
+ print_usage
53
+ end
54
+ end
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fileutils'
4
+ require 'rbconfig'
5
+
6
+ def android_console(app_path = nil)
7
+ test_server_path = test_server_path(app_path)
8
+
9
+ path = ENV['CALABASH_IRBRC']
10
+ Kernel.puts(path)
11
+
12
+ unless path
13
+ if File.exist?('irbrc')
14
+ path = File.expand_path('irbrc')
15
+ end
16
+ end
17
+
18
+ unless path
19
+ path = File.expand_path(File.join(File.dirname(__FILE__), '../sources/irbrcs/android', 'irbrc'))
20
+ end
21
+
22
+ ENV['IRBRC'] = path
23
+ Kernel.puts(path)
24
+
25
+ unless ENV['APP_PATH']
26
+ ENV['APP_PATH'] = app_path
27
+ end
28
+
29
+ unless ENV['TEST_APP_PATH']
30
+ ENV['TEST_APP_PATH'] = test_server_path
31
+ end
32
+
33
+ build_test_server_if_needed(app_path)
34
+
35
+ Kernel.puts 'Starting calabash-android console...'
36
+ Kernel.puts "Loading #{ENV['IRBRC']}"
37
+ Kernel.puts 'Running irb...'
38
+ exec('irb')
39
+ end
40
+
41
+ def is_apk_file?(file_path)
42
+ file_path.end_with? ".apk" and File.exist? file_path
43
+ end
44
+
45
+ def relative_to_full_path(file_path)
46
+ File.expand_path(file_path)
47
+ end
48
+
49
+ def ios_console
50
+ path = ENV['CALABASH_IRBRC']
51
+ unless path
52
+ if File.exist?('.irbrc')
53
+ path = File.expand_path('.irbrc')
54
+ end
55
+ end
56
+ unless path
57
+ path = File.expand_path(File.join(File.dirname(__FILE__), '../sources/irbrcs/ios', 'irbrc'))
58
+ end
59
+ ENV['IRBRC'] = path
60
+ puts "Running irb..."
61
+ exec("irb")
62
+ end
@@ -0,0 +1,17 @@
1
+ def surf_gen
2
+ if File.exists?(@hierarchy)
3
+ Kernel.puts "hierarchy is already created. Stopping..."
4
+ exit 1
5
+ end
6
+ msg("Question") do
7
+ Kernel.puts "I'm about to create a subdirectory called sources."
8
+ Kernel.puts "Please change name of it to name of your own project."
9
+ Kernel.puts "Please hit return to confirm that's what you want."
10
+ end
11
+ exit 2 unless STDIN.gets.chomp == ''
12
+
13
+ FileUtils.cp_r(@source_dir, @hierarchy)
14
+ msg("Info") do
15
+ Kernel.puts "hierarchy was created. \n"
16
+ end
17
+ end
@@ -0,0 +1,34 @@
1
+ require 'tempfile'
2
+ require 'json'
3
+ require "rubygems"
4
+
5
+ def msg(title, &block)
6
+ Kernel.puts "\n" + "-"*10 + title + "-"*10
7
+ block.call
8
+ Kernel.puts "-"*10 + "-------" + "-"*10 + "\n"
9
+ end
10
+
11
+ def print_usage
12
+ Kernel.puts <<EOF
13
+ Usage: SurfCustomCalabash <command-name> [parameters] [options]
14
+ <command-name> can be one of
15
+ help
16
+ prints more detailed help information.
17
+ gen
18
+ generate a features folder structure.
19
+ version
20
+ prints the gem version
21
+
22
+ <options> can be
23
+ -v, --verbose
24
+ Turns on verbose logging
25
+ EOF
26
+ end
27
+
28
+ def print_help
29
+ print_usage
30
+ end
31
+
32
+ def is_json?(str)
33
+ str[0..0] == '{'
34
+ end
@@ -209,7 +209,7 @@ def remember(element, sleep_duration: 1, timeout_duration: 5)
209
209
  wait_element(element, sleep_duration: sleep_duration, timeout_duration: timeout_duration)
210
210
  name = query(element)
211
211
  save_name = name.first['text']
212
- puts(save_name)
212
+ Kernel.puts(save_name)
213
213
  return save_name
214
214
  end
215
215
 
@@ -218,7 +218,7 @@ def remember_last_text(element, sleep_duration: 1, timeout_duration: 5)
218
218
  wait_element(element, sleep_duration: sleep_duration, timeout_duration: timeout_duration)
219
219
  name = query(element)
220
220
  save_name = name.last['text']
221
- puts(save_name)
221
+ Kernel.puts(save_name)
222
222
  return save_name
223
223
  end
224
224
 
@@ -273,7 +273,7 @@ def cross_coordinate(element_front, element_behind, delta: 100)
273
273
  cross = false
274
274
  end
275
275
  end
276
- # puts(cross)
276
+ # Kernel.puts(cross)
277
277
  return cross
278
278
  end
279
279
 
@@ -1,7 +1,8 @@
1
1
  require 'calabash-android'
2
2
  require 'SurfCustomCalabash/CommonMethods'
3
3
 
4
- def close_keyboard
4
+ # close keyboard, parameters use ios only
5
+ def close_keyboard(x_start: 0, y_start:0)
5
6
  if keyboard_visible?
6
7
  hide_soft_keyboard
7
8
  end
@@ -2,9 +2,9 @@ require 'calabash-cucumber/ibase'
2
2
  require 'SurfCustomCalabash/CommonMethods'
3
3
 
4
4
  # close keyboard with a swipe of the screen
5
- def close_keyboard
5
+ def close_keyboard(x_start: 100, y_start: 150)
6
6
  if keyboard_visible?
7
- pan_coordinates({x: 100, y: 150}, {x: 100, y: 250})
7
+ pan_coordinates({x: x_start, y: y_start}, {x: x_start, y: y_start+100})
8
8
  end
9
9
  end
10
10
 
@@ -1,3 +1,3 @@
1
1
  module SurfCustomCalabash
2
- VERSION = "0.2.0"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
6
+
7
+ gem 'calabash-android'
8
+ gem 'cucumber'
9
+ gem 'calabash-cucumber'
10
+ gem 'require_all'
11
+ gem 'rake'
12
+ gem 'pry'
13
+ gem 'parallel_calabash'
14
+ gem 'json', '1.8.6'
15
+ gem 'test-unit'
16
+ gem 'CFPropertyList', '2.2.8'
17
+ gem 'rest-client'
18
+ gem 'syntax'
19
+ gem 'httpclient', '2.8.3'
20
+ gem 'run_loop', '>=4.4.1'
21
+ gem 'SurfCustomCalabash'
22
+ gem 'open3'
23
+ gem 'timeout'
24
+ gem 'process'
25
+ gem 'rspec'
26
+ gem 'streamio-ffmpeg'
27
+
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+
3
+ echo "===== RUNNING TEST SUITE ANDROID====================="
4
+ calabash-android run L.apk -p android
5
+
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+
3
+ echo "===== RUNNING TEST CONSOLE ANDROID ====================="
4
+
5
+ calabash-android console L.apk
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+
3
+ echo "===== RUNNING TEST CONSOLE IOS ====================="
4
+ calabash-ios console
5
+
@@ -0,0 +1,7 @@
1
+ login enter_login
2
+ jira_pass enter_pass
3
+ project_key enter_project_key
4
+ project_name_jenkins enter_project_name
5
+ jenkins_pass enter_jenkins_pass
6
+ key_execution_and enter_key_test_exec
7
+ key_execution_ios enter_key_test_exec
@@ -0,0 +1,6 @@
1
+ #!/bin/bash
2
+
3
+ echo "===== RUNNING TEST SUITE ANDROID====================="
4
+ echo "$1"
5
+ calabash-android run L.apk -p android features/scenarios/$1
6
+
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+
3
+ echo "===== RUNNING TEST SUITE IOS ====================="
4
+ cucumber -p ios features/scenarios/$1
5
+
@@ -0,0 +1,68 @@
1
+ require 'rest-client'
2
+ require 'base64'
3
+ require 'nokogiri'
4
+ require 'open-uri'
5
+
6
+ class GetApk
7
+
8
+ def initialize(path)
9
+ # хэш со всеми данными из файла scripts/data
10
+ @all_data = get_all_data
11
+
12
+ # название проекта в дженкинсе
13
+ @project = @all_data['project_name_jenkins']
14
+
15
+ # название джоба для сборки в дженкинсе
16
+ @job_name = "#{@project}_Android_TAG"
17
+
18
+ # адрес дженкинса
19
+ @host = "https://jenkins.surfstudio.ru/view/Projects/view/#{@project}/job/#{@job_name}/lastSuccessfulBuild"
20
+
21
+ # логин в дженкинсе
22
+ @login = @all_data['login']
23
+
24
+ # пароль дженкинса
25
+ @password = @all_data['jenkins_pass']
26
+
27
+ # путь до папки с автотестами
28
+ @path = path
29
+
30
+ # токен в дженкинсе
31
+ @auth = 'Basic ' + Base64.encode64( "#{@login}:#{@password}" ).chomp
32
+ end
33
+
34
+ # считываем данные пользователя из файла
35
+ def get_all_data
36
+ Hash[*File.read("#{@path}scripts/data").split(/[, \n]+/)]
37
+ end
38
+
39
+ def get_path_to_apk
40
+ url = "#{@host}/api/xml?tree=artifacts%5BrelativePath%5D"
41
+
42
+ response = RestClient.get url, {:Authorization => @auth}
43
+
44
+ xml_parse = Nokogiri::XML(response)
45
+
46
+ all_path = xml_parse.xpath("//relativePath")
47
+
48
+ all_path.each do |path|
49
+ @path_to_apk = path.content unless path.content[/qa.*\.apk$/].nil?
50
+ end
51
+
52
+ Kernel.puts(@path_to_apk)
53
+
54
+ return @path_to_apk
55
+ end
56
+
57
+ def download_apk
58
+ path = get_path_to_apk
59
+ url = "#{@host}/artifact/#{path}"
60
+
61
+ Kernel.puts('Start download')
62
+ File.open('L.apk', "wb") do |file|
63
+ file.write open(url, :http_basic_authentication => [@login, @password]).read
64
+ end
65
+
66
+ Kernel.puts('End download')
67
+ end
68
+ end