e2e: remove page global

Reusing the same page between tests cases
can lead to unexpected results when things
like scroll position are not reset. Removing
the global in favor of local page objects
that can be shared when convenient or reset
between tests.

Change-Id: I9e5b851d58a393fb3553ff281b8addbcb7044f81
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/303114
Trust: Jamal Carvalho <jamal@golang.org>
Run-TryBot: Jamal Carvalho <jamal@golang.org>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/e2e/frontend-fetch.test.ts b/e2e/frontend-fetch.test.ts
index 6965fb8..f34fb9f 100644
--- a/e2e/frontend-fetch.test.ts
+++ b/e2e/frontend-fetch.test.ts
@@ -6,7 +6,7 @@
  */
 
 import './globals';
-import puppeteer from 'puppeteer';
+import puppeteer, { Page } from 'puppeteer';
 
 const baseUrl = process.env.FRONTEND_URL ?? '';
 
@@ -16,10 +16,17 @@
 };
 
 describe('Frontend Fetch', () => {
+  let page: Page;
+
   beforeAll(async () => {
+    page = await browser.newPage();
     await page.goto(baseUrl + '/golang.org/x/tools/gopls@v0.6.6');
   });
 
+  afterAll(async () => {
+    await page.close();
+  });
+
   test('accessibility tree matches snapshot', async () => {
     const a11yTree = await page.accessibility.snapshot();
     expect(a11yTree).toMatchSnapshot();
diff --git a/e2e/globals.ts b/e2e/globals.ts
index 8621e80..d054468 100644
--- a/e2e/globals.ts
+++ b/e2e/globals.ts
@@ -1,6 +1,5 @@
-import { Browser, Page } from 'puppeteer';
+import { Browser } from 'puppeteer';
 
 declare global {
   const browser: Browser;
-  const page: Page;
 }
diff --git a/e2e/homepage.test.ts b/e2e/homepage.test.ts
index 7d816a7..370f9f0 100644
--- a/e2e/homepage.test.ts
+++ b/e2e/homepage.test.ts
@@ -6,15 +6,22 @@
  */
 
 import './globals';
-import puppeteer from 'puppeteer';
+import puppeteer, { Page } from 'puppeteer';
 
 const baseUrl = process.env.FRONTEND_URL ?? '';
 
 describe('Homepage', () => {
+  let page: Page;
+
   beforeEach(async () => {
+    page = await browser.newPage();
     await page.goto(baseUrl);
   });
 
+  afterEach(async () => {
+    await page.close();
+  });
+
   test('accessibility tree matches snapshot', async () => {
     const a11yTree = await page.accessibility.snapshot();
     expect(a11yTree).toMatchSnapshot();
diff --git a/e2e/setup.ts b/e2e/setup.ts
index 7c84c3e..55e8477 100644
--- a/e2e/setup.ts
+++ b/e2e/setup.ts
@@ -1,7 +1,7 @@
 import { toMatchImageSnapshot } from 'jest-image-snapshot';
-import puppeteer, { Browser, Page } from 'puppeteer';
+import puppeteer, { Browser } from 'puppeteer';
 
-declare const global: NodeJS.Global & typeof globalThis & { browser: Browser; page: Page };
+declare const global: NodeJS.Global & typeof globalThis & { browser: Browser };
 
 expect.extend({ toMatchImageSnapshot });
 
@@ -10,7 +10,6 @@
     args: ['--no-sandbox', '--disable-dev-shm-usage'],
     defaultViewport: { height: 800, width: 1280 },
   });
-  global.page = await global.browser.newPage();
 });
 
 afterAll(async () => await global.browser.close());