pytestplaywright-python

pytest get playwright executable_path and version


How can I get the playwright browser objects executable_path and version in pytest where I only have a Page object?

I can get it from the garbage collector referrers list but it is ugly. (I need it for my test reports)

#!/usr/bin/env python3

""" browser version and executable path """
import gc, os, re
from playwright.sync_api import Page

class TestClass:

    def test00_pageversion(self, page: Page):
        """ browser version and executable path """
        b = gc.get_referrers(page)
        mybrowser = None
        for i in b:
            if re.search(r'BrowserType', str(i)):
                #log.info(f" found:{i}")
                mybrowser = str(i)
                break
        if mybrowser:
            browser_executable_path = re.search(r'executable_path=([^>]+)>', mybrowser).group(1)
            browser_version = re.search(r'version=([\d\.]+)>', mybrowser).group(1)
            browser_name = re.search(r'BrowserType name=([^\s]+)', mybrowser).group(1)
            print(f"name={browser_name}, version={browser_version} - executable_path={browser_executable_path}")
pytest -s --log-level=INFO .\tests\test_00_browser.py -k test00 --browser=firefox
:
name=firefox, version=134.0 - executable_path=C:\Users\mobj\AppData\Local\ms-playwright\firefox-1471\firefox\firefox.exe

pytest -s --log-level=INFO .\tests\test_00_browser.py -k test00 --browser-channel=chrome
:
name=chromium, version=134.0.6998.89 - executable_path=C:\Users\mobj\AppData\Local\ms-playwright\chromium-1155\chrome-win\chrome.exe

 

Solution

  • You can access the Browser object from the page's context:

    from playwright.sync_api import Page
    
    def test00_pageversion(page: Page) -> None:
        browser = page.context.browser
        version = browser.version
        name = browser.browser_type.name
        executable_path = browser.browser_type.executable_path