microsoft/webchat-html-tests
Run Bot Framework Web Chat HTML tests in Docker/Selenium Grid. Use when: running __tests__/html2, debugging failing HTML tests, updating snapshots, checking grid health, or cleaning leaked Selenium sessions.
npx skills add https://github.com/microsoft/BotFramework-WebChat --skill webchat-html-tests
Run the HTML test harness, keep Selenium Grid healthy, and debug failures without keeping all of the operational detail in the skill body.
__tests__/html2 for a branch or PRUse the bundled script instead of pasting long Docker commands.
For a focused test run, keep the default scale of 2 Chrome nodes:
./.github/skills/webchat-html-tests/scripts/start-grid.sh
For a full run, match Jest's 4 workers:
CHROME_SCALE=4 ./.github/skills/webchat-html-tests/scripts/start-grid.sh
python3 ./.github/skills/webchat-html-tests/scripts/wait-for-grid.py
Stop if the script times out or if the node summary does not show ready nodes.
Run the full suite:
./.github/skills/webchat-html-tests/scripts/run-html-tests.sh
Run a focused HTML test with a regex anchored to the exact file:
./.github/skills/webchat-html-tests/scripts/run-html-tests.sh "__tests__/html2/activity/message-status\.html$"
Update snapshots for an expected visual change:
./.github/skills/webchat-html-tests/scripts/run-html-tests.sh --update "__tests__/html2/activity/message-status\.html$"
python3 ./.github/skills/webchat-html-tests/scripts/cleanup-grid-sessions.py
If leaked sessions remain, clean them before the next Jest run or the grid can stall.
If dist files return 404s after a local build, restart webchat2:
docker compose -f docker-compose-wsl2.yml restart webchat2
If a failure is not obvious, load the reference docs before changing code:
docker compose -f docker-compose-wsl2.yml down
--updatenpm run precommit passes before opening the PRTake microsoft/webchat-html-tests from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.