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
28 changes: 28 additions & 0 deletions .github/ISSUE_TEMPLATE/playwright-cli.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: Playwright CLI 🖥️
description: Report a bug or request a feature for the Playwright CLI
title: '[CLI]: '
body:
- type: markdown
attributes:
value: |
### Thanks for filing a Playwright CLI issue!

Describe what's going on in your own words — there's no strict format. The more detail (commands you ran, output you saw, what you expected), the faster we can help.
- type: textarea
id: details
attributes:
label: What's going on?
description: |
Describe the bug or feature request. Include anything that helps us understand and reproduce it — the exact command you ran, the output, what you expected, and your environment if relevant.
placeholder: |
e.g. `npx playwright ...` does X, but I expected Y.
validations:
required: true
- type: input
id: version
attributes:
label: Version
description: Which version of Playwright are you using? (optional, but helpful)
placeholder: ex. 1.41.1
validations:
required: false
28 changes: 28 additions & 0 deletions .github/ISSUE_TEMPLATE/playwright-mcp.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: Playwright MCP 🤖
description: Report a bug or request a feature for the Playwright MCP server
title: '[MCP]: '
body:
- type: markdown
attributes:
value: |
### Thanks for filing a Playwright MCP issue!

Describe what's going on in your own words — there's no strict format. Telling us which MCP client you use (Claude, VS Code, Cursor, etc.) and the tool call or config involved helps a lot.
- type: textarea
id: details
attributes:
label: What's going on?
description: |
Describe the bug or feature request. Include anything that helps us understand and reproduce it — the MCP client and config you use, the tool that misbehaved, the output you saw, and what you expected.
placeholder: |
e.g. Calling the `browser_click` tool from <client> does X, but I expected Y.
validations:
required: true
- type: input
id: version
attributes:
label: Version
description: Which version of Playwright / the MCP server are you using? (optional, but helpful)
placeholder: ex. 1.41.1
validations:
required: false
12 changes: 9 additions & 3 deletions packages/trace-viewer/src/ui/snapshotTab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -211,10 +211,16 @@ const SnapshotWrapper: React.FunctionComponent<React.PropsWithChildren<{
height: Math.max(snapshotContainerSize.height + windowHeaderHeight, 320),
};

const scale = Math.min(measure.width / renderedBrowserFrameSize.width, measure.height / renderedBrowserFrameSize.height, 1);
// `measure` is the wrapper's border box (getBoundingClientRect), which includes the
// 10px padding on every side. Fit and center the frame within the content box so it
// keeps a padding-sized margin (with room for the box-shadow) when squeezed.
const padding = 10;
const availableWidth = measure.width - 2 * padding;
const availableHeight = measure.height - 2 * padding;
const scale = Math.min(availableWidth / renderedBrowserFrameSize.width, availableHeight / renderedBrowserFrameSize.height, 1);
const translate = {
x: (measure.width - renderedBrowserFrameSize.width) / 2,
y: (measure.height - renderedBrowserFrameSize.height) / 2,
x: (measure.width - renderedBrowserFrameSize.width) / 2 - padding,
y: (measure.height - renderedBrowserFrameSize.height) / 2 - padding,
};

return <div ref={ref} className='snapshot-wrapper'>
Expand Down
27 changes: 19 additions & 8 deletions utils/docker/Dockerfile.jammy
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ ENV LC_ALL=C.UTF-8
# === INSTALL Node.js ===

RUN apt-get update && \
# Install Node.js
apt-get install -y curl wget gpg ca-certificates && \
mkdir -p /etc/apt/keyrings && \
curl -sL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \
Expand All @@ -27,23 +26,21 @@ RUN apt-get update && \
adduser pwuser

# === BAKE BROWSERS INTO IMAGE ===
# Browsers are split into separate layers to enable parallel pulls.

ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright

# 1. Add tip-of-tree Playwright package to install its browsers.
# The package should be built beforehand from tip-of-tree Playwright.
COPY ./playwright-core.tar.gz /tmp/playwright-core.tar.gz

# 2. Bake in browsers & deps.
# Browsers will be downloaded in `/ms-playwright`.
# Note: make sure to set 777 to the registry so that any user can access
# registry.
RUN mkdir /ms-playwright && \
# 2. Set up playwright-core and install all system dependencies in one layer.
RUN install -d -m 777 /ms-playwright /ms-playwright/.links && \
mkdir /ms-playwright-agent && \
cd /ms-playwright-agent && npm init -y && \
npm i /tmp/playwright-core.tar.gz && \
npm exec --no -- playwright-core mark-docker-image "${DOCKER_IMAGE_NAME_TEMPLATE}" && \
npm exec --no -- playwright-core install --with-deps && rm -rf /var/lib/apt/lists/* && \
npm exec --no -- playwright-core install-deps && \
# Workaround for https://github.com/microsoft/playwright/issues/27313
# While the gstreamer plugin load process can be in-process, it ended up throwing
# an error that it can't have libsoup2 and libsoup3 in the same process because
Expand All @@ -53,7 +50,21 @@ RUN mkdir /ms-playwright && \
else \
rm /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstwebrtc.so; \
fi && \
rm -rf /var/lib/apt/lists/*

# 3. Install each browser binary in its own layer for parallel pulling.
# Note: installing chromium also installs chromium-headless-shell and ffmpeg.
RUN cd /ms-playwright-agent && \
npm exec --no -- playwright-core install chromium && \
chmod -R 777 /ms-playwright/chromium-* /ms-playwright/chromium_headless_shell-* /ms-playwright/ffmpeg-*

RUN cd /ms-playwright-agent && \
npm exec --no -- playwright-core install firefox && \
chmod -R 777 /ms-playwright/firefox-*

RUN cd /ms-playwright-agent && \
npm exec --no -- playwright-core install webkit && \
rm /tmp/playwright-core.tar.gz && \
rm -rf /ms-playwright-agent && \
rm -rf ~/.npm/ && \
chmod -R 777 /ms-playwright
chmod -R 777 /ms-playwright/webkit-*
27 changes: 19 additions & 8 deletions utils/docker/Dockerfile.noble
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ ENV LC_ALL=C.UTF-8
# === INSTALL Node.js ===

RUN apt-get update && \
# Install Node.js
apt-get install -y curl wget gpg ca-certificates && \
mkdir -p /etc/apt/keyrings && \
curl -sL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \
Expand All @@ -27,24 +26,36 @@ RUN apt-get update && \
adduser pwuser

# === BAKE BROWSERS INTO IMAGE ===
# Browsers are split into separate layers to enable parallel pulls.

ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright

# 1. Add tip-of-tree Playwright package to install its browsers.
# The package should be built beforehand from tip-of-tree Playwright.
COPY ./playwright-core.tar.gz /tmp/playwright-core.tar.gz

# 2. Bake in browsers & deps.
# Browsers will be downloaded in `/ms-playwright`.
# Note: make sure to set 777 to the registry so that any user can access
# registry.
RUN mkdir /ms-playwright && \
# 2. Set up playwright-core and install all system dependencies in one layer.
RUN install -d -m 777 /ms-playwright /ms-playwright/.links && \
mkdir /ms-playwright-agent && \
cd /ms-playwright-agent && npm init -y && \
npm i /tmp/playwright-core.tar.gz && \
npm exec --no -- playwright-core mark-docker-image "${DOCKER_IMAGE_NAME_TEMPLATE}" && \
npm exec --no -- playwright-core install --with-deps && rm -rf /var/lib/apt/lists/* && \
npm exec --no -- playwright-core install-deps && \
rm -rf /var/lib/apt/lists/*

# 3. Install each browser binary in its own layer for parallel pulling.
# Note: installing chromium also installs chromium-headless-shell and ffmpeg.
RUN cd /ms-playwright-agent && \
npm exec --no -- playwright-core install chromium && \
chmod -R 777 /ms-playwright/chromium-* /ms-playwright/chromium_headless_shell-* /ms-playwright/ffmpeg-*

RUN cd /ms-playwright-agent && \
npm exec --no -- playwright-core install firefox && \
chmod -R 777 /ms-playwright/firefox-*

RUN cd /ms-playwright-agent && \
npm exec --no -- playwright-core install webkit && \
rm /tmp/playwright-core.tar.gz && \
rm -rf /ms-playwright-agent && \
rm -rf ~/.npm/ && \
chmod -R 777 /ms-playwright
chmod -R 777 /ms-playwright/webkit-*
26 changes: 19 additions & 7 deletions utils/docker/Dockerfile.resolute
Original file line number Diff line number Diff line change
Expand Up @@ -27,24 +27,36 @@ RUN apt-get update && \
adduser pwuser

# === BAKE BROWSERS INTO IMAGE ===
# Browsers are split into separate layers to enable parallel pulls.

ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright

# 1. Add tip-of-tree Playwright package to install its browsers.
# The package should be built beforehand from tip-of-tree Playwright.
COPY ./playwright-core.tar.gz /tmp/playwright-core.tar.gz

# 2. Bake in browsers & deps.
# Browsers will be downloaded in `/ms-playwright`.
# Note: make sure to set 777 to the registry so that any user can access
# registry.
RUN mkdir /ms-playwright && \
# 2. Set up playwright-core and install all system dependencies in one layer.
RUN install -d -m 777 /ms-playwright /ms-playwright/.links && \
mkdir /ms-playwright-agent && \
cd /ms-playwright-agent && npm init -y && \
npm i /tmp/playwright-core.tar.gz && \
npm exec --no -- playwright-core mark-docker-image "${DOCKER_IMAGE_NAME_TEMPLATE}" && \
npm exec --no -- playwright-core install --with-deps && rm -rf /var/lib/apt/lists/* && \
npm exec --no -- playwright-core install-deps && \
rm -rf /var/lib/apt/lists/*

# 3. Install each browser binary in its own layer for parallel pulling.
# Note: installing chromium also installs chromium-headless-shell and ffmpeg.
RUN cd /ms-playwright-agent && \
npm exec --no -- playwright-core install chromium && \
chmod -R 777 /ms-playwright/chromium-* /ms-playwright/chromium_headless_shell-* /ms-playwright/ffmpeg-*

RUN cd /ms-playwright-agent && \
npm exec --no -- playwright-core install firefox && \
chmod -R 777 /ms-playwright/firefox-*

RUN cd /ms-playwright-agent && \
npm exec --no -- playwright-core install webkit && \
rm /tmp/playwright-core.tar.gz && \
rm -rf /ms-playwright-agent && \
rm -rf ~/.npm/ && \
chmod -R 777 /ms-playwright
chmod -R 777 /ms-playwright/webkit-*
Loading