Fix flaky //scouting:scouting_test

The test occasionally fails because of the alerts that pop up when
navigating away from the page. I've failed to make protractor deal
with the alerts in a reliable way. So this patch turns them off.
There's a special hidden checkbox that the test checks. When it's
checked, the scouting application does not display alerts. It's hacky,
but it seems to work. Rather than failing ~10 out of 1000 times, the
test now fails 0 out of 1000 times.

Signed-off-by: Philipp Schrader <philipp.schrader@gmail.com>
Change-Id: I2e920771c1605464994d7877da2bbb62a2e69d1f
diff --git a/scouting/scouting_test.ts b/scouting/scouting_test.ts
index db0c9fd..c63251b 100644
--- a/scouting/scouting_test.ts
+++ b/scouting/scouting_test.ts
@@ -3,14 +3,21 @@
 // Loads the page (or reloads it) and deals with the "Are you sure you want to
 // leave this page" popup.
 async function loadPage() {
-  await browser.get(browser.baseUrl).catch(function () {
-    return browser.switchTo().alert().then(function (alert) {
-      alert.accept();
-      return browser.get(browser.baseUrl);
-    });
-  });
+  await disableAlerts();
+  await browser.navigate().refresh();
+  expect((await browser.getTitle())).toEqual('FRC971 Scouting Application');
 }
 
+// Disables alert popups. They are extremely tedious to deal with in
+// Protractor since they're not angular elements. We achieve this by checking
+// an invisible checkbox that's off-screen.
+async function disableAlerts() {
+  await browser.executeAsyncScript(function (callback) {
+    const block_alerts = document.getElementById('block_alerts') as HTMLInputElement;
+    block_alerts.checked = true;
+    callback();
+  });
+}
 // Returns the contents of the header that displays the "Auto", "TeleOp", and
 // "Climb" labels etc.
 function getHeadingText() {
@@ -37,6 +44,12 @@
 }
 
 describe('The scouting web page', () => {
+  beforeAll(async () => {
+    await browser.get(browser.baseUrl);
+    expect((await browser.getTitle())).toEqual('FRC971 Scouting Application');
+    await disableAlerts();
+  });
+
   it('should: review and submit correct data.', async () => {
     await loadPage();