diff --git a/test/functional/apps/dashboard/_bwc_shared_urls.js b/test/functional/apps/dashboard/_bwc_shared_urls.js index 19620d1774a8..5cec8a80633d 100644 --- a/test/functional/apps/dashboard/_bwc_shared_urls.js +++ b/test/functional/apps/dashboard/_bwc_shared_urls.js @@ -5,6 +5,7 @@ export default function ({ getService, getPageObjects }) { const dashboardExpect = getService('dashboardExpect'); const remote = getService('remote'); const log = getService('log'); + const queryBar = getService('queryBar'); let kibanaBaseUrl; @@ -44,7 +45,7 @@ export default function ({ getService, getPageObjects }) { await remote.get(url, true); await PageObjects.header.waitUntilLoadingHasFinished(); - const query = await PageObjects.dashboard.getQuery(); + const query = await queryBar.getQueryString(); expect(query).to.equal('memory:>220000'); await dashboardExpect.pieSliceCount(5); @@ -60,7 +61,7 @@ export default function ({ getService, getPageObjects }) { await remote.get(url, true); await PageObjects.header.waitUntilLoadingHasFinished(); - const query = await PageObjects.dashboard.getQuery(); + const query = await queryBar.getQueryString(); expect(query).to.equal('memory:>220000'); await dashboardExpect.pieSliceCount(5); diff --git a/test/functional/apps/dashboard/_dashboard_filtering.js b/test/functional/apps/dashboard/_dashboard_filtering.js index 6a6ca303596d..38dcf1b04bb4 100644 --- a/test/functional/apps/dashboard/_dashboard_filtering.js +++ b/test/functional/apps/dashboard/_dashboard_filtering.js @@ -6,6 +6,7 @@ import expect from 'expect.js'; */ export default function ({ getService, getPageObjects }) { const dashboardExpect = getService('dashboardExpect'); + const queryBar = getService('queryBar'); const dashboardAddPanel = getService('dashboardAddPanel'); const testSubjects = getService('testSubjects'); const filterBar = getService('filterBar'); @@ -153,8 +154,8 @@ export default function ({ getService, getPageObjects }) { await dashboardExpect.pieSliceCount(5); await PageObjects.dashboard.clickEditVisualization(); - await PageObjects.dashboard.setQuery('weightLbs:>50'); - await PageObjects.dashboard.clickFilterButton(); + await queryBar.setQuery('weightLbs:>50'); + await queryBar.submitQuery(); await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.dashboard.waitForRenderComplete(); await dashboardExpect.pieSliceCount(3); @@ -186,9 +187,8 @@ export default function ({ getService, getPageObjects }) { }); it('Pie chart linked to saved search filters shows no data with conflicting dashboard query', async () => { - await PageObjects.dashboard.setQuery('weightLbs:<40'); - await PageObjects.dashboard.clickFilterButton(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await queryBar.setQuery('weightLbs:<40'); + await queryBar.submitQuery(); await PageObjects.dashboard.waitForRenderComplete(); await dashboardExpect.pieSliceCount(0); diff --git a/test/functional/apps/dashboard/_dashboard_state.js b/test/functional/apps/dashboard/_dashboard_state.js index 04e959a4e1f6..93e72a41ad88 100644 --- a/test/functional/apps/dashboard/_dashboard_state.js +++ b/test/functional/apps/dashboard/_dashboard_state.js @@ -9,6 +9,7 @@ export default function ({ getService, getPageObjects }) { const PageObjects = getPageObjects(['dashboard', 'visualize', 'header', 'discover']); const testSubjects = getService('testSubjects'); const remote = getService('remote'); + const queryBar = getService('queryBar'); const retry = getService('retry'); const dashboardAddPanel = getService('dashboardAddPanel'); @@ -146,14 +147,14 @@ export default function ({ getService, getPageObjects }) { await PageObjects.dashboard.gotoDashboardLandingPage(); await PageObjects.dashboard.clickNewDashboard(); - const currentQuery = await PageObjects.dashboard.getQuery(); + const currentQuery = await queryBar.getQueryString(); expect(currentQuery).to.equal(''); const currentUrl = await remote.getCurrentUrl(); const newUrl = currentUrl.replace('query:%27%27', 'query:%27hi%27'); // Don't add the timestamp to the url or it will cause a hard refresh and we want to test a // soft refresh. await remote.get(newUrl.toString(), false); - const newQuery = await PageObjects.dashboard.getQuery(); + const newQuery = await queryBar.getQueryString(); expect(newQuery).to.equal('hi'); }); diff --git a/test/functional/apps/dashboard/_view_edit.js b/test/functional/apps/dashboard/_view_edit.js index 158f7fd5d12f..156d78d57553 100644 --- a/test/functional/apps/dashboard/_view_edit.js +++ b/test/functional/apps/dashboard/_view_edit.js @@ -5,6 +5,7 @@ export default function ({ getService, getPageObjects }) { const kibanaServer = getService('kibanaServer'); const retry = getService('retry'); const remote = getService('remote'); + const queryBar = getService('queryBar'); const dashboardAddPanel = getService('dashboardAddPanel'); const PageObjects = getPageObjects(['dashboard', 'header', 'common', 'visualize']); const dashboardName = 'Dashboard View Edit Test'; @@ -79,16 +80,16 @@ export default function ({ getService, getPageObjects }) { }); it('when the query is edited and applied', async function () { - const originalQuery = await PageObjects.dashboard.getQuery(); - await PageObjects.dashboard.setQuery(`${originalQuery} and extra stuff`); - await PageObjects.dashboard.clickFilterButton(); + const originalQuery = await queryBar.getQueryString(); + await queryBar.setQuery(`${originalQuery} and extra stuff`); + await queryBar.submitQuery(); await PageObjects.dashboard.clickCancelOutOfEditMode(); // confirm lose changes await PageObjects.common.clickConfirmOnModal(); - const query = await PageObjects.dashboard.getQuery(); + const query = await queryBar.getQueryString(); expect(query).to.equal(originalQuery); }); @@ -232,8 +233,8 @@ export default function ({ getService, getPageObjects }) { it('when the query is edited but not applied', async function () { await PageObjects.dashboard.gotoDashboardEditMode(dashboardName); - const originalQuery = await PageObjects.dashboard.getQuery(); - await PageObjects.dashboard.setQuery(`${originalQuery} extra stuff`); + const originalQuery = await queryBar.getQueryString(); + await queryBar.setQuery(`${originalQuery} extra stuff`); await PageObjects.dashboard.clickCancelOutOfEditMode(); @@ -241,7 +242,7 @@ export default function ({ getService, getPageObjects }) { expect(isOpen).to.be(false); await PageObjects.dashboard.loadSavedDashboard(dashboardName); - const query = await PageObjects.dashboard.getQuery(); + const query = await queryBar.getQueryString(); expect(query).to.equal(originalQuery); }); }); diff --git a/test/functional/page_objects/dashboard_page.js b/test/functional/page_objects/dashboard_page.js index dadf5312636d..79c4a9ac10f9 100644 --- a/test/functional/page_objects/dashboard_page.js +++ b/test/functional/page_objects/dashboard_page.js @@ -139,27 +139,6 @@ export function DashboardPageProvider({ getService, getPageObjects }) { } } - async getQueryInputElement() { - return await testSubjects.find('queryInput'); - } - - async getQuery() { - log.debug(`getQuery`); - const queryInputElement = await this.getQueryInputElement(); - return await queryInputElement.getProperty('value'); - } - - async setQuery(query) { - log.debug(`setQuery(${query})`); - return await testSubjects.setValue('queryInput', query); - } - - async clickFilterButton() { - log.debug('Clicking filter button'); - await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - } - async clickClone() { log.debug('Clicking clone'); await testSubjects.click('dashboardClone'); diff --git a/test/functional/services/dashboard/visualizations.js b/test/functional/services/dashboard/visualizations.js index 45155ca7ce5a..350e420375f2 100644 --- a/test/functional/services/dashboard/visualizations.js +++ b/test/functional/services/dashboard/visualizations.js @@ -1,6 +1,7 @@ export function DashboardVisualizationProvider({ getService, getPageObjects }) { const log = getService('log'); + const queryBar = getService('queryBar'); const testSubjects = getService('testSubjects'); const dashboardAddPanel = getService('dashboardAddPanel'); const PageObjects = getPageObjects(['dashboard', 'visualize', 'header', 'discover']); @@ -25,8 +26,8 @@ export function DashboardVisualizationProvider({ getService, getPageObjects }) { await PageObjects.dashboard.setTimepickerInDataRange(); if (query) { - await PageObjects.dashboard.setQuery(query); - await PageObjects.dashboard.clickFilterButton(); + await queryBar.setQuery(query); + await queryBar.submitQuery(); } if (fields) { diff --git a/test/functional/services/query_bar.js b/test/functional/services/query_bar.js index 2ef7e6290975..87c27473f93b 100644 --- a/test/functional/services/query_bar.js +++ b/test/functional/services/query_bar.js @@ -1,11 +1,32 @@ -export function QueryBarProvider({ getService }) { +export function QueryBarProvider({ getService, getPageObjects }) { const testSubjects = getService('testSubjects'); + const retry = getService('retry'); + const log = getService('log'); + const PageObjects = getPageObjects(['header']); class QueryBar { async getQueryString() { - const queryInput = await testSubjects.find('queryInput'); - return await queryInput.getProperty('value'); + return await testSubjects.getProperty('queryInput', 'value'); + } + + async setQuery(query) { + log.debug(`QueryBar.setQuery(${query})`); + // Extra caution used because of flaky test here: https://github.com/elastic/kibana/issues/16978 doesn't seem + // to be actually setting the query in the query input based off + await retry.try(async () => { + await testSubjects.setValue('queryInput', query); + const currentQuery = await this.getQueryString(); + if (currentQuery !== query) { + throw new Error(`Failed to set query input to ${query}, instead query is ${currentQuery}`); + } + }); + } + + async submitQuery() { + log.debug('QueryBar.submitQuery'); + await testSubjects.click('querySubmitButton'); + await PageObjects.header.waitUntilLoadingHasFinished(); } }