web_console 0.5.8

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.
data/lib/start.rb ADDED
@@ -0,0 +1,93 @@
1
+ # encoding: utf-8
2
+ require 'rubygems'
3
+ require 'spec' # https://github.com/bootstraponline/spec
4
+ require 'selenium-webdriver'
5
+ require 'page-object' # https://github.com/cheezy/page-object
6
+
7
+ $driver = Selenium::WebDriver.for :firefox
8
+ $driver.manage.timeouts.implicit_wait = 30 # seconds
9
+
10
+ # Load minitest
11
+ begin
12
+ require 'minitest'
13
+ require 'minitest/spec'
14
+ # set current_spec. fixes:
15
+ # NoMethodError: undefined method `assert_equal' for nil:NilClass
16
+ Minitest::Spec.new 'pry'
17
+ rescue
18
+ end
19
+
20
+ module Pages; end
21
+
22
+ # Promote methods to top level for Pry
23
+ # Pages module is hard coded.
24
+ def promote_page_object_methods
25
+ ::Pages.constants.each do |class_name|
26
+ puts "Promoting class_name as method #{class_name.to_s.downcase}"
27
+ Kernel.send(:define_method, class_name.to_s.downcase) do
28
+ Pages.const_get(class_name)
29
+ end
30
+ end
31
+ end
32
+
33
+ def reload
34
+ Pry.send :_reload
35
+ promote_page_object_methods
36
+ nil
37
+ end
38
+
39
+ def set_wait seconds
40
+ $driver.manage.timeouts.implicit_wait = seconds
41
+ end
42
+
43
+ # -- helper methods
44
+ module Kernel
45
+ def id id
46
+ $driver.find_elements(:id, id).detect { |ele| ele.displayed? }
47
+ end
48
+
49
+ def css css
50
+ $driver.find_elements(:css, css).detect { |ele| ele.displayed? }
51
+ end
52
+
53
+ def xpath xpath
54
+ $driver.find_elements(:xpath, xpath).detect { |ele| ele.displayed? }
55
+ end
56
+
57
+ def link text
58
+ xpath("//a[text()='#{text}']")
59
+ end
60
+
61
+ def input input
62
+ xpath("//input[@value='#{input}']")
63
+ end
64
+ end
65
+ # --
66
+
67
+ def x
68
+ $driver.quit if $driver
69
+ exit
70
+ end
71
+
72
+ # Ensure page objects are loaded
73
+ reload
74
+ # Default wait to 0
75
+ set_wait 0
76
+
77
+ # Don't print page objects
78
+ # default print code from https://github.com/pry/pry/blob/master/lib/pry.rb
79
+ # pry-0.9.12.3
80
+ Pry.config.print = proc do |output, value|
81
+ unless value.nil? || value.inspect.to_s.include?('SeleniumWebDriver::PageObject')
82
+ Pry::output_with_default_format(output, value, :hashrocket => true)
83
+ end
84
+ end
85
+
86
+ # loop through all pages and output the methods
87
+ def page
88
+ Pages.constants.each do |page|
89
+ methods = Pages.const_get(page).singleton_methods
90
+ methods.each { |m| puts "#{page.to_s.downcase}.#{m}" }
91
+ end
92
+ nil
93
+ end
@@ -0,0 +1,57 @@
1
+ # encoding: utf-8
2
+ require 'rubygems'
3
+ Gem::Specification.class_eval { def self.warn( args ); end }
4
+ require 'pry'
5
+ require 'awesome_print'
6
+
7
+ module Appium; end unless defined? Appium
8
+
9
+ def define_reload paths
10
+ Pry.send(:define_singleton_method, :_reload) do
11
+ paths.each do |p|
12
+ # If a page obj is deleted then load will error.
13
+ begin
14
+ load p
15
+ rescue # LoadError: cannot load such file
16
+ end
17
+ end
18
+ end
19
+ nil
20
+ end
21
+
22
+ module Appium::Console
23
+ AwesomePrint.pry!
24
+ pwd = Dir.pwd
25
+ to_require = pwd + '/appium.txt'
26
+
27
+ start = File.expand_path '../start.rb', __FILE__
28
+ cmd = ['-r', start]
29
+
30
+ if File.exists?(to_require)
31
+ to_require = File.read(to_require).split("\n").map do |line|
32
+ unless File.exists?(line)
33
+ line = File.join(pwd, line)
34
+ end
35
+
36
+ if File.exists?(line)
37
+ if File.directory?(line)
38
+ found = []
39
+ Dir.glob(File.join(line, '**/*.rb')) { |f| found << File.expand_path(f) }
40
+ found
41
+ else
42
+ File.expand_path line
43
+ end
44
+ else
45
+ nil
46
+ end
47
+ end.flatten.compact # remove nested arrays & nils
48
+
49
+ define_reload to_require
50
+ else
51
+ puts "This folder doesn't contain an appium.txt listing page objects"
52
+ exit
53
+ end
54
+
55
+ $stdout.puts "pry #{cmd.join(' ')}"
56
+ Pry::CLI.parse_options cmd
57
+ end # module Appium::Console
@@ -0,0 +1,7 @@
1
+ # encoding: utf-8
2
+ # Define Appium module so version can be required directly.
3
+ module Appium; end unless defined? Appium
4
+ module Appium::Console
5
+ VERSION = '0.5.8' unless defined? ::Appium::Console::VERSION
6
+ DATE = '2013-12-11' unless defined? ::Appium::Console::DATE
7
+ end
data/osx.md ADDED
@@ -0,0 +1,274 @@
1
+ ### Getting Started
2
+
3
+ This document is written for OS X 10.8.4 or better. iOS testing requires OS X. Android testing works on OS X, Windows, and Linux.
4
+
5
+ For OS X, there is rake script which will attempt to do most of this for you, with
6
+ ```
7
+ rake -f osx_install.rake
8
+ ```
9
+ The rake script will not install Xcode, etc., nor Java, but should take care of everything else.
10
+ Changes to these instructions might imply changes to that script as well.
11
+
12
+ #### Steps to install
13
+
14
+ Install `Xcode` 4.6.3 (iOS 6) or 5.0.0 (iOS 7).
15
+
16
+ - Xcode 5.0.0 shouldn't be used for iOS 6 as it's flaky.
17
+ - Xcode 5.0.1 is broken.
18
+ - Xcode 4.6.3 doesn't support iOS 7.
19
+
20
+ After that, install the command line build tools (Xcode -> Preferences -> Downloads).
21
+
22
+ If you're testing iOS 6, then install `Xcode 4.6.3` from [Apple](https://developer.apple.com/downloads/index.action).
23
+ For iOS 7+ make sure to use Xcode 5.
24
+
25
+ That done, you'll need to create a symlink for
26
+ `gcc` to get the ruby build (particularly FFI) to install properly. This isn't required on OS X 10.9.
27
+ If `/usr/local/bin` is in your path, you can do:
28
+ ```
29
+ ln -s /usr/bin/gcc /usr/local/bin/gcc-4.2
30
+ ```
31
+ Otherwise
32
+ ```
33
+ sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2
34
+ ```
35
+ Reinstall Ruby if you didn't set this symlink and have FFI issues.
36
+
37
+ - Install Java 7 if there's no Java on the system.
38
+ - [JDK 7](http://www.oracle.com/technetwork/java/javase/downloads/index.html)
39
+
40
+ - Install the latest stable patch release of Ruby 2.0.
41
+
42
+ `$ \curl -L https://get.rvm.io | bash -s stable --ruby=2.0.0`
43
+
44
+ - Make sure RVM is using the correct Ruby by default
45
+
46
+ ```
47
+ $ rvm list
48
+ $ rvm --default use 2.0.0
49
+ ```
50
+
51
+ - If you have an old ruby, you can installing Ruby 2.0 instead
52
+
53
+ ```
54
+ $ rvm get head
55
+ $ rvm autolibs homebrew
56
+ $ rvm install 2.0.0
57
+ ```
58
+
59
+ - Check that it's installed properly by printing the ruby version.
60
+
61
+ `$ ruby --version`
62
+
63
+ - Update RubyGems and Bundler.
64
+
65
+ ```ruby
66
+ gem update --system ;\
67
+ gem install --no-rdoc --no-ri bundler ;\
68
+ gem update ;\
69
+ gem cleanup
70
+ ```
71
+
72
+ - Check that RubyGems is >= 2.1.5
73
+
74
+ ```bash
75
+ $ gem --version
76
+ 2.1.5
77
+ ```
78
+
79
+ - Install appium_console gem.
80
+
81
+ ```ruby
82
+ gem uninstall -aIx appium_lib ;\
83
+ gem uninstall -aIx appium_console ;\
84
+ gem install --no-rdoc --no-ri appium_console
85
+ ```
86
+
87
+ - Install [flaky](https://github.com/appium/flaky) gem.
88
+
89
+ ```ruby
90
+ gem uninstall -aIx flaky ;\
91
+ gem install --no-rdoc --no-ri flaky
92
+ ```
93
+
94
+ - Install [brew](http://mxcl.github.io/homebrew/)
95
+
96
+ `ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"`
97
+
98
+ - Install [nodejs](http://nodejs.org/) using brew.
99
+
100
+ ```
101
+ brew update ;\
102
+ brew upgrade node ;\
103
+ brew install node
104
+ ```
105
+
106
+ - Node should be `v0.10.5` or better.
107
+ Don't use the big green install button on nodejs.org or all npm commands will require sudo.
108
+
109
+ `$ node --version`
110
+
111
+ `$ npm --version`
112
+
113
+ - Install grunt.
114
+
115
+ `npm install -g grunt grunt-cli`
116
+
117
+ - Run the version command from the appium folder. If you're not in that folder, the grunt version will not display.
118
+
119
+ ```bash
120
+ $ grunt --version
121
+ grunt-cli v0.1.6
122
+ grunt v0.4.1
123
+ ```
124
+
125
+ - Install [ant](http://ant.apache.org/) if it's not already installed.
126
+ - Install [maven 3.0.5](http://maven.apache.org/download.cgi) if it's not already installed. Do not use maven 3.1.1.
127
+
128
+ ```
129
+ $ ant -version
130
+ Apache Ant(TM) version 1.8.2 compiled on June 20 2012
131
+ $ mvn -version
132
+ Apache Maven 3.0.3 (r1075438; 2011-02-28 12:31:09-0500)
133
+ ```
134
+
135
+ - Clone appium
136
+
137
+ `$ git clone git://github.com/appium/appium.git`
138
+
139
+ - Run reset.sh. When running reset.sh, make sure to be on Xcode 5.0.2 for best results. You may have problems if you reset on Xcode 4.6.3 and then switch to a newer Xcode.
140
+
141
+ `cd appium; ./reset.sh`
142
+
143
+ If you see config errors, try cleaning git. `git clean -dfx; git reset --hard`
144
+
145
+ You can also reset by platform. `./reset.sh --android`
146
+
147
+ If npm is having issues, you may have to disable https. I don't recommend this, however if you must this is how to do so:
148
+
149
+ `npm config set registry http://registry.npmjs.org/`
150
+
151
+
152
+ - Authorize for iOS testing. Must run reset.sh as mentioned above before running the grunt task.
153
+
154
+ > sudo \`which grunt\` authorize
155
+
156
+ - Start appium.
157
+
158
+ `node server.js`
159
+
160
+
161
+ #### Bash Profile
162
+ - Add the Android SDK tools folder to your path so you can run `android`.
163
+ - Define the `ANDROID_HOME` env var pointing to SDK root. On OSX place it in `~/.bash_profile`
164
+ - You may have to add grunt as well `/usr/local/share/npm/bin/grunt`
165
+
166
+ ```
167
+ # ~/.bash_profile
168
+ export ANDROID_HOME=$HOME/Downloads/android-sdk-macosx
169
+ export ANDROID_SDK=$ANDROID_HOME
170
+ PATH=$PATH:/Applications/apache-ant-1.8.4/bin
171
+ PATH=$PATH:/usr/local/share/npm/bin/
172
+ PATH=$PATH:$ANDROID_HOME/build-tools
173
+ PATH=$PATH:$ANDROID_HOME/platform-tools
174
+ PATH=$PATH:$ANDROID_HOME/tools
175
+ export JAVA_HOME="`/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home`"
176
+ export APP_PATH="/path/to/MyiOS.app"
177
+ export APK_PATH="/path/to/my.apk"
178
+ export APP_PACKAGE="com.example.Package"
179
+ export APP_ACTIVITY="StartActivity"
180
+ export APP_WAIT_ACTIVITY="SplashActivity"
181
+
182
+ export PATH
183
+ ```
184
+
185
+ - Run `android` to open the SDK manager.
186
+ - Install `Intel x86 Emulator Accelerator (HAXM)` under Extras
187
+ - Install API 18 `SDK Platform`, `Intel x86 Atom System Image`, `Google APIs`
188
+ If there are any problems viewing or downloading the packages, go to `Packages -> Reload` and try again.
189
+
190
+ - Create a new Android virtual device that uses the Intel image. Ensure `Use Host GPU` is checked. Set `VM Heap` to `64`. `32` is too small.
191
+
192
+ ![](img/avd_settings.png)
193
+
194
+ `android avd`
195
+
196
+ - Check that `hax is working` If it's not, install hax [directly from Intel](http://software.intel.com/en-us/articles/intel-hardware-accelerated-execution-manager)
197
+
198
+ ```bash
199
+ $ emulator @t18
200
+ HAX is working and emulator runs in fast virt mode
201
+ ```
202
+
203
+ - Launch the emulator with `emulator @t18`
204
+
205
+ - After launching the emulator, check that it's listed in adb devices. Run the following commands a few times until it's listed.
206
+
207
+ `adb kill-server; adb devices`
208
+
209
+ If you see `error: protocol fault (no status)` just keep running the command until the emulator is detected.
210
+
211
+ - With both the Android emulator running and the Appium server started, it's time to launch the appium console. Make sure the ENV vars are exported.
212
+
213
+ - Echo the values to make sure they're set correctly
214
+
215
+ `$ echo $APP_PATH $APP_PACKAGE $APP_ACTIVITY $APP_WAIT_ACTIVITY`
216
+
217
+ - Start appium console
218
+
219
+ `arc`
220
+
221
+ - See [running on OS X](https://github.com/appium/appium/blob/master/docs/running-on-osx.md)
222
+
223
+ #### Troubleshooting
224
+
225
+ - If install fails, keep trying to install a few times.
226
+
227
+ When using `Appium.app` make sure to set Appium -> Preferences... -> Check "Use External Appium Package" and set it to the path of Appium cloned from GitHub.
228
+
229
+ Fix permission errors. npm shouldn't require sudo.
230
+
231
+ ```bash
232
+ brew uninstall node
233
+ brew install node
234
+ rm -rf ./node_modules # run from the appium folder
235
+ rm -rf "/Users/`whoami`/.npm"
236
+ rm -rf /usr/local/lib/node_modules/
237
+ ./reset.sh --ios
238
+ ./reset.sh --android
239
+ ```
240
+
241
+ - [Helper bash methods](https://gist.github.com/bootstraponline/5580587)
242
+
243
+ #### SSL Issues
244
+
245
+ > Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
246
+
247
+ - [Fix SSL issues](http://railsapps.github.io/openssl-certificate-verify-failed.html) with:
248
+
249
+ ```bash
250
+ $ rvm osx-ssl-certs update all
251
+ $ rvm osx-ssl-certs status all
252
+ ```
253
+
254
+ #### Maven on OS X 10.9
255
+
256
+ ```bash
257
+ $ cd /usr/local
258
+ $ git reset --hard origin/master
259
+
260
+ $ brew update
261
+ $ brew install maven
262
+ ```
263
+
264
+ #### HAXM on OS X 10.9
265
+
266
+ Install the [HAXM 10.9 hotfix](http://software.intel.com/en-us/articles/intel-hardware-accelerated-execution-manager-end-user-license-agreement-macos-hotfix
267
+ ).
268
+
269
+ #### Restore dev tools on 10.9
270
+
271
+ `xcode-select --install`
272
+
273
+
274
+ - [Install specific node version](https://coderwall.com/p/lqphzg)
data/osx_install.rake ADDED
@@ -0,0 +1,135 @@
1
+ # For OS X, installs all the dependencies for Appium's ruby console, per these instructions:
2
+ #
3
+ # https://github.com/appium/ruby_console/blob/master/osx.md
4
+ #
5
+ # Changes to this file might imply changes to those instructions as well.
6
+
7
+ def sh_success(cmd)
8
+ success = false
9
+ begin
10
+ success, status = sh cmd
11
+ rescue
12
+ # do nothing
13
+ end
14
+
15
+ success
16
+ end
17
+
18
+ def has_cmd(cmd)
19
+ sh_success "which #{cmd}"
20
+ end
21
+
22
+ THIS_DIR = File.expand_path(File.dirname(__FILE__))
23
+ APPIUM_DIR = "#{THIS_DIR}/appium"
24
+
25
+ GCC = '/usr/bin/gcc'
26
+ GCC42_CMD = 'gcc-4.2'
27
+ GCC42 = "/usr/local/bin/#{GCC42_CMD}"
28
+
29
+ file GCC do
30
+ fail "#{GCC} does not exist. This is likely because you do not have Xcode command line tools installed."
31
+ end
32
+
33
+ file GCC42 => [GCC] do
34
+ sh "ln -s #{GCC} #{GCC42}"
35
+ end
36
+
37
+ task :gcc do
38
+ if !has_cmd('gcc-4.2') then
39
+ Rake::Task[GCC42].invoke
40
+ end
41
+ end
42
+
43
+ task :java do
44
+ if !has_cmd('java') then
45
+ puts "You must install java to continue."
46
+ puts "cf. http://www.oracle.com/technetwork/java/javase/downloads/index.html"
47
+ end
48
+ end
49
+
50
+ task :ruby => [:gcc] do
51
+ if has_cmd('rvm') then
52
+ # doesn't hurt anything if already installed
53
+ sh 'rvm install 2.0.0'
54
+ else
55
+ sh '\curl -L https://get.rvm.io | bash -s stable --ruby=2.0.0'
56
+ end
57
+
58
+ system '/bin/bash --login -i -c "rvm use --default 2.0.0"'
59
+ sh 'rvm osx-ssl-certs update all'
60
+ end
61
+
62
+ task :gems => [:ruby] do
63
+ sh 'gem update --system'
64
+ sh 'gem install --no-rdoc --no-ri bundler'
65
+ sh 'gem update'
66
+ sh 'gem cleanup'
67
+ sh 'gem uninstall -aIx appium_lib'
68
+ sh 'gem uninstall -aIx web_console'
69
+ sh 'gem install --no-rdoc --no-ri web_console'
70
+ sh 'gem uninstall -aIx flaky'
71
+ sh 'gem install --no-rdoc --no-ri flaky'
72
+ end
73
+
74
+ task :brew do
75
+ if has_cmd('brew') then
76
+ sh 'brew update'
77
+ else
78
+ sh 'ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"'
79
+ end
80
+ end
81
+
82
+ task :ant do
83
+ if !has_cmd('ant') then
84
+ fail "Ant must be installed to complete this setup."
85
+ end
86
+ end
87
+
88
+ task :maven do
89
+ if !has_cmd('mvn') then
90
+ Rake::Task[:brew].invoke
91
+ sh 'brew install maven'
92
+ end
93
+ end
94
+
95
+ task :nodejs => [:brew] do
96
+ sh 'brew install node' # noop if already installed
97
+ if sh_success 'brew outdated | grep node' then
98
+ sh 'brew upgrade node'
99
+ end if
100
+
101
+ # make sure it's installed
102
+ sh 'node --version'
103
+ sh 'npm --version'
104
+ end
105
+
106
+ task :grunt => [:nodejs] do
107
+ if !sh_success('grunt --version') then
108
+ sh 'npm install -g grunt grunt-cli'
109
+ sh 'grunt --version'
110
+ end
111
+ end
112
+
113
+ # we only clone when the directory doesn't already exist
114
+ directory APPIUM_DIR do
115
+ cd THIS_DIR
116
+ sh 'git clone git://github.com/appium/appium.git'
117
+ end
118
+
119
+ # appium goes into the directory below where this Rakefile is
120
+ desc 'Downloads appium and all dependencies, and starts up appium. May require a superuser password.'
121
+ task :appium => [APPIUM_DIR, :grunt, :maven, :ant, :gems, :ruby, :java] do
122
+ cd APPIUM_DIR
123
+ sh 'git pull origin master'
124
+ sh './reset.sh'
125
+
126
+ begin
127
+ sh 'sudo `which grunt` authorize'
128
+ rescue
129
+ # grunt errors if it has already been authorized, so ... I guess we'll ignore errors then
130
+ end
131
+
132
+ sh 'node server.js'
133
+ end
134
+
135
+ task :default => :appium