diff --git a/.github/workflows/screenshots.yml b/.github/workflows/screenshots.yml index f9f372102d..7b9db7d064 100644 --- a/.github/workflows/screenshots.yml +++ b/.github/workflows/screenshots.yml @@ -47,8 +47,14 @@ jobs: - name: Optimize screenshots run: oxipng --interlace=0 --opt=4 --strip=safe tests/screenshots/*.png + - name: Organize screenshots + run: | + mkdir --parents "/tmp/screenshots/${{ github.event.pull_request.head.sha }}" + mv tests/screenshots/* "/tmp/screenshots/${{ github.event.pull_request.head.sha }}/" + - name: Upload screenshots uses: actions/upload-artifact@v4 with: name: screenshots-${{ github.event.pull_request.head.sha }} - path: tests/screenshots/ + path: /tmp/screenshots/ + if-no-files-found: error diff --git a/django/test/selenium.py b/django/test/selenium.py index eecfd87bf1..2840afb9ec 100644 --- a/django/test/selenium.py +++ b/django/test/selenium.py @@ -142,6 +142,8 @@ class SeleniumTestCase(LiveServerTestCase, metaclass=SeleniumTestCaseBase): test.__name__ = f"{name}_{screenshot_case}" test.__qualname__ = f"{test.__qualname__}_{screenshot_case}" + test._screenshot_name = name + test._screenshot_case = screenshot_case setattr(cls, test.__name__, test) @classproperty @@ -214,7 +216,9 @@ class SeleniumTestCase(LiveServerTestCase, metaclass=SeleniumTestCaseBase): def take_screenshot(self, name): if not self.screenshots: return - path = Path.cwd() / "screenshots" / f"{self._testMethodName}-{name}.png" + test = getattr(self, self._testMethodName) + filename = f"{test._screenshot_name}--{name}--{test._screenshot_case}.png" + path = Path.cwd() / "screenshots" / filename path.parent.mkdir(exist_ok=True, parents=True) self.selenium.save_screenshot(path)