mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
Stabilize flaky visualize test (#27470)
* Stabilize flaky visualize test - don’t wait for header unnecessarily. - use clickWhenNotDisabled instead of click. - use an outer retry to account for stale elements from pie chart likely not editing render complete correctly * More fixes - fix interval selection so it doesn’t accidentally click Go. - fix legit bug with non existent _source field being used in a test. - Don’t “click Go” when not needed. * Clean up - can’t run pie chart tests multiple times in a row. - remove more unnecessary clickGos
This commit is contained in:
parent
66b3e48c6c
commit
fd28ce3eae
11 changed files with 23 additions and 45 deletions
|
@ -152,9 +152,6 @@ export default function ({ getService, getPageObjects }) {
|
|||
await PageObjects.visualize.clickMapZoomIn();
|
||||
await PageObjects.visualize.clickMapZoomIn();
|
||||
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess('Visualization TileMap');
|
||||
|
||||
await PageObjects.header.clickDashboard();
|
||||
|
|
|
@ -186,7 +186,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
|
||||
await PageObjects.visualize.clickMetricEditor();
|
||||
await PageObjects.visualize.selectAggregation('Top Hit', 'metrics');
|
||||
await PageObjects.visualize.selectField('_source', 'metrics');
|
||||
await PageObjects.visualize.selectField('agent.raw', 'metrics');
|
||||
await PageObjects.visualize.clickGo();
|
||||
const data = await PageObjects.visualize.getTableVisData();
|
||||
log.debug(data);
|
||||
|
|
|
@ -123,7 +123,6 @@ export default function ({ getService, getPageObjects }) {
|
|||
await PageObjects.visualize.selectField('@timestamp');
|
||||
await PageObjects.visualize.setInterval('Daily');
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
const data = await PageObjects.visualize.getTableVisData();
|
||||
log.debug(data.split('\n'));
|
||||
expect(data.trim().split('\n')).to.be.eql([
|
||||
|
@ -142,7 +141,6 @@ export default function ({ getService, getPageObjects }) {
|
|||
await PageObjects.visualize.selectField('@timestamp');
|
||||
await PageObjects.visualize.setInterval('Daily');
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
const data = await PageObjects.visualize.getTableVisData();
|
||||
expect(data.trim().split('\n')).to.be.eql([
|
||||
'2015-09-20', '4,757',
|
||||
|
|
|
@ -40,7 +40,6 @@ export default function ({ getService, getPageObjects }) {
|
|||
await comboBox.set('indexPatternSelect-0', 'logstash- ');
|
||||
await comboBox.set('fieldSelect-0', FIELD_NAME);
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
});
|
||||
|
||||
|
||||
|
@ -128,16 +127,12 @@ export default function ({ getService, getPageObjects }) {
|
|||
await PageObjects.visualize.clickVisEditorTab('options');
|
||||
await PageObjects.visualize.checkCheckbox('inputControlEditorUpdateFiltersOnChangeCheckbox');
|
||||
await PageObjects.visualize.clickGo();
|
||||
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
});
|
||||
|
||||
after(async () => {
|
||||
await PageObjects.visualize.clickVisEditorTab('options');
|
||||
await PageObjects.visualize.uncheckCheckbox('inputControlEditorUpdateFiltersOnChangeCheckbox');
|
||||
await PageObjects.visualize.clickGo();
|
||||
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
});
|
||||
|
||||
it('should not display staging control buttons', async () => {
|
||||
|
@ -165,7 +160,6 @@ export default function ({ getService, getPageObjects }) {
|
|||
await PageObjects.visualize.clickVisEditorTab('options');
|
||||
await PageObjects.visualize.checkCheckbox('inputControlEditorUseTimeFilterCheckbox');
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
|
||||
// Expect control to be disabled because no terms could be gathered with time filter applied
|
||||
const input = await find.byCssSelector('[data-test-subj="inputControl0"] input');
|
||||
|
@ -194,7 +188,6 @@ export default function ({ getService, getPageObjects }) {
|
|||
await comboBox.set('fieldSelect-0', 'geo.src');
|
||||
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
});
|
||||
|
||||
it('should fetch new options when string field is filtered', async () => {
|
||||
|
@ -211,7 +204,6 @@ export default function ({ getService, getPageObjects }) {
|
|||
it('should not fetch new options when non-string is filtered', async () => {
|
||||
await comboBox.set('fieldSelect-0', 'clientip');
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
|
||||
const initialOptions = await comboBox.getOptionsList('listControlSelect0');
|
||||
expect(initialOptions.trim().split('\n').join()).to.equal(
|
||||
|
@ -242,7 +234,6 @@ export default function ({ getService, getPageObjects }) {
|
|||
await PageObjects.visualize.setSelectByOptionText('parentSelect-1', 'geo.src');
|
||||
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
});
|
||||
|
||||
it('should disable child control when parent control is not set', async () => {
|
||||
|
|
|
@ -24,7 +24,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
const filterBar = getService('filterBar');
|
||||
const PageObjects = getPageObjects(['common', 'visualize', 'header']);
|
||||
|
||||
describe('visualize app', function describeIndexTests() {
|
||||
describe('inspector', function describeIndexTests() {
|
||||
before(async function () {
|
||||
const fromTime = '2015-09-19 06:31:44.000';
|
||||
const toTime = '2015-09-23 18:31:44.000';
|
||||
|
@ -35,8 +35,6 @@ export default function ({ getService, getPageObjects }) {
|
|||
|
||||
log.debug('Set absolute time range from \"' + fromTime + '\" to \"' + toTime + '\"');
|
||||
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
});
|
||||
|
||||
describe('inspector table', function indexPatternCreation() {
|
||||
|
|
|
@ -108,7 +108,6 @@ export default function ({ getService, getPageObjects }) {
|
|||
await PageObjects.visualize.toggleMissingBucket();
|
||||
log.debug('clickGo');
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.common.sleep(1003);
|
||||
const pieData = await PageObjects.visualize.getPieChartLabels();
|
||||
log.debug(`pieData.length = ${pieData.length}`);
|
||||
expect(pieData).to.eql(expectedTableData);
|
||||
|
@ -177,7 +176,6 @@ export default function ({ getService, getPageObjects }) {
|
|||
await PageObjects.visualize.selectField('machine.os.raw');
|
||||
await PageObjects.visualize.toggleDisabledAgg(2);
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
|
||||
const pieData = await PageObjects.visualize.getPieChartLabels();
|
||||
log.debug('pieData.length = ' + pieData.length);
|
||||
|
@ -202,8 +200,6 @@ export default function ({ getService, getPageObjects }) {
|
|||
it('should show correct result when agg is re-enabled', async () => {
|
||||
await PageObjects.visualize.toggleDisabledAgg(2);
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
await PageObjects.common.sleep(2000);
|
||||
|
||||
const expectedTableData = [
|
||||
'0', 'win 7', 'win xp', 'win 8', 'ios', 'osx', '40,000', 'win 8', 'ios', 'win 7', 'win xp', 'osx', '80,000',
|
||||
|
|
|
@ -51,7 +51,6 @@ export default function ({ getService, getPageObjects }) {
|
|||
});
|
||||
await PageObjects.visualize.selectOrderBy('_key');
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
});
|
||||
|
||||
|
||||
|
|
|
@ -80,7 +80,6 @@ export default function ({ getService, getPageObjects }) {
|
|||
await PageObjects.visualize.selectField('geo.coordinates');
|
||||
});
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
});
|
||||
|
||||
/**
|
||||
|
@ -206,7 +205,6 @@ export default function ({ getService, getPageObjects }) {
|
|||
await PageObjects.visualize.toggleOpenEditor(2);
|
||||
await PageObjects.visualize.toggleIsFilteredByCollarCheckbox();
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
await PageObjects.visualize.openInspector();
|
||||
const tableHeaders = await PageObjects.visualize.getInspectorTableHeaders();
|
||||
await PageObjects.visualize.closeInspector();
|
||||
|
@ -216,7 +214,6 @@ export default function ({ getService, getPageObjects }) {
|
|||
after(async () => {
|
||||
await PageObjects.visualize.toggleIsFilteredByCollarCheckbox();
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -399,7 +399,7 @@ export function VisualizePageProvider({ getService, getPageObjects }) {
|
|||
await find.clickByCssSelector(selector);
|
||||
const input = await find.byCssSelector(`${selector} input.ui-select-search`);
|
||||
await input.type(myString);
|
||||
await browser.pressKeys('\uE006');
|
||||
await browser.pressKeys(Keys.RETURN);
|
||||
});
|
||||
await PageObjects.common.sleep(500);
|
||||
}
|
||||
|
@ -499,20 +499,16 @@ export function VisualizePageProvider({ getService, getPageObjects }) {
|
|||
}
|
||||
|
||||
async selectField(fieldValue, groupName = 'buckets', childAggregationType = null) {
|
||||
log.debug(`selectField ${fieldValue}`);
|
||||
const selector = `
|
||||
[group-name="${groupName}"]
|
||||
vis-editor-agg-params:not(.ng-hide)
|
||||
${childAggregationType ? `vis-editor-agg-params[group-name="'${childAggregationType}'"]:not(.ng-hide)` : ''}
|
||||
.field-select
|
||||
`;
|
||||
|
||||
await retry.try(async () => {
|
||||
await find.clickByCssSelector(selector);
|
||||
const input = await find.byCssSelector(`${selector} input.ui-select-search`);
|
||||
await input.type(fieldValue);
|
||||
await browser.pressKeys('\uE006');
|
||||
});
|
||||
await PageObjects.common.sleep(500);
|
||||
await find.clickByCssSelector(selector);
|
||||
await find.setValue(`${selector} input.ui-select-search`, fieldValue);
|
||||
await browser.pressKeys(Keys.RETURN);
|
||||
}
|
||||
|
||||
async selectFieldById(fieldValue, id) {
|
||||
|
@ -543,9 +539,14 @@ export function VisualizePageProvider({ getService, getPageObjects }) {
|
|||
}
|
||||
|
||||
async setInterval(newValue) {
|
||||
log.debug(`Visualize.setInterval(${newValue})`);
|
||||
const input = await find.byCssSelector('select[ng-model="agg.params.interval"]');
|
||||
await input.type(newValue);
|
||||
await browser.pressKeys(Keys.RETURN);
|
||||
// The interval element will only interpret space as "select this" if there
|
||||
// was a long enough gap from the typing above to the space click. Hence the
|
||||
// need for the sleep.
|
||||
await PageObjects.common.sleep(500);
|
||||
await browser.pressKeys(Keys.SPACE);
|
||||
}
|
||||
|
||||
async setCustomInterval(newValue) {
|
||||
|
@ -594,7 +595,7 @@ export function VisualizePageProvider({ getService, getPageObjects }) {
|
|||
}
|
||||
|
||||
async clickGo() {
|
||||
await testSubjects.click('visualizeEditorRenderButton');
|
||||
await testSubjects.clickWhenNotDisabled('visualizeEditorRenderButton');
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
// For some reason there are two `data-render-complete` tags on each visualization in the visualize page.
|
||||
const countOfDataCompleteFlags = 2;
|
||||
|
@ -886,10 +887,15 @@ export function VisualizePageProvider({ getService, getPageObjects }) {
|
|||
}
|
||||
|
||||
async getPieChartLabels() {
|
||||
const chartTypes = await find.allByCssSelector('path.slice', defaultFindTimeout * 2);
|
||||
// Outer retry is because because of stale element references getting thrown on grabbing the data-label.
|
||||
// I suspect it's due to a rendering bug with pie charts not emitting the render-complete flag
|
||||
// when actually done rendering.
|
||||
return await retry.try(async () => {
|
||||
const chartTypes = await find.allByCssSelector('path.slice', defaultFindTimeout * 2);
|
||||
|
||||
const getChartTypesPromises = chartTypes.map(async chart => await chart.getAttribute('data-label'));
|
||||
return await Promise.all(getChartTypesPromises);
|
||||
const getChartTypesPromises = chartTypes.map(async chart => await chart.getAttribute('data-label'));
|
||||
return await Promise.all(getChartTypesPromises);
|
||||
});
|
||||
}
|
||||
async expectPieChartError() {
|
||||
return await testSubjects.existOrFail('visLibVisualizeError');
|
||||
|
|
|
@ -109,6 +109,7 @@ export function FindProvider({ getService }) {
|
|||
}
|
||||
|
||||
async setValue(selector, text) {
|
||||
log.debug(`find.setValue(${selector}, ${text})`);
|
||||
return await retry.try(async () => {
|
||||
const element = await this.byCssSelector(selector);
|
||||
await element.click();
|
||||
|
|
|
@ -98,12 +98,9 @@ export default function ({ getService, getPageObjects }) {
|
|||
await PageObjects.visualize.clickNewSearch();
|
||||
log.debug('Set absolute time range from \"' + fromTime + '\" to \"' + toTime + '\"');
|
||||
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess(vizName1);
|
||||
await PageObjects.security.logout();
|
||||
|
||||
});
|
||||
|
||||
it('rbac read only role can not save a visualization', async function () {
|
||||
|
@ -120,8 +117,6 @@ export default function ({ getService, getPageObjects }) {
|
|||
await PageObjects.visualize.clickNewSearch();
|
||||
log.debug('Set absolute time range from \"' + fromTime + '\" to \"' + toTime + '\"');
|
||||
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.visualize.saveVisualizationExpectFail(vizName1);
|
||||
await PageObjects.security.logout();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue