Skip to main content

Test private websites using Playwright

A guide to running your Playwright tests on your privately hosted websites.

BrowserStack enables you to run automated tests on your internal development environments, on localhost, and from behind a corporate firewall. This feature is called Local Testing.

Local Testing establishes a secure connection between your machine and the BrowserStack cloud. Once you set up Local Testing, all URLs work out of the box, including HTTPS URLs and those behind a proxy or firewall. Learn more about how Local Testing works.

Run your first Playwright local test

Local Testing can be enabled through two methods and both of them have been detailed as follows:

Note: Testing on BrowserStack requires username and access key that can be found in account settings.
If you have not created an account yet, you can sign up for a Free Trial or purchase a plan.

Local testing connection can be set up using the BrowserStack Local package. Use the following steps to run our sample test:

  • Step 1: Clone our sample repository and install dependencies

    Check out the GitHub repository to access all the sample tests used in the Getting Started section. The first step is to download this repository on your system and install the dependencies as follows:

    # The following command will clone the repository on your system
    
    git clone https://github.com/browserstack/playwright-browserstack.git
    cd playwright-browserstack/playwright-python/
    

    The important dependency for Local Testing is browserstack-local and you need to install it in your project using the following command:

    `pip install browserstack-local`
    
  • Step 2: Configuring BrowserStack credentials

    All our sample scripts need your BrowserStack credentials to run. Please set the environment variables BROWSERSTACK_USERNAME and BROWSERSTACK_ACCESS_KEY with your credentials using the following command:

    export BROWSERSTACK_USERNAME="YOUR_USERNAME"
    export BROWSERSTACK_ACCESS_KEY="YOUR_ACCESS_KEY"
    

    Alternatively, your can set your credentials in the browserstack.username and browserstack.accessKey capabilities in the local-using-bindings-playwright-test.py file (and all other files) in the sample repository.

  • Step 3: Run your first Local test

    After you have configured the credentials and installed the dependencies, you can run your local test on BrowserStack using the following command:

    python local-using-bindings-playwright-test.py
    

Local testing connection can be set up using the BrowserStack Local package. Use the following steps below to run our sample test:

  • Step 1: Clone our sample repository

    Check out the GitHub repository to access all the sample tests used in the Getting Started section. The first step is to download this repository on your system as follows:

    # The following command will clone the repository on your system
    
    git clone https://github.com/browserstack/playwright-browserstack.git
    cd playwright-browserstack/playwright-python/
    
  • Step 2: Configuring BrowserStack credentials

    All our sample scripts need your BrowserStack credentials to run. Set the environment variables BROWSERSTACK_USERNAME and BROWSERSTACK_ACCESS_KEY with your credentials as follows:

    export BROWSERSTACK_USERNAME="YOUR_USERNAME"
    export BROWSERSTACK_ACCESS_KEY="YOUR_ACCESS_KEY"
    

    Alternatively, you can set your credentials in the browserstack.username and browserstack.accessKey capabilities in the local-playwright-test.py file (and all other spec files) in the sample repository.

  • Step 3: Download the BrowserStack Local binary from the following links (depending on your local machine’s environment):
  • Step 4: Start the binary

    Once you have downloaded and unzipped the file, you can initiate the binary by running the following command:

    ./BrowserStackLocal --key YOUR_ACCESS_KEY
    

    You can invoke the BrowserStackLocal binary using a lot of configurable options that may suit your use case.

  • Step 5: Verify Local connection established

    Once you see the “[SUCCESS] You can now access your local server(s) in our remote browser” message in your terminal, your local testing connection is considered established.

  • Step 6: Run your sample Local test

    python local-playwright-test.py
    

After your test runs successfully, check out the BrowserStack Automate dashboard to view the results.

Details of your first test

This section explains the details of the test that you just ran, and the changes that you need to make in your existing Playwright scripts to make them run on BrowserStack using both the approaches.

When you run your test command, the test script:

  • Starts the latest version of the Chrome browser.
  • Opens the Google search home page.
  • Performs a search for the term “BrowserStack”.
  • Marks the test as passed or failed based on the assertions.

Check out the GitHub repository for more information.

local-using-bindings-playwright-test.py
import json
import urllib
import subprocess
from playwright.sync_api import sync_playwright
from browserstack.local import Local

desired_cap = {
  '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-python-3',
  'browserstack.local': 'true',
  'browserstack.username': 'BROWSERSTACK_USERNAME',
  'browserstack.accessKey': 'BROWSERSTACK_ACCESS_KEY'
}

def run_local_session(playwright):
    # Creates an instance of Local
    bs_local = Local()

    # You can also set an environment variable - "BROWSERSTACK_ACCESS_KEY".
    bs_local_args = { "key": "BROWSERSTACK_ACCESS_KEY" }

    # Starts the Local instance with the required arguments
    bs_local.start(**bs_local_args)

    # Check if BrowserStack local instance is running
    print("BrowserStackLocal running: " + str(bs_local.isRunning()))

    clientPlaywrightVersion = str(subprocess.getoutput('playwright --version')).strip().split(" ")[1]
    desired_cap['client.playwrightVersion'] = clientPlaywrightVersion

    try:
      cdpUrl = 'wss://cdp.browserstack.com/playwright?caps=' + urllib.parse.quote(json.dumps(desired_cap))
      browser = playwright.chromium.connect(cdpUrl)
      page = browser.new_page()
      try:
        page.goto("http://localhost:45691")
        page.main_frame.wait_for_function("""
          document
            .querySelector("body")
            .innerText
            .includes("This is an internal server for BrowserStack Local")
        """)
        # 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
        mark_test_status("passed", "Local is up and running", page)
      except Exception:
        mark_test_status("failed", "BrowserStack Local binary is not running", page)
      browser.close()
    except Exception as ex:
      print("Exception while creating page context: ", str(ex))
    finally:
      # Stop the Local instance
      bs_local.stop()
      print("BrowserStackLocal stopped")

def mark_test_status(status, reason, page):
  page.evaluate("_ => {}", "browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\""+ status + "\", \"reason\": \"" + reason + "\"}}");

with sync_playwright() as playwright:
  run_local_session(playwright)

When you run your test command, the test script:

  • Starts the latest version of the Chrome browser.
  • Opens the Google search home page.
  • Performs a search for the term “BrowserStack”.
  • Marks the test as passed or failed based on the assertions.

Check out the GitHub repository for more information.

local-playwright-test.py
import json
import urllib
import subprocess
from playwright.sync_api import sync_playwright

desired_cap = {
  '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-python-3',
  'browserstack.local': 'true',
  'browserstack.username': 'BROWSERSTACK_USERNAME',
  'browserstack.accessKey': 'BROWSERSTACK_ACCESS_KEY'
}

def run_local_session(playwright):
  clientPlaywrightVersion = str(subprocess.getoutput('playwright --version')).strip().split(" ")[1]
  desired_cap['client.playwrightVersion'] = clientPlaywrightVersion

  cdpUrl = 'wss://cdp.browserstack.com/playwright?caps=' + urllib.parse.quote(json.dumps(desired_cap))
  browser = playwright.chromium.connect(cdpUrl)
  page = browser.new_page()
  try:
    page.goto("http://localhost:45454")
    title = page.title()

    if title == "BrowserStack Local":
      # 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
      mark_test_status("passed", "Title matched", page)
    else:
      mark_test_status("failed", "Title did not match", page)

  except Exception as err:
    mark_test_status("failed", str(err), page)
  
  browser.close()

def mark_test_status(status, reason, page):
  page.evaluate("_ => {}", "browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\""+ status + "\", \"reason\": \"" + reason + "\"}}");

with sync_playwright() as playwright:
  run_local_session(playwright)
Note: Playwright tests run on BrowserStack using a client-server architecture. So, test assertions run on the client side and hence BrowserStack won’t know whether your tests have passed or failed. Learn more how to mark tests as passed or failed on BrowserStack.

You can learn more about how to make your existing Playwright scripts run on BrowserStack and you can also learn about how to run cross-browser Playwright tests in parallel.

Next Steps

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

Is this page helping you?

Yes
No

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!

Talk to an Expert
Talk to an Expert