Best Puppeteer-sharp code snippet using PuppeteerSharp.Target.PageAsync
TargetTests.cs
Source:TargetTests.cs  
...45        {46            var otherPageTaskCompletion = new TaskCompletionSource<Page>();47            async void TargetCreatedEventHandler(object sender, TargetChangedArgs e)48            {49                otherPageTaskCompletion.SetResult(await e.Target.PageAsync());50                Browser.TargetCreated -= TargetCreatedEventHandler;51            }52            Browser.TargetCreated += TargetCreatedEventHandler;53            await Page.EvaluateFunctionHandleAsync("url => window.open(url)", TestConstants.CrossProcessUrl);54            var otherPage = await otherPageTaskCompletion.Task;55            Assert.Contains(TestConstants.CrossProcessUrl, otherPage.Url);56            Assert.Equal("Hello world", await otherPage.EvaluateExpressionAsync<string>("['Hello', 'world'].join(' ')"));57            Assert.NotNull(await otherPage.QuerySelectorAsync("body"));58            var allPages = await Browser.PagesAsync();59            Assert.Contains(Page, allPages);60            Assert.Contains(otherPage, allPages);61            var closePageTaskCompletion = new TaskCompletionSource<Page>();62            async void TargetDestroyedEventHandler(object sender, TargetChangedArgs e)63            {64                closePageTaskCompletion.SetResult(await e.Target.PageAsync());65                Browser.TargetDestroyed -= TargetDestroyedEventHandler;66            }67            Browser.TargetDestroyed += TargetDestroyedEventHandler;68            await otherPage.CloseAsync();69            Assert.Equal(otherPage, await closePageTaskCompletion.Task);70            allPages = await Task.WhenAll(Browser.Targets().Select(target => target.PageAsync()));71            Assert.Contains(Page, allPages);72            Assert.DoesNotContain(otherPage, allPages);73        }74        [Fact]75        public async Task ShouldReportWhenAServiceWorkerIsCreatedAndDestroyed()76        {77            await Page.GoToAsync(TestConstants.EmptyPage);78            var createdTargetTaskCompletion = new TaskCompletionSource<Target>();79            void TargetCreatedEventHandler(object sender, TargetChangedArgs e)80            {81                createdTargetTaskCompletion.SetResult(e.Target);82                Browser.TargetCreated -= TargetCreatedEventHandler;83            }84            Browser.TargetCreated += TargetCreatedEventHandler;85            var registration = await Page.EvaluateExpressionHandleAsync("navigator.serviceWorker.register('sw.js')");86            var createdTarget = await createdTargetTaskCompletion.Task;87            Assert.Equal("service_worker", createdTarget.Type);88            Assert.Equal(TestConstants.ServerUrl + "/sw.js", createdTarget.Url);89            var targetDestroyedTaskCompletion = new TaskCompletionSource<Target>();90            void TargetDestroyedEventHandler(object sender, TargetChangedArgs e)91            {92                targetDestroyedTaskCompletion.SetResult(e.Target);93                Browser.TargetDestroyed -= TargetDestroyedEventHandler;94            }95            Browser.TargetDestroyed += TargetDestroyedEventHandler;96            await Page.EvaluateFunctionAsync("registration => registration.unregister()", registration);97            Assert.Equal(createdTarget, await targetDestroyedTaskCompletion.Task);98        }99        [Fact]100        public async Task ShouldReportWhenATargetUrlChanges()101        {102            await Page.GoToAsync(TestConstants.EmptyPage);103            var changedTargetTaskCompletion = new TaskCompletionSource<Target>();104            void ChangedTargetEventHandler(object sender, TargetChangedArgs e)105            {106                changedTargetTaskCompletion.SetResult(e.Target);107                Browser.TargetChanged -= ChangedTargetEventHandler;108            }109            Browser.TargetChanged += ChangedTargetEventHandler;110            await Page.GoToAsync(TestConstants.CrossProcessUrl + "/");111            var changedTarget = await changedTargetTaskCompletion.Task;112            Assert.Equal(TestConstants.CrossProcessUrl + "/", changedTarget.Url);113            changedTargetTaskCompletion = new TaskCompletionSource<Target>();114            Browser.TargetChanged += ChangedTargetEventHandler;115            await Page.GoToAsync(TestConstants.EmptyPage);116            changedTarget = await changedTargetTaskCompletion.Task;117            Assert.Equal(TestConstants.EmptyPage, changedTarget.Url);118        }119        [Fact]120        public async Task ShouldNotReportUninitializedPages()121        {122            var targetChanged = false;123            EventHandler<TargetChangedArgs> listener = (sender, e) => targetChanged = true;124            Browser.TargetChanged += listener;125            var targetCompletionTask = new TaskCompletionSource<Target>();126            void TargetCreatedEventHandler(object sender, TargetChangedArgs e)127            {128                targetCompletionTask.SetResult(e.Target);129                Browser.TargetCreated -= TargetCreatedEventHandler;130            }131            Browser.TargetCreated += TargetCreatedEventHandler;132            var newPageTask = Browser.NewPageAsync();133            var target = await targetCompletionTask.Task;134            Assert.Equal(TestConstants.AboutBlank, target.Url);135            var newPage = await newPageTask;136            targetCompletionTask = new TaskCompletionSource<Target>();137            Browser.TargetCreated += TargetCreatedEventHandler;138            var evaluateTask = newPage.EvaluateExpressionHandleAsync("window.open('about:blank')");139            var target2 = await targetCompletionTask.Task;140            Assert.Equal(TestConstants.AboutBlank, target2.Url);141            await evaluateTask;142            await newPage.CloseAsync();143            Assert.False(targetChanged, "target should not be reported as changed");144            Browser.TargetChanged -= listener;145        }146        [Fact]147        public async Task ShouldNotCrashWhileRedirectingIfOriginalRequestWasMissed()148        {149            var serverResponseEnd = new TaskCompletionSource<bool>();150            var serverResponse = (HttpResponse)null;151            Server.SetRoute("/one-style.css", context => { serverResponse = context.Response; return serverResponseEnd.Task; });152            // Open a new page. Use window.open to connect to the page later.153            await Task.WhenAll(154              Page.EvaluateFunctionHandleAsync("url => window.open(url)", TestConstants.ServerUrl + "/one-style.html"),155              Server.WaitForRequest("/one-style.css")156            );157            // Connect to the opened page.158            var target = Browser.Targets().First(t => t.Url.Contains("one-style.html"));159            var newPage = await target.PageAsync();160            // Issue a redirect.161            serverResponse.Redirect("/injectedstyle.css");162            serverResponseEnd.SetResult(true);163            // Wait for the new page to load.            164            await WaitForEvents(newPage.Client, "Page.loadEventFired");165            // Cleanup.166            await newPage.CloseAsync();167        }168    }169}...Target.cs
Source:Target.cs  
...44                if (!openerPage.HasPopupEventListeners)45                {46                    return;47                }48                var popupPage = await PageAsync().ConfigureAwait(false);49                openerPage.OnPopup(popupPage);50            });51            CloseTaskWrapper = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);52            IsInitialized = TargetInfo.Type != TargetType.Page || TargetInfo.Url != string.Empty;53            if (IsInitialized)54            {55                _initializedTaskWrapper.TrySetResult(true);56            }57        }58        #region Properties59        /// <summary>60        /// Gets the URL.61        /// </summary>62        /// <value>The URL.</value>63        public string Url => TargetInfo.Url;64        /// <summary>65        /// Gets the type. It will be <see cref="TargetInfo.Type"/>.66        /// Can be `"page"`, `"background_page"`, `"service_worker"`, `"shared_worker"`, `"browser"` or `"other"`.67        /// </summary>68        /// <value>The type.</value>69        public TargetType Type => TargetInfo.Type;70        /// <summary>71        /// Gets the target identifier.72        /// </summary>73        /// <value>The target identifier.</value>74        public string TargetId => TargetInfo.TargetId;75        /// <summary>76        /// Get the target that opened this target77        /// </summary>78        /// <remarks>79        /// Top-level targets return <c>null</c>.80        /// </remarks>81        public Target Opener => TargetInfo.OpenerId != null ?82            Browser.TargetsMap.GetValueOrDefault(TargetInfo.OpenerId) : null;83        /// <summary>84        /// Get the browser the target belongs to.85        /// </summary>86        public Browser Browser => BrowserContext.Browser;87        /// <summary>88        /// Get the browser context the target belongs to.89        /// </summary>90        public BrowserContext BrowserContext { get; }91        internal Task<bool> InitializedTask => _initializedTaskWrapper.Task;92        internal Task CloseTask => CloseTaskWrapper.Task;93        internal TaskCompletionSource<bool> CloseTaskWrapper { get; }94        internal Task<Page> PageTask { get; set; }95        #endregion96        /// <summary>97        /// Returns the <see cref="Page"/> associated with the target. If the target is not <c>"page"</c> or <c>"background_page"</c> returns <c>null</c>98        /// </summary>99        /// <returns>a task that returns a <see cref="Page"/></returns>100        public Task<Page> PageAsync()101        {102            if ((TargetInfo.Type == TargetType.Page || TargetInfo.Type == TargetType.BackgroundPage) && PageTask == null)103            {104                PageTask = CreatePageAsync();105            }106            return PageTask ?? Task.FromResult<Page>(null);107        }108        /// <summary>109        /// If the target is not of type `"service_worker"` or `"shared_worker"`, returns `null`.110        /// </summary>111        /// <returns>A task that returns a <see cref="Worker"/></returns>112        public Task<Worker> WorkerAsync()113        {114            if (TargetInfo.Type != TargetType.ServiceWorker && TargetInfo.Type != TargetType.SharedWorker)115            {116                return null;117            }118            if (_workerTask == null)119            {120                _workerTask = WorkerInternalAsync();121            }122            return _workerTask;123        }124        private async Task<Worker> WorkerInternalAsync()125        {126            var client = await _sessionFactory().ConfigureAwait(false);127            return new Worker(128                client,129                TargetInfo.Url,130                (consoleType, handles, stackTrace) => Task.CompletedTask,131                (e) => { });132        }133        private async Task<Page> CreatePageAsync()134        {135            var session = await _sessionFactory().ConfigureAwait(false);136            return await Page.CreateAsync(session, this, Browser.IgnoreHTTPSErrors, Browser.DefaultViewport, Browser.ScreenshotTaskQueue).ConfigureAwait(false);137        }138        internal void TargetInfoChanged(TargetInfo targetInfo)139        {140            var previousUrl = TargetInfo.Url;141            TargetInfo = targetInfo;142            if (!IsInitialized && (TargetInfo.Type != TargetType.Page || TargetInfo.Url != string.Empty))143            {144                IsInitialized = true;145                _initializedTaskWrapper.TrySetResult(true);146                return;147            }...BrowserContext.cs
Source:BrowserContext.cs  
...6namespace PuppeteerSharp7{8    /// <summary>9    /// BrowserContexts provide a way to operate multiple independent browser sessions. When a browser is launched, it has10    /// a single <see cref="BrowserContext"/> used by default. The method <see cref="Browser.NewPageAsync"/> creates a <see cref="Page"/> in the default <see cref="BrowserContext"/>11    /// </summary>12    public class BrowserContext13    {14        private readonly Connection _connection;15        private readonly string _id;16        internal BrowserContext(Connection connection, Browser browser, string contextId)17        {18            _connection = connection;19            Browser = browser;20            _id = contextId;21        }22        /// <summary>23        /// Raised when the url of a target changes24        /// </summary>25        public event EventHandler<TargetChangedArgs> TargetChanged;26        /// <summary>27        /// Raised when a target is created, for example when a new page is opened by <c>window.open</c> <see href="https://developer.mozilla.org/en-US/docs/Web/API/Window/open"/> or <see cref="NewPageAsync"/>.28        /// </summary>29        public event EventHandler<TargetChangedArgs> TargetCreated;30        /// <summary>31        /// Raised when a target is destroyed, for example when a page is closed32        /// </summary>33        public event EventHandler<TargetChangedArgs> TargetDestroyed;34        /// <summary>35        /// Returns whether BrowserContext is incognito36        /// The default browser context is the only non-incognito browser context37        /// </summary>38        /// <remarks>39        /// The default browser context cannot be closed40        /// </remarks>41        public bool IsIncognito => _id != null;42        /// <summary>43        /// Gets the browser this browser context belongs to44        /// </summary>45        public Browser Browser { get; }46        /// <summary>47        /// Gets an array of all active targets inside the browser context.48        /// </summary>49        /// <returns>An array of all active targets inside the browser context</returns>50        public Target[] Targets() => Array.FindAll(Browser.Targets(), target => target.BrowserContext == this);51        /// <summary>52        /// This searches for a target in this specific browser context.53        /// <example>54        /// <code>55        /// <![CDATA[56        /// await page.EvaluateAsync("() => window.open('https://www.example.com/')");57        /// var newWindowTarget = await browserContext.WaitForTargetAsync((target) => target.Url == "https://www.example.com/");58        /// ]]>59        /// </code>60        /// </example>61        /// </summary>62        /// <param name="predicate">A function to be run for every target</param>63        /// <param name="options">options</param>64        /// <returns>Resolves to the first target found that matches the predicate function.</returns>65        public Task<Target> WaitForTargetAsync(Func<Target, bool> predicate, WaitForOptions options = null)66            => Browser.WaitForTargetAsync((target) => target.BrowserContext == this && predicate(target), options);67        /// <summary>68        /// An array of all pages inside the browser context.69        /// </summary>70        /// <returns>Task which resolves to an array of all open pages.71        /// Non visible pages, such as <c>"background_page"</c>, will not be listed here.72        /// You can find them using <see cref="Target.PageAsync"/>.</returns>73        public async Task<Page[]> PagesAsync()74        => (await Task.WhenAll(75            Targets().Where(t => t.Type == TargetType.Page).Select(t => t.PageAsync())).ConfigureAwait(false))76            .Where(p => p != null).ToArray();77        /// <summary>78        /// Creates a new page79        /// </summary>80        /// <returns>Task which resolves to a new <see cref="Page"/> object</returns>81        public Task<Page> NewPageAsync() => Browser.CreatePageInContextAsync(_id);82        /// <summary>83        /// Closes the browser context. All the targets that belong to the browser context will be closed84        /// </summary>85        /// <returns>Task</returns>86        public Task CloseAsync()87        {88            if (_id == null)89            {90                throw new PuppeteerException("Non-incognito profiles cannot be closed!");91            }92            return Browser.DisposeContextAsync(_id);93        }94        /// <summary>95        /// Overrides the browser context permissions....Scraper.cs
Source:Scraper.cs  
...43            async void Handler(object x, TargetChangedArgs y)44            {45                try46                {47                    var page = await y.Target.PageAsync();48                    await page.CloseAsync();49                }50                catch (PuppeteerException) { }51            }52            browser.TargetCreated += Handler;53            return new Disposable(() => browser.TargetCreated -= Handler);54        }55        static async Task<T> RetryAFewTimes<T>(Func<Task<T>> f)56        {57            const int attemptCount = 10;58            for (var i = 0; i < attemptCount; i++)59            {60                try61                {62                    return await f();63                }64                catch (PuppeteerException)65                {66                    if (i == attemptCount - 1) throw;67                    await Task.Delay(6000);68                }69            }70            throw new Exception("WTF");71        }72        public static async Task<List<ProfileInfo>> Scrape(string login, string password)73        {74            using (var browser = await BrowserProvider.PrepareBrowser())75            {76                var pages = await browser.PagesAsync();77                var page = pages.Single();78                page = await SignIn(page, login, password);79                foreach (var p in (await browser.PagesAsync()).Where(p => p != page)) await p.CloseAsync();80                81                await SelectFilters(page);82                using (InterceptNewTabs(browser)) await ScrollTillEnd(page);83                84                var accountsInfo = new List<ProfileInfo>();85                var links = await SearchPage.GetLinks(page);86                var counter = 0;87                88                page = await browser.NewPageAsync();89                foreach (var badPage in (await browser.PagesAsync()).Where(x => x != page)) await badPage.CloseAsync();90                using (InterceptNewTabs(browser))91                {92                    foreach (var link in links)93                    {94                        try95                        {96                            Console.WriteLine($"Scraping {link} ({++counter}/{links.Length})");97                            var accountInfo = await RetryAFewTimes(async () =>98                            {99                                await ProfileInfoService.GoToProfile(page, link);100                                return await ProfileInfoService.GetInfo(page);101                            });102                            accountsInfo.Add(accountInfo);...Program.cs
Source:Program.cs  
...18await using var browser = await Puppeteer.LaunchAsync(options);19await using var fileStream = File.Create("data.webm");20bool IsExtensionBackgroundPage(Target target) => target.Type == TargetType.BackgroundPage && target.Url.StartsWith($"chrome-extension://{extensionId}");21var extensionTarget = await browser.WaitForTargetAsync(IsExtensionBackgroundPage);22var extensionPage = await extensionTarget.PageAsync();23await extensionPage.ExposeFunctionAsync<string, object?>("sendData", data =>24{25    Console.WriteLine($"Received {data.Length} bytes of data");26    fileStream.Write(data.Select(c => (byte)c).ToArray());27    return null;28});29var pages = await browser.PagesAsync();30var page = pages[0];31await page.GoToAsync("https://yaskovdev.github.io/video-and-audio-capturing-test/");32await page.SetViewportAsync(new ViewPortOptions { Width = 1920, Height = 1080 });33await page.BringToFrontAsync();34var capture = new CapturingService();35await capture.StartCapturing(extensionPage);36const int capturingDurationMs = 5000;...BrowserMediaBlocker.cs
Source:BrowserMediaBlocker.cs  
...31            {32                try33                {34                    var target = args1.Target;35                    var page = await target.PageAsync();36                    if (page == null) return;37                    await DisableMedia(page);38                }39                // Protocol error (Page.createIsolatedWorld): Could not create isolated world40                catch (PuppeteerException) { }41            };42            return browser;43        }44    }45}...BrowserWaitForTargetTests.cs
Source:BrowserWaitForTargetTests.cs  
...18        [SkipBrowserFact(skipFirefox: true)]19        public async Task ShouldWaitForATarget()20        {21            var targetTask = Browser.WaitForTargetAsync((target) => target.Url == TestConstants.EmptyPage);22            var page = await Browser.NewPageAsync();23            Assert.False(targetTask.IsCompleted);24            await page.GoToAsync(TestConstants.EmptyPage);25            Assert.True(targetTask.IsCompleted);26            Assert.Same(await targetTask.Result.PageAsync(), page);27            28            await page.CloseAsync();29        }30        [PuppeteerTest("target.spec.ts", "Browser.waitForTarget", "should timeout waiting for a non-existent target")]31        [SkipBrowserFact(skipFirefox: true)]32        public Task ShouldTimeoutWaitingForANonExistentTarget()33            => Assert.ThrowsAnyAsync<TimeoutException>(async () => await Browser.WaitForTargetAsync(34                (target) => target.Url == TestConstants.EmptyPage,35                new() { Timeout = 1}));36    }37}...UserAgentPatcher.cs
Source:UserAgentPatcher.cs  
...13            {14                try15                {16                    var target = args1.Target;17                    var page = await target.PageAsync();18                    if (page == null) return;19                    await InterceptPage(page);20                }21                // Protocol error (Page.createIsolatedWorld): Could not create isolated world22                catch (PuppeteerException) { }23            };24        }25    }26}...PageAsync
Using AI Code Generation
1using System;2using System.Threading.Tasks;3using PuppeteerSharp;4{5    {6        static async Task Main(string[] args)7        {8            await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);9            var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = false });10            var page = await browser.NewPageAsync();11            Console.WriteLine("Press any key to exit");12            Console.ReadLine();13            await browser.CloseAsync();14        }15    }16}PageAsync
Using AI Code Generation
1using System;2using System.Threading.Tasks;3using PuppeteerSharp;4{5    {6        static async Task Main(string[] args)7        {8            await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);9            using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions {Headless = false}))10            {11                var page = await browser.NewPageAsync();12                await page.ScreenshotAsync("google.png");13            }14        }15    }16}17using System;18using System.Threading.Tasks;19using PuppeteerSharp;20{21    {22        static async Task Main(string[] args)23        {24            await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);25            using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions {Headless = false}))26            {27                var page = await browser.TargetsAsync();28            }29        }30    }31}PageAsync
Using AI Code Generation
1using System;2using System.Threading.Tasks;3using PuppeteerSharp;4{5    {6        static void Main(string[] args)7        {8            Console.WriteLine("Hello World!");9        }10        public static async Task PageAsync()11        {12            {13            };14            using (var browser = await Puppeteer.LaunchAsync(options))15            using (var page = await browser.NewPageAsync())16            {17            }18        }19    }20}21using System;22using System.Threading.Tasks;23using PuppeteerSharp;24{25    {26        static void Main(string[] args)27        {28            Console.WriteLine("Hello World!");29        }30        public static async Task PageAsync()31        {32            {33            };34            using (var browser = await Puppeteer.LaunchAsync(options))35            {36                var page = await browser.PageAsync();37            }38        }39    }40}41using System;42using System.Threading.Tasks;43using PuppeteerSharp;44{45    {46        static void Main(string[] args)47        {48            Console.WriteLine("Hello World!");49        }50        public static async Task PageAsync()51        {52            {53            };54            using (var browser = await Puppeteer.LaunchAsync(options))55            using (var page = await browser.NewPageAsync())56            {57                await page.PageAsync();58            }59        }60    }61}62using System;63using System.Threading.Tasks;64using PuppeteerSharp;65{66    {67        static void Main(string[] args)68        {69            Console.WriteLine("Hello World!");70        }71        public static async Task PageAsync()72        {73            {PageAsync
Using AI Code Generation
1var target = await browser.NewPageAsync();2await target.ClickAsync("input[name='q']");3await target.Keyboard.TypeAsync("PuppeteerSharp");4await target.ClickAsync("input[name='btnK']");5await target.WaitForSelectorAsync("div#search");6await target.ScreenshotAsync("google.png");7await target.CloseAsync();8var page = await browser.NewPageAsync();9await page.ClickAsync("input[name='q']");10await page.Keyboard.TypeAsync("PuppeteerSharp");11await page.ClickAsync("input[name='btnK']");12await page.WaitForSelectorAsync("div#search");13await page.ScreenshotAsync("google.png");14await page.CloseAsync();15var target = await browser.NewPageAsync();16await target.ClickAsync("input[name='q']");17await target.Keyboard.TypeAsync("PuppeteerSharp");18await target.ClickAsync("input[name='btnK']");19await target.WaitForSelectorAsync("div#search");20await target.ScreenshotAsync("google.png");21await target.CloseAsync();22var page = await browser.NewPageAsync();23await page.ClickAsync("input[name='q']");24await page.Keyboard.TypeAsync("PuppeteerSharp");25await page.ClickAsync("input[name='btnK']");26await page.WaitForSelectorAsync("div#search");27await page.ScreenshotAsync("google.png");28await page.CloseAsync();29var page = await browser.NewPageAsync();30await page.ClickAsync("input[name='q']");31await page.Keyboard.TypeAsync("PuppeteerSharp");32await page.ClickAsync("input[name='btnK']");33await page.WaitForSelectorAsync("div#search");PageAsync
Using AI Code Generation
1if (target != null)2{3    var page = await target.PageAsync();4    await page.ScreenshotAsync("google.png");5}6if (target != null)7{8    var page = await target.PageAsync();9    await page.ScreenshotAsync("google.png");10}11if (target != null)12{13    var page = await target.PageAsync();14    await page.ScreenshotAsync("google.png");15}16if (target != null)17{18    var page = await target.PageAsync();19    await page.ScreenshotAsync("google.png");20}21if (target != null)22{23    var page = await target.PageAsync();24    await page.ScreenshotAsync("google.png");25}26if (target != null)27{28    var page = await target.PageAsync();PageAsync
Using AI Code Generation
1using PuppeteerSharp;2using System.Threading.Tasks;3{4    {5        public static async Task Main(string[] args)6        {7            var browser = await Puppeteer.LaunchAsync(new LaunchOptions8            {9                Args = new string[] { "--no-sandbox" }10            });11            var page = await browser.NewPageAsync();12            await page.ScreenshotAsync("google.png");13            await browser.CloseAsync();14        }15    }16}PageAsync
Using AI Code Generation
1using System;2using System.Threading.Tasks;3using PuppeteerSharp;4{5    {6        static async Task Main(string[] args)7        {8            var browser = await Puppeteer.LaunchAsync(new LaunchOptions9            {10            });11            var page = await browser.NewPageAsync();12            await page.ScreenshotAsync("google.png");13            await browser.CloseAsync();14        }15    }16}Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
