using System; using System.Threading.Tasks; using Xunit; namespace PuppeteerSharp.Extensions.Tests { public class Documentation { [Fact] public async Task download_Chromium() { await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision); } [Fact] public async Task Browser() { var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true }); return browser; } [Fact] public async Task close_Browser() { var browser = await Browser(); await browser.CloseAsync(); } [Fact] public async Task using_Browser() { var options = new LaunchOptions { Headless = true }; using (var browser = await Puppeteer.LaunchAsync(options)) { // ... } } [Fact] public async Task Page() { var browser = await Browser(); var page = await browser.NewPageAsync(); return page; } [Fact] public async Task close_Page() { var page = await Page(); await page.CloseAsync(); } [Fact] public async Task using_Page() { var browser = await Browser(); using (var page = await browser.NewPageAsync()) { // ... } } [Fact] public async Task navigation() { var page = await Page(); await page.GoToAsync("https://github.com/kblok/puppeteer-sharp"); await page.GoBackAsync(); await page.GoForwardAsync(); await page.ReloadAsync(); } [Fact] public async Task timeout() { var page = await Page(); var timeout = TimeSpan.FromSeconds(30).Milliseconds; // default value page.DefaultNavigationTimeout = timeout; page.DefaultWaitForTimeout = timeout; var options = new NavigationOptions { Timeout = timeout }; await page.GoToAsync("https://github.com/kblok/puppeteer-sharp", options); await page.GoBackAsync(options); await page.GoForwardAsync(options); await page.ReloadAsync(options); } [Fact] public async Task wait() { var page = await Page(); var timeout = TimeSpan.FromSeconds(3).Milliseconds; var request = page.WaitForRequestAsync("https://github.com/kblok/puppeteer-sharp", new WaitForOptions { Timeout = timeout }); var response = page.WaitForResponseAsync("https://github.com/kblok/puppeteer-sharp", new WaitForOptions { Timeout = timeout }); await page.GoToAsync("https://github.com/kblok/puppeteer-sharp"); await Task.WhenAll(request, response); await page.ClickAsync("h1 > strong > a"); await page.WaitForNavigationAsync(new NavigationOptions { Timeout = timeout }); await page.WaitForExpressionAsync("1 + 1 === 2", new WaitForFunctionOptions { Timeout = timeout }); await page.WaitForFunctionAsync("() => window.location.href === 'https://github.com/kblok/puppeteer-sharp'", new WaitForFunctionOptions { Timeout = timeout }); await page.WaitForSelectorAsync("#readme", new WaitForSelectorOptions { Timeout = timeout }); await page.WaitForXPathAsync("//*[@id='readme']", new WaitForSelectorOptions { Timeout = timeout }); await page.WaitForTimeoutAsync(timeout); // WaitUntilNavigation new NavigationOptions().WaitUntil = new[] { WaitUntilNavigation.Load, WaitUntilNavigation.DOMContentLoaded, WaitUntilNavigation.Networkidle0, WaitUntilNavigation.Networkidle2 }; // Frame var frame = page.MainFrame; await frame.WaitForExpressionAsync("1 + 1 === 2", new WaitForFunctionOptions { Timeout = timeout }); await frame.WaitForFunctionAsync("() => window.location.href === 'https://github.com/kblok/puppeteer-sharp'", new WaitForFunctionOptions { Timeout = timeout }); await frame.WaitForSelectorAsync("#readme", new WaitForSelectorOptions { Timeout = timeout }); await frame.WaitForXPathAsync("//*[@id='readme']", new WaitForSelectorOptions { Timeout = timeout }); await frame.WaitForTimeoutAsync(timeout); } [Fact] public async Task values_from_Page() { var page = await Page(); var url = page.Url; var title = await page.GetTitleAsync(); var content = await page.GetContentAsync(); var cookies = await page.GetCookiesAsync(); } [Fact] public async Task form() { var page = await Page(); await page.GoToAsync("http://toolsqa.com/automation-practice-form/"); // input / text await page.TypeAsync("input[name='firstname']", "Puppeteer"); // input / radio await page.ClickAsync("#exp-6"); // input / checkbox await page.ClickAsync("#profession-1"); // TODO: Check / Uncheck // select / option await page.SelectAsync("#continents", "Europe"); // input / file var file = await page.QuerySelectorAsync("#photo"); await file.UploadFileAsync(@"c:\temp\test.jpg"); // button await page.ClickAsync("#submit"); } [Fact] public async Task query() { var page = await Page(); await page.GoToAsync("https://github.com/kblok/puppeteer-sharp"); var element = await page.QuerySelectorAsync("h1 > strong > a"); var elements = await page.QuerySelectorAllAsync("a"); Assert.NotNull(element); Assert.NotEmpty(elements); var missingElement = await page.QuerySelectorAsync("a#missing-link"); var missingElements = await page.QuerySelectorAllAsync("a.missing-link"); Assert.Null(missingElement); Assert.Empty(missingElements); var innerHtml = await element.GetPropertyAsync("innerHTML").Result.JsonValueAsync(); var outerHtml = await element.GetPropertyAsync("outerHTML").Result.JsonValueAsync(); var url = await element.GetPropertyAsync("href").Result.JsonValueAsync(); Assert.Equal("puppeteer-sharp", innerHtml); Assert.Equal("puppeteer-sharp", outerHtml); Assert.Equal("https://github.com/kblok/puppeteer-sharp", url); var innerText = await page.QuerySelectorAsync("h1 > strong > a").EvaluateFunctionAsync("node => node.innerText"); var outerText = await page.QuerySelectorAsync("h1 > strong > a").EvaluateFunctionAsync("node => node.outerText"); var textContent = await page.QuerySelectorAsync("h1 > strong > a").EvaluateFunctionAsync("node => node.textContent"); var hasContent = await page.QuerySelectorAsync("h1 > strong > a").EvaluateFunctionAsync("(node, value) => node.textContent.includes(value)", "puppeteer-sharp"); Assert.Equal("puppeteer-sharp", innerText); Assert.Equal("puppeteer-sharp", outerText); Assert.Equal("puppeteer-sharp", textContent); Assert.True(hasContent); innerHtml = await page.QuerySelectorAsync("h1 > strong > a").EvaluateFunctionAsync("element => element.innerHTML"); outerHtml = await page.QuerySelectorAsync("h1 > strong > a").EvaluateFunctionAsync("element => element.outerHTML"); url = await page.QuerySelectorAsync("h1 > strong > a").EvaluateFunctionAsync("element => element.getAttribute('href')"); Assert.Equal("puppeteer-sharp", innerHtml); Assert.Equal("puppeteer-sharp", outerHtml); Assert.Equal("/kblok/puppeteer-sharp", url); innerText = await page.EvaluateFunctionAsync("node => node.innerText", element); outerText = await page.EvaluateFunctionAsync("node => node.outerText", element); textContent = await page.EvaluateFunctionAsync("node => node.textContent", element); Assert.Equal("puppeteer-sharp", innerText); Assert.Equal("puppeteer-sharp", outerText); Assert.Equal("puppeteer-sharp", textContent); } } }