GSoC 2026: Proposal regarding Switch to Playwright tests for integration testing

Hi everyone,

I’m putting together a GSoC 2026 proposal for migrating Django’s integration testing from Selenium to Playwright (175h).

I’ve been contributing to Django core over the last few months PR, mostly digging into the ORM, database fallbacks, and SQLite quirks. Spending so much time in the internals has gotten me pretty familiar with the test suite, and I’m really interested in helping modernize the E2E side.

Playwright’s auto-waiting and async capabilities should be a win for reducing test flakiness and speeding up CI. Before I finalize my proposal timeline, I wanted to get some early feedback on my rough implementation plan:

  1. Infrastructure & CI: Introduce Playwright alongside Selenium so both can run concurrently during the transition phase without breaking existing workflows.

  2. Compatibility Layer: Draft a base class to replace AdminSeleniumTestCase. The main challenge here will be mapping Selenium’s implicit waits to Playwright’s explicit state checks cleanly.

  3. Tests Porting: Port the tests module by module. I was thinking of starting with something isolated but high-impact.

A few scoping questions for the mentors:

  • Does this phased approach align with the core team’s vision for this migration?

  • Are there specific test modules you consider the highest priority to migrate first?

Looking forward to any feedback or pointers.

Thanks,
Vignesh A (VIZZARD-X)

Quick update on this: I’ve spent sometime digging into the technical hurdles of the Playwright migration, specifically the DJANGO_ALLOW_ASYNC_UNSAFE boundary and Axe accessibility integration.

I’ve put together a working Proof of Concept that solves these using modern addClassCleanup and a secured async/sync boundary. You can see the code and the discussion over on the GitHub issue here: [Use Playwright for integration testing · Issue #13 · django/new-features · GitHub]

Quick note: Today, I officially sent in my last proposal on the GSoC portal. I’ve taken the comments about the 175-hour scope into account and set the final date for the migration. I’m looking forward to hopefully working on this!