Run cross-browser Playwright tests in parallel
A guide to cross browser parallel testing with your Playwright tests across 100+ desktop browsers on BrowserStack.
Run our sample cross-browser test in parallel
Follow the steps below to run a sample Playwright test on BrowserStack infra across multiple os/browser combinations and all at parallel so as to speed up your build:
Step 1: Clone our sample repository and install dependencies (if not already done)
All our sample tests are available on this GitHub repository. The first step is to download this repository on your system and install the dependencies as shown below:
# The following command will clone the repository on your system
git clone https://github.com/browserstack/playwright-browserstack.git
cd playwright-browserstack
npm install
Step 2: Configure BrowserStack credentials (if not already done)
If you have not created an account yet, you can sign up for a Free Trial or purchase a plan.
All our sample scripts need your BrowserStack credentials to run. Please set the environment variables BROWSERSTACK_USERNAME
and BROWSERSTACK_ACCESS_KEY
with your credentials as shown below:
export BROWSERSTACK_USERNAME="YOUR_USERNAME"
export BROWSERSTACK_ACCESS_KEY="YOUR_ACCESS_KEY"
Alternatively, your can put your credentials in the browserstack.username
and browserstack.accessKey
capabilities in the parallel_test.js
file in the sample repository.
Step 3: Run the sample parallel cross-browser test
After you have configured the credentials and installed the npm dependencies, you can invoke your first Playwright test on BrowserStack using the following:
node parallel_test.js
After the test has run, you can access the test results on the BrowserStack Automate dashboard.
Details of the cross-browser parallel test
In this section, we will walk you through the details of the test that you just ran and also explain the changes that you need to make in your existing Playwright scripts to make them run on BrowserStack.
The sample script that has run, is shown below (see in GitHub):
const expect = require('chai').expect
const { chromium } = require('playwright');
const cp = require('child_process');
const clientPlaywrightVersion = cp.execSync('npx playwright --version').toString().trim().split(' ')[1];
const main = async (cap) => {
cap['client.playwrightVersion'] = clientPlaywrightVersion; // Playwright version being used on your local project needs to be passed in this capability for BrowserStack to be able to map request and responses correctly
cap['browserstack.username'] = process.env.BROWSERSTACK_USERNAME || 'YOUR_USERNAME';
cap['browserstack.accessKey'] = process.env.BROWSERSTACK_ACCESS_KEY || 'YOUR_ACCESS_KEY';
console.log("Starting test -->", cap['name']);
const browser = await chromium.connect({
wsEndpoint: `wss://cdp.browserstack.com/playwright?caps=${encodeURIComponent(JSON.stringify(cap))}`,
});
const page = await browser.newPage();
await page.goto('https://www.google.com/ncr');
const element = await page.$('[aria-label="Search"]');
await element.click();
await element.type('BrowserStack');
await element.press('Enter');
const title = await page.title('');
console.log(title);
try {
expect(title).to.equal("BrowserStack - Google Search", 'Expected page title is incorrect!');
// following line of code is responsible for marking the status of the test on BrowserStack as 'passed'. You can use this code in your after hook after each test
await page.evaluate(_ => {}, `browserstack_executor: ${JSON.stringify({action: 'setSessionStatus',arguments: {status: 'passed',reason: 'Title matched'}})}`);
} catch {
await page.evaluate(_ => {}, `browserstack_executor: ${JSON.stringify({action: 'setSessionStatus',arguments: {status: 'failed',reason: 'Title did not match'}})}`);
}
await browser.close();
};
// The following capabilities array contains the list of os/browser environments where you want to run your tests. You can choose to alter this list according to your needs. Read more on https://browserstack.com/docs/automate/playwright/browsers-and-os
const capabilities = [
{
'browser': 'chrome', // allowed browsers are `chrome`, `edge`, `playwright-chromium`, `playwright-firefox` and `playwright-webkit`
'browser_version': 'latest', // this capability is valid only for branded `chrome` and `edge` browsers and you can specify any browser version like `latest`, `latest-beta`, `latest-1` and so on.
'os': 'osx',
'os_version': 'catalina',
'name': 'Branded Google Chrome on Catalina',
'build': 'playwright-build-2'
},
{
'browser': 'edge', // allowed browsers are `chrome`, `edge`, `playwright-chromium`, `playwright-firefox` and `playwright-webkit`
'browser_version': 'latest', // this capability is valid only for branded `chrome` and `edge` browsers and you can specify any browser version like `latest`, `latest-beta`, `latest-1` and so on.
'os': 'osx',
'os_version': 'catalina',
'name': 'Branded Microsoft Edge on Catalina',
'build': 'playwright-build-2'
},
{
'browser': 'playwright-firefox', // allowed browsers are `chrome`, `edge`, `playwright-chromium`, `playwright-firefox` and `playwright-webkit`
'os': 'osx',
'os_version': 'catalina',
'name': 'Playwright firefox on Catalina',
'build': 'playwright-build-2'
},
{
'browser': 'playwright-webkit', // allowed browsers are `chrome`, `edge`, `playwright-chromium`, `playwright-firefox` and `playwright-webkit`
'os': 'osx',
'os_version': 'catalina',
'name': 'Playwright webkit on Catalina',
'build': 'playwright-build-2'
},
{
'browser': 'playwright-chromium', // allowed browsers are `chrome`, `edge`, `playwright-chromium`, `playwright-firefox` and `playwright-webkit`
'os': 'osx',
'os_version': 'Catalina',
'name': 'Chrome on Win10',
'build': 'playwright-build-2'
}]
// The following code loops through the capabilities array defined above and runs your code against each environment that you have specified
capabilities.forEach(async (cap) => {
await main(cap);
});
You can learn more about how to make your existing Playwright scripts run on BrowserStack and you can also learn about how to test against your privately hosted websites.
Next Steps
- Learn how to test localhost and staging websites
- Migrate your existing test suites to run on BrowserStack
- Select browser and OS versions to run your Playwright tests
- Run your CodeceptJS Playwright tests on BrowserStack
- Run your Jest Playwright tests on BrowserStack
We're sorry to hear that. Please share your feedback so we can do better
Contact our Support team for immediate help while we work on improving our docs.
We're continuously improving our docs. We'd love to know what you liked
- RESOURCES
We're sorry to hear that. Please share your feedback so we can do better
Contact our Support team for immediate help while we work on improving our docs.
We're continuously improving our docs. We'd love to know what you liked
Thank you for your valuable feedback!