How to use GoBackAsync method of PuppeteerSharp.Page class

Best Puppeteer-sharp code snippet using PuppeteerSharp.Page.GoBackAsync

Page.cs

Source:Page.cs Github

copy

Full Screen

...181 public event EventHandler<PopupEventArgs> Popup;182 /// <summary>183 /// This setting will change the default maximum time for the following methods:184 /// - <see cref="GoToAsync(string, NavigationOptions)"/>185 /// - <see cref="GoBackAsync(NavigationOptions)"/>186 /// - <see cref="GoForwardAsync(NavigationOptions)"/>187 /// - <see cref="ReloadAsync(NavigationOptions)"/>188 /// - <see cref="SetContentAsync(string, NavigationOptions)"/>189 /// - <see cref="WaitForNavigationAsync(NavigationOptions)"/>190 /// **NOTE** <see cref="DefaultNavigationTimeout"/> takes priority over <seealso cref="DefaultTimeout"/>191 /// </summary>192 public int DefaultNavigationTimeout193 {194 get => _timeoutSettings.NavigationTimeout;195 set => _timeoutSettings.NavigationTimeout = value;196 }197 /// <summary>198 /// This setting will change the default maximum times for the following methods:199 /// - <see cref="GoBackAsync(NavigationOptions)"/>200 /// - <see cref="GoForwardAsync(NavigationOptions)"/>201 /// - <see cref="GoToAsync(string, NavigationOptions)"/>202 /// - <see cref="ReloadAsync(NavigationOptions)"/>203 /// - <see cref="SetContentAsync(string, NavigationOptions)"/>204 /// - <see cref="WaitForFunctionAsync(string, object[])"/>205 /// - <see cref="WaitForNavigationAsync(NavigationOptions)"/>206 /// - <see cref="WaitForRequestAsync(string, WaitForOptions)"/>207 /// - <see cref="WaitForResponseAsync(string, WaitForOptions)"/>208 /// - <see cref="WaitForXPathAsync(string, WaitForSelectorOptions)"/>209 /// - <see cref="WaitForSelectorAsync(string, WaitForSelectorOptions)"/>210 /// - <see cref="WaitForExpressionAsync(string, WaitForFunctionOptions)"/>211 /// </summary>212 public int DefaultTimeout213 {214 get => _timeoutSettings.Timeout;215 set => _timeoutSettings.Timeout = value;216 }217 /// <summary>218 /// Gets page's main frame219 /// </summary>220 /// <remarks>221 /// Page is guaranteed to have a main frame which persists during navigations.222 /// </remarks>223 public Frame MainFrame => FrameManager.MainFrame;224 /// <summary>225 /// Gets all frames attached to the page.226 /// </summary>227 /// <value>An array of all frames attached to the page.</value>228 public Frame[] Frames => FrameManager.GetFrames();229 ///// <summary>230 ///// Gets all workers in the page.231 ///// </summary>232 //public Worker[] Workers => _workers.Values.ToArray();233 /// <summary>234 /// Shortcut for <c>page.MainFrame.Url</c>235 /// </summary>236 public string Url => MainFrame.Url;237 /// <summary>238 /// Gets that target this page was created from.239 /// </summary>240 public Target Target { get; }241 /// <summary>242 /// Gets this page's keyboard243 /// </summary>244 public Keyboard Keyboard { get; }245 /// <summary>246 /// Gets this page's touchscreen247 /// </summary>248 public Touchscreen Touchscreen { get; }249 /// <summary>250 /// Gets this page's coverage251 /// </summary>252 public Coverage Coverage { get; }253 /// <summary>254 /// Gets this page's mouse255 /// </summary>256 public Mouse Mouse { get; }257 /// <summary>258 /// Gets this page's viewport259 /// </summary>260 public ViewPortOptions Viewport { get; private set; }261 /// <summary>262 /// List of supported metrics provided by the <see cref="Metrics"/> event.263 /// </summary>264 public static readonly IEnumerable<string> SupportedMetrics = new List<string>265 {266 "Timestamp",267 "Documents",268 "Frames",269 "JSEventListeners",270 "Nodes",271 "LayoutCount",272 "RecalcStyleCount",273 "LayoutDuration",274 "RecalcStyleDuration",275 "ScriptDuration",276 "TaskDuration",277 "JSHeapUsedSize",278 "JSHeapTotalSize"279 };280 /// <summary>281 /// Get the browser the page belongs to.282 /// </summary>283 public Browser Browser => Target.Browser;284 /// <summary>285 /// Get the browser context that the page belongs to.286 /// </summary>287 public BrowserContext BrowserContext => Target.BrowserContext;288 /// <summary>289 /// Get an indication that the page has been closed.290 /// </summary>291 public bool IsClosed { get; private set; }292 /// <summary>293 /// Gets the accessibility.294 /// </summary>295 public Accessibility Accessibility { get; }296 internal bool JavascriptEnabled { get; set; } = true;297 internal bool HasPopupEventListeners => Popup?.GetInvocationList().Any() == true;298 internal FrameManager FrameManager { get; private set; }299 private Task SessionClosedTask300 {301 get302 {303 if (_sessionClosedTcs == null)304 {305 _sessionClosedTcs = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);306 Client.Disconnected += clientDisconnected;307 void clientDisconnected(object sender, EventArgs e)308 {309 _sessionClosedTcs.TrySetException(new TargetClosedException("Target closed", "Session closed"));310 Client.Disconnected -= clientDisconnected;311 }312 }313 return _sessionClosedTcs.Task;314 }315 }316 #endregion317 #region Public Methods318 /// <summary>319 /// A utility function to be used with <see cref="Extensions.EvaluateFunctionAsync{T}(Task{JSHandle}, string, object[])"/>320 /// </summary>321 /// <param name="selector">A selector to query page for</param>322 /// <returns>Task which resolves to a <see cref="JSHandle"/> of <c>document.querySelectorAll</c> result</returns>323 public Task<JSHandle> QuerySelectorAllHandleAsync(string selector)324 => EvaluateFunctionHandleAsync("selector => Array.from(document.querySelectorAll(selector))", selector);325 /// <summary>326 /// Executes a script in browser context327 /// </summary>328 /// <param name="script">Script to be evaluated in browser context</param>329 /// <remarks>330 /// If the script, returns a Promise, then the method would wait for the promise to resolve and return its value.331 /// </remarks>332 /// <returns>Task which resolves to script return value</returns>333 public async Task<JSHandle> EvaluateExpressionHandleAsync(string script)334 {335 var context = await MainFrame.GetExecutionContextAsync().ConfigureAwait(false);336 return await context.EvaluateExpressionHandleAsync(script).ConfigureAwait(false);337 }338 /// <summary>339 /// Executes a script in browser context340 /// </summary>341 /// <param name="pageFunction">Script to be evaluated in browser context</param>342 /// <param name="args">Function arguments</param>343 /// <remarks>344 /// If the script, returns a Promise, then the method would wait for the promise to resolve and return its value.345 /// <see cref="JSHandle"/> instances can be passed as arguments346 /// </remarks>347 /// <returns>Task which resolves to script return value</returns>348 public async Task<JSHandle> EvaluateFunctionHandleAsync(string pageFunction, params object[] args)349 {350 var context = await MainFrame.GetExecutionContextAsync().ConfigureAwait(false);351 return await context.EvaluateFunctionHandleAsync(pageFunction, args).ConfigureAwait(false);352 }353 /// <summary>354 /// Activating request interception enables <see cref="Request.AbortAsync(RequestAbortErrorCode)">request.AbortAsync</see>, 355 /// <see cref="Request.ContinueAsync(Payload)">request.ContinueAsync</see> and <see cref="Request.RespondAsync(ResponseData)">request.RespondAsync</see> methods.356 /// </summary>357 /// <returns>The request interception task.</returns>358 /// <param name="value">Whether to enable request interception..</param>359 public Task SetRequestInterceptionAsync(bool value)360 => FrameManager.NetworkManager.SetRequestInterceptionAsync(value);361 /// <summary>362 /// Set offline mode for the page.363 /// </summary>364 /// <returns>Result task</returns>365 /// <param name="value">When <c>true</c> enables offline mode for the page.</param>366 public Task SetOfflineModeAsync(bool value) => FrameManager.NetworkManager.SetOfflineModeAsync(value);367 /// <summary>368 /// Adds a <c><![CDATA[<script>]]></c> tag into the page with the desired url or content369 /// </summary>370 /// <param name="options">add script tag options</param>371 /// <remarks>372 /// Shortcut for <c>page.MainFrame.AddScriptTagAsync(options)</c>373 /// </remarks>374 /// <returns>Task which resolves to the added tag when the script's onload fires or when the script content was injected into frame</returns>375 /// <seealso cref="Frame.AddScriptTagAsync(AddTagOptions)"/>376 public Task<ElementHandle> AddScriptTagAsync(AddTagOptions options) => MainFrame.AddScriptTagAsync(options);377 /// <summary>378 /// Adds a <c><![CDATA[<script>]]></c> tag into the page with the desired url or content379 /// </summary>380 /// <param name="url">script url</param>381 /// <remarks>382 /// Shortcut for <c>page.MainFrame.AddScriptTagAsync(new AddTagOptions { Url = url })</c>383 /// </remarks>384 /// <returns>Task which resolves to the added tag when the script's onload fires or when the script content was injected into frame</returns>385 public Task<ElementHandle> AddScriptTagAsync(string url) => AddScriptTagAsync(new AddTagOptions { Url = url });386 /// <summary>387 /// Adds a <c><![CDATA[<link rel="stylesheet">]]></c> tag into the page with the desired url or a <c><![CDATA[<link rel="stylesheet">]]></c> tag with the content388 /// </summary>389 /// <param name="options">add style tag options</param>390 /// <remarks>391 /// Shortcut for <c>page.MainFrame.AddStyleTagAsync(options)</c>392 /// </remarks>393 /// <returns>Task which resolves to the added tag when the stylesheet's onload fires or when the CSS content was injected into frame</returns>394 /// <seealso cref="Frame.AddStyleTag(AddTagOptions)"/>395 public Task<ElementHandle> AddStyleTagAsync(AddTagOptions options) => MainFrame.AddStyleTagAsync(options);396 /// <summary>397 /// Adds a <c><![CDATA[<link rel="stylesheet">]]></c> tag into the page with the desired url or a <c><![CDATA[<link rel="stylesheet">]]></c> tag with the content398 /// </summary>399 /// <param name="url">stylesheel url</param>400 /// <remarks>401 /// Shortcut for <c>page.MainFrame.AddStyleTagAsync(new AddTagOptions { Url = url })</c>402 /// </remarks>403 /// <returns>Task which resolves to the added tag when the stylesheet's onload fires or when the CSS content was injected into frame</returns>404 public Task<ElementHandle> AddStyleTagAsync(string url) => AddStyleTagAsync(new AddTagOptions { Url = url });405 /// <summary>406 /// Adds a function called <c>name</c> on the page's <c>window</c> object.407 /// When called, the function executes <paramref name="puppeteerFunction"/> in C# and returns a <see cref="Task"/> which resolves when <paramref name="puppeteerFunction"/> completes.408 /// </summary>409 /// <param name="name">Name of the function on the window object</param>410 /// <param name="puppeteerFunction">Callback function which will be called in Puppeteer's context.</param>411 /// <remarks>412 /// If the <paramref name="puppeteerFunction"/> returns a <see cref="Task"/>, it will be awaited.413 /// Functions installed via <see cref="ExposeFunctionAsync(string, Action)"/> survive navigations414 /// </remarks>415 /// <returns>Task</returns>416 public Task ExposeFunctionAsync(string name, Action puppeteerFunction)417 => ExposeFunctionAsync(name, (Delegate)puppeteerFunction);418 /// <summary>419 /// Adds a function called <c>name</c> on the page's <c>window</c> object.420 /// When called, the function executes <paramref name="puppeteerFunction"/> in C# and returns a <see cref="Task"/> which resolves to the return value of <paramref name="puppeteerFunction"/>.421 /// </summary>422 /// <typeparam name="TResult">The result of <paramref name="puppeteerFunction"/></typeparam>423 /// <param name="name">Name of the function on the window object</param>424 /// <param name="puppeteerFunction">Callback function which will be called in Puppeteer's context.</param>425 /// <remarks>426 /// If the <paramref name="puppeteerFunction"/> returns a <see cref="Task"/>, it will be awaited.427 /// Functions installed via <see cref="ExposeFunctionAsync{TResult}(string, Func{TResult})"/> survive navigations428 /// </remarks>429 /// <returns>Task</returns>430 public Task ExposeFunctionAsync<TResult>(string name, Func<TResult> puppeteerFunction)431 => ExposeFunctionAsync(name, (Delegate)puppeteerFunction);432 /// <summary>433 /// Adds a function called <c>name</c> on the page's <c>window</c> object.434 /// When called, the function executes <paramref name="puppeteerFunction"/> in C# and returns a <see cref="Task"/> which resolves to the return value of <paramref name="puppeteerFunction"/>.435 /// </summary>436 /// <typeparam name="TResult">The result of <paramref name="puppeteerFunction"/></typeparam>437 /// <typeparam name="T">The parameter of <paramref name="puppeteerFunction"/></typeparam>438 /// <param name="name">Name of the function on the window object</param>439 /// <param name="puppeteerFunction">Callback function which will be called in Puppeteer's context.</param>440 /// <remarks>441 /// If the <paramref name="puppeteerFunction"/> returns a <see cref="Task"/>, it will be awaited.442 /// Functions installed via <see cref="ExposeFunctionAsync{T, TResult}(string, Func{T, TResult})"/> survive navigations443 /// </remarks>444 /// <returns>Task</returns>445 public Task ExposeFunctionAsync<T, TResult>(string name, Func<T, TResult> puppeteerFunction)446 => ExposeFunctionAsync(name, (Delegate)puppeteerFunction);447 /// <summary>448 /// Adds a function called <c>name</c> on the page's <c>window</c> object.449 /// When called, the function executes <paramref name="puppeteerFunction"/> in C# and returns a <see cref="Task"/> which resolves to the return value of <paramref name="puppeteerFunction"/>.450 /// </summary>451 /// <typeparam name="TResult">The result of <paramref name="puppeteerFunction"/></typeparam>452 /// <typeparam name="T1">The first parameter of <paramref name="puppeteerFunction"/></typeparam>453 /// <typeparam name="T2">The second parameter of <paramref name="puppeteerFunction"/></typeparam>454 /// <param name="name">Name of the function on the window object</param>455 /// <param name="puppeteerFunction">Callback function which will be called in Puppeteer's context.</param>456 /// <remarks>457 /// If the <paramref name="puppeteerFunction"/> returns a <see cref="Task"/>, it will be awaited.458 /// Functions installed via <see cref="ExposeFunctionAsync{T1, T2, TResult}(string, Func{T1, T2, TResult})"/> survive navigations459 /// </remarks>460 /// <returns>Task</returns>461 public Task ExposeFunctionAsync<T1, T2, TResult>(string name, Func<T1, T2, TResult> puppeteerFunction)462 => ExposeFunctionAsync(name, (Delegate)puppeteerFunction);463 /// <summary>464 /// Adds a function called <c>name</c> on the page's <c>window</c> object.465 /// When called, the function executes <paramref name="puppeteerFunction"/> in C# and returns a <see cref="Task"/> which resolves to the return value of <paramref name="puppeteerFunction"/>.466 /// </summary>467 /// <typeparam name="TResult">The result of <paramref name="puppeteerFunction"/></typeparam>468 /// <typeparam name="T1">The first parameter of <paramref name="puppeteerFunction"/></typeparam>469 /// <typeparam name="T2">The second parameter of <paramref name="puppeteerFunction"/></typeparam>470 /// <typeparam name="T3">The third parameter of <paramref name="puppeteerFunction"/></typeparam>471 /// <param name="name">Name of the function on the window object</param>472 /// <param name="puppeteerFunction">Callback function which will be called in Puppeteer's context.</param>473 /// <remarks>474 /// If the <paramref name="puppeteerFunction"/> returns a <see cref="Task"/>, it will be awaited.475 /// Functions installed via <see cref="ExposeFunctionAsync{T1, T2, T3, TResult}(string, Func{T1, T2, T3, TResult})"/> survive navigations476 /// </remarks>477 /// <returns>Task</returns>478 public Task ExposeFunctionAsync<T1, T2, T3, TResult>(string name, Func<T1, T2, T3, TResult> puppeteerFunction)479 => ExposeFunctionAsync(name, (Delegate)puppeteerFunction);480 /// <summary>481 /// Adds a function called <c>name</c> on the page's <c>window</c> object.482 /// When called, the function executes <paramref name="puppeteerFunction"/> in C# and returns a <see cref="Task"/> which resolves to the return value of <paramref name="puppeteerFunction"/>.483 /// </summary>484 /// <typeparam name="TResult">The result of <paramref name="puppeteerFunction"/></typeparam>485 /// <typeparam name="T1">The first parameter of <paramref name="puppeteerFunction"/></typeparam>486 /// <typeparam name="T2">The second parameter of <paramref name="puppeteerFunction"/></typeparam>487 /// <typeparam name="T3">The third parameter of <paramref name="puppeteerFunction"/></typeparam>488 /// <typeparam name="T4">The fourth parameter of <paramref name="puppeteerFunction"/></typeparam>489 /// <param name="name">Name of the function on the window object</param>490 /// <param name="puppeteerFunction">Callback function which will be called in Puppeteer's context.</param>491 /// <remarks>492 /// If the <paramref name="puppeteerFunction"/> returns a <see cref="Task"/>, it will be awaited.493 /// Functions installed via <see cref="ExposeFunctionAsync{T1, T2, T3, T4, TResult}(string, Func{T1, T2, T3, T4, TResult})"/> survive navigations494 /// </remarks>495 /// <returns>Task</returns>496 public Task ExposeFunctionAsync<T1, T2, T3, T4, TResult>(string name, Func<T1, T2, T3, T4, TResult> puppeteerFunction)497 => ExposeFunctionAsync(name, (Delegate)puppeteerFunction);498 /// <summary>499 /// Gets the full HTML contents of the page, including the doctype.500 /// </summary>501 /// <returns>Task which resolves to the HTML content.</returns>502 /// <seealso cref="Frame.GetContentAsync"/>503 public Task<string> GetContentAsync() => FrameManager.MainFrame.GetContentAsync();504 /// <summary>505 /// Sets the HTML markup to the page506 /// </summary>507 /// <param name="html">HTML markup to assign to the page.</param>508 /// <param name="options">The navigations options</param>509 /// <returns>Task.</returns>510 /// <seealso cref="Frame.SetContentAsync(string, NavigationOptions)"/>511 public Task SetContentAsync(string html, NavigationOptions options = null) => FrameManager.MainFrame.SetContentAsync(html, options);512 /// <summary>513 /// Navigates to an url514 /// </summary>515 /// <remarks>516 /// <see cref="GoToAsync(string, int?, WaitUntilNavigation[])"/> will throw an error if:517 /// - there's an SSL error (e.g. in case of self-signed certificates).518 /// - target URL is invalid.519 /// - the `timeout` is exceeded during navigation.520 /// - the remote server does not respond or is unreachable.521 /// - the main resource failed to load.522 /// 523 /// <see cref="GoToAsync(string, int?, WaitUntilNavigation[])"/> will not throw an error when any valid HTTP status code is returned by the remote server, 524 /// including 404 "Not Found" and 500 "Internal Server Error". The status code for such responses can be retrieved by calling <see cref="Response.Status"/>525 /// 526 /// > **NOTE** <see cref="GoToAsync(string, int?, WaitUntilNavigation[])"/> either throws an error or returns a main resource response. 527 /// The only exceptions are navigation to `about:blank` or navigation to the same URL with a different hash, which would succeed and return `null`.528 /// 529 /// > **NOTE** Headless mode doesn't support navigation to a PDF document. See the <see fref="https://bugs.chromium.org/p/chromium/issues/detail?id=761295">upstream issue</see>.530 /// 531 /// Shortcut for <seealso cref="Frame.GoToAsync(string, int?, WaitUntilNavigation[])"/>532 /// </remarks>533 /// <param name="url">URL to navigate page to. The url should include scheme, e.g. https://.</param>534 /// <param name="options">Navigation parameters.</param>535 /// <returns>Task which resolves to the main resource response. In case of multiple redirects, the navigation will resolve with the response of the last redirect.</returns>536 /// <seealso cref="GoToAsync(string, int?, WaitUntilNavigation[])"/>537 public Task<Response> GoToAsync(string url, NavigationOptions options) => FrameManager.MainFrame.GoToAsync(url, options);538 /// <summary>539 /// Navigates to an url540 /// </summary>541 /// <param name="url">URL to navigate page to. The url should include scheme, e.g. https://.</param>542 /// <param name="timeout">Maximum navigation time in milliseconds, defaults to 30 seconds, pass <c>0</c> to disable timeout. </param>543 /// <param name="waitUntil">When to consider navigation succeeded, defaults to <see cref="WaitUntilNavigation.Load"/>. Given an array of <see cref="WaitUntilNavigation"/>, navigation is considered to be successful after all events have been fired</param>544 /// <returns>Task which resolves to the main resource response. In case of multiple redirects, the navigation will resolve with the response of the last redirect</returns>545 /// <seealso cref="GoToAsync(string, NavigationOptions)"/>546 public Task<Response> GoToAsync(string url, int? timeout = null, WaitUntilNavigation[] waitUntil = null)547 => GoToAsync(url, new NavigationOptions { Timeout = timeout, WaitUntil = waitUntil });548 /// <summary>549 /// Navigates to an url550 /// </summary>551 /// <param name="url">URL to navigate page to. The url should include scheme, e.g. https://.</param>552 /// <param name="waitUntil">When to consider navigation succeeded.</param>553 /// <returns>Task which resolves to the main resource response. In case of multiple redirects, the navigation will resolve with the response of the last redirect</returns>554 /// <seealso cref="GoToAsync(string, NavigationOptions)"/>555 public Task<Response> GoToAsync(string url, WaitUntilNavigation waitUntil)556 => GoToAsync(url, new NavigationOptions { WaitUntil = new[] { waitUntil } });557 /// <summary>558 /// generates a pdf of the page with <see cref="MediaType.Print"/> css media. To generate a pdf with <see cref="MediaType.Screen"/> media call <see cref="EmulateMediaAsync(MediaType)"/> with <see cref="MediaType.Screen"/>559 /// </summary>560 /// <param name="file">The file path to save the PDF to. paths are resolved using <see cref="Path.GetFullPath(string)"/></param>561 /// <returns></returns>562 /// <remarks>563 /// Generating a pdf is currently only supported in Chrome headless564 /// </remarks>565 public Task PdfAsync(string file) => PdfAsync(file, new PdfOptions());566 /// <summary>567 /// generates a pdf of the page with <see cref="MediaType.Print"/> css media. To generate a pdf with <see cref="MediaType.Screen"/> media call <see cref="EmulateMediaAsync(MediaType)"/> with <see cref="MediaType.Screen"/>568 /// </summary>569 /// <param name="file">The file path to save the PDF to. paths are resolved using <see cref="Path.GetFullPath(string)"/></param>570 /// <param name="options">pdf options</param>571 /// <returns></returns>572 /// <remarks>573 /// Generating a pdf is currently only supported in Chrome headless574 /// </remarks>575 public async Task PdfAsync(string file, PdfOptions options)576 => await PdfInternalAsync(file, options).ConfigureAwait(false);577 /// <summary>578 /// generates a pdf of the page with <see cref="MediaType.Print"/> css media. To generate a pdf with <see cref="MediaType.Screen"/> media call <see cref="EmulateMediaAsync(MediaType)"/> with <see cref="MediaType.Screen"/>579 /// </summary>580 /// <returns>Task which resolves to a <see cref="Stream"/> containing the PDF data.</returns>581 /// <remarks>582 /// Generating a pdf is currently only supported in Chrome headless583 /// </remarks>584 public Task<Stream> PdfStreamAsync() => PdfStreamAsync(new PdfOptions());585 /// <summary>586 /// Generates a pdf of the page with <see cref="MediaType.Print"/> css media. To generate a pdf with <see cref="MediaType.Screen"/> media call <see cref="EmulateMediaAsync(MediaType)"/> with <see cref="MediaType.Screen"/>587 /// </summary>588 /// <param name="options">pdf options</param>589 /// <returns>Task which resolves to a <see cref="Stream"/> containing the PDF data.</returns>590 /// <remarks>591 /// Generating a pdf is currently only supported in Chrome headless592 /// </remarks>593 public async Task<Stream> PdfStreamAsync(PdfOptions options)594 => new MemoryStream(await PdfDataAsync(options).ConfigureAwait(false));595 /// <summary>596 /// Generates a pdf of the page with <see cref="MediaType.Print"/> css media. To generate a pdf with <see cref="MediaType.Screen"/> media call <see cref="EmulateMediaAsync(MediaType)"/> with <see cref="MediaType.Screen"/>597 /// </summary>598 /// <returns>Task which resolves to a <see cref="byte"/>[] containing the PDF data.</returns>599 /// <remarks>600 /// Generating a pdf is currently only supported in Chrome headless601 /// </remarks>602 public Task<byte[]> PdfDataAsync() => PdfDataAsync(new PdfOptions());603 /// <summary>604 /// Generates a pdf of the page with <see cref="MediaType.Print"/> css media. To generate a pdf with <see cref="MediaType.Screen"/> media call <see cref="EmulateMediaAsync(MediaType)"/> with <see cref="MediaType.Screen"/>605 /// </summary>606 /// <param name="options">pdf options</param>607 /// <returns>Task which resolves to a <see cref="byte"/>[] containing the PDF data.</returns>608 /// <remarks>609 /// Generating a pdf is currently only supported in Chrome headless610 /// </remarks>611 public Task<byte[]> PdfDataAsync(PdfOptions options) => PdfInternalAsync(null, options);612 internal async Task<byte[]> PdfInternalAsync(string file, PdfOptions options)613 {614 var paperWidth = PaperFormat.Letter.Width;615 var paperHeight = PaperFormat.Letter.Height;616 if (options.Format != null)617 {618 paperWidth = options.Format.Width;619 paperHeight = options.Format.Height;620 }621 else622 {623 if (options.Width != null)624 {625 paperWidth = ConvertPrintParameterToInches(options.Width);626 }627 if (options.Height != null)628 {629 paperHeight = ConvertPrintParameterToInches(options.Height);630 }631 }632 var marginTop = ConvertPrintParameterToInches(options.MarginOptions.Top);633 var marginLeft = ConvertPrintParameterToInches(options.MarginOptions.Left);634 var marginBottom = ConvertPrintParameterToInches(options.MarginOptions.Bottom);635 var marginRight = ConvertPrintParameterToInches(options.MarginOptions.Right);636 var result = await Client.SendAsync<PagePrintToPDFResponse>("Page.printToPDF", new PagePrintToPDFRequest637 {638 TransferMode = "ReturnAsStream",639 Landscape = options.Landscape,640 DisplayHeaderFooter = options.DisplayHeaderFooter,641 HeaderTemplate = options.HeaderTemplate,642 FooterTemplate = options.FooterTemplate,643 PrintBackground = options.PrintBackground,644 Scale = options.Scale,645 PaperWidth = paperWidth,646 PaperHeight = paperHeight,647 MarginTop = marginTop,648 MarginBottom = marginBottom,649 MarginLeft = marginLeft,650 MarginRight = marginRight,651 PageRanges = options.PageRanges,652 PreferCSSPageSize = options.PreferCSSPageSize653 }).ConfigureAwait(false);654 return await ProtocolStreamReader.ReadProtocolStreamByteAsync(Client, result.Stream, file).ConfigureAwait(false);655 }656 /// <summary>657 /// Enables/Disables Javascript on the page658 /// </summary>659 /// <returns>Task.</returns>660 /// <param name="enabled">Whether or not to enable JavaScript on the page.</param>661 public Task SetJavaScriptEnabledAsync(bool enabled)662 {663 if (enabled == JavascriptEnabled)664 {665 return Task.CompletedTask;666 }667 JavascriptEnabled = enabled;668 return Client.SendAsync("Emulation.setScriptExecutionDisabled", new EmulationSetScriptExecutionDisabledRequest669 {670 Value = !enabled671 });672 }673 /// <summary>674 /// Toggles bypassing page's Content-Security-Policy.675 /// </summary>676 /// <param name="enabled">sets bypassing of page's Content-Security-Policy.</param>677 /// <returns></returns>678 /// <remarks>679 /// CSP bypassing happens at the moment of CSP initialization rather then evaluation.680 /// Usually this means that <see cref="SetBypassCSPAsync(bool)"/> should be called before navigating to the domain.681 /// </remarks>682 public Task SetBypassCSPAsync(bool enabled) => Client.SendAsync("Page.setBypassCSP", new PageSetBypassCSPRequest683 {684 Enabled = enabled685 });686 /// <summary>687 /// Emulates a media such as screen or print.688 /// </summary>689 /// <returns>Task.</returns>690 /// <param name="media">Media to set.</param>691 [Obsolete("User EmulateMediaTypeAsync instead")]692 public Task EmulateMediaAsync(MediaType media) => EmulateMediaTypeAsync(media);693 /// <summary>694 /// Emulates a media such as screen or print.695 /// </summary>696 /// <param name="type">Media to set.</param>697 /// <example>698 /// <code>699 /// <![CDATA[700 /// await page.EvaluateFunctionAsync<bool>("() => matchMedia('screen').matches)");701 /// // → true702 /// await page.EvaluateFunctionAsync<bool>("() => matchMedia('print').matches)");703 /// // → true704 /// await page.EmulateMediaTypeAsync(MediaType.Print);705 /// await page.EvaluateFunctionAsync<bool>("() => matchMedia('screen').matches)");706 /// // → false707 /// await page.EvaluateFunctionAsync<bool>("() => matchMedia('print').matches)");708 /// // → true709 /// await page.EmulateMediaTypeAsync(MediaType.None);710 /// await page.EvaluateFunctionAsync<bool>("() => matchMedia('screen').matches)");711 /// // → true712 /// await page.EvaluateFunctionAsync<bool>("() => matchMedia('print').matches)");713 /// // → true714 /// ]]>715 /// </code>716 /// </example>717 /// <returns>Emulate media type task.</returns>718 public Task EmulateMediaTypeAsync(MediaType type)719 => Client.SendAsync("Emulation.setEmulatedMedia", new EmulationSetEmulatedMediaTypeRequest { Media = type });720 /// <summary>721 /// Given an array of media feature objects, emulates CSS media features on the page.722 /// </summary>723 /// <param name="features">Features to apply</param>724 /// <example>725 /// <code>726 /// <![CDATA[727 /// await page.EmulateMediaFeaturesAsync(new MediaFeature[]{ new MediaFeature { MediaFeature = MediaFeature.PrefersColorScheme, Value = "dark" }});728 /// await page.EvaluateFunctionAsync<bool>("() => matchMedia('(prefers-color-scheme: dark)').matches)");729 /// // → true730 /// await page.EvaluateFunctionAsync<bool>("() => matchMedia('(prefers-color-scheme: light)').matches)");731 /// // → false732 /// await page.EvaluateFunctionAsync<bool>("() => matchMedia('(prefers-color-scheme: no-preference)').matches)");733 /// // → false734 /// await page.EmulateMediaFeaturesAsync(new MediaFeature[]{ new MediaFeature { MediaFeature = MediaFeature.PrefersReducedMotion, Value = "reduce" }});735 /// await page.EvaluateFunctionAsync<bool>("() => matchMedia('(prefers-reduced-motion: reduce)').matches)");736 /// // → true737 /// await page.EvaluateFunctionAsync<bool>("() => matchMedia('(prefers-color-scheme: no-preference)').matches)");738 /// // → false739 /// await page.EmulateMediaFeaturesAsync(new MediaFeature[]740 /// { 741 /// new MediaFeature { MediaFeature = MediaFeature.PrefersColorScheme, Value = "dark" },742 /// new MediaFeature { MediaFeature = MediaFeature.PrefersReducedMotion, Value = "reduce" },743 /// });744 /// await page.EvaluateFunctionAsync<bool>("() => matchMedia('(prefers-color-scheme: dark)').matches)");745 /// // → true746 /// await page.EvaluateFunctionAsync<bool>("() => matchMedia('(prefers-color-scheme: light)').matches)");747 /// // → false748 /// await page.EvaluateFunctionAsync<bool>("() => matchMedia('(prefers-color-scheme: no-preference)').matches)");749 /// // → false750 /// await page.EvaluateFunctionAsync<bool>("() => matchMedia('(prefers-reduced-motion: reduce)').matches)");751 /// // → true752 /// await page.EvaluateFunctionAsync<bool>("() => matchMedia('(prefers-color-scheme: no-preference)').matches)");753 /// // → false754 /// ]]>755 /// </code>756 /// </example>757 /// <returns>Emulate features task</returns>758 public Task EmulateMediaFeaturesAsync(IEnumerable<MediaFeatureValue> features)759 => Client.SendAsync("Emulation.setEmulatedMedia", new EmulationSetEmulatedMediaFeatureRequest { Features = features });760 /// <summary>761 /// Sets the viewport.762 /// In the case of multiple pages in a single browser, each page can have its own viewport size.763 /// <see cref="SetViewportAsync(ViewPortOptions)"/> will resize the page. A lot of websites don't expect phones to change size, so you should set the viewport before navigating to the page.764 /// </summary>765 /// <example>766 ///<![CDATA[767 /// using(var page = await browser.NewPageAsync())768 /// {769 /// await page.SetViewPortAsync(new ViewPortOptions770 /// {771 /// Width = 640, 772 /// Height = 480, 773 /// DeviceScaleFactor = 1774 /// });775 /// await page.goto('https://www.example.com');776 /// }777 /// ]]>778 /// </example>779 /// <returns>The viewport task.</returns>780 /// <param name="viewport">Viewport options.</param>781 public async Task SetViewportAsync(ViewPortOptions viewport)782 {783 var needsReload = await _emulationManager.EmulateViewport(viewport).ConfigureAwait(false);784 Viewport = viewport;785 if (needsReload)786 {787 await ReloadAsync().ConfigureAwait(false);788 }789 }790 /// <summary>791 /// Closes the page.792 /// </summary>793 /// <param name="options">Close options.</param>794 /// <returns>Task.</returns>795 public Task CloseAsync(PageCloseOptions options = null)796 {797 if (!(Client?.Connection?.IsClosed ?? true))798 {799 var runBeforeUnload = options?.RunBeforeUnload ?? false;800 if (runBeforeUnload)801 {802 return Client.SendAsync("Page.close");803 }804 return Client.Connection.SendAsync("Target.closeTarget", new TargetCloseTargetRequest805 {806 TargetId = Target.TargetId807 }).ContinueWith(task => Target.CloseTask);808 }809 return _closeCompletedTcs.Task;810 }811 /// <summary>812 /// Reloads the page813 /// </summary>814 /// <param name="options">Navigation options</param>815 /// <returns>Task which resolves to the main resource response. In case of multiple redirects, the navigation will resolve with the response of the last redirect</returns>816 /// <seealso cref="ReloadAsync(int?, WaitUntilNavigation[])"/>817 public async Task<Response> ReloadAsync(NavigationOptions options)818 {819 var navigationTask = WaitForNavigationAsync(options);820 await Task.WhenAll(821 navigationTask,822 Client.SendAsync("Page.reload")823 ).ConfigureAwait(false);824 return navigationTask.Result;825 }826 /// <summary>827 /// Reloads the page828 /// </summary>829 /// <param name="timeout">Maximum navigation time in milliseconds, defaults to 30 seconds, pass <c>0</c> to disable timeout. </param>830 /// <param name="waitUntil">When to consider navigation succeeded, defaults to <see cref="WaitUntilNavigation.Load"/>. Given an array of <see cref="WaitUntilNavigation"/>, navigation is considered to be successful after all events have been fired</param>831 /// <returns>Task which resolves to the main resource response. In case of multiple redirects, the navigation will resolve with the response of the last redirect</returns>832 /// <seealso cref="ReloadAsync(NavigationOptions)"/>833 public Task<Response> ReloadAsync(int? timeout = null, WaitUntilNavigation[] waitUntil = null)834 => ReloadAsync(new NavigationOptions { Timeout = timeout, WaitUntil = waitUntil });835 /// <summary>836 /// Waits for a function to be evaluated to a truthy value837 /// </summary>838 /// <param name="script">Function to be evaluated in browser context</param>839 /// <param name="options">Optional waiting parameters</param>840 /// <param name="args">Arguments to pass to <c>script</c></param>841 /// <returns>A task that resolves when the <c>script</c> returns a truthy value</returns>842 /// <seealso cref="Frame.WaitForFunctionAsync(string, WaitForFunctionOptions, object[])"/>843 public Task<JSHandle> WaitForFunctionAsync(string script, WaitForFunctionOptions options = null, params object[] args)844 => MainFrame.WaitForFunctionAsync(script, options ?? new WaitForFunctionOptions(), args);845 /// <summary>846 /// Waits for an expression to be evaluated to a truthy value847 /// </summary>848 /// <param name="script">Expression to be evaluated in browser context</param>849 /// <param name="options">Optional waiting parameters</param>850 /// <returns>A task that resolves when the <c>script</c> returns a truthy value</returns>851 /// <seealso cref="Frame.WaitForExpressionAsync(string, WaitForFunctionOptions)"/>852 public Task<JSHandle> WaitForExpressionAsync(string script, WaitForFunctionOptions options = null)853 => MainFrame.WaitForExpressionAsync(script, options ?? new WaitForFunctionOptions());854 /// <summary>855 /// Waits for a selector to be added to the DOM856 /// </summary>857 /// <param name="selector">A selector of an element to wait for</param>858 /// <param name="options">Optional waiting parameters</param>859 /// <returns>A task that resolves when element specified by selector string is added to DOM.860 /// Resolves to `null` if waiting for `hidden: true` and selector is not found in DOM.</returns>861 /// <seealso cref="WaitForXPathAsync(string, WaitForSelectorOptions)"/>862 /// <seealso cref="Frame.WaitForSelectorAsync(string, WaitForSelectorOptions)"/>863 public Task<ElementHandle> WaitForSelectorAsync(string selector, WaitForSelectorOptions options = null)864 => MainFrame.WaitForSelectorAsync(selector, options ?? new WaitForSelectorOptions());865 /// <summary>866 /// Waits for a xpath selector to be added to the DOM867 /// </summary>868 /// <param name="xpath">A xpath selector of an element to wait for</param>869 /// <param name="options">Optional waiting parameters</param>870 /// <returns>A task which resolves when element specified by xpath string is added to DOM. 871 /// Resolves to `null` if waiting for `hidden: true` and xpath is not found in DOM.</returns>872 /// <example>873 /// <code>874 /// <![CDATA[875 /// var browser = await Puppeteer.LaunchAsync(new LaunchOptions());876 /// var page = await browser.NewPageAsync();877 /// string currentURL = null;878 /// page879 /// .WaitForXPathAsync("//img")880 /// .ContinueWith(_ => Console.WriteLine("First URL with image: " + currentURL));881 /// foreach (var current in new[] { "https://example.com", "https://google.com", "https://bbc.com" })882 /// {883 /// currentURL = current;884 /// await page.GoToAsync(currentURL);885 /// }886 /// await browser.CloseAsync();887 /// ]]>888 /// </code>889 /// </example>890 /// <seealso cref="WaitForSelectorAsync(string, WaitForSelectorOptions)"/>891 /// <seealso cref="Frame.WaitForXPathAsync(string, WaitForSelectorOptions)"/>892 public Task<ElementHandle> WaitForXPathAsync(string xpath, WaitForSelectorOptions options = null)893 => MainFrame.WaitForXPathAsync(xpath, options ?? new WaitForSelectorOptions());894 /// <summary>895 /// This resolves when the page navigates to a new URL or reloads.896 /// It is useful for when you run code which will indirectly cause the page to navigate.897 /// </summary>898 /// <param name="options">navigation options</param>899 /// <returns>Task which resolves to the main resource response. 900 /// In case of multiple redirects, the navigation will resolve with the response of the last redirect.901 /// In case of navigation to a different anchor or navigation due to History API usage, the navigation will resolve with `null`.902 /// </returns>903 /// <remarks>904 /// Usage of the <c>History API</c> <see href="https://developer.mozilla.org/en-US/docs/Web/API/History_API"/> to change the URL is considered a navigation905 /// </remarks>906 /// <example>907 /// <code>908 /// <![CDATA[909 /// var navigationTask = page.WaitForNavigationAsync();910 /// await page.ClickAsync("a.my-link");911 /// await navigationTask;912 /// ]]>913 /// </code>914 /// </example>915 public Task<Response> WaitForNavigationAsync(NavigationOptions options = null) => FrameManager.WaitForFrameNavigationAsync(FrameManager.MainFrame, options);916 /// <summary>917 /// Waits for a request.918 /// </summary>919 /// <example>920 /// <code>921 /// <![CDATA[922 /// var firstRequest = await page.WaitForRequestAsync("http://example.com/resource");923 /// return firstRequest.Url;924 /// ]]>925 /// </code>926 /// </example>927 /// <returns>A task which resolves when a matching request was made.</returns>928 /// <param name="url">URL to wait for.</param>929 /// <param name="options">Options.</param>930 public Task<Request> WaitForRequestAsync(string url, WaitForOptions options = null)931 => WaitForRequestAsync(request => request.Url == url, options);932 /// <summary>933 /// Waits for a request.934 /// </summary>935 /// <example>936 /// <code>937 /// <![CDATA[938 /// var request = await page.WaitForRequestAsync(request => request.Url === "http://example.com" && request.Method === HttpMethod.Get;939 /// return request.Url;940 /// ]]>941 /// </code>942 /// </example>943 /// <returns>A task which resolves when a matching request was made.</returns>944 /// <param name="predicate">Function which looks for a matching request.</param>945 /// <param name="options">Options.</param>946 public async Task<Request> WaitForRequestAsync(Func<Request, bool> predicate, WaitForOptions options = null)947 {948 var timeout = options?.Timeout ?? DefaultTimeout;949 var requestTcs = new TaskCompletionSource<Request>(TaskCreationOptions.RunContinuationsAsynchronously);950 void requestEventListener(object sender, RequestEventArgs e)951 {952 if (predicate(e.Request))953 {954 requestTcs.TrySetResult(e.Request);955 FrameManager.NetworkManager.Request -= requestEventListener;956 }957 }958 FrameManager.NetworkManager.Request += requestEventListener;959 await Task.WhenAny(requestTcs.Task, SessionClosedTask).WithTimeout(timeout, t =>960 {961 FrameManager.NetworkManager.Request -= requestEventListener;962 return new TimeoutException($"Timeout of {t.TotalMilliseconds} ms exceeded");963 }).ConfigureAwait(false);964 if (SessionClosedTask.IsFaulted)965 {966 await SessionClosedTask.ConfigureAwait(false);967 }968 return await requestTcs.Task.ConfigureAwait(false);969 }970 /// <summary>971 /// Waits for a response.972 /// </summary>973 /// <example>974 /// <code>975 /// <![CDATA[976 /// var firstResponse = await page.WaitForResponseAsync("http://example.com/resource");977 /// return firstResponse.Url;978 /// ]]>979 /// </code>980 /// </example>981 /// <returns>A task which resolves when a matching response is received.</returns>982 /// <param name="url">URL to wait for.</param>983 /// <param name="options">Options.</param>984 public Task<Response> WaitForResponseAsync(string url, WaitForOptions options = null)985 => WaitForResponseAsync(response => response.Url == url, options);986 /// <summary>987 /// Waits for a response.988 /// </summary>989 /// <example>990 /// <code>991 /// <![CDATA[992 /// var response = await page.WaitForResponseAsync(response => response.Url === "http://example.com" && response.Status === HttpStatus.Ok;993 /// return response.Url;994 /// ]]>995 /// </code>996 /// </example>997 /// <returns>A task which resolves when a matching response is received.</returns>998 /// <param name="predicate">Function which looks for a matching response.</param>999 /// <param name="options">Options.</param>1000 public async Task<Response> WaitForResponseAsync(Func<Response, bool> predicate, WaitForOptions options = null)1001 {1002 var timeout = options?.Timeout ?? DefaultTimeout;1003 var responseTcs = new TaskCompletionSource<Response>(TaskCreationOptions.RunContinuationsAsynchronously);1004 void responseEventListener(object sender, ResponseCreatedEventArgs e)1005 {1006 if (predicate(e.Response))1007 {1008 responseTcs.TrySetResult(e.Response);1009 FrameManager.NetworkManager.Response -= responseEventListener;1010 }1011 }1012 FrameManager.NetworkManager.Response += responseEventListener;1013 await Task.WhenAny(responseTcs.Task, SessionClosedTask).WithTimeout(timeout).ConfigureAwait(false);1014 if (SessionClosedTask.IsFaulted)1015 {1016 await SessionClosedTask.ConfigureAwait(false);1017 }1018 return await responseTcs.Task.ConfigureAwait(false);1019 }1020 /// <summary>1021 /// Navigate to the previous page in history.1022 /// </summary>1023 /// <returns>Task that resolves to the main resource response. In case of multiple redirects, 1024 /// the navigation will resolve with the response of the last redirect. If can not go back, resolves to null.</returns>1025 /// <param name="options">Navigation parameters.</param>1026 public Task<Response> GoBackAsync(NavigationOptions options = null) => GoAsync(-1, options);1027 /// <summary>1028 /// Navigate to the next page in history.1029 /// </summary>1030 /// <returns>Task that resolves to the main resource response. In case of multiple redirects, 1031 /// the navigation will resolve with the response of the last redirect. If can not go forward, resolves to null.</returns>1032 /// <param name="options">Navigation parameters.</param>1033 public Task<Response> GoForwardAsync(NavigationOptions options = null) => GoAsync(1, options);1034 /// <summary>1035 /// Resets the background color and Viewport after taking Screenshots using BurstMode.1036 /// </summary>1037 /// <returns>The burst mode off.</returns>1038 public Task SetBurstModeOffAsync()1039 {1040 return Task.CompletedTask;...

Full Screen

Full Screen

BlazorTest.cs

Source:BlazorTest.cs Github

copy

Full Screen

...134 {135 var page = await Page();136137 await page.GoToAsync("https://github.com/kblok/puppeteer-sharp");138 await page.GoBackAsync();139 await page.GoForwardAsync();140 await page.ReloadAsync();141 }142143 [Fact]144 public async Task timeout()145 {146 var page = await Page();147148 var timeout = TimeSpan.FromSeconds(30).Milliseconds; // default value149150 page.DefaultNavigationTimeout = timeout;151 //page.DefaultWaitForTimeout = timeout;152153 var options = new NavigationOptions { Timeout = timeout };154155 await page.GoToAsync("https://github.com/kblok/puppeteer-sharp", options);156 await page.GoBackAsync(options);157 await page.GoForwardAsync(options);158 await page.ReloadAsync(options);159 }160161 [Fact]162 public async Task wait()163 {164 var page = await Page();165166 var timeout = TimeSpan.FromSeconds(3).Milliseconds;167168 var request = page.WaitForRequestAsync("https://github.com/kblok/puppeteer-sharp", new WaitForOptions { Timeout = timeout });169 var response = page.WaitForResponseAsync("https://github.com/kblok/puppeteer-sharp", new WaitForOptions { Timeout = timeout });170 ...

Full Screen

Full Screen

Methods.cs

Source:Methods.cs Github

copy

Full Screen

...139 public static async Task PuppeteerGoBack(BotData data)140 {141 data.Logger.LogHeader();142 var page = GetPage(data);143 await page.GoBackAsync();144 SwitchToMainFramePrivate(data);145 data.Logger.Log($"Went back to the previously visited page", LogColors.DarkSalmon);146 }147 [Block("Goes forward to the next visited page", name = "Go Forward")]148 public static async Task PuppeteerGoForward(BotData data)149 {150 data.Logger.LogHeader();151 var page = GetPage(data);152 await page.GoForwardAsync();153 SwitchToMainFramePrivate(data);154 data.Logger.Log($"Went forward to the next visited page", LogColors.DarkSalmon);155 }156 private static PuppeteerSharp.Browser GetBrowser(BotData data)157 => data.TryGetObject<PuppeteerSharp.Browser>("puppeteer") ?? throw new Exception("The browser is not open!");...

Full Screen

Full Screen

Examples.cs

Source:Examples.cs Github

copy

Full Screen

...40 [Fact]41 public async Task navigation()42 {43 await _page.GoToAsync("https://github.com/hardkoded/puppeteer-sharp");44 await _page.GoBackAsync();45 await _page.GoForwardAsync();46 await _page.ReloadAsync();47 }48 [Fact]49 public async Task timeout()50 {51 var timeout = (int) TimeSpan.FromSeconds(30).TotalMilliseconds; // default value52 _page.DefaultNavigationTimeout = timeout;53 _page.DefaultTimeout = timeout;54 var options = new NavigationOptions { Timeout = timeout };55 await _page.GoToAsync("https://github.com/hardkoded/puppeteer-sharp", options);56 await _page.GoBackAsync(options);57 await _page.GoForwardAsync(options);58 await _page.ReloadAsync(options);59 }60 [Fact]61 public async Task wait()62 {63 var timeout = (int) TimeSpan.FromSeconds(3).TotalMilliseconds;64 var requestTask = _page.WaitForRequestAsync("https://github.com/hardkoded/puppeteer-sharp", new WaitForOptions { Timeout = timeout });65 var responseTask = _page.WaitForResponseAsync("https://github.com/hardkoded/puppeteer-sharp", new WaitForOptions { Timeout = timeout });66 await _page.GoToAsync("https://github.com/hardkoded/puppeteer-sharp");67 await Task.WhenAll(requestTask, responseTask);68 await _page.ClickAsync("h1 > strong > a");69 await _page.WaitForNavigationAsync(new NavigationOptions { Timeout = timeout });70 await _page.WaitForExpressionAsync("1 + 1 === 2", new WaitForFunctionOptions { Timeout = timeout });...

Full Screen

Full Screen

Program.cs

Source:Program.cs Github

copy

Full Screen

...63 var text = await page.EvaluateExpressionAsync<string>("document.querySelector('livejournal').innerHTML");64 text = text.Replace("<?xml version=\"1.0\" encoding='utf-8'?>", "").Replace("<livejournal>", "").Replace("</livejournal>", "");65 currentYearContent.Append(text);66 // Go back one page to return to the export page.67 await page.GoBackAsync();68 // Wait for page navigation isn't working for some reason =/69 await page.WaitForTimeoutAsync(10000);70 }71 currentYearContent.Insert(0, "<livejournal>").Append("</livejournal>");72 Console.WriteLine($"Saving {username}-{year}.txt");73 await File.WriteAllTextAsync($"./{username}-{year}.txt", currentYearContent.ToString());74}75// Screenshot it for testing76//await page.ScreenshotAsync("./export.png");...

Full Screen

Full Screen

PageGoBackTests.cs

Source:PageGoBackTests.cs Github

copy

Full Screen

...17 public async Task ShouldWork()18 {19 await Page.GoToAsync(TestConstants.EmptyPage);20 await Page.GoToAsync(TestConstants.ServerUrl + "/grid.html");21 var response = await Page.GoBackAsync();22 Assert.True(response.Ok);23 Assert.Equal(TestConstants.EmptyPage, response.Url);24 response = await Page.GoForwardAsync();25 Assert.True(response.Ok);26 Assert.Contains("grid", response.Url);27 response = await Page.GoForwardAsync();28 Assert.Null(response);29 }30 [PuppeteerTest("navigation.spec.ts", "Page.goBack", "should work with HistoryAPI")]31 [SkipBrowserFact(skipFirefox: true)]32 public async Task ShouldWorkWithHistoryAPI()33 {34 await Page.GoToAsync(TestConstants.EmptyPage);35 await Page.EvaluateExpressionAsync(@"36 history.pushState({ }, '', '/first.html');37 history.pushState({ }, '', '/second.html');38 ");39 Assert.Equal(TestConstants.ServerUrl + "/second.html", Page.Url);40 await Page.GoBackAsync();41 Assert.Equal(TestConstants.ServerUrl + "/first.html", Page.Url);42 await Page.GoBackAsync();43 Assert.Equal(TestConstants.EmptyPage, Page.Url);44 await Page.GoForwardAsync();45 Assert.Equal(TestConstants.ServerUrl + "/first.html", Page.Url);46 }47 }48}

Full Screen

Full Screen

GoBackTests.cs

Source:GoBackTests.cs Github

copy

Full Screen

...13 public async Task ShouldWork()14 {15 await Page.GoToAsync(TestConstants.EmptyPage);16 await Page.GoToAsync(TestConstants.ServerUrl + "/grid.html");17 var response = await Page.GoBackAsync();18 Assert.True(response.Ok);19 Assert.Equal(TestConstants.EmptyPage, response.Url);20 response = await Page.GoForwardAsync();21 Assert.True(response.Ok);22 Assert.Contains("grid", response.Url);23 response = await Page.GoForwardAsync();24 Assert.Null(response);25 }26 [Fact]27 public async Task ShouldWorkWithHistoryAPI()28 {29 await Page.GoToAsync(TestConstants.EmptyPage);30 await Page.EvaluateExpressionAsync(@"31 history.pushState({ }, '', '/first.html');32 history.pushState({ }, '', '/second.html');33 ");34 Assert.Equal(TestConstants.ServerUrl + "/second.html", Page.Url);35 await Page.GoBackAsync();36 Assert.Equal(TestConstants.ServerUrl + "/first.html", Page.Url);37 await Page.GoBackAsync();38 Assert.Equal(TestConstants.EmptyPage, Page.Url);39 await Page.GoForwardAsync();40 Assert.Equal(TestConstants.ServerUrl + "/first.html", Page.Url);41 }42 }43}...

Full Screen

Full Screen

GoBackAsync

Using AI Code Generation

copy

Full Screen

1using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions2{3 Args = new string[] { "--no-sandbox", "--disable-setuid-sandbox" }4}))5{6 var page = await browser.NewPageAsync();7 await page.GoBackAsync();8 await page.CloseAsync();9 await browser.CloseAsync();10}11using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions12{13 Args = new string[] { "--no-sandbox", "--disable-setuid-sandbox" }14}))15{16 var page = await browser.NewPageAsync();17 await page.GoBackAsync();18 await page.GoForwardAsync();19 await page.CloseAsync();20 await browser.CloseAsync();21}22using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions23{24 Args = new string[] { "--no-sandbox", "--disable-setuid-sandbox" }25}))26{27 var page = await browser.NewPageAsync();28 await page.ReloadAsync();29 await page.CloseAsync();30 await browser.CloseAsync();31}32using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions33{34 Args = new string[] { "--no-sandbox", "--disable-setuid-sandbox" }35}))36{37 var page = await browser.NewPageAsync();38 await page.WaitForNavigationAsync();39 await page.CloseAsync();40 await browser.CloseAsync();41}42using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions43{44 Args = new string[] { "--no-sandbox", "--disable-setuid-sandbox" }45}))46{47 var page = await browser.NewPageAsync();

Full Screen

Full Screen

GoBackAsync

Using AI Code Generation

copy

Full Screen

1var page = await browser.NewPageAsync();2await page.GoBackAsync();3await page.GoForwardAsync();4await page.GoBackAsync();5await page.GoForwardAsync();6await page.GoBackAsync();7await page.GoForwardAsync();8await page.GoBackAsync();9await page.GoForwardAsync();10var page = await browser.NewPageAsync();11await page.GoBackAsync();12await page.GoForwardAsync();13await page.GoBackAsync();14await page.GoForwardAsync();15await page.GoBackAsync();16await page.GoForwardAsync();17await page.GoBackAsync();18await page.GoForwardAsync();19var page = await browser.NewPageAsync();20await page.GoBackAsync();21await page.GoForwardAsync();22await page.GoBackAsync();23await page.GoForwardAsync();24await page.GoBackAsync();25await page.GoForwardAsync();26await page.GoBackAsync();27await page.GoForwardAsync();28var page = await browser.NewPageAsync();29await page.GoBackAsync();30await page.GoForwardAsync();31await page.GoBackAsync();32await page.GoForwardAsync();33await page.GoBackAsync();34await page.GoForwardAsync();35await page.GoBackAsync();36await page.GoForwardAsync();37var page = await browser.NewPageAsync();38await page.GoBackAsync();39await page.GoForwardAsync();

Full Screen

Full Screen

GoBackAsync

Using AI Code Generation

copy

Full Screen

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.GoBackAsync();13 await page.GoForwardAsync();14 await page.GoBackAsync();15 await page.GoForwardAsync();16 await page.GoForwardAsync();17 await page.GoBackAsync();18 await page.GoBackAsync();19 await page.GoBackAsync();20 await page.GoForwardAsync();21 await page.GoForwardAsync();22 await page.GoForwardAsync();23 await page.GoForwardAsync();

Full Screen

Full Screen

Automation Testing Tutorials

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.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Puppeteer-sharp automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Most used method in Page

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful