Skip to content

Commit d628572

Browse files
Pratik Thakurfrancisf
authored andcommitted
build complete
1 parent 37853f5 commit d628572

File tree

9 files changed

+893
-0
lines changed

9 files changed

+893
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
node_modules

browserstack.config.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
const base = require('@playwright/test');
2+
const cp = require('child_process');
3+
const clientPlaywrightVersion = cp
4+
.execSync('npx playwright --version')
5+
.toString()
6+
.trim()
7+
.split(' ')[1];
8+
const BrowserStackLocal = require('browserstack-local');
9+
const util = require('util');
10+
11+
// BrowserStack Specific Capabilities.
12+
// Set 'browserstack.local:true For Local testing
13+
const caps = {
14+
browser: 'chrome',
15+
os: 'osx',
16+
os_version: 'catalina',
17+
name: 'My first playwright test',
18+
build: 'playwright-build-1',
19+
'browserstack.username': process.env.BROWSERSTACK_USERNAME || 'username',
20+
'browserstack.accessKey': process.env.BROWSERSTACK_ACCESS_KEY || 'accesskey',
21+
'browserstack.local': process.env.BROWSERSTACK_LOCAL || false,
22+
'client.playwrightVersion': clientPlaywrightVersion,
23+
};
24+
25+
exports.bsLocal = new BrowserStackLocal.Local();
26+
27+
// replace YOUR_ACCESS_KEY with your key. You can also set an environment variable - "BROWSERSTACK_ACCESS_KEY".
28+
exports.BS_LOCAL_ARGS = {
29+
key: process.env.BROWSERSTACK_ACCESS_KEY || 'accesskey',
30+
};
31+
32+
// Patching the capabilities dynamically according to the project name.
33+
const patchCaps = (name, title) => {
34+
let combination = name.split(/@browserstack/)[0];
35+
let [browerCaps, osCaps] = combination.split(/:/);
36+
let [browser, browser_version] = browerCaps.split(/@/);
37+
let osCapsSplit = osCaps.split(/ /);
38+
let os = osCapsSplit.shift();
39+
let os_version = osCapsSplit.join(' ');
40+
caps.browser = browser ? browser : 'chrome';
41+
caps.browser_version = browser_version ? browser_version : 'latest';
42+
caps.os = os ? os : 'osx';
43+
caps.os_version = os_version ? os_version : 'catalina';
44+
caps.name = title;
45+
};
46+
47+
exports.getCdpEndpoint = (name, title) => {
48+
patchCaps(name, title)
49+
const cdpUrl = `wss://cdp.browserstack.com/playwright?caps=${encodeURIComponent(JSON.stringify(caps))}`
50+
console.log(`--> ${cdpUrl}`)
51+
return cdpUrl;
52+
}

global-setup.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// global-setup.js
2+
const { bsLocal, BS_LOCAL_ARGS } = require('./browserstack.config');
3+
const { promisify } = require('util');
4+
const sleep = promisify(setTimeout);
5+
const redColour = '\x1b[31m';
6+
const whiteColour = '\x1b[0m';
7+
module.exports = async () => {
8+
console.log('Starting BrowserStackLocal ...');
9+
// Starts the Local instance with the required arguments
10+
let localResponseReceived = false;
11+
bsLocal.start(BS_LOCAL_ARGS, (err) => {
12+
if (err) {
13+
console.error(
14+
`${redColour}Error starting BrowserStackLocal${whiteColour}`
15+
);
16+
} else {
17+
console.log('BrowserStackLocal Started');
18+
}
19+
localResponseReceived = true;
20+
});
21+
while (!localResponseReceived) {
22+
await sleep(1000);
23+
}
24+
};

global-teardown.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// global-teardown.js
2+
const { bsLocal } = require('./browserstack.config');
3+
const { promisify } = require('util');
4+
const sleep = promisify(setTimeout);
5+
module.exports = async () => {
6+
// Stop the Local instance after your test run is completed, i.e after driver.quit
7+
let localStopped = false;
8+
9+
if (bsLocal && bsLocal.isRunning()) {
10+
bsLocal.stop(() => {
11+
localStopped = true;
12+
console.log('Stopped BrowserStackLocal');
13+
});
14+
while (!localStopped) {
15+
await sleep(1000);
16+
}
17+
}
18+
}

0 commit comments

Comments
 (0)