Skip to content

Commit

Permalink
Add global app alias to browser to be used for native app testing. (
Browse files Browse the repository at this point in the history
  • Loading branch information
garg3133 authored Feb 8, 2023
1 parent e3924a9 commit 7e88978
Show file tree
Hide file tree
Showing 5 changed files with 149 additions and 2 deletions.
1 change: 1 addition & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@
"by": "readonly",
"expect": "readonly",
"browser": "readonly",
"app": "readonly",
"Key": "readonly"
}
}
8 changes: 6 additions & 2 deletions lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,7 @@ Object.defineProperty(Nightwatch, 'by', {
}
});

Object.defineProperty(Nightwatch, 'browser', {
const globalBrowserDescriptor = {
configurable: true,
get() {
if (global.browser) {
Expand All @@ -357,7 +357,11 @@ Object.defineProperty(Nightwatch, 'browser', {

throw err;
}
});
};

Object.defineProperty(Nightwatch, 'browser', globalBrowserDescriptor);

Object.defineProperty(Nightwatch, 'app', globalBrowserDescriptor);

Object.defineProperty(Nightwatch, 'Key', {
configurable: true,
Expand Down
7 changes: 7 additions & 0 deletions lib/testsuite/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,13 @@ class TestSuite {
return null;
}

Object.defineProperty(global, 'app', {
configurable: true,
get: function() {
return global.browser;
}
});

Object.defineProperty(global, 'by', {
configurable: true,
get: function() {
Expand Down
37 changes: 37 additions & 0 deletions test/apidemos/appium/appiumTest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
const assert = require('assert');

describe('appium api demo', function () {
after((app) => app.end());

const availableAppiumCommands = [
'startActivity',
'getCurrentActivity',
'getCurrentPackage',
'getOrientation',
'setOrientation',
'getGeolocation',
'setGeolocation',
'pressKeyCode',
'longPressKeyCode',
'hideKeyboard',
'isKeyboardShown',
'getContexts',
'getContext',
'setContext'
];

it('test appium available API commands', async function () {
// app variable is available globally
assert.strictEqual(app !== undefined, true);

availableAppiumCommands.forEach((command) => {
assert.strictEqual(typeof app.appium[command], 'function');
});
});

it('Search for Nightwatch', async function() {
app // available globally
.click('id', 'com.app:id/search')
.sendKeys('id', 'com.app:id/search', 'Nightwatch');
});
});
98 changes: 98 additions & 0 deletions test/src/apidemos/appium/testAppiumAPI.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
const {strictEqual} = require('assert');
const path = require('path');
const common = require('../../../common.js');
const MockServer = require('../../../lib/mockserver.js');
const NightwatchClient = common.require('index.js');

describe('appium api demos', function () {
beforeEach(function (done) {
this.server = MockServer.init(undefined, {port: 4723});
this.server.on('listening', () => {
done();
});
});

afterEach(function (done) {
this.server.close(function () {
done();
});
});

it('run appium api demo tests basic', function () {
const testsPath = path.join(__dirname, '../../../apidemos/appium/appiumTest.js');

const globals = {
waitForConditionPollInterval: 50,

reporter(results) {
if (results.lastError) {
throw results.lastError;
}
}
};

MockServer
.addMock({
url: '/wd/hub/session',
method: 'POST',
response: JSON.stringify({
value: {
sessionId: '13521-10219-202',
version: 'TEST',
platform: 'TEST'
}
})
}, true)
.addMock({
url: '/wd/hub/session/13521-10219-202/elements',
postdata: {
using: 'id',
value: 'com.app:id/search'
},
method: 'POST',
response: JSON.stringify({
status: 0,
state: 'success',
value: [{'element-6066-11e4-a52e-4f735466cecf': '0'}]
})
}, true, true)
.addMock({
url: '/wd/hub/session/13521-10219-202/element/0/click',
method: 'POST',
response: JSON.stringify({
value: null
})
}, true)
.addMock({
url: '/wd/hub/session/13521-10219-202/element/0/value',
method: 'POST',
postdata: JSON.stringify({
text: 'Nightwatch',
value: 'Nightwatch'.split('')
}),
response: JSON.stringify({
value: null
})
}, true);

return NightwatchClient.runTests(testsPath, {
selenium: {
host: 'localhost',
port: 4723,
start_process: false,
use_appium: true
},
desiredCapabilities: {
browserName: ''
},
output: false,
skip_testcases_on_fail: false,
silent: true,
persist_globals: true,
globals,
output_folder: false
}).then(_ => {
strictEqual(NightwatchClient.app !== undefined, true);
});
});
});

0 comments on commit 7e88978

Please sign in to comment.