Skip to content

Commit f366438

Browse files
kblokMeir017
authored andcommitted
Eliminate Racy Pattern (#388)
1 parent 4b5758f commit f366438

File tree

2 files changed

+17
-37
lines changed

2 files changed

+17
-37
lines changed

lib/PuppeteerSharp.Tests/FrameTests/WaitForSelectorTests.cs

Lines changed: 13 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -19,34 +19,23 @@ public async Task ShouldImmediatelyResolveTaskIfNodeExists()
1919
{
2020
await Page.GoToAsync(TestConstants.EmptyPage);
2121
var frame = Page.MainFrame;
22-
var added = false;
23-
await frame.WaitForSelectorAsync("*").ContinueWith(_ => added = true);
24-
Assert.True(added);
25-
26-
added = false;
22+
await frame.WaitForSelectorAsync("*");
2723
await frame.EvaluateFunctionAsync(AddElement, "div");
28-
await frame.WaitForSelectorAsync("div").ContinueWith(_ => added = true);
29-
Assert.True(added);
24+
await frame.WaitForSelectorAsync("div");
3025
}
3126

3227
[Fact]
3328
public async Task ShouldResolveTaskWhenNodeIsAdded()
3429
{
3530
await Page.GoToAsync(TestConstants.EmptyPage);
3631
var frame = Page.MainFrame;
37-
var added = false;
38-
var watchdog = frame.WaitForSelectorAsync("div").ContinueWith(_ => added = true);
39-
// run nop function..
40-
await frame.EvaluateExpressionAsync("42");
41-
// .. to be sure that waitForSelector promise is not resolved yet.
42-
Assert.False(added);
43-
32+
var watchdog = frame.WaitForSelectorAsync("div");
4433
await frame.EvaluateFunctionAsync(AddElement, "br");
45-
Assert.False(added);
46-
4734
await frame.EvaluateFunctionAsync(AddElement, "div");
48-
await watchdog;
49-
Assert.True(added);
35+
var eHandle = await watchdog;
36+
var property = await eHandle.GetPropertyAsync("tagName");
37+
var tagName = await property.JsonValueAsync<string>();
38+
Assert.Equal("DIV", tagName);
5039
}
5140

5241
[Fact]
@@ -65,14 +54,11 @@ public async Task PageWaitForSelectorAsyncIsShortcutForMainFrame()
6554
await Page.GoToAsync(TestConstants.EmptyPage);
6655
await FrameUtils.AttachFrameAsync(Page, "frame1", TestConstants.EmptyPage);
6756
var otherFrame = Page.Frames.ElementAt(1);
68-
var added = false;
69-
var waitForSelectorTask = Page.WaitForSelectorAsync("div").ContinueWith(_ => added = true);
57+
var watchdog = Page.WaitForSelectorAsync("div");
7058
await otherFrame.EvaluateFunctionAsync(AddElement, "div");
71-
Assert.False(added);
72-
7359
await Page.EvaluateFunctionAsync(AddElement, "div");
74-
Assert.True(await waitForSelectorTask);
75-
Assert.True(added);
60+
var eHandle = await watchdog;
61+
Assert.Equal(Page.MainFrame, eHandle.ExecutionContext.Frame);
7662
}
7763

7864
[Fact]
@@ -82,15 +68,11 @@ public async Task ShouldRunInSpecifiedFrame()
8268
await FrameUtils.AttachFrameAsync(Page, "frame2", TestConstants.EmptyPage);
8369
var frame1 = Page.Frames.ElementAt(1);
8470
var frame2 = Page.Frames.ElementAt(2);
85-
var added = false;
86-
var waitForSelectorPromise = frame2.WaitForSelectorAsync("div").ContinueWith(_ => added = true);
87-
Assert.False(added);
88-
71+
var waitForSelectorPromise = frame2.WaitForSelectorAsync("div");
8972
await frame1.EvaluateFunctionAsync(AddElement, "div");
90-
Assert.False(added);
91-
9273
await frame2.EvaluateFunctionAsync(AddElement, "div");
93-
await waitForSelectorPromise;
74+
var eHandle = await waitForSelectorPromise;
75+
Assert.Equal(frame2, eHandle.ExecutionContext.Frame);
9476
}
9577

9678
[Fact]

lib/PuppeteerSharp.Tests/FrameTests/WaitForXPathTests.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,11 @@ public async Task ShouldRunInSpecifiedFrame()
2929
await FrameUtils.AttachFrameAsync(Page, "frame2", TestConstants.EmptyPage);
3030
var frame1 = Page.Frames[1];
3131
var frame2 = Page.Frames[2];
32-
var added = false;
33-
var waitForXPathPromise = frame2.WaitForXPathAsync("//div").ContinueWith(_ => added = true);
34-
Assert.False(added);
32+
var waitForXPathPromise = frame2.WaitForXPathAsync("//div");
3533
await frame1.EvaluateFunctionAsync(addElement, "div");
36-
Assert.False(added);
3734
await frame2.EvaluateFunctionAsync(addElement, "div");
38-
await waitForXPathPromise;
35+
var eHandle = await waitForXPathPromise;
36+
Assert.Equal(frame2, eHandle.ExecutionContext.Frame);
3937
}
4038

4139
[Fact]
@@ -99,4 +97,4 @@ public async Task ShouldAllowYouToSelectAnElementWithSingleSlash()
9997
Assert.Equal("some text", await Page.EvaluateFunctionAsync<string>("x => x.textContent", await waitForXPath));
10098
}
10199
}
102-
}
100+
}

0 commit comments

Comments
 (0)