-
Notifications
You must be signed in to change notification settings - Fork 291
Automatically install required browser files for Playwright #3190
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
0xced
wants to merge
2
commits into
microsoft:main
Choose a base branch
from
0xced:Automatic-Install
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+32
−1
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
xjc90s
approved these changes
Sep 7, 2025
Ensuring that playwright is properly installed can be done by running the following code: ```csharp var playwright = new Microsoft.Playwright.Program(); var exitCode = playwright.Run(["install", "--with-deps"]); ``` This is fine when the installation succeeds and the exit code is 0. But when running under xUnit.net (which [does **not** capture the console output](https://xunit.net/docs/capturing-output)) and the installation fails with exit code 1, then it becomes impossibly hard to diagnose the root cause of the failure. For example, a failure can be triggered by deleting the installed browers in the `ms-playwright` cache directory and setting the `https_proxy` environment variable to an invalid proxy: `http://127.0.0.1:33333`. Under these conditions, running with the new `throwOnError` parameter becomes diagnosable. ```csharp var playwright = new Microsoft.Playwright.Program(); var exitCode = playwright.Run(["install", "--with-deps", "firefox"], throwOnError: true); ``` This throws a `PlaywrightException` with the exact command executed and its output, making it clear what the problem is. > Failed to run ~/playwright-dotnet/src/playwright-xunit/bin/Debug/net8.0/.playwright/node/darwin-x64/node "~/playwright-dotnet/src/playwright-xunit/bin/Debug/net8.0/.playwright/package/cli.js" "install" "--with-deps" "firefox" > Downloading Firefox 132.0 (playwright build v1466) from https://playwright.azureedge.net/builds/firefox/1466/firefox-mac.zip > Error: connect ECONNREFUSED 127.0.0.1:33333 > at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1610:16) { > errno: -61, > code: 'ECONNREFUSED', > syscall: 'connect', > address: '127.0.0.1', > port: 33333 > } > Downloading Firefox 132.0 (playwright build v1466) from https://playwright-akamai.azureedge.net/builds/firefox/1466/firefox-mac.zip > Error: connect ECONNREFUSED 127.0.0.1:33333 > at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1610:16) { > errno: -61, > code: 'ECONNREFUSED', > syscall: 'connect', > address: '127.0.0.1', > port: 33333 > } > Downloading Firefox 132.0 (playwright build v1466) from https://playwright-verizon.azureedge.net/builds/firefox/1466/firefox-mac.zip > Error: connect ECONNREFUSED 127.0.0.1:33333 > at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1610:16) { > errno: -61, > code: 'ECONNREFUSED', > syscall: 'connect', > address: '127.0.0.1', > port: 33333 > } > Failed to install browsers > Error: Failed to download Firefox 132.0 (playwright build v1466), caused by > Error: Download failure, code=1
This will prevent this exception: > Microsoft.Playwright.PlaywrightException > Executable doesn't exist at ~/Library/Caches/ms-playwright/chromium-1148/chrome-mac/Chromium.app/Contents/MacOS/Chromium > ╔════════════════════════════════════════════════════════════╗ > ║ Looks like Playwright was just installed or updated. ║ > ║ Please run the following command to download new browsers: ║ > ║ ║ > ║ pwsh bin/Debug/netX/playwright.ps1 install ║ > ║ ║ > ║ <3 Playwright Team ║ > ╚════════════════════════════════════════════════════════════╝ > at Microsoft.Playwright.Transport.Connection.InnerSendMessageToServerAsync[T](ChannelOwner object, String method, Dictionary`2 dictionary, Boolean keepNulls) in /_/src/Playwright/Transport/Connection.cs:line 206 > at Microsoft.Playwright.Transport.Connection.WrapApiCallAsync[T](Func`1 action, Boolean isInternal) in /_/src/Playwright/Transport/Connection.cs:line 535 > at Microsoft.Playwright.Core.BrowserType.LaunchAsync(BrowserTypeLaunchOptions options) in /_/src/Playwright/Core/BrowserType.cs:line 56 > at Microsoft.Playwright.Xunit.BrowserService.CreateBrowser(IBrowserType browserType) in /_/src/Playwright.Xunit/BrowserService.cs:line 56 > at Microsoft.Playwright.Xunit.BrowserService.<>c__DisplayClass5_0.<<Register>b__0>d.MoveNext() in /_/src/Playwright.Xunit/BrowserService.cs:line 46 > --- End of stack trace from previous location --- > at Microsoft.Playwright.Xunit.WorkerAwareTest.RegisterService[T](String name, Func`1 factory) in /_/src/Playwright.Xunit/WorkerAwareTest.cs:line 54 > at Microsoft.Playwright.Xunit.BrowserTest.InitializeAsync() in /_/src/Playwright.Xunit/BrowserTest.cs:line 45 > at Microsoft.Playwright.Xunit.ContextTest.InitializeAsync() in /_/src/Playwright.Xunit/ContextTest.cs:line 35 > at Microsoft.Playwright.Xunit.PageTest.InitializeAsync() in /_/src/Playwright.Xunit/PageTest.cs:line 35 This helps with microsoft#2286.
5717749 to
b16cdd3
Compare
xjc90s
approved these changes
Sep 8, 2025
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This will prevent this exception when
Playwright.MSTest,Playwright.NUnitorPlaywright.Xunitis used:This helps with #2286.
Aslo note that this pull request is stacked on top of #3140.