From fad77e2f7896ebdb5569aceceb40795985b0014e Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Wed, 19 May 2021 17:19:25 -0700 Subject: [PATCH] docs(dotnet): udpate existing examples (#6669) --- docs/src/api/class-browser.md | 2 +- docs/src/api/class-browsercontext.md | 15 +++++---- docs/src/api/class-browsertype.md | 4 ++- docs/src/api/class-download.md | 7 ++-- docs/src/api/class-elementhandle.md | 2 +- docs/src/api/class-filechooser.md | 7 ++-- docs/src/api/class-page.md | 50 ++++++++++++++++------------ docs/src/api/class-request.md | 7 ++-- docs/src/api/class-route.md | 2 +- docs/src/events.md | 7 ++-- docs/src/input.md | 15 +++++---- docs/src/intro-csharp.md | 4 +-- docs/src/multi-pages.md | 16 +++++---- docs/src/navigations.md | 11 +++--- docs/src/network.md | 19 ++++++++--- docs/src/verification.md | 7 ++-- docs/src/videos.md | 14 +++++--- 17 files changed, 110 insertions(+), 79 deletions(-) diff --git a/docs/src/api/class-browser.md b/docs/src/api/class-browser.md index 6a5064b172..84c49cc3d4 100644 --- a/docs/src/api/class-browser.md +++ b/docs/src/api/class-browser.md @@ -71,7 +71,7 @@ class BrowserExamples { using var playwright = await Playwright.CreateAsync(); 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(); await page.GotoAsync("https://www.bing.com"); await browser.CloseAsync(); diff --git a/docs/src/api/class-browsercontext.md b/docs/src/api/class-browsercontext.md index ad747211b7..ab62a76954 100644 --- a/docs/src/api/class-browsercontext.md +++ b/docs/src/api/class-browsercontext.md @@ -51,7 +51,7 @@ context.close() ```csharp 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 var context = await browser.NewContextAsync(); // Create a new page inside context. @@ -132,9 +132,10 @@ print(page.evaluate("location.href")) ``` ```csharp -var popupTask = context.WaitForPageAsync(); -await page.ClickAsync("a"); -var popup = await popupTask; +var popup = await context.RunAndWaitForEventAsync(BrowserContextEvent.Page, async => +{ + await page.ClickAsync("a"); +}); Console.WriteLine(await popup.EvaluateAsync("location.href")); ``` @@ -269,7 +270,7 @@ browser_context.add_init_script(path="preload.js") ``` ```csharp -await context.AddInitScriptAsync(scriptPath: "preload.js"); +await context.AddInitScriptAsync(new BrowserContextAddInitScriptOptions { ScriptPath = "preload.js" }); ``` :::note @@ -503,7 +504,7 @@ class Program public static async Task Main() { 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(); await context.ExposeBindingAsync("pageURL", source => source.Page.Url); @@ -762,7 +763,7 @@ class BrowserContextExamples public static async Task AddMd5FunctionToAllPagesInContext() { 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(); // NOTE: md5 is inherently insecure, and we strongly discourage using diff --git a/docs/src/api/class-browsertype.md b/docs/src/api/class-browsertype.md index 92a0ee80d8..a2e2aa6624 100644 --- a/docs/src/api/class-browsertype.md +++ b/docs/src/api/class-browsertype.md @@ -213,7 +213,9 @@ browser = playwright.chromium.launch( # or "firefox" or "webkit". ``` ```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 diff --git a/docs/src/api/class-download.md b/docs/src/api/class-download.md index 0be2061f22..70f4f7ce25 100644 --- a/docs/src/api/class-download.md +++ b/docs/src/api/class-download.md @@ -49,9 +49,10 @@ path = download.path() ``` ```csharp -var waitForDownloadTask = page.WaitForDownloadAsync(); -await page.ClickAsync("#downloadButton"); -var download = await waitForDownloadTask; +var download = await page.RunAndWaitForEventAsync(PageEvent.Download, async () => +{ + await page.ClickAsync("#downloadButton"); +}); Console.WriteLine(await download.PathAsync()); ``` diff --git a/docs/src/api/class-elementhandle.md b/docs/src/api/class-elementhandle.md index c27cebc977..419295d64a 100644 --- a/docs/src/api/class-elementhandle.md +++ b/docs/src/api/class-elementhandle.md @@ -78,7 +78,7 @@ class HandleExamples public static async Task Run() { 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(); await page.GotoAsync("https://www.bing.com"); var handle = await page.QuerySelectorAsync("a"); diff --git a/docs/src/api/class-filechooser.md b/docs/src/api/class-filechooser.md index 571655b816..d905e68631 100644 --- a/docs/src/api/class-filechooser.md +++ b/docs/src/api/class-filechooser.md @@ -30,9 +30,10 @@ file_chooser.set_files("myfile.pdf") ``` ```csharp -var waitForFileChooserTask = page.WaitForFileChooserAsync(); -await page.ClickAsync("upload"); -var fileChooser = await waitForFileChooserTask; +var fileChooser = await page.RunAndWaitForEventAsync(Page.FileChooser, async () => +{ + await page.ClickAsync("upload"); +}); await fileChooser.SetFilesAsync("temp.txt"); ``` diff --git a/docs/src/api/class-page.md b/docs/src/api/class-page.md index 1a319b0e19..4458c15257 100644 --- a/docs/src/api/class-page.md +++ b/docs/src/api/class-page.md @@ -266,7 +266,7 @@ try { // Crash might happen during a click. await page.ClickAsync("button"); // Or while waiting for an event. - await page.WaitForPopupAsync(() -> {}); + await page.WaitForEventAsync(PageEvent.Popup); } catch (PlaywrightException e) { // When the page crashes, exception message contains "crash". } @@ -397,9 +397,10 @@ print(popup.evaluate("location.href")) ``` ```csharp -var waitForPopupTask = page.WaitForPopupAsync(); -await page.EvaluateAsync("() => window.open('https://microsoft.com')"); -var popup = await waitForPopupTask; +var popup = await page.RunAndWaitForEventAsync(PageEvent.Popup, async () => +{ + await page.EvaluateAsync("() => window.open('https://microsoft.com')"); +}); Console.WriteLine(await popup.EvaluateAsync("location.href")); ``` @@ -489,7 +490,7 @@ page.add_init_script(path="./preload.js") ``` ```csharp -await page.AddInitScriptAsync(scriptPath: "./preload.js"); +await page.AddInitScriptAsync(new PageAddInitScriptOption { ScriptPath = "./preload.js" }); ``` :::note @@ -895,13 +896,13 @@ await page.EvaluateAsync("() => matchMedia('screen').matches"); await page.EvaluateAsync("() => matchMedia('print').matches"); // → false -await page.EmulateMediaAsync(Media.Print); +await page.EmulateMediaAsync(new PageEmulateMediaOptions { Media = Media.Print }); await page.EvaluateAsync("() => matchMedia('screen').matches"); // → false await page.EvaluateAsync("() => matchMedia('print').matches"); // → true -await page.EmulateMediaAsync(Media.Screen); +await page.EmulateMediaAsync(new PageEmulateMediaOptions { Media = Media.Screen }); await page.EvaluateAsync("() => matchMedia('screen').matches"); // → true await page.EvaluateAsync("() => matchMedia('print').matches"); @@ -948,7 +949,7 @@ page.evaluate("matchMedia('(prefers-color-scheme: no-preference)').matches") ``` ```csharp -await page.EmulateMediaAsync(colorScheme: ColorScheme.Dark); +await page.EmulateMediaAsync(new PageEmulateMediaOptions { ColorScheme = ColorScheme.Dark }); await page.EvaluateAsync("matchMedia('(prefers-color-scheme: dark)').matches"); // → true await page.EvaluateAsync("matchMedia('(prefers-color-scheme: light)').matches"); @@ -1403,7 +1404,10 @@ class PageExamples public static async Task Main() { 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(); await page.ExposeBindingAsync("pageUrl", (source) => source.Page.Url); @@ -1658,7 +1662,10 @@ class PageExamples public static async Task Main() { 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(); // NOTE: md5 is inherently insecure, and we strongly discourage using @@ -2056,8 +2063,8 @@ page.pdf(path="page.pdf") ```csharp // Generates a PDF with 'screen' media type -await page.EmulateMediaAsync(Media.Screen); -await page.PdfAsync("page.pdf"); +await page.EmulateMediaAsync(new PageEmulateMediaOptions { Media = Media.Screen }); +await page.PdfAsync(new PagePdfOptions { Path = "page.pdf" }); ``` The [`option: width`], [`option: height`], and [`option: margin`] options accept values labeled with units. Unlabeled @@ -2265,7 +2272,6 @@ browser.close() ``` ```csharp -await using var browser = await playwright.Webkit.LaunchAsync(headless: false); var page = await browser.NewPageAsync(); await page.GotoAsync("https://keycode.info"); await page.PressAsync("body", "A"); @@ -2369,7 +2375,6 @@ browser.close() ``` ```csharp -await using var browser = await playwright.Webkit.LaunchAsync(); var page = await browser.NewPageAsync(); await page.RouteAsync("**/*.{png,jpg,jpeg}", async r => await r.AbortAsync()); await page.GotoAsync("https://www.microsoft.com"); @@ -2406,7 +2411,6 @@ browser.close() ``` ```csharp -await using var browser = await playwright.Webkit.LaunchAsync(); var page = await browser.NewPageAsync(); await page.RouteAsync(new Regex("(\\.png$)|(\\.jpg$)"), async r => await r.AbortAsync()); await page.GotoAsync("https://www.microsoft.com"); @@ -2454,7 +2458,7 @@ page.route("/api/**", handle_route) await page.RouteAsync("/api/**", async r => { if (r.Request.PostData.Contains("my-string")) - await r.FulfillAsync(body: "mocked-data"); + await r.FulfillAsync(new RouteFulfillOptions { Body = "mocked-data" }); else await r.ContinueAsync(); }); @@ -2966,9 +2970,10 @@ frame = event_info.value ``` ```csharp -var waitTask = page.WaitForEventAsync(PageEvent.FrameNavigated); -await page.ClickAsync("button"); -var frame = await waitTask; +var frame = await page.RunAndWaitForEventAsync(PageEvent.FrameNavigated, async () => +{ + await page.ClickAsync("button"); +} ``` ### param: Page.waitForEvent.event = %%-wait-for-event-event-%% @@ -3195,9 +3200,10 @@ print(popup.title()) # popup is ready to use. ``` ```csharp -var popupTask = page.WaitForPopupAsync(); -await page.ClickAsync("button"); // click triggers the popup/ -var popup = await popupTask; +var popup = await page.RunAndWaitForEventAsync(PageEvent.Popup, async () => +{ + await page.ClickAsync("button"); // click triggers the popup/ +}); await popup.WaitForLoadStateAsync(LoadState.DOMContentLoaded); Console.WriteLine(await popup.TitleAsync()); // popup is ready to use. ``` diff --git a/docs/src/api/class-request.md b/docs/src/api/class-request.md index ebf6a475e2..d91a1cb93e 100644 --- a/docs/src/api/class-request.md +++ b/docs/src/api/class-request.md @@ -239,9 +239,10 @@ print(request.timing) ``` ```csharp -var waitForEventTask = page.WaitForEventAsync(PageEvent.RequestFinished); -await page.GotoAsync("https://www.microsoft.com"); -var request = await waitForEventTask; +var request = await page.RunAndWaitForEventAsync(PageEvent.RequestFinished, async () => +{ + await page.GotoAsync("https://www.microsoft.com"); +}); Console.WriteLine(request.Timing.ResponseEnd); ``` diff --git a/docs/src/api/class-route.md b/docs/src/api/class-route.md index 7cce712ac2..639324bb2f 100644 --- a/docs/src/api/class-route.md +++ b/docs/src/api/class-route.md @@ -178,7 +178,7 @@ page.route("**/xhr_endpoint", lambda route: route.fulfill(path="mock_data.json") ``` ```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 diff --git a/docs/src/events.md b/docs/src/events.md index 550af74806..e5a075dcf1 100644 --- a/docs/src/events.md +++ b/docs/src/events.md @@ -92,9 +92,10 @@ popup.value.goto("https://wikipedia.org") ``` ```csharp -var waitForPopupTask = page.WaitForPopupAsync(); -await page.EvaluateAsync("window.open()"); -var popup = await waitForPopupTask; +var popup = await page.RunAndWaitForEventAsync(PageEvent.Popup, async => +{ + await page.EvaluateAsync("window.open()"); +}); await popup.GotoAsync("https://wikipedia.org"); ``` diff --git a/docs/src/input.md b/docs/src/input.md index f8ee546116..f760e0fba1 100644 --- a/docs/src/input.md +++ b/docs/src/input.md @@ -367,16 +367,16 @@ await page.ClickAsync("button#submit"); await page.DblClickAsync("#item"); // Right click -await page.ClickAsync("#item", button: MouseButton.Right); +await page.ClickAsync("#item", new PageClickOptions { Button = MouseButton.Right }); // Shift + click -await page.ClickAsync("#item", modifiers: new[] { KeyboardModifier.Shift }); +await page.ClickAsync("#item", new PageClickOptions { Modifiers = new[] { KeyboardModifier.Shift } }); // Hover over element await page.HoverAsync("#item"); // 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: @@ -409,7 +409,7 @@ page.click('button#submit', force=True) ``` ```csharp -await page.ClickAsync("button#submit", force: true); +await page.ClickAsync("button#submit", new PageClickOptions { Force = true }); ``` #### Programmatic click @@ -750,9 +750,10 @@ file_chooser.set_files("myfile.pdf") ``` ```csharp -var waitForChooserTask = page.WaitForFileChooserAsync(); -await page.ClickAsync("upload"); -var fileChooser = await waitForChooserTask; +var fileChooser = page.RunAndWaitForAsync(PageEvent.FileChooser, async () => +{ + await page.ClickAsync("upload"); +}); await fileChooser.SetFilesAsync("myfile.pdf"); ``` diff --git a/docs/src/intro-csharp.md b/docs/src/intro-csharp.md index 0bc23463d1..ff8d06e7a0 100644 --- a/docs/src/intro-csharp.md +++ b/docs/src/intro-csharp.md @@ -47,7 +47,7 @@ class Example await using var browser = await playwright.Chromium.LaunchAsync(); var page = await browser.NewPageAsync(); 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). ```csharp -await playwright.Firefox.LaunchAsync(headless: false, slowMo: 50); +await playwright.Firefox.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false, SlowMo = 50 }); ``` ## Record scripts diff --git a/docs/src/multi-pages.md b/docs/src/multi-pages.md index c6b6dfb52e..b6b34bc165 100644 --- a/docs/src/multi-pages.md +++ b/docs/src/multi-pages.md @@ -209,10 +209,11 @@ print(new_page.title()) ```csharp // Get page after a specific action (e.g. clicking a link) -var waitForPageTask = context.WaitForPageAsync(); -await page.ClickAsync("a[target='_blank']"); -var newPage = await waitForPageTask; -await page.WaitForLoadStateAsync(); +var newPage = await context.RunAndWaitForEventAsync(BrowserContextEvent.Page, async () => +{ + await page.ClickAsync("a[target='_blank']"); +}); +await newPage.WaitForLoadStateAsync(); Console.WriteLine(await newPage.TitleAsync()); ``` @@ -310,9 +311,10 @@ print(popup.title()) ```csharp // Get popup after a specific action (e.g., click) -var waitForPopupTask = page.WaitForPopupAsync(); -await page.ClickAsync("#open"); -var newPage = await waitForPopupTask; +var newPage = await page.RunAndWaitForEventAsync(PageEvent.Popup, async () => +{ + await page.ClickAsync("#open"); +}); await newPage.WaitForLoadStateAsync(); Console.WriteLine(await newPage.TitleAsync()); ``` diff --git a/docs/src/navigations.md b/docs/src/navigations.md index 85746e51d2..3a629a1a32 100644 --- a/docs/src/navigations.md +++ b/docs/src/navigations.md @@ -89,7 +89,7 @@ page.goto("https://example.com", wait_until="networkidle") ```csharp // 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 @@ -394,7 +394,7 @@ with page.expect_navigation(url="**/login"): // Running action in the callback of waitForNavigation prevents a race // condition between clicking and waiting for a navigation. 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 ); ``` @@ -434,9 +434,10 @@ popup.wait_for_load_state("load") ``` ```csharp -var waitForPopupTask = page.WaitForPopupAsync(); -await page.ClickAsync("a[target='_blank']"); // Opens popup -var popup = await waitForPopupTask; +var popup = await page.RunAndWaitForEventAsync(PageEvent.Popup, async () => +{ + await page.ClickAsync("a[target='_blank']"); // Opens popup +}); popup.WaitForLoadStateAsync(LoadState.Load); ``` diff --git a/docs/src/network.md b/docs/src/network.md index fd5439d1da..0b72e133dc 100644 --- a/docs/src/network.md +++ b/docs/src/network.md @@ -48,7 +48,7 @@ page.goto("https://example.com") ``` ```csharp -using var context = await Browser.NewContextAsync(new BrowserContextOptions +using var context = await Browser.NewContextAsync(new BrowserNewContextOptions { HttpCredentials = new HttpCredentials { @@ -113,7 +113,10 @@ var proxy = new Proxy Username = "user", 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 @@ -148,8 +151,14 @@ context = browser.new_context(proxy={"server": "http://myproxy.com:3128"}) ```csharp var proxy = new Proxy { Server = "per-context" }; -await using var browser = await BrowserType.LaunchAsync(proxy: proxy); -using var context = await Browser.NewContextAsync(proxy: new Proxy { Server = "http://myproxy.com:3128" }); +await using var browser = await BrowserType.LaunchAsync(new BrowserTypeLaunchOptions +{ + 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 => { var headers = new Dictionary(route.Request.Headers.ToDictionary(x => x.Key, x => x.Value)); headers.Remove("X-Secret"); - await route.ContinueAsync(headers: headers); + await route.ContinueAsync(new RouteContinueOptions { Headers = headers }); }); // Continue requests as POST. diff --git a/docs/src/verification.md b/docs/src/verification.md index 3b09fb711b..d0c9cb10b4 100644 --- a/docs/src/verification.md +++ b/docs/src/verification.md @@ -244,9 +244,10 @@ popup = popup_info.value ``` ```csharp -var waitForPopupTask = page.WaitForPopupAsync(); -await page.ClickAsync("#open"); -var popup = await waitForPopupTask; +var popup = await page.RunAndWaitForEventAsync(PageEvent.Popup, async () => +{ + await page.ClickAsync("#open"); +}); ``` ### API reference diff --git a/docs/src/videos.md b/docs/src/videos.md index 72586060ff..fc4dc9958b 100644 --- a/docs/src/videos.md +++ b/docs/src/videos.md @@ -33,7 +33,10 @@ context.close() ``` ```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. await context.CloseAsync(); ``` @@ -70,10 +73,11 @@ context = browser.new_context( ``` ```csharp -var context = await browser.NewContextAsync( - recordVideoDir: "videos/", - recordVideoSize: new RecordVideoSize() { Width = 640, Height = 480 } -); +var context = await browser.NewContextAsync(new BrowserNewContextOptions +{ + RecordVideoDir = "videos/", + RecordVideoSize = new RecordVideoSize() { Width = 640, Height = 480 } +}); // Make sure to close, so that videos are saved. await context.CloseAsync(); ```