Stabilize tests involving absolute timepicker (#10308)

* Stabilize tests involving absolute timepicker

The asynchronous nature of angular's digest cycle and the page rendering
in the browser can lead to situations in which
`isGlobalLoadingIndicatorHidden()` returns true because the loading
triggered by the previous action has not yet started. In this case
subsequent actions incorrectly assume the loading has already been
completed. This is probably responsible for the flakiness described in #10302.

The newly introduced `waitUntilLoadingHasFinished` first waits for a
duration up to `defaultTimeout` for the loading indicator to appear
before waiting for it to be hidden again. In the best case this will
reduce the false positive rate of `setAbsoluteTimerange()`. In the worst
case the function will wait `defaultTimeout` longer than when just using
`isGlobalLoadingIndicatorHidden`.

fixes #10302
This commit is contained in:
Felix Stürmer 2017-02-14 19:09:53 +01:00 committed by GitHub
parent 886628f2a2
commit 2796e7798b
14 changed files with 87 additions and 61 deletions

View file

@ -56,13 +56,13 @@ bdd.describe('creating and using Lucence expression scripted fields', function d
await PageObjects.common.navigateToApp('discover');
await PageObjects.common.debug('setAbsoluteRange (' + fromTime + ') to (' + toTime + ')');
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.discover.clickFieldListItem(scriptedExpressionFieldName);
await PageObjects.common.try(async function() {
await PageObjects.discover.clickFieldListItemAdd(scriptedExpressionFieldName);
});
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.common.try(async function() {
const rowData = await PageObjects.discover.getDocTableIndex(1);
@ -75,7 +75,7 @@ bdd.describe('creating and using Lucence expression scripted fields', function d
await PageObjects.discover.clickFieldListItem(scriptedExpressionFieldName);
await PageObjects.common.debug('filter by the first value (14) in the expanded scripted field list');
await PageObjects.discover.clickFieldListPlusFilter(scriptedExpressionFieldName, '14');
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.common.try(async function() {
expect(await PageObjects.discover.getHitCount()).to.be('31');
@ -90,7 +90,7 @@ bdd.describe('creating and using Lucence expression scripted fields', function d
await PageObjects.discover.removeAllFilters();
await PageObjects.discover.clickFieldListItem(scriptedExpressionFieldName);
await PageObjects.discover.clickFieldListItemVisualize(scriptedExpressionFieldName);
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.visualize.collapseChart();
await PageObjects.settings.setPageSize('All');
@ -127,13 +127,13 @@ bdd.describe('creating and using Painless numeric scripted fields', function des
await PageObjects.common.navigateToApp('discover');
await PageObjects.common.debug('setAbsoluteRange (' + fromTime + ') to (' + toTime + ')');
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName);
await PageObjects.common.try(async function() {
await PageObjects.discover.clickFieldListItemAdd(scriptedPainlessFieldName);
});
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.common.try(async function() {
const rowData = await PageObjects.discover.getDocTableIndex(1);
@ -145,7 +145,7 @@ bdd.describe('creating and using Painless numeric scripted fields', function des
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName);
await PageObjects.common.debug('filter by the first value (14) in the expanded scripted field list');
await PageObjects.discover.clickFieldListPlusFilter(scriptedPainlessFieldName, '14');
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.common.try(async function() {
expect(await PageObjects.discover.getHitCount()).to.be('31');
@ -160,7 +160,7 @@ bdd.describe('creating and using Painless numeric scripted fields', function des
await PageObjects.discover.removeAllFilters();
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName);
await PageObjects.discover.clickFieldListItemVisualize(scriptedPainlessFieldName);
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.visualize.collapseChart();
await PageObjects.settings.setPageSize('All');
@ -198,13 +198,13 @@ bdd.describe('creating and using Painless string scripted fields', function desc
await PageObjects.common.navigateToApp('discover');
await PageObjects.common.debug('setAbsoluteRange (' + fromTime + ') to (' + toTime + ')');
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
await PageObjects.common.try(async function() {
await PageObjects.discover.clickFieldListItemAdd(scriptedPainlessFieldName2);
});
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.common.try(async function() {
const rowData = await PageObjects.discover.getDocTableIndex(1);
@ -217,7 +217,7 @@ bdd.describe('creating and using Painless string scripted fields', function desc
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
await PageObjects.common.debug('filter by "bad" in the expanded scripted field list');
await PageObjects.discover.clickFieldListPlusFilter(scriptedPainlessFieldName2, 'bad');
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.common.try(async function() {
expect(await PageObjects.discover.getHitCount()).to.be('27');
@ -228,7 +228,7 @@ bdd.describe('creating and using Painless string scripted fields', function desc
bdd.it('should visualize scripted field in vertical bar chart', async function () {
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
await PageObjects.discover.clickFieldListItemVisualize(scriptedPainlessFieldName2);
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.visualize.collapseChart();
await PageObjects.settings.setPageSize('All');
@ -266,13 +266,13 @@ bdd.describe('creating and using Painless boolean scripted fields', function des
await PageObjects.common.navigateToApp('discover');
await PageObjects.common.debug('setAbsoluteRange (' + fromTime + ') to (' + toTime + ')');
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
await PageObjects.common.try(async function() {
await PageObjects.discover.clickFieldListItemAdd(scriptedPainlessFieldName2);
});
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.common.try(async function() {
const rowData = await PageObjects.discover.getDocTableIndex(1);
@ -285,7 +285,7 @@ bdd.describe('creating and using Painless boolean scripted fields', function des
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
await PageObjects.common.debug('filter by "true" in the expanded scripted field list');
await PageObjects.discover.clickFieldListPlusFilter(scriptedPainlessFieldName2, 'true');
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.common.try(async function() {
expect(await PageObjects.discover.getHitCount()).to.be('359');
@ -296,7 +296,7 @@ bdd.describe('creating and using Painless boolean scripted fields', function des
bdd.it('should visualize scripted field in vertical bar chart', async function () {
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
await PageObjects.discover.clickFieldListItemVisualize(scriptedPainlessFieldName2);
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.visualize.collapseChart();
await PageObjects.settings.setPageSize('All');
@ -335,13 +335,13 @@ bdd.describe('creating and using Painless date scripted fields', function descri
await PageObjects.common.navigateToApp('discover');
await PageObjects.common.debug('setAbsoluteRange (' + fromTime + ') to (' + toTime + ')');
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
await PageObjects.common.try(async function() {
await PageObjects.discover.clickFieldListItemAdd(scriptedPainlessFieldName2);
});
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.common.try(async function() {
const rowData = await PageObjects.discover.getDocTableIndex(1);
@ -353,7 +353,7 @@ bdd.describe('creating and using Painless date scripted fields', function descri
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
await PageObjects.common.debug('filter by "2015-09-17 23:00" in the expanded scripted field list');
await PageObjects.discover.clickFieldListPlusFilter(scriptedPainlessFieldName2, '2015-09-17 23:00');
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.common.try(async function() {
expect(await PageObjects.discover.getHitCount()).to.be('1');
@ -364,7 +364,7 @@ bdd.describe('creating and using Painless date scripted fields', function descri
bdd.it('should visualize scripted field in vertical bar chart', async function () {
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
await PageObjects.discover.clickFieldListItemVisualize(scriptedPainlessFieldName2);
await PageObjects.header.isGlobalLoadingIndicatorHidden();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.waitForVisualization();
await PageObjects.visualize.collapseChart();
await PageObjects.settings.setPageSize('All');

View file

@ -53,9 +53,9 @@ bdd.describe('visualize app', function describeIndexTests() {
.then(function clickGo() {
return PageObjects.visualize.clickGo();
})
.then(function isGlobalLoadingIndicatorHidden() {
.then(function waitUntilLoadingHasFinished() {
PageObjects.common.debug('Waiting...');
return PageObjects.header.isGlobalLoadingIndicatorHidden();
return PageObjects.header.waitUntilLoadingHasFinished();
});
});

View file

@ -47,7 +47,7 @@ bdd.describe('visualize app', function describeIndexTests() {
return PageObjects.visualize.clickGo();
})
.then(function () {
return PageObjects.header.isGlobalLoadingIndicatorHidden();
return PageObjects.header.waitUntilLoadingHasFinished();
});
});

View file

@ -43,7 +43,7 @@ bdd.describe('visualize app', function describeIndexTests() {
return PageObjects.visualize.clickGo();
})
.then(function () {
return PageObjects.header.isGlobalLoadingIndicatorHidden();
return PageObjects.header.waitUntilLoadingHasFinished();
})
.then(function waitForVisualization() {
return PageObjects.visualize.waitForVisualization();
@ -66,7 +66,7 @@ bdd.describe('visualize app', function describeIndexTests() {
return PageObjects.visualize.loadSavedVisualization(vizName1);
})
.then(function () {
return PageObjects.header.isGlobalLoadingIndicatorHidden();
return PageObjects.header.waitUntilLoadingHasFinished();
})
.then(function waitForVisualization() {
return PageObjects.visualize.waitForVisualization();

View file

@ -46,7 +46,7 @@ bdd.describe('visualize app', function describeIndexTests() {
return PageObjects.visualize.clickGo();
})
.then(function () {
return PageObjects.header.isGlobalLoadingIndicatorHidden();
return PageObjects.header.waitUntilLoadingHasFinished();
});
});

View file

@ -39,7 +39,7 @@ bdd.describe('visualize app', function describeIndexTests() {
return PageObjects.visualize.selectField('memory');
})
.then(function () {
return PageObjects.header.isGlobalLoadingIndicatorHidden();
return PageObjects.header.waitUntilLoadingHasFinished();
})
.then(function sleep() {
return PageObjects.common.sleep(1003);
@ -53,7 +53,7 @@ bdd.describe('visualize app', function describeIndexTests() {
return PageObjects.visualize.clickGo();
})
.then(function () {
return PageObjects.header.isGlobalLoadingIndicatorHidden();
return PageObjects.header.waitUntilLoadingHasFinished();
});
});

View file

@ -45,7 +45,7 @@ bdd.describe('visualize app', function describeIndexTests() {
return PageObjects.visualize.clickGo();
})
.then(function () {
return PageObjects.header.isGlobalLoadingIndicatorHidden();
return PageObjects.header.waitUntilLoadingHasFinished();
});
});

View file

@ -43,7 +43,7 @@ bdd.describe('visualize app', function describeIndexTests() {
return PageObjects.visualize.clickGo();
})
.then(function () {
return PageObjects.header.isGlobalLoadingIndicatorHidden();
return PageObjects.header.waitUntilLoadingHasFinished();
})
.then(function waitForVisualization() {
return PageObjects.visualize.waitForVisualization();
@ -66,7 +66,7 @@ bdd.describe('visualize app', function describeIndexTests() {
return PageObjects.visualize.loadSavedVisualization(vizName1);
})
.then(function () {
return PageObjects.header.isGlobalLoadingIndicatorHidden();
return PageObjects.header.waitUntilLoadingHasFinished();
})
.then(function waitForVisualization() {
return PageObjects.visualize.waitForVisualization();