Skip to content

Commit 7a8bd93

Browse files
authored
Fix flakiness of certain extension tests (#620)
1 parent 583b240 commit 7a8bd93

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

lib/PuppeteerSharp.Tests/PuppeteerTests/HeadfulTests.cs

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ public async Task BackgroundPageTargetTypeShouldBeAvailable()
2727
TestConstants.LoggerFactory))
2828
using (var page = await browserWithExtension.NewPageAsync())
2929
{
30-
var targets = browserWithExtension.Targets();
31-
var backgroundPageTarget = targets.FirstOrDefault(target => target.Type == TargetType.BackgroundPage);
30+
var backgroundPageTarget = await WaitForBackgroundPageTargetAsync(browserWithExtension);
3231
Assert.NotNull(backgroundPageTarget);
3332
}
3433
}
@@ -40,8 +39,7 @@ public async Task TargetPageShouldReturnABackgroundPage()
4039
TestConstants.BrowserWithExtensionOptions(),
4140
TestConstants.LoggerFactory))
4241
{
43-
var targets = browserWithExtension.Targets();
44-
var backgroundPageTarget = targets.FirstOrDefault(target => target.Type == TargetType.BackgroundPage);
42+
var backgroundPageTarget = await WaitForBackgroundPageTargetAsync(browserWithExtension);
4543
var page = await backgroundPageTarget.PageAsync();
4644
Assert.Equal(6, await page.EvaluateFunctionAsync("() => 2 * 3"));
4745
}
@@ -55,7 +53,6 @@ public async Task ShouldHaveDefaultUrlWhenLaunchingBrowser()
5553
TestConstants.LoggerFactory))
5654
{
5755
var pages = (await browser.PagesAsync()).Select(page => page.Url).ToArray();
58-
5956
Assert.Equal(new[] { "about:blank" }, pages);
6057
}
6158
}
@@ -113,5 +110,27 @@ await page.EvaluateFunctionHandleAsync(@"() => {
113110
Assert.Equal(new[] { TestConstants.EmptyPage, "https://google.com/" }, urls);
114111
}
115112
}
113+
114+
private Task<Target> WaitForBackgroundPageTargetAsync(Browser browser)
115+
{
116+
var target = browser.Targets().FirstOrDefault(t => t.Type == TargetType.BackgroundPage);
117+
if (target != null)
118+
{
119+
return Task.FromResult(target);
120+
}
121+
var targetCreatedTcs = new TaskCompletionSource<Target>();
122+
void targetCreated(object sender, TargetChangedArgs e)
123+
{
124+
if (e.Target.Type != TargetType.BackgroundPage)
125+
{
126+
return;
127+
}
128+
targetCreatedTcs.TrySetResult(e.Target);
129+
browser.TargetCreated -= targetCreated;
130+
}
131+
browser.TargetCreated += targetCreated;
132+
133+
return targetCreatedTcs.Task;
134+
}
116135
}
117136
}

0 commit comments

Comments
 (0)