Skip to content

Add a Program.Main() override with a throwOnError parameter #3140

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

0xced
Copy link
Contributor

@0xced 0xced commented Apr 3, 2025

Ensuring that playwright is properly installed can be done by running the following code:

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) 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.

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

Fixes #3139

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
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feature]: Add possibility to diagnose errors when Microsoft.Playwright.Program.Run() fails
1 participant