There are many options for using WebDriver to test on mobile browsers. Protractor does not yet officially support or run its own tests against a particular configuration, but the following are some notes on various setup options.
Use webdriver-manager to install appium and the Android SDK. See details
on the WebDriver Manager page.
> npm start # or `./scripts/web-server.js`
Starting express web server in /workspace/protractor/testapp on port 8000
> webdriver-manager start --android
Config File:
exports.config = {
seleniumAddress: 'http://localhost:4723/wd/hub',
specs: ['basic/*_spec.js'],
// Reference: https://github.com/appium/sample-code/blob/master/sample-code/examples/node/helpers/caps.js
capabilities: {
browserName: 'chrome',
platformName: 'Android',
platformVersion: '7.0',
deviceName: 'Android Emulator',
},
baseUrl: 'http://10.0.2.2:8000'
};
Note the following:
Use webdriver-manager to install appium and the Android SDK. See details
on the WebDriver Manager page.
> npm start # or `./scripts/web-server.js`
Starting express web server in /workspace/protractor/testapp on port 8000
> webdriver-manager start
Note: Appium listens to port 4723 instead of 4444.
iPhone:
exports.config = {
seleniumAddress: 'http://localhost:4723/wd/hub',
specs: [
'basic/*_spec.js'
],
// Reference: https://github.com/appium/sample-code/blob/master/sample-code/examples/node/helpers/caps.js
capabilities: {
browserName: 'safari',
platformName: 'iOS',
platformVersion: '7.1',
deviceName: 'iPhone Simulator',
},
baseUrl: 'http://localhost:8000'
};
iPad:
exports.config = {
seleniumAddress: 'http://localhost:4723/wd/hub',
specs: [
'basic/*_spec.js'
],
// Reference: https://github.com/appium/sample-code/blob/master/sample-code/examples/node/helpers/caps.js
capabilities: {
browserName: 'safari',
platformName: 'iOS',
platformVersion: '7.1',
deviceName: 'IPad Simulator',
},
baseUrl: 'http://localhost:8000'
};
Note the following:
> android list avd
Available Android Virtual Devices:
Name: myAvd
Device: Nexus 5 (Google)
Path: /Users/hankduan/.android/avd/Hank.avd
Target: Android 4.4.2 (API level 19)
Tag/ABI: default/x86
Skin: WVGA800
> npm start # or `./scripts/web-server.js`
Starting express web server in /workspace/protractor/testapp on port 8000
> emulator -avd myAvd
HAX is working and emulator runs in fast virt mode
Note: The last line that tells you the emulator accelerator is running.
> java -jar selendroid-standalone-0.9.0-with-dependencies.jar
...
{"value":{"os":{"name":"Mac OS X","arch":"x86_64","version":"10.9.2"},"build":{"browserName":"selendroid","version":"0.9.0"},"supportedDevices":[{"emulator":true,"screenSize":"WVGA800","avdName":"Hank","androidTarget":"ANDROID19"}],"supportedApps":[{"mainActivity":"io.selendroid.androiddriver.WebViewActivity","appId":"io.selendroid.androiddriver:0.9.0","basePackage":"io.selendroid.androiddriver"}]},"status":0}
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: [
'basic/*_spec.js'
],
capabilities: {
'browserName': 'android'
},
baseUrl: 'http://10.0.2.2:8000'
};
Note the following:
As of version 5.1.0, Protractor uses webdriver-js-extender to provide all the
mobile commands you should need (see the API page for details). However, if you
prefer wd, you can access it via wd-bridge. First, install both wd and
wd-bridge as devDependencies:
npm install --save-dev wd wd-bridge
Then, in your config file:
// configuring wd in onPrepare
// wdBridge helps to bridge wd driver with other selenium clients
// See https://github.com/sebv/wd-bridge/blob/master/README.md
onPrepare: function () {
var wd = require('wd'),
protractor = require('protractor'),
wdBridge = require('wd-bridge')(protractor, wd);
wdBridge.initFromProtractor(exports.config);
}