selendroid 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4135ff97c70ae62d000fd1a3e78c163e4ceb3625
4
- data.tar.gz: de1ce02cdb9a22ce5ee5d54726493dc9d13da773
3
+ metadata.gz: dcfead51e966b8a67a0ddf17b987739cae0ea3dc
4
+ data.tar.gz: e5ae1d7a18516794ae627bc31a39c5527652d112
5
5
  SHA512:
6
- metadata.gz: 480e7af69bc1e7c9933d7ce9df1c2c994c296fcfe728bd9e60ff26d1e599a5bf3cfbbb2c8c2d931e8129ea4a0638e5922dc32e1a8a7bf975be9616243f51e37c
7
- data.tar.gz: f0fae2a104d395c77d1fdf023948028cafbb1b3968417d6a54619d002c06c94bd0701d492b5ae4814ebe0f9f15e1b3d094d9da6596e820d449ba4d2541cb9335
6
+ metadata.gz: df3256fcae516f7f537d49d8cfe4b17740721366a6b9273c5fcd68fb9d81263d271142191602b6e86405bef3e3b24dd3132eb62a88fa8310f3d1ddb5710e07ec
7
+ data.tar.gz: 2f4e7435fa2ba5a361b32f52596101797ef5849e7649ce0d923a2b01d3ba0efe136e302e478e5d760cd9239f7a8bdf03520d93b96ae52fe18e3f9712598421e8
data/README.md CHANGED
@@ -1,52 +1,15 @@
1
1
  Selendroid
2
2
  ==========
3
3
 
4
- [![Build Status](https://api.travis-ci.org/DominikDary/selendroid.png)](https://travis-ci.org/DominikDary/selendroid)
4
+ Selendroid is a test automation framework which drives of the UI of Android native and hybrid applications (apps).
5
+ Tests are written using the Selenium 2 client API and for testing the application under test must not be modified.
5
6
 
6
- Selendroid is a test automation framework which drives of the UI of Android native and hybrid applications (apps). Tests are written using the Selenium 2 client API and for testing the application under test must not be modified.
7
+ Selendroid can be used on emulators and real devices and can be integrated as a node into the Selenium Grid
8
+ for scaling and parallel testing.
7
9
 
8
- Selendroid can be used on emulators and real devices and can be integrated as a node into the Selenium Grid for scaling and parallel testing.
9
-
10
-
11
- Latest News:
12
- ------------
13
-
14
- * Selendroid Version 0.3 is released ([List of Features](https://github.com/DominikDary/selendroid/blob/master/changelog.md))
15
-
16
- Getting started
17
- ---------------
18
-
19
- Selendroid is based on the Android instrumentation framework, so therefor only testing one specific app is supported.
20
- Selendroid-server in combination with the application under test (aut) must be installed on the device in order to be able to run automated end-to-end tests.
21
-
22
- To write and run tests with selendroid, first a customized selendroid-server for your aut must be created. To simplify this process I have created a Ruby gem:
23
-
24
- # Please note that ruby minimum version 1.9.2 is required
25
- sudo gem install selendroid
26
- selendroid build-and-start pathToYour.apk
27
-
28
- Run your tests
29
- --------------
30
-
31
- A sample test looks like:
32
-
33
- ```java
34
- driver = new AndroidDriver(new URL("http://localhost:8080/wd/hub"), getDefaultCapabilities());
35
- driver.findElement(By.id("startUserRegistration")).click();
36
-
37
- WebDriverWait wait = new WebDriverWait(driver, 5);
38
- WebElement inputUsername =
39
- wait.until(ExpectedConditions.presenceOfElementLocated(By.id("inputUsername")));
40
- inputUsername.sendKeys(user.getUsername());
41
- Assert.assertEquals(nameInput.getText(), "Mr. Burns");
42
- nameInput.clear();
43
- nameInput.sendKeys(user.getName());
44
- takeScreenShot("User data entered.");
45
- driver.findElement(By.id("btnRegisterUser")).click();
46
- ```
47
10
 
48
11
  You want more details?
49
12
  ----------------------
50
13
 
51
- Check out our [wiki](https://github.com/DominikDary/selendroid/wiki/).
14
+ Check out our [documentation](http://selendroid.io).
52
15
 
@@ -18,23 +18,13 @@ def print_comamndline_help
18
18
  <command-name> can be one of
19
19
  help
20
20
  Prints more detailed help information.
21
- build <apk>
22
- Builds the selendroid-server for the given apk.
23
- build-and-start <apk>
24
- Builds the selendroid-server for the given apk and starts the
25
- selendroid server. The app will be resigned with the debug
26
- certificate and will be installed on the first available An-
27
- droid device.
28
- start <apk>
29
- Starts the selendroid server on the first available Android device.
30
- Commamd expects that the apps are already installed on the device.
31
21
  shell <apk>
32
22
  Starts the selendroid-server on the device (apps must be already in-
33
23
  stalled) and opens an irb shell with an active WebDriver session.
34
24
  version
35
25
  prints the gem version
36
- To find help, please visit the official selendroid wiki:
37
- http://goo.gl/z30pj
26
+ To find help, please visit the official selendroid documentation:
27
+ http://selendroid.io
38
28
  EOF
39
29
  end
40
30
 
@@ -75,32 +65,16 @@ elsif cmd == 'shell'
75
65
 
76
66
  exit 0
77
67
  elsif cmd == 'build'
78
- raise_if_android_and_java_home_not_set
79
- puts "Please specify the app you want to build a selendroid-server for!" if (ARGV.empty? or not is_apk_file?(ARGV.first))
80
- while not ARGV.empty? and is_apk_file?(ARGV.first)
81
- rebuild_selendroid(relative_to_full_path(ARGV.shift))
82
- end
68
+ puts "This command name is not any longer supported. Please use the selendroid-standalone.jar.
69
+ More details can be found here: http://selendroid.io/setup.html"
83
70
  exit 0
84
71
  elsif cmd=='build-and-start'
85
- raise_if_android_and_java_home_not_set
86
- puts "Please specify the app you want to automate!" if (ARGV.empty? or not is_apk_file?(ARGV.first))
87
- while not ARGV.empty? and is_apk_file?(ARGV.first)
88
- app_apk_under_test = relative_to_full_path(ARGV.shift)
89
- prepare_device(app_apk_under_test)
90
- main_activity = get_app_main_activity(app_apk_under_test)
91
- start_selendroid_server(main_activity)
92
- wait_for_selendroid_server
93
- end
72
+ puts "This command name is not any longer supported. Please use the selendroid-standalone.jar.
73
+ More details can be found here: http://selendroid.io/setup.html"
94
74
  exit 0
95
75
  elsif cmd=='start'
96
- raise_if_android_and_java_home_not_set
97
- puts "Please specify the app you want to automate!" if (ARGV.empty? or not is_apk_file?(ARGV.first))
98
- while not ARGV.empty? and is_apk_file?(ARGV.first)
99
- app_apk_under_test = relative_to_full_path(ARGV.shift)
100
- main_activity = get_app_main_activity(app_apk_under_test)
101
- start_selendroid_server(main_activity)
102
- wait_for_selendroid_server
103
- end
76
+ puts "This command name is not any longer supported. Please use the selendroid-standalone.jar.
77
+ More details can be found here: http://selendroid.io/setup.html"
104
78
  exit 0
105
79
  elsif cmd == 'version'
106
80
  puts Selendroid::VERSION
@@ -37,18 +37,3 @@ def java_command
37
37
  end
38
38
  end
39
39
 
40
- def jarsigner_command
41
- if is_windows?
42
- "\"#{ENV["JAVA_HOME"]}/bin/jarsigner.exe\""
43
- else
44
- "\"#{ENV["JAVA_HOME"]}/bin/jarsigner\""
45
- end
46
- end
47
-
48
- def keytool_command
49
- if is_windows?
50
- "\"#{ENV["JAVA_HOME"]}/bin/keytool.exe\""
51
- else
52
- "\"#{ENV["JAVA_HOME"]}/bin/keytool\""
53
- end
54
- end
@@ -4,46 +4,6 @@ require 'zip/zip'
4
4
  require 'tempfile'
5
5
  require 'colorize'
6
6
 
7
- def rebuild_selendroid(app)
8
- aut_base_package = get_app_base_package(app)
9
- log "Building selendroid-server for package #{aut_base_package}".green
10
-
11
- test_server_file_name = selendroid_server_path(aut_base_package)
12
- FileUtils.mkdir_p File.dirname(test_server_file_name) unless File.exist? File.dirname(test_server_file_name)
13
-
14
- unsigned_test_apk = File.join(File.dirname(__FILE__), '..','..', 'selendroid-prebuild/selendroid-server.apk')
15
- android_platform = Dir["#{ENV["ANDROID_HOME"].gsub("\\", "/")}/platforms/android-*"].last
16
- raise "No Android SDK found in #{ENV["ANDROID_HOME"].gsub("\\", "/")}/platforms/" unless android_platform
17
- Dir.mktmpdir do |workspace_dir|
18
- Dir.chdir(workspace_dir) do
19
- FileUtils.cp(unsigned_test_apk, "TestServer.apk")
20
- FileUtils.cp(File.join(File.dirname(__FILE__), '..','..', 'selendroid-prebuild/AndroidManifest.xml'), "AndroidManifest.xml")
21
-
22
- unless system %Q{"#{RbConfig.ruby}" -pi.bak -e "gsub(/org.openqa.selendroid.testapp/, '#{aut_base_package}')" AndroidManifest.xml}
23
- raise "Could not replace package name in manifest"
24
- end
25
-
26
- unless system %Q{#{aapt_command} package -M AndroidManifest.xml -I "#{android_platform}/android.jar" -F dummy.apk}
27
- raise "Could not create dummy.apk"
28
- end
29
-
30
- Zip::ZipFile.new("dummy.apk").extract("AndroidManifest.xml","customAndroidManifest.xml")
31
- Zip::ZipFile.open("TestServer.apk") do |zip_file|
32
- zip_file.add("AndroidManifest.xml", "customAndroidManifest.xml")
33
- end
34
- end
35
- sign_apk("#{workspace_dir}/TestServer.apk", test_server_file_name)
36
- begin
37
-
38
- rescue Exception => e
39
- puts e
40
- raise "Could not sign test server"
41
- end
42
- end
43
- log "Done signing the test server. Moved it to #{test_server_file_name}".green
44
- test_server_file_name
45
- end
46
-
47
7
  def get_app_base_package(app)
48
8
  default_cmd = "#{aapt_command} dump badging #{app} "
49
9
  windows_cmd = "#{default_cmd} | findSTR package "
@@ -102,55 +62,6 @@ def get_first_android_device
102
62
  device.tr("\n","")
103
63
  end
104
64
 
105
- def prepare_device(app)
106
- device_serial = get_first_android_device
107
- log "Using first Android device with serial: #{device_serial}".green
108
- if is_app_installed_on_device("org.openqa.selndroid",device_serial)
109
- uninstall_cmd = "#{adb_command} -s #{device_serial} uninstall org.openqa.selendroid"
110
- %x[ #{uninstall_cmd}]
111
- end
112
- selendroid_file_name = rebuild_selendroid(app)
113
- install_cmd = "#{adb_command} -s #{device_serial} install #{File.expand_path(selendroid_file_name)}"
114
- %x[ #{install_cmd}]
115
- log "The selendroid server has been rebuild and installed on the device.".green
116
-
117
- aut_base_package = get_app_base_package(app)
118
- aut_main_activity = get_app_main_activity(app)
119
-
120
- if is_app_installed_on_device(aut_base_package,device_serial)
121
- uninstall_cmd = "#{adb_command} -s #{device_serial} uninstall #{aut_base_package}"
122
- %x[ #{uninstall_cmd}]
123
- end
124
- resigned_apk = "#{app.chomp('.apk')}-debug.apk"
125
- resign_apk(app,resigned_apk)
126
- install_cmd = "#{adb_command} -s #{device_serial} install #{resigned_apk}"
127
- %x[ #{install_cmd}]
128
- log "The app has been resigned #{File.basename(resigned_apk)} and installed on the device.".green
129
- end
130
-
131
65
  def is_windows?
132
66
  (RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/)
133
- end
134
-
135
- def resign_apk(app_path, dest_path)
136
- troido_jar = File.join(File.dirname(__FILE__), '..','..', 'lib/troido/re-sign.jar')
137
- cmd = "#{java_command} -cp #{troido_jar} de.troido.resigner.main.Main #{File.expand_path(app_path)} #{File.expand_path(dest_path)}"
138
- resign_output= %x[ #{cmd}]
139
- end
140
-
141
- def sign_apk(app_path, dest_path)
142
- if !File.file?( Dir.home+"/.android/debug.keystore")
143
- log "keystore missing - creating one"
144
- cmd= "#{keytool_command} -genkey -v -keystore #{Dir.home}/.android/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname \"CN=Android Debug,O=Android,C=US\" -storetype JKS -sigalg MD5withRSA -keyalg RSA"
145
- system(cmd)
146
- end
147
-
148
- cmd = "#{jarsigner_command} -sigalg MD5withRSA -digestalg SHA1 -signedjar #{dest_path} -storepass android -keystore #{Dir.home}/.android/debug.keystore #{app_path} androiddebugkey"
149
- unless system(cmd)
150
- raise "Could not sign app (#{app_path}"
151
- end
152
- end
153
-
154
- def selendroid_server_path(base_package)
155
- "selendroid-server-#{Selendroid::VERSION}.apk"
156
- end
67
+ end
@@ -77,7 +77,7 @@ def start_selendroid_server(activity)
77
77
  main_activity =activity
78
78
  end
79
79
  log "Starting selendroid-server with main activity: #{main_activity}"
80
- selendroid_server_start_cmd = "#{adb_command} shell am instrument -e main_activity '#{main_activity}' org.openqa.selendroid/.ServerInstrumentation"
80
+ selendroid_server_start_cmd = "#{adb_command} shell am instrument -e main_activity '#{main_activity}' io.selendroid/.ServerInstrumentation"
81
81
  system(selendroid_server_start_cmd)
82
82
  unless ENV["SELENDROID_SERVER_PORT"]
83
83
  ENV["SELENDROID_SERVER_PORT"] = "8080"
@@ -90,6 +90,7 @@ def wait_for_selendroid_server
90
90
  unless ENV["SELENDROID_SERVER_PORT"]
91
91
  ENV["SELENDROID_SERVER_PORT"] = "8080"
92
92
  end
93
+
93
94
  retriable :tries => 10, :interval => 3 do
94
95
  url = URI.parse("http://localhost:#{ENV["SELENDROID_SERVER_PORT"]}/wd/hub/status")
95
96
  the_request = Net::HTTP::Get.new("#{url.path}")
@@ -1,3 +1,3 @@
1
1
  module Selendroid
2
- VERSION = "0.3.2"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -8,17 +8,16 @@ Gem::Specification.new do |gem|
8
8
  gem.version = Selendroid::VERSION
9
9
  gem.authors = ["Dominik Dary"]
10
10
  gem.email = ["ddary@acm.org"]
11
- gem.homepage = "http://dominikdary.github.com/selendroid/"
11
+ gem.homepage = "http://selendroid.io"
12
12
  gem.description = %q{"Selenium for Android Apps" (Test automate native or hybrid Android apps with Selendroid.)}
13
- gem.summary = %q{Utility so simplify usage of the selendroid-server.}
13
+ gem.summary = %q{Shell utility for selendroid.}
14
14
  ignores = File.readlines('.gitignore').grep(/\S+/).map {|s| s.chomp }
15
15
  dotfiles = [ '.gitignore']
16
- gem.files = (Dir["**/*"].reject { |f| File.directory?(f) || ignores.any? { |i| File.fnmatch(i, f) } } + dotfiles+ Dir["selendroid-prebuild"]).sort
16
+ gem.files = (Dir["**/*"].reject { |f| File.directory?(f) || ignores.any? { |i| File.fnmatch(i, f) } } + dotfiles).sort
17
17
 
18
18
  gem.required_ruby_version = '>= 1.9.2'
19
19
  gem.executables = "selendroid"
20
20
  gem.require_paths = ["lib"]
21
- gem.add_dependency( "rubyzip")
22
21
  gem.add_dependency( "colorize")
23
22
  gem.add_dependency( "retriable")
24
23
  gem.add_dependency( "awesome_print")
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: selendroid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominik Dary
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-29 00:00:00.000000000 Z
11
+ date: 2013-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rubyzip
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - '>='
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '>='
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: colorize
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -115,12 +101,8 @@ files:
115
101
  - lib/selendroid/selendroid_builder.rb
116
102
  - lib/selendroid/selendroid_driver.rb
117
103
  - lib/selendroid/version.rb
118
- - lib/troido/README.md
119
- - lib/troido/re-sign.jar
120
- - selendroid-prebuild/AndroidManifest.xml
121
- - selendroid-prebuild/selendroid-server.apk
122
104
  - selendroid.gemspec
123
- homepage: http://dominikdary.github.com/selendroid/
105
+ homepage: http://selendroid.io
124
106
  licenses: []
125
107
  metadata: {}
126
108
  post_install_message:
@@ -142,5 +124,5 @@ rubyforge_project:
142
124
  rubygems_version: 2.0.3
143
125
  signing_key:
144
126
  specification_version: 4
145
- summary: Utility so simplify usage of the selendroid-server.
127
+ summary: Shell utility for selendroid.
146
128
  test_files: []
@@ -1,6 +0,0 @@
1
- The re-sign tool is created by troido.de and is published under
2
- the apache 2.0 licence:
3
-
4
- * Source code: https://github.com/troido/resign
5
- * Jar download: http://www.troido.de/en/downloadslsmallgsoftware-a-driverslsmallg/files-download/1_0f7c0da1d4814335bd4142b87385e2ac
6
-
Binary file
@@ -1,23 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
- package="org.openqa.selendroid"
4
- android:versionCode="1"
5
- android:versionName="0.3.1" >
6
-
7
- <uses-sdk android:minSdkVersion="10" />
8
-
9
- <instrumentation
10
- android:name="org.openqa.selendroid.ServerInstrumentation"
11
- android:targetPackage="org.openqa.selendroid.testapp" />
12
-
13
- <uses-permission android:name="android.permission.INTERNET" />
14
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
15
- <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
16
- <uses-permission android:name="android.permission.INJECT_EVENTS" />
17
- <uses-permission android:name="android.permission.WAKE_LOCK" />
18
-
19
- <application android:label="Selendroid" >
20
- <uses-library android:name="android.test.runner" />
21
- </application>
22
-
23
- </manifest>