Skip to content

Commit 513b54d

Browse files
authored
Merge pull request #14 from nurdtechie98/master
Update code samples for webdriverio
2 parents 3d396d1 + 6ba39f2 commit 513b54d

File tree

37 files changed

+442
-441
lines changed

37 files changed

+442
-441
lines changed

README.md

Lines changed: 54 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,59 @@
11
# webdriverio-appium-app-browserstack
2-
[WebdriverIO](http://webdriver.io/) Integration with BrowserStack.
2+
This repository demonstrates how to run Appium tests using [WebdriverIO](http://webdriver.io/) on BrowserStack App Automate.
33

4-
![BrowserStack Logo](https://d98b8t1nnulk5.cloudfront.net/production/images/layout/logo-header.png?1469004780)
5-
6-
<img src = "http://webdriver.io/images/webdriverio.png" height = "100">
4+
<div align="center">
5+
<img src = "https://www.browserstack.com/images/layout/browserstack-logo-600x315.png" > <br>
6+
<img src = "https://webdriver.io/img/webdriverio.png" height="140px">
7+
</div>
78

89
Code samples to get started with Appium tests for your Native App using WebdriverIO.
910

10-
## Resources
11-
* [Get Started guide](https://www.browserstack.com/app-automate/appium-webdriverio)
11+
## Setup
12+
13+
### Requirements
14+
15+
* Node.js 8.11.2+
16+
- If you don't have Node installed, download it from [here](https://nodejs.org/en/)
17+
18+
### Install the dependencies
19+
20+
For Android tests, run the following command in project's base directory :
21+
22+
```sh
23+
cd android
24+
npm i
25+
```
26+
27+
Or,
28+
29+
For dependencies for iOS tests, run following command in project's base directory :
30+
31+
```sh
32+
cd ios
33+
npm i
34+
```
35+
36+
## Getting Started
37+
38+
Getting Started with Appium tests using WebdriverIO on BrowserStack couldn't be easier!
39+
40+
### Run first test:
41+
- Test script is available in `run-first-test` directory under [Android examples](./android) or [iOS examples](./ios)
42+
- Follow the steps outlined in the documentation - [Get Started with your first test on App Automate](https://www.browserstack.com/docs/app-automate/appium/getting-started/nodejs/webdriverio)
43+
44+
### Speed up test execution with parallel testing :
45+
46+
- Test script is available in `run-parallel-test` directory under [Android examples](./android) or [iOS examples](./ios)
47+
- Follow the steps outlined in the documentation - [Get Started with parallel testing on App Automate](https://www.browserstack.com/docs/app-automate/appium/getting-started/nodejs/webdriverio/parallelize-tests)
48+
49+
### Use Local testing for apps that access resources hosted in development or testing environments :
50+
51+
- Test script is available in `run-local-test` directory under [Android examples](./android) or [iOS examples](./ios)
52+
- Follow the steps outlined in the documentation - [Get Started with Local testing on App Automate](https://www.browserstack.com/docs/app-automate/appium/getting-started/nodejs/webdriverio/local-testing)
53+
54+
**Note**: For other test frameworks supported by App-Automate refer our [Developer documentation](https://www.browserstack.com/docs/)
55+
56+
## Getting Help
57+
58+
If you are running into any issues or have any queries, please check [Browserstack Support page](https://www.browserstack.com/support/app-automate) or [get in touch with us](https://www.browserstack.com/contact?ref=help).
59+

android/README.md

Lines changed: 0 additions & 32 deletions
This file was deleted.

android/conf/single.conf.js renamed to android/examples/run-first-test/first.conf.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
11
exports.config = {
22
user: process.env.BROWSERSTACK_USERNAME || 'BROWSERSTACK_USERNAME',
3-
key: process.env.BROWSERSTACK_ACCESS_KEY || 'BROWSERSTACK_ACC_KEY',
3+
key: process.env.BROWSERSTACK_ACCESS_KEY || 'BROWSERSTACK_ACCESS_KEY',
44

55
updateJob: false,
66
specs: [
7-
'./tests/specs/single_test.js'
7+
'./examples/run-first-test/specs/first_test.js'
88
],
99
exclude: [],
1010

1111
capabilities: [{
12-
name: 'single_appium_test',
13-
build: 'webdriver-browserstack',
14-
device: 'Samsung Galaxy S7',
15-
browserName: 'android',
12+
project: "First Webdriverio Android Project",
13+
build: 'Webdriverio Android',
14+
name: 'first_test',
15+
device: 'Google Pixel 3',
16+
os_version: "9.0",
1617
app: process.env.BROWSERSTACK_APP_ID || 'bs://<hashed app-id>',
1718
'browserstack.debug': true
1819
}],
1920

20-
logLevel: 'verbose',
21+
logLevel: 'info',
2122
coloredLogs: true,
2223
screenshotPath: './errorShots/',
2324
baseUrl: '',
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
var assert = require('assert');
2+
3+
describe('Search Wikipedia Functionality', () => {
4+
it('can find search results', async () => {
5+
var searchSelector = await $(`~Search Wikipedia`);
6+
await searchSelector.waitForDisplayed({ timeout: 30000 });
7+
await searchSelector.click();
8+
9+
var insertTextSelector = await $('android=new UiSelector().resourceId("org.wikipedia.alpha:id/search_src_text")');
10+
await insertTextSelector.waitForDisplayed({ timeout: 30000 });
11+
12+
await insertTextSelector.addValue("Browsertack");
13+
await browser.pause(5000);
14+
15+
var allProductsName = await $$(`android.widget.TextView`);
16+
assert(allProductsName.length > 0);
17+
});
18+
});

android/conf/local.conf.js renamed to android/examples/run-local-test/local.conf.js

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,26 @@ var browserstack = require('browserstack-local');
22

33
exports.config = {
44
user: process.env.BROWSERSTACK_USERNAME || 'BROWSERSTACK_USERNAME',
5-
key: process.env.BROWSERSTACK_ACCESS_KEY || 'BROWSERSTACK_ACC_KEY',
5+
key: process.env.BROWSERSTACK_ACCESS_KEY || 'BROWSERSTACK_ACCESS_KEY',
66

77
updateJob: false,
88
specs: [
9-
'./tests/specs/local_test.js'
9+
'./examples/run-local-test/specs/local_test.js'
1010
],
1111
exclude: [],
1212

1313
capabilities: [{
14-
name: 'local_appium_test',
15-
build: 'webdriver-browserstack',
16-
device: 'Google Pixel',
17-
browserName: 'android',
14+
project: "First Webdriverio Android Project",
15+
build: 'Webdriverio Android Local',
16+
name: 'local_test',
17+
device: 'Google Pixel 3',
18+
os_version: "9.0",
1819
app: process.env.BROWSERSTACK_APP_ID || 'bs://<hashed app-id>',
1920
'browserstack.local': true,
2021
'browserstack.debug': true
2122
}],
2223

23-
logLevel: 'verbose',
24+
logLevel: 'info',
2425
coloredLogs: true,
2526
screenshotPath: './errorShots/',
2627
baseUrl: '',
@@ -35,11 +36,11 @@ exports.config = {
3536
},
3637

3738
// Code to start browserstack local before start of test
38-
onPrepare: function (config, capabilities) {
39+
onPrepare: (config, capabilities) => {
3940
console.log("Connecting local");
40-
return new Promise(function(resolve, reject){
41+
return new Promise( (resolve, reject) => {
4142
exports.bs_local = new browserstack.Local();
42-
exports.bs_local.start({'key': exports.config.key }, function(error) {
43+
exports.bs_local.start({'key': exports.config.key }, (error) => {
4344
if (error) return reject(error);
4445
console.log('Connected. Now testing...');
4546

@@ -49,7 +50,15 @@ exports.config = {
4950
},
5051

5152
// Code to stop browserstack local after end of test
52-
onComplete: function (capabilties, specs) {
53-
exports.bs_local.stop(function() {});
53+
onComplete: (capabilties, specs) => {
54+
console.log("Closing local tunnel");
55+
return new Promise( (resolve, reject) => {
56+
exports.bs_local.stop( (error) => {
57+
if (error) return reject(error);
58+
console.log("Stopped BrowserStackLocal");
59+
60+
resolve();
61+
});
62+
});
5463
}
5564
};
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
var path = require('path');
2+
var assert = require('assert');
3+
4+
describe('BrowserStack Local Testing', () => {
5+
it('can check tunnel working', async () => {
6+
var searchSelector = await $('android=new UiSelector().resourceId("com.example.android.basicnetworking:id/test_action")');
7+
await searchSelector.waitForDisplayed({ timeout: 30000 });
8+
await searchSelector.click();
9+
10+
var insertTextSelector = await $(`android.widget.TextView`);
11+
await insertTextSelector.waitForDisplayed({ timeout: 30000 });
12+
13+
var testElement = null;
14+
15+
try {
16+
var textElement = await $('android=new UiSelector().textContains("active connection is")');
17+
await textElement.waitForDisplayed({ timeout: 30000 });
18+
testElement = textElement;
19+
}
20+
catch {
21+
var screenshotPath = path.resolve(__dirname, 'screenshot.png');
22+
await browser.saveScreenshot(screenshotPath);
23+
console.log('Screenshot stored at ' + screenshotPath);
24+
throw new Error('Cannot find the needed TextView element from app');
25+
}
26+
27+
var matchedString = await testElement.getText();
28+
console.log(matchedString);
29+
assert(matchedString.indexOf('The active connection is wifi') !== -1);
30+
assert(matchedString.indexOf('Up and running') !== -1);
31+
});
32+
});

android/conf/multiple.conf.js renamed to android/examples/run-multiple-test/multiple.conf.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
11
exports.config = {
22
user: process.env.BROWSERSTACK_USERNAME || 'BROWSERSTACK_USERNAME',
3-
key: process.env.BROWSERSTACK_ACCESS_KEY || 'BROWSERSTACK_ACC_KEY',
3+
key: process.env.BROWSERSTACK_ACCESS_KEY || 'BROWSERSTACK_ACCESS_KEY',
44

55
updateJob: false,
66
specs: [
7-
'./tests/specs/multiple_test.js'
7+
'./examples/run-multiple-test/specs/multiple_test.js'
88
],
99
exclude: [],
1010

1111
capabilities: [{
12-
name: 'multiple_appium_test',
13-
build: 'webdriver-browserstack',
14-
device: 'Google Nexus 9',
15-
browserName: 'android',
12+
project: "First Webdriverio Android Project",
13+
build: 'Webdriverio Android Multiple',
14+
name: 'multiple_test',
15+
device: 'Google Pixel 3',
16+
os_version: "9.0",
1617
app: process.env.BROWSERSTACK_APP_ID || 'bs://<hashed app-id>',
1718
'browserstack.debug': true
1819
}],
1920

20-
logLevel: 'verbose',
21+
logLevel: 'info',
2122
coloredLogs: true,
2223
screenshotPath: './errorShots/',
2324
baseUrl: '',
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
var assert = require('assert');
2+
3+
describe('Search Wikipedia Functionality', () => {
4+
it('can find search results', async () => {
5+
var searchSelector = await $(`~Search Wikipedia`);
6+
await searchSelector.waitForDisplayed({ timeout: 30000 });
7+
await searchSelector.click();
8+
9+
var insertTextSelector = await $('android=new UiSelector().resourceId("org.wikipedia.alpha:id/search_src_text")');
10+
await insertTextSelector.waitForDisplayed({ timeout: 30000 });
11+
12+
await insertTextSelector.addValue("Browsertack01");
13+
await browser.pause(5000);
14+
15+
var allProductsName = await $$(`android.widget.TextView`);
16+
assert(allProductsName.length > 0);
17+
});
18+
});
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
var assert = require('assert');
2+
3+
describe('Search Wikipedia Functionality', () => {
4+
it('can find search results', async () => {
5+
var searchSelector = await $(`~Search Wikipedia`);
6+
await searchSelector.waitForDisplayed({ timeout: 30000 });
7+
await searchSelector.click();
8+
9+
var insertTextSelector = await $('android=new UiSelector().resourceId("org.wikipedia.alpha:id/search_src_text")');
10+
await insertTextSelector.waitForDisplayed({ timeout: 30000 });
11+
12+
await insertTextSelector.addValue("Browsertack02");
13+
await browser.pause(5000);
14+
15+
var allProductsName = await $$(`android.widget.TextView`);
16+
assert(allProductsName.length > 0);
17+
});
18+
});
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
var assert = require('assert');
2+
3+
describe('Search Wikipedia Functionality', () => {
4+
it('can find search results', async () => {
5+
var searchSelector = await $(`~Search Wikipedia`);
6+
await searchSelector.waitForDisplayed({ timeout: 30000 });
7+
await searchSelector.click();
8+
9+
var insertTextSelector = await $('android=new UiSelector().resourceId("org.wikipedia.alpha:id/search_src_text")');
10+
await insertTextSelector.waitForDisplayed({ timeout: 30000 });
11+
12+
await insertTextSelector.addValue("Browsertack03");
13+
await browser.pause(5000);
14+
15+
var allProductsName = await $$(`android.widget.TextView`);
16+
assert(allProductsName.length > 0);
17+
});
18+
});

0 commit comments

Comments
 (0)