# Cross Browser Testing using Playwright

- Canonical: https://33rdsquare.com/cross-browser-testing-using-playwright/
- Published: 2024-03-06
- Author: Brian Lucas
- Categories: [App & Browser Testing Automation](https://33rdsquare.com/category/browser/browser-testing/)

---

As web applications become more complex, comprehensive cross browser testing is critical for delivering high quality software. In this post, we will explore cross browser testing approaches using Playwright – a modern web testing framework.

## Introduction to Playwright

Playwright is a Node.js library that facilitates browser automation. Key capabilities:

- Supports Chromium, Firefox and WebKit.
- APIs for Java, Python, C# besides JavaScript.
- Advanced features like network mocking, geo-location etc.
- Auto-wait mechanism eliminating flaky tests.

Compared to Selenium, Playwright offers improved reliability and speed. It also provides better language support through native browser engines.

## Setting up Playwright for Cross Browser Testing

We will use Python for scripting tests. Steps are:

1. Install Python 3.7+
2. Create a virtual environment
3. Install Playwright ``` pip install playwright ```
4. Install browser binaries ``` playwright install ```
5. Write test script

Here is a sample script that adds an item to cart on [bstackdemo.com](https://bstackdemo.com/):

```
import playwright

browser = playwright.chromium.launch()
page = browser.new_page()

page.goto("https://bstackdemo.com/")

page.click("div[id=‘1‘] div[class=‘shelf-item__buy-btn‘]")
page.click(".buy-btn")

browser.close()
```

This script can be executed on Chromium using:

```
python script.py
```

## Executing Tests on Multiple Browsers

To run the script on Firefox or WebKit, we just need to change the browser type during launch:

```
browser = playwright.firefox.launch()

# OR

browser = playwright.webkit.launch()
```

That‘s it! Playwright installing browsers by default makes cross browser testing seamless.

We can also run tests in headless mode and configure other browser options like device emulation during launch.

## Cross Browser Testing Tools

While Playwright reduces effort for testing locally, exercising all browser variants manually is challenging.

**Some scenarios where 3rd party services offer value:**

- Testing on a wide range of desktop and mobile browsers.
- Running tests across operating systems.
- Parallel test execution across browsers.
- Access to real mobile devices.
- Video recordings for debugging.
- Detailed reporting and analytics.

Next, we will see how BrowserStack addresses these through its online Selenium grid of 2000+ real browsers.

## Configuring BrowserStack

BrowserStack provides instant access to a hosted Selenium grid for cross browser testing JavaScript based frameworks like Playwright.

To connect Playwright:

```
import playwright
from browserstack.local import Local

# BrowserStack Credentials
USER = "username"
KEY = "accesskey"

desired_caps = {
   ‘os‘ : ‘OS X‘,
   ‘os_version‘ : ‘Catalina‘,
   ‘browser‘: ‘Chrome‘,
   ‘browser_version‘ : ‘latest‘,
   ‘name‘: ‘BStack-[Python] Sample Test‘, # test name
   ‘build‘: ‘BStack Build Number 1‘ # CI/CD job or build name
}

# Creates BrowserStack session
cdp_url = "wss://cdp.browserstack.com/playwright?caps=" + urllib.parse.quote(json.dumps(desired_caps))
browser = playwright.chromium.connect(cdp_url)

page = browser.new_page()

page.goto("https://bstackdemo.com")
# Rest of script

browser.close()
```

Capabilities like OS, browser versions and devices can be configured to access 2000+ browser variants.

**Benefits of BrowserStack:**

- No maintenance overhead
- Dynamic allocation of testing infrastructure
- Parallel testing boosted execution speed by 10x
- Comprehensive browser coverage
- Debugging through video recordings and network logs

## Best Practices for Cross Browser Testing

Here are some tips for effectively setting up Playwright based cross browser testing:

**1. Structure tests using Page Object Model**

Helps isolate test logic and locators for easier maintenance.

**2. Implement retry logic and waits**

Handles failures caused by timing issues or network blips.

**3. Follow unique locators best practices**

Such as using accessibility roles, test IDs to prevent brittleness.

**4. Enable CI/CD integration**

Runs smoke tests on every commit providing rapid feedback.

**5. Compare local vs cloud testing execution**

Identify optimal distribution between local and cloud for efficiency.

**6. Analyze BrowserStack analytics reports**

Find problematic browser and test environments.

**7. Validate on real mobile devices**

Catch rendering and touch issues early.

## Wrapping Up

Playwright provides a modern foundation for writing reliable cross browser tests. Integration with BrowserStack further enables test automation at scale across thousands of desktop and mobile browsers.

This combination offers the speed and flexibility needed for today‘s rapid release cycles by facilitating testing throughout the CI/CD pipelines.

---

Source: [Cross Browser Testing using Playwright](https://33rdsquare.com/cross-browser-testing-using-playwright/)
