internal/screentest: add support for evaluating javascript
Added the eval keyword to allow for evaluating JS. Useful for
manipulating or hiding DOM elements prior to screenshot capture.
Change-Id: I508f3949c2eed7d55fc4e168781ab4c3e00edb5b
Reviewed-on: https://go-review.googlesource.com/c/website/+/373714
Run-TryBot: Jamal Carvalho <jamal@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Trust: Jamal Carvalho <jamalcarvalho@google.com>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/cmd/screentest/testdata/godev.txt b/cmd/screentest/testdata/godev.txt
index f92ab57..a19ea05 100644
--- a/cmd/screentest/testdata/godev.txt
+++ b/cmd/screentest/testdata/godev.txt
@@ -3,6 +3,8 @@
test homepage
pathname /
+# The data in _content/events.yaml is stale, hide this section from the screenshots.
+eval document.querySelector('.LearnGo').style.display = 'none';
capture fullscreen
capture fullscreen 540x1080
@@ -13,6 +15,8 @@
test getting started
pathname /learn/
+# The data in _content/events.yaml is stale, hide this section from the screenshots.
+eval document.querySelector('.Learn-meetups').style.display = 'none';
capture fullscreen
capture fullscreen 540x1080
diff --git a/internal/screentest/screentest.go b/internal/screentest/screentest.go
index 5b7c387..4b97b20 100644
--- a/internal/screentest/screentest.go
+++ b/internal/screentest/screentest.go
@@ -322,6 +322,8 @@
tasks = append(tasks, chromedp.Click(args))
case "WAIT":
tasks = append(tasks, chromedp.WaitReady(args))
+ case "EVAL":
+ tasks = append(tasks, chromedp.Evaluate(args, nil))
case "CAPTURE":
if originA == "" || originB == "" {
return nil, fmt.Errorf("missing compare for capture on line %d", lineNo)
diff --git a/internal/screentest/screentest_test.go b/internal/screentest/screentest_test.go
index 6791564..86a35d8 100644
--- a/internal/screentest/screentest_test.go
+++ b/internal/screentest/screentest_test.go
@@ -126,6 +126,21 @@
viewportWidth: 1536,
viewportHeight: 960,
},
+ {
+ name: "eval",
+ urlA: "https://pkg.go.dev/eval",
+ cacheA: true,
+ urlB: "http://localhost:8080/eval",
+ outImgA: filepath.Join(cache, "readtests-txt", "eval.pkg-go-dev.png"),
+ outImgB: filepath.Join(cache, "readtests-txt", "eval.localhost-8080.png"),
+ outDiff: filepath.Join(cache, "readtests-txt", "eval.diff.png"),
+ screenshotType: viewportScreenshot,
+ viewportWidth: 1536,
+ viewportHeight: 960,
+ tasks: chromedp.Tasks{
+ chromedp.Evaluate("console.log('Hello, world!')", nil),
+ },
+ },
},
wantErr: false,
},
diff --git a/internal/screentest/testdata/readtests.txt b/internal/screentest/testdata/readtests.txt
index b5a28c2..082377a 100644
--- a/internal/screentest/testdata/readtests.txt
+++ b/internal/screentest/testdata/readtests.txt
@@ -27,3 +27,8 @@
pathname /about
capture
+
+test eval
+pathname /eval
+eval console.log('hello, world!')
+capture