GSoC 2026 — Anurag Verma — Interested in Playwright Testing Migration

Hi everyone,

I’m Anurag — a Python developer from India, currently working as a Full Stack Developer at DataWars (a data science education platform). I’m interested in the “Switch to Playwright for Integration Testing” project for GSoC 2026.

I’ve been going through Django’s codebase over the past few days to understand the scope of this project. Here’s what I’ve done so far:

  • Set up the Django dev environment locally and ran the full test suite

- Submitted my first PR — [#20756]( Fixed #36940 -- Improved ASGI script prefix path_info handling. by anurag629 · Pull Request #20756 · django/django · GitHub ) (fix for [#36940]( #36940 (Improve ASGI script prefix path_info handling) – Django ), ASGI script prefix path_info handling)

- Studied `django/test/selenium.py` and `django/contrib/admin/tests.py` in detail — I now have a pretty clear picture of the `SeleniumTestCaseBase` metaclass, how it dynamically generates per-browser test classes, and the `AdminSeleniumTestCase` layer that adds wait helpers, CSP checking, and form interaction utilities

- Audited the full Selenium test surface: 15 test files, 20 test classes, ~768 test methods across admin views, widgets, inlines, i18n, forms, and middleware

- Installed Playwright locally and started mapping Selenium API calls to their Playwright equivalents

A few things I’ve been thinking about for the migration approach:

  1. The biggest challenge seems to be implicit waits — Selenium relies on them heavily, but Playwright doesn’t have them. The `AdminSeleniumTestCase` wait helpers (`wait_for`, `wait_until`, `wait_for_text`, etc.) would need to be rewritten using Playwright’s built-in auto-wait and `wait_for_selector`/`wait_for_function`.

2. Browser log collection (`get_browser_logs`) has no direct Playwright equivalent — it would need event listeners (`page.on(“console”, …)`) with a custom collector.

3. The metaclass for multi-browser support can mostly stay the same — just needs updated driver/options imports.

4. I’m thinking of a phased approach: start with a Playwright test base class alongside Selenium (not replacing it immediately), migrate module by module starting with the smaller test files, and deprecate Selenium at the end.

I noticed AxraMj has also posted about this project — happy to collaborate or work on different aspects if that makes sense.

Some questions for the mentors:

- Has a mentor been assigned for this project yet?

- Would the team prefer a compatibility layer (Playwright running alongside Selenium during transition) or a clean swap?

- Are there any concerns about Playwright’s browser installation in CI that I should think about early?

My background: 3+ years professional Python experience, previously led a data science team, contributed to open source (IVY framework — PyTorch/TensorFlow/JAX interop, Oppia Foundation). I’m comfortable with Django internals, frontend testing, and CI/CD.

GitHub: [anurag629]( anurag629 (Anurag Verma) · GitHub )

Thanks,

Anurag