Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 0 additions & 87 deletions .claude/skills/playwright-triage/SKILL.md

This file was deleted.

File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
# Hands the issue to the Playwright bot when a maintainer applies agent-triage, agent-implement or
# agent-task. Nothing else of the bot lives in this repo. Apply the label again to start another
# run.
# Hands the issue to the Playwright bot when a maintainer applies agent-triage or agent-implement.
# Nothing else of the bot lives in this repo. Apply the label again to start another run.
name: "Agent: triage"

on:
Expand All @@ -15,8 +14,7 @@ jobs:
if: >-
github.repository_owner == 'microsoft' && (
github.event.label.name == 'agent-triage' ||
github.event.label.name == 'agent-implement' ||
github.event.label.name == 'agent-task')
github.event.label.name == 'agent-implement')
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
Expand Down
4 changes: 3 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ dotnet build ./src # build the entire solution

`DriverVersion` in `src/Common/Version.props` is the `microsoft/playwright` commit that the driver, the generated API and the port come from. `.upstream/` (gitignored) is a clone of `microsoft/playwright` at that commit: `./build.sh --build-driver` clones it, checks out the commit and builds the driver from it. Run it again when `DriverVersion` changes, for example after a pull. Read upstream code in `.upstream/`; do not commit, branch or edit in it.

The .NET client talks to the Node.js driver that is built from that commit. When the same calls fail in a Node.js test upstream too, the cause is in the driver or a browser, and the fix lands in `microsoft/playwright`. When Node.js passes, the bug is in the port: compare the method in `src/Playwright/Core/` with the same method in the JavaScript client, `packages/playwright-core/src/client/`, and fix it here. Write and run upstream tests in a separate checkout of `microsoft/playwright` at `main`, `~/code/playwright`. Paths such as `~/code/playwright` in this file assume that you check the repos out in `~/code`.

## Running tests

Follow `.github/workflows/tests.yml` for the canonical sequence.
Expand Down Expand Up @@ -48,7 +50,7 @@ The tests are NUnit tests in `src/Playwright.Tests/`, one class per upstream spe

### Generated vs hand-written code
- Public API interfaces (e.g. `src/Playwright/API/Generated/IPage.cs`) are **generated** by `.upstream/utils/doclint/generateDotnetApi.js` from the upstream API docs. Do not hand-edit these — update the generator instead.
- `./build.sh --generate` generates them again from `.upstream/`, and CI fails when the committed files differ. The generator change lands upstream first, and a roll brings it here. To try it before that, `PW_SRC_DIR=../playwright ./build.sh --generate` runs the generators of another checkout.
- `./build.sh --generate` generates them again from `.upstream/`, and CI fails when the committed files differ. The generator change lands upstream first, and a roll brings it here. To try it before that, `PW_SRC_DIR=~/code/playwright ./build.sh --generate` runs the generators of another checkout.
- The generator uses `classNameMap` for type mappings (e.g. `Disposable` → `IAsyncDisposable`, `boolean` → `bool`). Add entries there when a Playwright type should map to a different .NET type.
- The generator skips generating interface files for types like `TimeoutException` and `IAsyncDisposable` that map to built-in .NET types.
- Supplement interfaces (`src/Playwright/API/Supplements/`) are hand-written and extend the generated interfaces with .NET-specific overloads.
Expand Down
Loading