GSoC 2026: Switch to Playwright tests

Hi Everyone.

My name is Ndansi Seraphin Sigala, and I’m from Cameroon. Happy to contribute.

I’m currently working on my GSoC 2026 proposal focused on exploring switching Django’s integration testing from Selenium to Playwright. I’ve set up Django locally and started contributing. Here is my first pull request related to the testing framework:
https://github.com/sigala000/django/tree/seraphin/fix-fakeserver-init

I’m still refining my proposal, and once it’s ready, I’ll share it here for feedback.

In the meantime, I’d appreciate any guidance on good first issues, especially around Django’s testing framework and infrastructure.

Thank you!

  1. PROPOSAL
    2.1) PlayWrightTesCase

The first step is to integrate playwright into Django’s existing test infrastructure, which means creating new PlayWrightTestCase base class that contributors can use with Liveservertestcase and staticLiveServerTestcase

Here is my proposed API

From Django.test import staticLiveServerTestcase

Class MyBrowserTest(Playwrighttestcase ):
Def test_login_page(self):
Self.page.goto(self.live_server + “/login/”)
Self.assertIn(“Login”, slef.page.title());

Design decisions
• PlayWrightTestCase will enhance Liveservertestcase so it has access to Django server
• Selenium-based test will remain untouched
• All three major browsers like chrome, Firefox and web kit

2.2 Migrating Existing Selenium Tests

Once the integration is done, we migrate the Django existing browser-based test from selenium to playwright

The migration strategy

  1. Run all versions in parallel to verify if it’s okay before removing the selenium
  2. Migrate complex tests later
  3. Migrate simple test first
  4. Categorize all selenium test

2.3 CI/CD integration

Django uses a continues integration pipeline to run test on every contribution. It involves.

• Making sure playwright runs on all platforms
• Documenting CI setup for future contributors
• Ensure test run in CI
2.4 Non-Goals
To be able to do this project in 175 hours, the following are out of scope:

• Full removal of selenium from the codebase Selenium will remain available for backwards compatibility
• Migrating all selenium test
• Changes to Django’s testing API beyond the new PlayWrightTestCase