1+ using System ;
2+ using System . Collections . Generic ;
3+ using System . Diagnostics ;
4+ using System . IO ;
5+ using System . Linq ;
6+ using System . Net ;
7+ using System . Runtime . InteropServices ;
8+ using System . Threading . Tasks ;
9+ using PuppeteerSharp . Helpers ;
10+ using Xunit ;
11+ using Xunit . Abstractions ;
12+
13+ namespace PuppeteerSharp . Tests . PuppeteerTests
14+ {
15+ [ Collection ( "PuppeteerLoaderFixture collection" ) ]
16+ public class HeadfulTests : PuppeteerBaseTest
17+ {
18+ public HeadfulTests ( ITestOutputHelper output ) : base ( output )
19+ {
20+ }
21+
22+ [ Fact ]
23+ public async Task BackgroundPageTargetTypeShouldBeAvailable ( )
24+ {
25+ using ( var browserWithExtension = await Puppeteer . LaunchAsync (
26+ TestConstants . BrowserWithExtensionOptions ( ) ,
27+ TestConstants . LoggerFactory ) )
28+ using ( var page = await browserWithExtension . NewPageAsync ( ) )
29+ {
30+ var targets = browserWithExtension . Targets ( ) ;
31+ var backgroundPageTarget = targets . FirstOrDefault ( target => target . Type == TargetType . BackgroundPage ) ;
32+ Assert . NotNull ( backgroundPageTarget ) ;
33+ }
34+ }
35+
36+ [ Fact ]
37+ public async Task ShouldHaveDefaultUrlWhenLaunchingBrowser ( )
38+ {
39+ using ( var browser = await Puppeteer . LaunchAsync (
40+ TestConstants . BrowserWithExtensionOptions ( ) ,
41+ TestConstants . LoggerFactory ) )
42+ {
43+ var pages = ( await browser . PagesAsync ( ) ) . Select ( page => page . Url ) . ToArray ( ) ;
44+
45+ Assert . Equal ( new [ ] { "about:blank" } , pages ) ;
46+ }
47+ }
48+
49+ [ Fact ( Skip = "Skipped in Puppeteer" ) ]
50+ public async Task HeadlessShouldBeAbleToReadCookiesWrittenByHeadful ( )
51+ {
52+ using ( var userDataDir = new TempDirectory ( ) )
53+ {
54+ var launcher = new Launcher ( TestConstants . LoggerFactory ) ;
55+ var options = TestConstants . DefaultBrowserOptions ( ) ;
56+ options . Args = options . Args . Concat ( new [ ] { $ "--user-data-dir=\" { userDataDir } \" " } ) . ToArray ( ) ;
57+ options . Headless = false ;
58+
59+ using ( var browser = await launcher . LaunchAsync ( options ) )
60+ {
61+ var page = await browser . NewPageAsync ( ) ;
62+ await page . GoToAsync ( TestConstants . EmptyPage ) ;
63+ await page . EvaluateExpressionAsync (
64+ "document.cookie = 'foo=true; expires=Fri, 31 Dec 9999 23:59:59 GMT'" ) ;
65+ }
66+
67+ options . Headless = true ;
68+ using ( var browser2 = await Puppeteer . LaunchAsync ( options , TestConstants . LoggerFactory ) )
69+ {
70+ var page2 = await browser2 . NewPageAsync ( ) ;
71+ await page2 . GoToAsync ( TestConstants . EmptyPage ) ;
72+ Assert . Equal ( "foo=true" , await page2 . EvaluateExpressionAsync ( "document.cookie" ) ) ;
73+ }
74+ }
75+ }
76+
77+ [ Fact ]
78+ public async Task OOPIFShouldReportGoogleComFrame ( )
79+ {
80+ // https://google.com is isolated by default in Chromium embedder.
81+ var headfulOptions = TestConstants . DefaultBrowserOptions ( ) ;
82+ headfulOptions . Headless = false ;
83+ using ( var browser = await Puppeteer . LaunchAsync ( headfulOptions ) )
84+ using ( var page = await browser . NewPageAsync ( ) )
85+ {
86+ await page . GoToAsync ( TestConstants . EmptyPage ) ;
87+ await page . SetRequestInterceptionAsync ( true ) ;
88+ page . Request += async ( sender , e ) => await e . Request . RespondAsync (
89+ new ResponseData { Body = "{ body: 'YO, GOOGLE.COM'}" } ) ;
90+ await page . EvaluateFunctionHandleAsync ( @"() => {
91+ const frame = document.createElement('iframe');
92+ frame.setAttribute('src', 'https://google.com/');
93+ document.body.appendChild(frame);
94+ return new Promise(x => frame.onload = x);
95+ }" ) ;
96+ await page . WaitForSelectorAsync ( "iframe[src=\" https://google.com/\" ]" ) ;
97+ var urls = Array . ConvertAll ( page . Frames , frame => frame . Url ) ;
98+ Array . Sort ( urls ) ;
99+ Assert . Equal ( new [ ] { TestConstants . EmptyPage , "https://google.com/" } , urls ) ;
100+ }
101+ }
102+ }
103+ }
0 commit comments