Skip to content

Commit 2c84347

Browse files
committed
Updated as per comments
1 parent ba0cdae commit 2c84347

File tree

7 files changed

+156
-15
lines changed

7 files changed

+156
-15
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
var defaults = require("./wdio.conf.js");
2+
var browserstack = require('browserstack-local');
3+
var _ = require("lodash");
4+
5+
var overrides = {
6+
user: process.env.BROWSERSTACK_USERNAME || 'BROWSERSTACK_USERNAME',
7+
key: process.env.BROWSERSTACK_ACCESS_KEY || 'BROWSERSTACK_ACCESS_KEY',
8+
specs: [
9+
'./test/specs/local/orders-local.spec.js'
10+
],
11+
capabilities: [{
12+
maxInstances: 1,
13+
'browserstack.debug': true,
14+
'browserstack.video': true,
15+
'browserstack.local': true,
16+
os: "OS X",
17+
os_version: "Catalina",
18+
browserName: 'Chrome',
19+
browser_version: "latest",
20+
acceptInsecureCerts: true,
21+
name: 'local_test',
22+
build: 'webdriverio-browserstack'
23+
}],
24+
onPrepare: function (config, capabilities) {
25+
console.log("Connecting local");
26+
return new Promise(function (resolve, reject) {
27+
exports.bs_local = new browserstack.Local();
28+
exports.bs_local.start({ 'key': exports.config.key }, function (error) {
29+
if (error) return reject(error);
30+
31+
console.log('Connected. Now testing...');
32+
resolve();
33+
});
34+
});
35+
},
36+
onComplete: function (capabilties, specs) {
37+
return new Promise(function(resolve, reject){
38+
exports.bs_local.stop(function() {
39+
console.log("Binary stopped");
40+
resolve();
41+
});
42+
});
43+
},
44+
afterTest: function (test, context, { error, result, duration, passed, retries }) {
45+
if(passed) {
46+
browser.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "Assertions passed"}}');
47+
} else {
48+
browser.takeScreenshot();
49+
browser.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "At least 1 assertion failed"}}');
50+
}
51+
}
52+
}
53+
54+
55+
exports.config = _.defaultsDeep(overrides, defaults.config);

conf/wdio-browserstack-parallel.conf.js

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,49 @@ var overrides = {
88
specs: [
99
'./test/specs/plain/*.js'
1010
],
11-
capabilities: [{
12-
maxInstances: 5,
11+
maxInstances: 5,
12+
commonCapabilities: {
1313
'browserstack.debug': true,
1414
'browserstack.video': true,
15+
acceptInsecureCerts: true
16+
},
17+
capabilities: [{
1518
os: "OS X",
1619
os_version: "Catalina",
1720
browserName: 'Chrome',
1821
browser_version: "latest",
19-
acceptInsecureCerts: true,
20-
name: 'BStack-Test',
21-
build: 'BStack Build webdriverio single'
22+
name: 'parallel_test',
23+
build: 'webdriverio-browserstack',
24+
},{
25+
device: "Samsung Galaxy S20",
26+
os_version: "10.0",
27+
real_mobile: "true",
28+
browserName: 'Android',
29+
name: 'parallel_test',
30+
build: 'webdriverio-browserstack',
31+
},{
32+
os: "Windows",
33+
os_version: "10",
34+
browserName: 'Chrome',
35+
browser_version: "latest",
36+
name: 'parallel_test',
37+
build: 'webdriverio-browserstack',
38+
},{
39+
device: "iPhone 12",
40+
os_version: "14",
41+
real_mobile: "true",
42+
browserName: 'iPhone',
43+
name: 'parallel_test',
44+
build: 'webdriverio-browserstack',
2245
}],
23-
services: [
24-
['browserstack', {
25-
browserstackLocal: false
26-
}]
27-
],
46+
afterTest: function (test, context, { error, result, duration, passed, retries }) {
47+
if(passed) {
48+
browser.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "Assertions passed"}}');
49+
} else {
50+
browser.takeScreenshot();
51+
browser.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "At least 1 assertion failed"}}');
52+
}
53+
}
2854
};
2955

3056
exports.config = _.defaultsDeep(overrides, defaults.config);

conf/wdio-browserstack.conf.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,14 @@ var overrides = {
2020
name: 'BStack-Test',
2121
build: 'BStack Build webdriverio single'
2222
}],
23-
services: [
24-
['browserstack', {
25-
browserstackLocal: false
26-
}]
27-
],
23+
afterTest: function (test, context, { error, result, duration, passed, retries }) {
24+
if(passed) {
25+
browser.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"passed","reason": "Assertions passed"}}');
26+
} else {
27+
browser.takeScreenshot();
28+
browser.executeScript('browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed","reason": "At least 1 assertion failed"}}');
29+
}
30+
}
2831
};
2932

3033
exports.config = _.defaultsDeep(overrides, defaults.config);

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"docker-parallel": "npx wdio conf/wdio-docker-parallel.conf.js",
1313
"browserstack": "npx wdio conf/wdio-browserstack.conf.js",
1414
"browserstack-parallel": "npx wdio conf/wdio-browserstack-parallel.conf.js",
15+
"browserstack-local": "npx wdio conf/wdio-browserstack-local.conf.js",
1516
"generate-report": "./node_modules/allure-commandline/bin/allure generate allure-results --clean && ./node_modules/allure-commandline/bin/allure open"
1617
},
1718
"keywords": [],

test/res/user.csv

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
username,password
2+
fav_user,testingisfun99
3+
locked_user,testingisfun99
4+
image_not_loading_user,testingisfun99
5+
existing_orders_user,testingisfun99
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
describe('Order a product', () => {
2+
3+
beforeEach('Open StackDemo', () => {
4+
browser.url('http://localhost:3000/');
5+
})
6+
7+
afterEach('clear sessionstorage', () => {
8+
browser.execute(() => sessionStorage.clear())
9+
})
10+
11+
it('Login and order a product', () => {
12+
$('#signin').click();
13+
$('#username input').setValue('fav_user\n');
14+
$('#password input').setValue('testingisfun99\n');
15+
$('#login-btn').click();
16+
expect($('.username')).toHaveText('fav_user');
17+
18+
$("//p[text() = 'iPhone XS']/../div[@class = 'shelf-item__buy-btn']").click();
19+
$(".float-cart__close-btn").click();
20+
21+
$("//p[text() = 'Galaxy S20']/../div[@class = 'shelf-item__buy-btn']").click();
22+
$(".buy-btn").waitForClickable({ timeout: 5000 });
23+
$(".buy-btn").click();
24+
25+
$("#firstNameInput").setValue("firstname");
26+
$("#lastNameInput").setValue("lastname");
27+
$("#addressLine1Input").setValue("address");
28+
$("#provinceInput").setValue("state");
29+
$("#postCodeInput").setValue("12345");
30+
$("#checkout-shipping-continue").click();
31+
32+
$("#confirmation-message").waitForDisplayed({ timeout: 5000 });
33+
expect($('#confirmation-message')).toHaveText('Your Order has been successfully placed.');
34+
$("div.continueButtonContainer button").click();
35+
36+
$('#orders').click();
37+
$(".order").waitForDisplayed({ timeout: 5000 });
38+
expect($$('.order')).toHaveLength(1);
39+
})
40+
})

test/specs/plain/login.spec.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
const _ = require('lodash');
2+
const expectChai = require('chai').expect;
3+
14
describe('StackDemo login', () => {
25

36
beforeEach('Open StackDemo', () => {
@@ -30,6 +33,14 @@ describe('StackDemo login', () => {
3033
$('#password input').setValue('testingisfun99\n');
3134
$('#login-btn').click();
3235
expect($('.username')).toHaveText('image_not_loading_user');
36+
37+
all_images = $$("div.shelf-item__thumb img").map(function(element){
38+
return element.getAttribute("src")
39+
});
40+
41+
expectChai(_.every(all_images, function (value) {
42+
return (_.isEqual(value,'') )
43+
})).to.equal(true, "All images are not broken");
3344
})
3445

3546
it('invalid password should see error message', () => {

0 commit comments

Comments
 (0)