docs(dotnet): udpate existing examples (#6669)

This commit is contained in:
Pavel Feldman 2021-05-19 17:19:25 -07:00 committed by GitHub
parent ba637e6e41
commit fad77e2f78
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 110 additions and 79 deletions

View file

@ -71,7 +71,7 @@ class BrowserExamples
{ {
using var playwright = await Playwright.CreateAsync(); using var playwright = await Playwright.CreateAsync();
var firefox = playwright.Firefox; var firefox = playwright.Firefox;
var browser = await firefox.LaunchAsync(headless: false); var browser = await firefox.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false });
var page = await browser.NewPageAsync(); var page = await browser.NewPageAsync();
await page.GotoAsync("https://www.bing.com"); await page.GotoAsync("https://www.bing.com");
await browser.CloseAsync(); await browser.CloseAsync();

View file

@ -51,7 +51,7 @@ context.close()
```csharp ```csharp
using var playwright = await Playwright.CreateAsync(); using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Firefox.LaunchAsync(headless: false); var browser = await playwright.Firefox.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false });
// Create a new incognito browser context // Create a new incognito browser context
var context = await browser.NewContextAsync(); var context = await browser.NewContextAsync();
// Create a new page inside context. // Create a new page inside context.
@ -132,9 +132,10 @@ print(page.evaluate("location.href"))
``` ```
```csharp ```csharp
var popupTask = context.WaitForPageAsync(); var popup = await context.RunAndWaitForEventAsync(BrowserContextEvent.Page, async =>
await page.ClickAsync("a"); {
var popup = await popupTask; await page.ClickAsync("a");
});
Console.WriteLine(await popup.EvaluateAsync<string>("location.href")); Console.WriteLine(await popup.EvaluateAsync<string>("location.href"));
``` ```
@ -269,7 +270,7 @@ browser_context.add_init_script(path="preload.js")
``` ```
```csharp ```csharp
await context.AddInitScriptAsync(scriptPath: "preload.js"); await context.AddInitScriptAsync(new BrowserContextAddInitScriptOptions { ScriptPath = "preload.js" });
``` ```
:::note :::note
@ -503,7 +504,7 @@ class Program
public static async Task Main() public static async Task Main()
{ {
using var playwright = await Playwright.CreateAsync(); using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Webkit.LaunchAsync(headless: false); var browser = await playwright.Webkit.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false });
var context = await browser.NewContextAsync(); var context = await browser.NewContextAsync();
await context.ExposeBindingAsync("pageURL", source => source.Page.Url); await context.ExposeBindingAsync("pageURL", source => source.Page.Url);
@ -762,7 +763,7 @@ class BrowserContextExamples
public static async Task AddMd5FunctionToAllPagesInContext() public static async Task AddMd5FunctionToAllPagesInContext()
{ {
using var playwright = await Playwright.CreateAsync(); using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Webkit.LaunchAsync(headless: false); var browser = await playwright.Webkit.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false });
var context = await browser.NewContextAsync(); var context = await browser.NewContextAsync();
// NOTE: md5 is inherently insecure, and we strongly discourage using // NOTE: md5 is inherently insecure, and we strongly discourage using

View file

@ -213,7 +213,9 @@ browser = playwright.chromium.launch( # or "firefox" or "webkit".
``` ```
```csharp ```csharp
var browser = await playwright.Chromium.LaunchAsync(ignoreDefaultArgs: new[] { "--mute-audio" }) var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions {
IgnoreDefaultArgs = new[] { "--mute-audio" }
})
``` ```
> **Chromium-only** Playwright can also be used to control the Google Chrome or Microsoft Edge browsers, but it works best with the version of > **Chromium-only** Playwright can also be used to control the Google Chrome or Microsoft Edge browsers, but it works best with the version of

View file

@ -49,9 +49,10 @@ path = download.path()
``` ```
```csharp ```csharp
var waitForDownloadTask = page.WaitForDownloadAsync(); var download = await page.RunAndWaitForEventAsync(PageEvent.Download, async () =>
await page.ClickAsync("#downloadButton"); {
var download = await waitForDownloadTask; await page.ClickAsync("#downloadButton");
});
Console.WriteLine(await download.PathAsync()); Console.WriteLine(await download.PathAsync());
``` ```

View file

@ -78,7 +78,7 @@ class HandleExamples
public static async Task Run() public static async Task Run()
{ {
using var playwright = await Playwright.CreateAsync(); using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync(headless: false); var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync(); var page = await browser.NewPageAsync();
await page.GotoAsync("https://www.bing.com"); await page.GotoAsync("https://www.bing.com");
var handle = await page.QuerySelectorAsync("a"); var handle = await page.QuerySelectorAsync("a");

View file

@ -30,9 +30,10 @@ file_chooser.set_files("myfile.pdf")
``` ```
```csharp ```csharp
var waitForFileChooserTask = page.WaitForFileChooserAsync(); var fileChooser = await page.RunAndWaitForEventAsync(Page.FileChooser, async () =>
await page.ClickAsync("upload"); {
var fileChooser = await waitForFileChooserTask; await page.ClickAsync("upload");
});
await fileChooser.SetFilesAsync("temp.txt"); await fileChooser.SetFilesAsync("temp.txt");
``` ```

View file

@ -266,7 +266,7 @@ try {
// Crash might happen during a click. // Crash might happen during a click.
await page.ClickAsync("button"); await page.ClickAsync("button");
// Or while waiting for an event. // Or while waiting for an event.
await page.WaitForPopupAsync(() -> {}); await page.WaitForEventAsync(PageEvent.Popup);
} catch (PlaywrightException e) { } catch (PlaywrightException e) {
// When the page crashes, exception message contains "crash". // When the page crashes, exception message contains "crash".
} }
@ -397,9 +397,10 @@ print(popup.evaluate("location.href"))
``` ```
```csharp ```csharp
var waitForPopupTask = page.WaitForPopupAsync(); var popup = await page.RunAndWaitForEventAsync(PageEvent.Popup, async () =>
await page.EvaluateAsync("() => window.open('https://microsoft.com')"); {
var popup = await waitForPopupTask; await page.EvaluateAsync("() => window.open('https://microsoft.com')");
});
Console.WriteLine(await popup.EvaluateAsync<string>("location.href")); Console.WriteLine(await popup.EvaluateAsync<string>("location.href"));
``` ```
@ -489,7 +490,7 @@ page.add_init_script(path="./preload.js")
``` ```
```csharp ```csharp
await page.AddInitScriptAsync(scriptPath: "./preload.js"); await page.AddInitScriptAsync(new PageAddInitScriptOption { ScriptPath = "./preload.js" });
``` ```
:::note :::note
@ -895,13 +896,13 @@ await page.EvaluateAsync("() => matchMedia('screen').matches");
await page.EvaluateAsync("() => matchMedia('print').matches"); await page.EvaluateAsync("() => matchMedia('print').matches");
// → false // → false
await page.EmulateMediaAsync(Media.Print); await page.EmulateMediaAsync(new PageEmulateMediaOptions { Media = Media.Print });
await page.EvaluateAsync("() => matchMedia('screen').matches"); await page.EvaluateAsync("() => matchMedia('screen').matches");
// → false // → false
await page.EvaluateAsync("() => matchMedia('print').matches"); await page.EvaluateAsync("() => matchMedia('print').matches");
// → true // → true
await page.EmulateMediaAsync(Media.Screen); await page.EmulateMediaAsync(new PageEmulateMediaOptions { Media = Media.Screen });
await page.EvaluateAsync("() => matchMedia('screen').matches"); await page.EvaluateAsync("() => matchMedia('screen').matches");
// → true // → true
await page.EvaluateAsync("() => matchMedia('print').matches"); await page.EvaluateAsync("() => matchMedia('print').matches");
@ -948,7 +949,7 @@ page.evaluate("matchMedia('(prefers-color-scheme: no-preference)').matches")
``` ```
```csharp ```csharp
await page.EmulateMediaAsync(colorScheme: ColorScheme.Dark); await page.EmulateMediaAsync(new PageEmulateMediaOptions { ColorScheme = ColorScheme.Dark });
await page.EvaluateAsync("matchMedia('(prefers-color-scheme: dark)').matches"); await page.EvaluateAsync("matchMedia('(prefers-color-scheme: dark)').matches");
// → true // → true
await page.EvaluateAsync("matchMedia('(prefers-color-scheme: light)').matches"); await page.EvaluateAsync("matchMedia('(prefers-color-scheme: light)').matches");
@ -1403,7 +1404,10 @@ class PageExamples
public static async Task Main() public static async Task Main()
{ {
using var playwright = await Playwright.CreateAsync(); using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Webkit.LaunchAsync(headless: false); await using var browser = await playwright.Webkit.LaunchAsync(new BrowserTypeLaunchOptions
{
Headless: false
});
var page = await browser.NewPageAsync(); var page = await browser.NewPageAsync();
await page.ExposeBindingAsync("pageUrl", (source) => source.Page.Url); await page.ExposeBindingAsync("pageUrl", (source) => source.Page.Url);
@ -1658,7 +1662,10 @@ class PageExamples
public static async Task Main() public static async Task Main()
{ {
using var playwright = await Playwright.CreateAsync(); using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Webkit.LaunchAsync(headless: false); await using var browser = await playwright.Webkit.LaunchAsync(new BrowserTypeLaunchOptions
{
Headless: false
});
var page = await browser.NewPageAsync(); var page = await browser.NewPageAsync();
// NOTE: md5 is inherently insecure, and we strongly discourage using // NOTE: md5 is inherently insecure, and we strongly discourage using
@ -2056,8 +2063,8 @@ page.pdf(path="page.pdf")
```csharp ```csharp
// Generates a PDF with 'screen' media type // Generates a PDF with 'screen' media type
await page.EmulateMediaAsync(Media.Screen); await page.EmulateMediaAsync(new PageEmulateMediaOptions { Media = Media.Screen });
await page.PdfAsync("page.pdf"); await page.PdfAsync(new PagePdfOptions { Path = "page.pdf" });
``` ```
The [`option: width`], [`option: height`], and [`option: margin`] options accept values labeled with units. Unlabeled The [`option: width`], [`option: height`], and [`option: margin`] options accept values labeled with units. Unlabeled
@ -2265,7 +2272,6 @@ browser.close()
``` ```
```csharp ```csharp
await using var browser = await playwright.Webkit.LaunchAsync(headless: false);
var page = await browser.NewPageAsync(); var page = await browser.NewPageAsync();
await page.GotoAsync("https://keycode.info"); await page.GotoAsync("https://keycode.info");
await page.PressAsync("body", "A"); await page.PressAsync("body", "A");
@ -2369,7 +2375,6 @@ browser.close()
``` ```
```csharp ```csharp
await using var browser = await playwright.Webkit.LaunchAsync();
var page = await browser.NewPageAsync(); var page = await browser.NewPageAsync();
await page.RouteAsync("**/*.{png,jpg,jpeg}", async r => await r.AbortAsync()); await page.RouteAsync("**/*.{png,jpg,jpeg}", async r => await r.AbortAsync());
await page.GotoAsync("https://www.microsoft.com"); await page.GotoAsync("https://www.microsoft.com");
@ -2406,7 +2411,6 @@ browser.close()
``` ```
```csharp ```csharp
await using var browser = await playwright.Webkit.LaunchAsync();
var page = await browser.NewPageAsync(); var page = await browser.NewPageAsync();
await page.RouteAsync(new Regex("(\\.png$)|(\\.jpg$)"), async r => await r.AbortAsync()); await page.RouteAsync(new Regex("(\\.png$)|(\\.jpg$)"), async r => await r.AbortAsync());
await page.GotoAsync("https://www.microsoft.com"); await page.GotoAsync("https://www.microsoft.com");
@ -2454,7 +2458,7 @@ page.route("/api/**", handle_route)
await page.RouteAsync("/api/**", async r => await page.RouteAsync("/api/**", async r =>
{ {
if (r.Request.PostData.Contains("my-string")) if (r.Request.PostData.Contains("my-string"))
await r.FulfillAsync(body: "mocked-data"); await r.FulfillAsync(new RouteFulfillOptions { Body = "mocked-data" });
else else
await r.ContinueAsync(); await r.ContinueAsync();
}); });
@ -2966,9 +2970,10 @@ frame = event_info.value
``` ```
```csharp ```csharp
var waitTask = page.WaitForEventAsync(PageEvent.FrameNavigated); var frame = await page.RunAndWaitForEventAsync(PageEvent.FrameNavigated, async () =>
await page.ClickAsync("button"); {
var frame = await waitTask; await page.ClickAsync("button");
}
``` ```
### param: Page.waitForEvent.event = %%-wait-for-event-event-%% ### param: Page.waitForEvent.event = %%-wait-for-event-event-%%
@ -3195,9 +3200,10 @@ print(popup.title()) # popup is ready to use.
``` ```
```csharp ```csharp
var popupTask = page.WaitForPopupAsync(); var popup = await page.RunAndWaitForEventAsync(PageEvent.Popup, async () =>
await page.ClickAsync("button"); // click triggers the popup/ {
var popup = await popupTask; await page.ClickAsync("button"); // click triggers the popup/
});
await popup.WaitForLoadStateAsync(LoadState.DOMContentLoaded); await popup.WaitForLoadStateAsync(LoadState.DOMContentLoaded);
Console.WriteLine(await popup.TitleAsync()); // popup is ready to use. Console.WriteLine(await popup.TitleAsync()); // popup is ready to use.
``` ```

View file

@ -239,9 +239,10 @@ print(request.timing)
``` ```
```csharp ```csharp
var waitForEventTask = page.WaitForEventAsync(PageEvent.RequestFinished); var request = await page.RunAndWaitForEventAsync(PageEvent.RequestFinished, async () =>
await page.GotoAsync("https://www.microsoft.com"); {
var request = await waitForEventTask; await page.GotoAsync("https://www.microsoft.com");
});
Console.WriteLine(request.Timing.ResponseEnd); Console.WriteLine(request.Timing.ResponseEnd);
``` ```

View file

@ -178,7 +178,7 @@ page.route("**/xhr_endpoint", lambda route: route.fulfill(path="mock_data.json")
``` ```
```csharp ```csharp
await page.RouteAsync("**/xhr_endpoint", route => route.FulfillAsync(path: "mock_data.json")); await page.RouteAsync("**/xhr_endpoint", route => route.FulfillAsync(new RouteFulfillOptions { Path = "mock_data.json" }));
``` ```
### option: Route.fulfill.status ### option: Route.fulfill.status

View file

@ -92,9 +92,10 @@ popup.value.goto("https://wikipedia.org")
``` ```
```csharp ```csharp
var waitForPopupTask = page.WaitForPopupAsync(); var popup = await page.RunAndWaitForEventAsync(PageEvent.Popup, async =>
await page.EvaluateAsync("window.open()"); {
var popup = await waitForPopupTask; await page.EvaluateAsync("window.open()");
});
await popup.GotoAsync("https://wikipedia.org"); await popup.GotoAsync("https://wikipedia.org");
``` ```

View file

@ -367,16 +367,16 @@ await page.ClickAsync("button#submit");
await page.DblClickAsync("#item"); await page.DblClickAsync("#item");
// Right click // Right click
await page.ClickAsync("#item", button: MouseButton.Right); await page.ClickAsync("#item", new PageClickOptions { Button = MouseButton.Right });
// Shift + click // Shift + click
await page.ClickAsync("#item", modifiers: new[] { KeyboardModifier.Shift }); await page.ClickAsync("#item", new PageClickOptions { Modifiers = new[] { KeyboardModifier.Shift } });
// Hover over element // Hover over element
await page.HoverAsync("#item"); await page.HoverAsync("#item");
// Click the top left corner // Click the top left corner
await page.ClickAsync("#item", position: new Position { X = 0, Y = 0 }); await page.ClickAsync("#item", new PageClickOptions { position = new Position { X = 0, Y = 0 } });
``` ```
Under the hood, this and other pointer-related methods: Under the hood, this and other pointer-related methods:
@ -409,7 +409,7 @@ page.click('button#submit', force=True)
``` ```
```csharp ```csharp
await page.ClickAsync("button#submit", force: true); await page.ClickAsync("button#submit", new PageClickOptions { Force = true });
``` ```
#### Programmatic click #### Programmatic click
@ -750,9 +750,10 @@ file_chooser.set_files("myfile.pdf")
``` ```
```csharp ```csharp
var waitForChooserTask = page.WaitForFileChooserAsync(); var fileChooser = page.RunAndWaitForAsync(PageEvent.FileChooser, async () =>
await page.ClickAsync("upload"); {
var fileChooser = await waitForChooserTask; await page.ClickAsync("upload");
});
await fileChooser.SetFilesAsync("myfile.pdf"); await fileChooser.SetFilesAsync("myfile.pdf");
``` ```

View file

@ -47,7 +47,7 @@ class Example
await using var browser = await playwright.Chromium.LaunchAsync(); await using var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync(); var page = await browser.NewPageAsync();
await page.GotoAsync("whatsmyuseragent.org"); await page.GotoAsync("whatsmyuseragent.org");
await page.ScreenshotAsync(path: "screenshot.png"); await page.ScreenshotAsync(new PageScreenshotOptions { Path = "screenshot.png" });
} }
} }
``` ```
@ -55,7 +55,7 @@ class Example
By default, Playwright runs the browsers in headless mode. To see the browser UI, pass the `headless: false` flag while launching the browser. You can also use [`option: slowMo`] to slow down execution. Learn more in the debugging tools [section](./debug.md). By default, Playwright runs the browsers in headless mode. To see the browser UI, pass the `headless: false` flag while launching the browser. You can also use [`option: slowMo`] to slow down execution. Learn more in the debugging tools [section](./debug.md).
```csharp ```csharp
await playwright.Firefox.LaunchAsync(headless: false, slowMo: 50); await playwright.Firefox.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false, SlowMo = 50 });
``` ```
## Record scripts ## Record scripts

View file

@ -209,10 +209,11 @@ print(new_page.title())
```csharp ```csharp
// Get page after a specific action (e.g. clicking a link) // Get page after a specific action (e.g. clicking a link)
var waitForPageTask = context.WaitForPageAsync(); var newPage = await context.RunAndWaitForEventAsync(BrowserContextEvent.Page, async () =>
await page.ClickAsync("a[target='_blank']"); {
var newPage = await waitForPageTask; await page.ClickAsync("a[target='_blank']");
await page.WaitForLoadStateAsync(); });
await newPage.WaitForLoadStateAsync();
Console.WriteLine(await newPage.TitleAsync()); Console.WriteLine(await newPage.TitleAsync());
``` ```
@ -310,9 +311,10 @@ print(popup.title())
```csharp ```csharp
// Get popup after a specific action (e.g., click) // Get popup after a specific action (e.g., click)
var waitForPopupTask = page.WaitForPopupAsync(); var newPage = await page.RunAndWaitForEventAsync(PageEvent.Popup, async () =>
await page.ClickAsync("#open"); {
var newPage = await waitForPopupTask; await page.ClickAsync("#open");
});
await newPage.WaitForLoadStateAsync(); await newPage.WaitForLoadStateAsync();
Console.WriteLine(await newPage.TitleAsync()); Console.WriteLine(await newPage.TitleAsync());
``` ```

View file

@ -89,7 +89,7 @@ page.goto("https://example.com", wait_until="networkidle")
```csharp ```csharp
// Navigate and wait until network is idle // Navigate and wait until network is idle
await page.GotoAsync("https://example.com", waitUntil: WaitUntilState.NetworkIdle); await page.GotoAsync("https://example.com", new PageGotoOptions { WaitUntil = WaitUntilState.NetworkIdle });
``` ```
### Wait for element ### Wait for element
@ -394,7 +394,7 @@ with page.expect_navigation(url="**/login"):
// Running action in the callback of waitForNavigation prevents a race // Running action in the callback of waitForNavigation prevents a race
// condition between clicking and waiting for a navigation. // condition between clicking and waiting for a navigation.
await Task.WhenAll( await Task.WhenAll(
page.WaitForNavigationAsync("**/login"), // Waits for the next navigation page.WaitForNavigationAsync(new PageWaitForNavigationOptions { UrlString = "**/login" }), // Waits for the next navigation
page.ClickAsync("a") // Triggers a navigation with a script redirect page.ClickAsync("a") // Triggers a navigation with a script redirect
); );
``` ```
@ -434,9 +434,10 @@ popup.wait_for_load_state("load")
``` ```
```csharp ```csharp
var waitForPopupTask = page.WaitForPopupAsync(); var popup = await page.RunAndWaitForEventAsync(PageEvent.Popup, async () =>
await page.ClickAsync("a[target='_blank']"); // Opens popup {
var popup = await waitForPopupTask; await page.ClickAsync("a[target='_blank']"); // Opens popup
});
popup.WaitForLoadStateAsync(LoadState.Load); popup.WaitForLoadStateAsync(LoadState.Load);
``` ```

View file

@ -48,7 +48,7 @@ page.goto("https://example.com")
``` ```
```csharp ```csharp
using var context = await Browser.NewContextAsync(new BrowserContextOptions using var context = await Browser.NewContextAsync(new BrowserNewContextOptions
{ {
HttpCredentials = new HttpCredentials HttpCredentials = new HttpCredentials
{ {
@ -113,7 +113,10 @@ var proxy = new Proxy
Username = "user", Username = "user",
Password = "pwd" Password = "pwd"
}; };
await using var browser = await BrowserType.LaunchAsync(proxy: proxy); await using var browser = await BrowserType.LaunchAsync(new BrowserTypeLaunchOptions
{
Proxy = proxy
});
``` ```
When specifying proxy for each context individually, you need to give Playwright When specifying proxy for each context individually, you need to give Playwright
@ -148,8 +151,14 @@ context = browser.new_context(proxy={"server": "http://myproxy.com:3128"})
```csharp ```csharp
var proxy = new Proxy { Server = "per-context" }; var proxy = new Proxy { Server = "per-context" };
await using var browser = await BrowserType.LaunchAsync(proxy: proxy); await using var browser = await BrowserType.LaunchAsync(new BrowserTypeLaunchOptions
using var context = await Browser.NewContextAsync(proxy: new Proxy { Server = "http://myproxy.com:3128" }); {
Proxy = proxy
});
using var context = await Browser.NewContextAsync(new BrowserNewContextOptions
{
Proxy = new Proxy { Server = "http://myproxy.com:3128" })
});
``` ```
@ -502,7 +511,7 @@ page.route("**/*", lambda route: route.continue_(method="POST"))
await page.RouteAsync("**/*", async route => { await page.RouteAsync("**/*", async route => {
var headers = new Dictionary<string, string>(route.Request.Headers.ToDictionary(x => x.Key, x => x.Value)); var headers = new Dictionary<string, string>(route.Request.Headers.ToDictionary(x => x.Key, x => x.Value));
headers.Remove("X-Secret"); headers.Remove("X-Secret");
await route.ContinueAsync(headers: headers); await route.ContinueAsync(new RouteContinueOptions { Headers = headers });
}); });
// Continue requests as POST. // Continue requests as POST.

View file

@ -244,9 +244,10 @@ popup = popup_info.value
``` ```
```csharp ```csharp
var waitForPopupTask = page.WaitForPopupAsync(); var popup = await page.RunAndWaitForEventAsync(PageEvent.Popup, async () =>
await page.ClickAsync("#open"); {
var popup = await waitForPopupTask; await page.ClickAsync("#open");
});
``` ```
### API reference ### API reference

View file

@ -33,7 +33,10 @@ context.close()
``` ```
```csharp ```csharp
var context = await browser.NewContextAsync(recordVideoDir: "videos/"); var context = await browser.NewContextAsync(new BrowserNewContextOptions
{
RecordVideoDir = "videos/"
});
// Make sure to close, so that videos are saved. // Make sure to close, so that videos are saved.
await context.CloseAsync(); await context.CloseAsync();
``` ```
@ -70,10 +73,11 @@ context = browser.new_context(
``` ```
```csharp ```csharp
var context = await browser.NewContextAsync( var context = await browser.NewContextAsync(new BrowserNewContextOptions
recordVideoDir: "videos/", {
recordVideoSize: new RecordVideoSize() { Width = 640, Height = 480 } RecordVideoDir = "videos/",
); RecordVideoSize = new RecordVideoSize() { Width = 640, Height = 480 }
});
// Make sure to close, so that videos are saved. // Make sure to close, so that videos are saved.
await context.CloseAsync(); await context.CloseAsync();
``` ```