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();