Dmitrii Korolkov

github | email

Starting with Playwright automation and Python

Playwright is a modern automation framework for web testing, offering powerful cross-browser support. It allows developers to automate interactions with web applications efficiently.


1. Installing Playwright


# Install Playwright using pip
pip install playwright

# Install required browsers
playwright install
                        

2. Setting Up Playwright with Python


from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto("https://www.example.com")
    browser.close()
                        

3. Finding Elements


# Locate an element by text
element = page.locator("text=Login")

# Locate an element by CSS selector
element = page.locator("input[name='username']")

# Locate an element by XPath
element = page.locator("//input[@type='submit']")
                        

4. Interacting with Elements


# Enter text in an input field
page.fill("input[name='username']", "my_username")

# Click a button
page.click("button#submit")
                        

5. Handling Dropdowns


# Select an option from a dropdown
page.select_option("select#country", "US")
                        

6. Handling Alerts


# Accept an alert
page.on("dialog", lambda dialog: dialog.accept())
                        

7. Running a Simple Test


import unittest
from playwright.sync_api import sync_playwright

class TestGoogleSearch(unittest.TestCase):

    def setUp(self):
        self.playwright = sync_playwright().start()
        self.browser = self.playwright.chromium.launch()
        self.page = self.browser.new_page()

    def test_google_search(self):
        self.page.goto("https://www.google.com")
        self.page.fill("input[name='q']", "Playwright Testing")
        self.page.press("input[name='q']", "Enter")
        self.assertIn("Playwright", self.page.title())

    def tearDown(self):
        self.browser.close()
        self.playwright.stop()

if __name__ == "__main__":
    unittest.main()
                        

8. Headless Mode for Faster Tests


with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto("https://example.com")
    browser.close()
                        

9. Taking Screenshots


# Capture a screenshot
page.screenshot(path="screenshot.png")
                        

10. Closing the Browser Properly


# Close the browser session completely
browser.close()