Skip to content

Commit 2082098

Browse files
Meir017kblok
authored andcommitted
Implemented Page.evaluate tests using element and object handles (#201)
1 parent 7a00360 commit 2082098

File tree

1 file changed

+50
-3
lines changed

1 file changed

+50
-3
lines changed

lib/PuppeteerSharp.Tests/Page/EvaluateTests.cs

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,18 +96,65 @@ public async Task ShouldProperlySerializeNullFields()
9696
}
9797

9898
[Fact]
99-
public async Task EvaluateExpressionBigObject()
99+
public async Task ShouldFailForWindowObjectUsingEvaluateExpression()
100100
{
101101
var window = await Page.EvaluateExpressionAsync("window");
102102
Assert.Null(window);
103103
}
104104

105105
[Fact]
106-
public async Task EvaluateFunctionBigObject()
106+
public async Task ShouldFailForWindowObjectUsingEvaluateFunction()
107107
{
108108
var window = await Page.EvaluateFunctionAsync("() => window");
109109
Assert.Null(window);
110110
}
111+
112+
[Fact]
113+
public async Task ShouldAcceptElementHandleAsAnArgument()
114+
{
115+
await Page.SetContentAsync("<section>42</section>");
116+
var element = await Page.QuerySelectorAsync("section");
117+
var text = await Page.EvaluateFunctionAsync<string>("e => e.textContent", element);
118+
Assert.Equal("42", text);
119+
}
120+
121+
[Fact]
122+
public async Task ShouldThrowIfUnderlyingElementWasDisposed()
123+
{
124+
await Page.SetContentAsync("<section>39</section>");
125+
var element = await Page.QuerySelectorAsync("section");
126+
Assert.NotNull(element);
127+
await element.DisposeAsync();
128+
var exception = await Assert.ThrowsAsync<PuppeteerException>(()
129+
=> Page.EvaluateFunctionAsync<string>("e => e.textContent", element));
130+
Assert.Contains("JSHandle is disposed", exception.Message);
131+
}
132+
133+
[Fact]
134+
public async Task ShouldThrowIfElementHandlesAreFromOtherFrames()
135+
{
136+
await FrameUtils.AttachFrameAsync(Page, "frame1", TestConstants.EmptyPage);
137+
var bodyHandle = await Page.Frames[1].QuerySelectorAsync("body");
138+
var exception = await Assert.ThrowsAsync<PuppeteerException>(()
139+
=> Page.EvaluateFunctionAsync<string>("body => body.innerHTML", bodyHandle));
140+
Assert.Contains("JSHandles can be evaluated only in the context they were created", exception.Message);
141+
}
142+
143+
[Fact]
144+
public async Task ShouldAcceptObjectHandleAsAnArgument()
145+
{
146+
var navigatorHandle = await Page.EvaluateExpressionHandleAsync("navigator");
147+
var text = await Page.EvaluateFunctionAsync<string>("e => e.userAgent", navigatorHandle);
148+
Assert.Contains("Mozilla", text);
149+
}
150+
151+
[Fact]
152+
public async Task ShouldAcceptObjectHandleToPrimitiveTypes()
153+
{
154+
var aHandle = await Page.EvaluateExpressionHandleAsync("5");
155+
var isFive = await Page.EvaluateFunctionAsync<bool>("e => Object.is(e, 5)", aHandle);
156+
Assert.True(isFive);
157+
}
111158

112159
[Fact]
113160
public async Task ShouldWorkFromInsideAnExposedFunction()
@@ -122,4 +169,4 @@ await Page.ExposeFunctionAsync("callController", async (int a, int b) =>
122169
Assert.Equal(27, result);
123170
}
124171
}
125-
}
172+
}

0 commit comments

Comments
 (0)