Skip to content

Commit 566af95

Browse files
author
Zdravko
authored
Merge pull request #124 from NativeScript/zbranzov/ui-tests
Add ui tests
2 parents 9d9aa6d + 4aef36b commit 566af95

File tree

6 files changed

+199
-9
lines changed

6 files changed

+199
-9
lines changed

appium.capabilities.json

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
{
2+
"android23.local": {
3+
"platformName": "Android",
4+
"platformVersion": "6.0",
5+
"deviceName": "Emulator_Api23_Default",
6+
"avd": "Emulator_Api23_Default",
7+
"noReset": true
8+
},
9+
"android23": {
10+
"platformName": "Android",
11+
"platformVersion": "6.0",
12+
"deviceName": "Android Emulator",
13+
"appium-version": "1.7.1",
14+
"noReset": true
15+
},
16+
"sim11iPhone6": {
17+
"platformName": "iOS",
18+
"platformVersion": "11.0",
19+
"deviceName": "iPhone 6",
20+
"appium-version": "1.7.1",
21+
"app": ""
22+
},
23+
"sim103iPhone6": {
24+
"browserName": "",
25+
"appium-version": "1.7.1",
26+
"platformName": "iOS",
27+
"platformVersion": "10.3",
28+
"deviceName": "iPhone 6",
29+
"app": ""
30+
},
31+
"sim10iPhone6": {
32+
"platformName": "iOS",
33+
"platformVersion": "10.0",
34+
"deviceName": "iPhone 6",
35+
"appium-version": "1.7.1",
36+
"app": ""
37+
}
38+
}

demo/e2e/config/mocha.opts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
--timeout 800000
2+
--recursive e2e

demo/e2e/setup.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { startServer, stopServer } from "nativescript-dev-appium";
2+
3+
before("start server", async () => {
4+
await startServer();
5+
});
6+
7+
after("stop server", async () => {
8+
await stopServer();
9+
});

demo/e2e/test.e2e.ts

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
import { AppiumDriver, createDriver, SearchOptions } from "nativescript-dev-appium";
2+
import { isSauceLab, runType, capabilitiesName } from "nativescript-dev-appium/lib/parser";
3+
import { expect } from "chai";
4+
5+
const isSauceRun = isSauceLab;
6+
const isAndroid: string = runType.includes("android");
7+
8+
describe("Imagepicker", async function () {
9+
const imagesFolderName = "Images";
10+
const imagesFolderNameIos = "Camera Roll";
11+
const doneButtonText = "Done";
12+
let driver: AppiumDriver;
13+
14+
before(async () => {
15+
driver = await createDriver();
16+
driver.defaultWaitTime = 10000;
17+
});
18+
19+
after(async () => {
20+
if (isSauceRun) {
21+
driver.sessionId().then(function (sessionId) {
22+
console.log("Report: https://saucelabs.com/beta/tests/" + sessionId);
23+
});
24+
}
25+
await driver.quit();
26+
console.log("Driver quits!");
27+
});
28+
29+
it("should pick one image", async function () {
30+
const pickSingleButtonText = "Pick Single";
31+
let confirmButtonText = isAndroid ? "Allow" : "OK";
32+
let uploadPicVerification;
33+
if (isAndroid) {
34+
uploadPicVerification = isSauceRun ? "sauce_logo.png" : "pic1.jpeg";
35+
} else {
36+
uploadPicVerification = "IMG_0001.JPG";
37+
}
38+
39+
const pickSingleButton = await driver.findElementByText(pickSingleButtonText, SearchOptions.contains);
40+
await pickSingleButton.click();
41+
const confirmButton = await driver.findElementByText(confirmButtonText);
42+
await confirmButton.click();
43+
44+
if (isAndroid) {
45+
if (isSauceRun) {
46+
const imagesFolder = await driver.findElementByText(imagesFolderName);
47+
await imagesFolder.click();
48+
const downloadFolder = await driver.findElementByClassName(driver.locators.image);
49+
await downloadFolder.click();
50+
}
51+
} else {
52+
const cameraRollFolder = await driver.findElementByText(imagesFolderNameIos);
53+
await cameraRollFolder.click();
54+
}
55+
56+
const pickedImage = await driver.findElementByClassName(driver.locators.image);
57+
await pickedImage.click();
58+
59+
if (!isAndroid) {
60+
const doneButton = await driver.findElementByText(doneButtonText);
61+
await doneButton.click();
62+
}
63+
64+
const result = await driver.findElementByText(uploadPicVerification, SearchOptions.contains);
65+
expect(result).to.exist;
66+
});
67+
68+
it("should pick multiple images", async function () {
69+
let openImagesButtonText = isAndroid ? "Sort by" : doneButtonText;
70+
let uploadPicVerification;
71+
if (isAndroid) {
72+
uploadPicVerification = isSauceRun ? "sauce_logo_red.png" : "pic2.jpeg";
73+
} else {
74+
uploadPicVerification = "IMG_0001.JPG";
75+
}
76+
let uploadPicVerification2;
77+
if (isAndroid) {
78+
uploadPicVerification2 = isSauceRun ? "saucelabs_sauce.png" : "pic3.jpeg";
79+
} else {
80+
uploadPicVerification2 = "IMG_0002.JPG";
81+
}
82+
const pickMultipleButtonText = "Pick Multiple";
83+
const pickMultipleButton = await driver.findElementByText(pickMultipleButtonText, SearchOptions.contains);
84+
await pickMultipleButton.click();
85+
86+
if (!isAndroid) {
87+
const cameraRollFolder = await driver.findElementByText(imagesFolderNameIos);
88+
await cameraRollFolder.click();
89+
}
90+
91+
const allImages = await driver.findElementsByClassName(driver.locators.image);
92+
93+
if (isAndroid) {
94+
await allImages[8].hold(); //third image
95+
await allImages[4].click(); //second image
96+
} else {
97+
await allImages[0].click(); //first image
98+
await allImages[1].click(); //second image
99+
}
100+
101+
const openImagesButton = await driver.findElementByText(openImagesButtonText, SearchOptions.contains);
102+
await openImagesButton.click();
103+
const img = await driver.findElementByText(uploadPicVerification, SearchOptions.contains);
104+
expect(img).to.exist;
105+
const img1 = await driver.findElementByText(uploadPicVerification2, SearchOptions.contains);
106+
expect(img1).to.exist;
107+
});
108+
});

demo/e2e/tsconfig.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"compilerOptions": {
3+
"module": "commonjs",
4+
"target": "es6",
5+
"experimentalDecorators": true,
6+
"emitDecoratorMetadata": true,
7+
"importHelpers": false,
8+
"sourceMap":true,
9+
"types": [
10+
"node",
11+
"mocha",
12+
"chai"
13+
],
14+
"lib": [
15+
"dom",
16+
"es2015.core",
17+
"es2015.iterable",
18+
"es2016.array.include",
19+
"es2015"
20+
]
21+
}
22+
}

demo/package.json

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,29 +15,38 @@
1515
"tns-core-modules": "^3.1.0"
1616
},
1717
"devDependencies": {
18+
"@types/chai": "^4.0.2",
19+
"@types/mocha": "^2.2.41",
20+
"@types/node": "^7.0.5",
21+
"awesome-typescript-loader": "~3.1.2",
1822
"babel-traverse": "6.24.1",
1923
"babel-types": "6.24.1",
2024
"babylon": "6.16.1",
25+
"chai": "~4.1.1",
26+
"chai-as-promised": "~7.1.1",
2127
"copy-webpack-plugin": "~4.0.1",
2228
"extract-text-webpack-plugin": "~2.1.0",
23-
"nativescript-css-loader": "~0.26.0",
24-
"nativescript-dev-webpack": "^0.7.3",
25-
"raw-loader": "~0.5.1",
26-
"resolve-url-loader": "~2.0.2",
27-
"webpack": "~3.2.0",
28-
"webpack-sources": "~0.2.3",
29-
"awesome-typescript-loader": "~3.1.2",
3029
"filewalker": "0.1.2",
3130
"jasmine-core": "^2.5.2",
3231
"karma": "^1.3.0",
3332
"karma-jasmine": "^1.0.2",
3433
"karma-nativescript-launcher": "^0.4.0",
3534
"lazy": "1.0.11",
35+
"mocha": "~3.5.0",
36+
"mocha-junit-reporter": "^1.13.0",
37+
"mocha-multi": "^0.11.0",
38+
"nativescript-css-loader": "~0.26.0",
39+
"nativescript-dev-appium": "next",
3640
"nativescript-dev-typescript": "libs",
37-
"typescript": "~2.3.0",
41+
"nativescript-dev-webpack": "^0.7.3",
42+
"raw-loader": "~0.5.1",
43+
"resolve-url-loader": "~2.0.2",
44+
"tns-platform-declarations": "^3.0.0",
3845
"tslint": "~5.4.3",
46+
"typescript": "~2.5.0",
47+
"webpack": "~3.2.0",
3948
"webpack-bundle-analyzer": "^2.8.2",
40-
"tns-platform-declarations": "^3.0.0"
49+
"webpack-sources": "~0.2.3"
4150
},
4251
"scripts": {
4352
"build.plugin": "cd ../src && npm run build",
@@ -47,6 +56,8 @@
4756
"ns-bundle": "ns-bundle",
4857
"publish-ios-bundle": "npm run ns-bundle --ios --publish-app",
4958
"generate-android-snapshot": "generate-android-snapshot --targetArchs arm,arm64,ia32 --install",
59+
"e2e": "tsc -p e2e && mocha --opts ./e2e/config/mocha.opts",
60+
"compile-tests": "tsc -p e2e --watch",
5061
"start-android-bundle": "npm run ns-bundle --android --run-app --uglify --snapshot",
5162
"start-ios-bundle": "npm run ns-bundle --ios --run-app --uglify",
5263
"build-android-bundle": "npm run ns-bundle --android --build-app --uglify --snapshot",

0 commit comments

Comments
 (0)