From 50be0d888ec8c0924e83dd060c22f4d1c1b131d4 Mon Sep 17 00:00:00 2001 From: Spencer Date: Thu, 29 Nov 2018 14:30:47 -0800 Subject: [PATCH] [ftr] wrap remote in browser service (#26394) * [pageObjects/common] remove unused runScript method * [pageObjects/common] remove almost unused doesCssSelectorExist method * [pageObjects/graph] convert to use find/testSubjects services * [pageObjects/discover] refactor out remote service * [pageObjects/pointSeries] refactor out remote service * [pageObjects/monitoring] refactor out remote service * [ftr] refactor uses of remote to use browser or find * [ftr/services/remote] wrap remote with browser service * [pageObjects/security] refactor out uses of remote * [ftr/services/browser] isolate element calls to find * [ftr] rename remote service to __leadfoot__ * [ftr/leadfoot] cleanup some renames in find, keep names in other tests --- test/functional/apps/console/index.js | 4 +- test/functional/apps/context/index.js | 4 +- .../apps/dashboard/_bwc_shared_urls.js | 10 +- .../dashboard/_create_and_add_embeddables.js | 4 +- .../apps/dashboard/_dashboard_grid.js | 11 +- .../apps/dashboard/_dashboard_listing.js | 22 +- .../apps/dashboard/_dashboard_snapshots.js | 6 +- .../apps/dashboard/_dashboard_state.js | 22 +- .../apps/dashboard/_dashboard_time.js | 6 +- test/functional/apps/dashboard/_embed_mode.js | 12 +- .../apps/dashboard/_embeddable_rendering.js | 10 +- .../apps/dashboard/_full_screen_mode.js | 4 +- .../apps/dashboard/_panel_controls.js | 12 +- test/functional/apps/dashboard/index.js | 8 +- test/functional/apps/discover/_discover.js | 6 +- test/functional/apps/discover/index.js | 4 +- test/functional/apps/getting_started/index.js | 4 +- test/functional/apps/home/_home.js | 6 +- test/functional/apps/home/index.js | 4 +- .../management/_handle_version_conflict.js | 4 +- .../_index_pattern_create_delete.js | 6 +- .../management/_index_pattern_results_sort.js | 6 +- .../apps/management/_kibana_settings.js | 6 +- .../apps/management/_scripted_fields.js | 4 +- .../management/_scripted_fields_filter.js | 4 +- .../management/_scripted_fields_preview.js | 4 +- test/functional/apps/timelion/index.js | 4 +- test/functional/apps/visualize/_area_chart.js | 4 +- test/functional/apps/visualize/_tag_cloud.js | 6 +- test/functional/apps/visualize/_tile_map.js | 6 +- test/functional/apps/visualize/index.js | 4 +- test/functional/config.js | 4 +- test/functional/page_objects/common_page.js | 65 ++--- test/functional/page_objects/context_page.js | 4 +- .../functional/page_objects/dashboard_page.js | 8 +- test/functional/page_objects/discover_page.js | 104 +++----- test/functional/page_objects/header_page.js | 35 +-- .../page_objects/monitoring_page.js | 25 +- .../page_objects/point_series_page.js | 237 ++++++---------- test/functional/page_objects/settings_page.js | 24 +- .../functional/page_objects/visualize_page.js | 33 +-- test/functional/services/browser.js | 252 ++++++++++++++++++ .../services/dashboard/panel_actions.js | 4 +- test/functional/services/embedding.js | 6 +- test/functional/services/failure_debugging.js | 8 +- test/functional/services/filter_bar.js | 12 +- test/functional/services/find.js | 85 +++--- test/functional/services/index.js | 1 + .../services/remote/interceptors.js | 43 --- test/functional/services/remote/remote.js | 8 +- test/functional/services/screenshots.js | 4 +- test/functional/services/test_subjects.js | 12 +- .../custom_visualizations/index.js | 4 +- .../embedding_visualizations/index.js | 4 +- .../test_suites/panel_actions/index.js | 4 +- .../test/functional/apps/canvas/smoke_test.js | 4 +- .../dashboard_mode/dashboard_view_mode.js | 6 +- x-pack/test/functional/apps/graph/graph.js | 4 +- .../apps/grok_debugger/grok_debugger.js | 4 +- .../apps/logstash/pipeline_create.js | 8 +- .../functional/apps/logstash/pipeline_list.js | 8 +- .../apps/monitoring/_get_lifecycle_methods.js | 4 +- .../monitoring/enable_monitoring/index.js | 4 +- .../apps/security/doc_level_security_roles.js | 4 +- .../apps/security/field_level_security.js | 4 +- .../functional/apps/security/management.js | 22 +- .../functional/apps/security/rbac_phase1.js | 4 +- .../apps/security/secure_roles_perm.js | 4 +- .../functional/apps/watcher/watcher_test.js | 4 +- .../functional/page_objects/graph_page.js | 91 +++---- .../functional/page_objects/reporting_page.js | 24 +- .../functional/page_objects/security_page.js | 54 ++-- .../page_objects/space_selector_page.js | 7 +- .../functional/page_objects/status_page.js | 9 +- .../functional/page_objects/watcher_page.js | 8 +- x-pack/test/functional/services/ace_editor.js | 4 +- 76 files changed, 753 insertions(+), 731 deletions(-) create mode 100644 test/functional/services/browser.js delete mode 100644 test/functional/services/remote/interceptors.js diff --git a/test/functional/apps/console/index.js b/test/functional/apps/console/index.js index abf758b40d4ff4..9e568c0ebbef0b 100644 --- a/test/functional/apps/console/index.js +++ b/test/functional/apps/console/index.js @@ -18,13 +18,13 @@ */ export default function ({ getService, loadTestFile }) { - const remote = getService('remote'); + const browser = getService('browser'); describe('console app', function () { this.tags('ciGroup1'); before(async function () { - await remote.setWindowSize(1300, 1100); + await browser.setWindowSize(1300, 1100); }); loadTestFile(require.resolve('./_console')); diff --git a/test/functional/apps/context/index.js b/test/functional/apps/context/index.js index 0b699f2e404ca1..9eb0c682333523 100644 --- a/test/functional/apps/context/index.js +++ b/test/functional/apps/context/index.js @@ -18,7 +18,7 @@ */ export default function ({ getService, getPageObjects, loadTestFile }) { - const remote = getService('remote'); + const browser = getService('browser'); const esArchiver = getService('esArchiver'); const PageObjects = getPageObjects(['common']); const kibanaServer = getService('kibanaServer'); @@ -27,7 +27,7 @@ export default function ({ getService, getPageObjects, loadTestFile }) { this.tags('ciGroup1'); before(async function () { - await remote.setWindowSize(1200, 800); + await browser.setWindowSize(1200, 800); await esArchiver.loadIfNeeded('logstash_functional'); await esArchiver.load('visualize'); await kibanaServer.uiSettings.replace({ 'dateFormat:tz': 'UTC', 'defaultIndex': 'logstash-*', diff --git a/test/functional/apps/dashboard/_bwc_shared_urls.js b/test/functional/apps/dashboard/_bwc_shared_urls.js index 2ec8ac358f9e18..a857c9e0ed475f 100644 --- a/test/functional/apps/dashboard/_bwc_shared_urls.js +++ b/test/functional/apps/dashboard/_bwc_shared_urls.js @@ -22,7 +22,7 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { const PageObjects = getPageObjects(['dashboard', 'header']); const dashboardExpect = getService('dashboardExpect'); - const remote = getService('remote'); + const browser = getService('browser'); const log = getService('log'); const queryBar = getService('queryBar'); @@ -52,7 +52,7 @@ export default function ({ getService, getPageObjects }) { before(async function () { await PageObjects.dashboard.initTests(); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); kibanaBaseUrl = currentUrl.substring(0, currentUrl.indexOf('#')); }); @@ -61,7 +61,7 @@ export default function ({ getService, getPageObjects }) { it('loads an unsaved dashboard', async function () { const url = `${kibanaBaseUrl}#/dashboard?${urlQuery}`; log.debug(`Navigating to ${url}`); - await remote.get(url, true); + await browser.get(url, true); await PageObjects.header.waitUntilLoadingHasFinished(); const query = await queryBar.getQueryString(); @@ -77,7 +77,7 @@ export default function ({ getService, getPageObjects }) { const id = await PageObjects.dashboard.getDashboardIdFromCurrentUrl(); const url = `${kibanaBaseUrl}#/dashboard/${id}`; - await remote.get(url, true); + await browser.get(url, true); await PageObjects.header.waitUntilLoadingHasFinished(); const query = await queryBar.getQueryString(); @@ -93,7 +93,7 @@ export default function ({ getService, getPageObjects }) { const updatedQuery = urlQuery.replace(/F9D9F9/g, '000000'); const url = `${kibanaBaseUrl}#/dashboard/${id}?${updatedQuery}`; - await remote.get(url, true); + await browser.get(url, true); await PageObjects.header.waitUntilLoadingHasFinished(); await dashboardExpect.selectedLegendColorCount('#000000', 5); diff --git a/test/functional/apps/dashboard/_create_and_add_embeddables.js b/test/functional/apps/dashboard/_create_and_add_embeddables.js index bcd50afea6b753..ef0334c18089bc 100644 --- a/test/functional/apps/dashboard/_create_and_add_embeddables.js +++ b/test/functional/apps/dashboard/_create_and_add_embeddables.js @@ -26,7 +26,7 @@ import { export default function ({ getService, getPageObjects }) { const retry = getService('retry'); const PageObjects = getPageObjects(['dashboard', 'header', 'visualize', 'settings', 'common']); - const remote = getService('remote'); + const browser = getService('browser'); const dashboardAddPanel = getService('dashboardAddPanel'); describe('create and add embeddables', async () => { @@ -52,7 +52,7 @@ export default function ({ getService, getPageObjects }) { it('saves the saved visualization url to the app link', async () => { await PageObjects.header.clickVisualize(); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); expect(currentUrl).to.contain(VisualizeConstants.EDIT_PATH); }); diff --git a/test/functional/apps/dashboard/_dashboard_grid.js b/test/functional/apps/dashboard/_dashboard_grid.js index 2840424e7f0172..9a953ca035e3f7 100644 --- a/test/functional/apps/dashboard/_dashboard_grid.js +++ b/test/functional/apps/dashboard/_dashboard_grid.js @@ -20,7 +20,7 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { - const remote = getService('remote'); + const browser = getService('browser'); const dashboardPanelActions = getService('dashboardPanelActions'); const PageObjects = getPageObjects(['dashboard']); @@ -38,11 +38,10 @@ export default function ({ getService, getPageObjects }) { const panelTitleBeforeMove = await dashboardPanelActions.getPanelHeading(lastVisTitle); const position1 = await panelTitleBeforeMove.getPosition(); - remote - .moveMouseTo(panelTitleBeforeMove) - .pressMouseButton() - .moveMouseTo(null, -20, -450) - .releaseMouseButton(); + await browser.moveMouseTo(panelTitleBeforeMove); + await browser.pressMouseButton(); + await browser.moveMouseTo(null, -20, -450); + await browser.releaseMouseButton(); const panelTitleAfterMove = await dashboardPanelActions.getPanelHeading(lastVisTitle); const position2 = await panelTitleAfterMove.getPosition(); diff --git a/test/functional/apps/dashboard/_dashboard_listing.js b/test/functional/apps/dashboard/_dashboard_listing.js index b227f04253b28b..58c2ac379fa3c5 100644 --- a/test/functional/apps/dashboard/_dashboard_listing.js +++ b/test/functional/apps/dashboard/_dashboard_listing.js @@ -21,7 +21,7 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { const PageObjects = getPageObjects(['dashboard', 'header', 'common']); - const remote = getService('remote'); + const browser = getService('browser'); describe('dashboard listing page', function describeIndexTests() { const dashboardName = 'Dashboard Listing Test'; @@ -126,11 +126,11 @@ export default function ({ getService, getPageObjects }) { describe('search by title', function () { it('loads a dashboard if title matches', async function () { - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); const newUrl = currentUrl + '&title=Two%20Words'; // Only works on a hard refresh. const useTimeStamp = true; - await remote.get(newUrl.toString(), useTimeStamp); + await browser.get(newUrl.toString(), useTimeStamp); const onDashboardLandingPage = await PageObjects.dashboard.onDashboardLandingPage(); expect(onDashboardLandingPage).to.equal(false); @@ -138,11 +138,11 @@ export default function ({ getService, getPageObjects }) { it('title match is case insensitive', async function () { await PageObjects.dashboard.gotoDashboardLandingPage(); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); const newUrl = currentUrl + '&title=two%20words'; // Only works on a hard refresh. const useTimeStamp = true; - await remote.get(newUrl.toString(), useTimeStamp); + await browser.get(newUrl.toString(), useTimeStamp); const onDashboardLandingPage = await PageObjects.dashboard.onDashboardLandingPage(); expect(onDashboardLandingPage).to.equal(false); @@ -150,11 +150,11 @@ export default function ({ getService, getPageObjects }) { it('stays on listing page if title matches no dashboards', async function () { await PageObjects.dashboard.gotoDashboardLandingPage(); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); const newUrl = currentUrl + '&title=nodashboardsnamedme'; // Only works on a hard refresh. const useTimeStamp = true; - await remote.get(newUrl.toString(), useTimeStamp); + await browser.get(newUrl.toString(), useTimeStamp); await PageObjects.header.waitUntilLoadingHasFinished(); const onDashboardLandingPage = await PageObjects.dashboard.onDashboardLandingPage(); @@ -170,11 +170,11 @@ export default function ({ getService, getPageObjects }) { await PageObjects.dashboard.clickNewDashboard(); await PageObjects.dashboard.saveDashboard('two words', { needsConfirm: true }); await PageObjects.dashboard.gotoDashboardLandingPage(); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); const newUrl = currentUrl + '&title=two%20words'; // Only works on a hard refresh. const useTimeStamp = true; - await remote.get(newUrl.toString(), useTimeStamp); + await browser.get(newUrl.toString(), useTimeStamp); await PageObjects.header.waitUntilLoadingHasFinished(); const onDashboardLandingPage = await PageObjects.dashboard.onDashboardLandingPage(); @@ -190,12 +190,12 @@ export default function ({ getService, getPageObjects }) { await PageObjects.dashboard.clickNewDashboard(); await PageObjects.dashboard.saveDashboard('i am !@#$%^&*()_+~`,.<>{}[]; so special'); await PageObjects.dashboard.gotoDashboardLandingPage(); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); // Need to encode that one. const newUrl = currentUrl + '&title=i%20am%20%21%40%23%24%25%5E%26%2A%28%29_%2B~%60%2C.%3C%3E%7B%7D%5B%5D%3B%20so%20special'; // Only works on a hard refresh. const useTimeStamp = true; - await remote.get(newUrl.toString(), useTimeStamp); + await browser.get(newUrl.toString(), useTimeStamp); await PageObjects.header.waitUntilLoadingHasFinished(); const onDashboardLandingPage = await PageObjects.dashboard.onDashboardLandingPage(); diff --git a/test/functional/apps/dashboard/_dashboard_snapshots.js b/test/functional/apps/dashboard/_dashboard_snapshots.js index 78e817ea9b76ba..71c38c69f87ae6 100644 --- a/test/functional/apps/dashboard/_dashboard_snapshots.js +++ b/test/functional/apps/dashboard/_dashboard_snapshots.js @@ -22,18 +22,18 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects, updateBaselines }) { const PageObjects = getPageObjects(['dashboard', 'header', 'visualize', 'common']); const screenshot = getService('screenshots'); - const remote = getService('remote'); + const browser = getService('browser'); const dashboardPanelActions = getService('dashboardPanelActions'); const dashboardAddPanel = getService('dashboardAddPanel'); describe('dashboard snapshots', function describeIndexTests() { before(async function () { // We use a really small window to minimize differences across os's and browsers. - await remote.setWindowSize(1000, 500); + await browser.setWindowSize(1000, 500); }); after(async function () { - await remote.setWindowSize(1300, 900); + await browser.setWindowSize(1300, 900); const id = await PageObjects.dashboard.getDashboardIdFromCurrentUrl(); await PageObjects.dashboard.deleteDashboard('area', id); }); diff --git a/test/functional/apps/dashboard/_dashboard_state.js b/test/functional/apps/dashboard/_dashboard_state.js index 714cd83681d8e6..a3c0b61d33b5b4 100644 --- a/test/functional/apps/dashboard/_dashboard_state.js +++ b/test/functional/apps/dashboard/_dashboard_state.js @@ -27,7 +27,7 @@ import { export default function ({ getService, getPageObjects }) { const PageObjects = getPageObjects(['dashboard', 'visualize', 'header', 'discover']); const testSubjects = getService('testSubjects'); - const remote = getService('remote'); + const browser = getService('browser'); const queryBar = getService('queryBar'); const retry = getService('retry'); const dashboardPanelActions = getService('dashboardPanelActions'); @@ -166,21 +166,21 @@ export default function ({ getService, getPageObjects }) { const currentQuery = await queryBar.getQueryString(); expect(currentQuery).to.equal(''); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.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); + await browser.get(newUrl.toString(), false); const newQuery = await queryBar.getQueryString(); expect(newQuery).to.equal('hi'); }); it('for panel size parameters', async function () { await dashboardAddPanel.addVisualization(PIE_CHART_VIS_NAME); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); const currentPanelDimensions = await PageObjects.dashboard.getPanelDimensions(); const newUrl = currentUrl.replace(`w:${DEFAULT_PANEL_WIDTH}`, `w:${DEFAULT_PANEL_WIDTH * 2}`); - await remote.get(newUrl.toString(), false); + await browser.get(newUrl.toString(), false); await retry.try(async () => { const newPanelDimensions = await PageObjects.dashboard.getPanelDimensions(); if (newPanelDimensions.length < 0) { @@ -196,9 +196,9 @@ export default function ({ getService, getPageObjects }) { }); it('when removing a panel', async function () { - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); const newUrl = currentUrl.replace(/panels:\!\(.*\),query/, 'panels:!(),query'); - await remote.get(newUrl.toString(), false); + await browser.get(newUrl.toString(), false); await retry.try(async () => { const newPanelCount = await PageObjects.dashboard.getPanelCount(); @@ -211,9 +211,9 @@ export default function ({ getService, getPageObjects }) { await dashboardAddPanel.addVisualization(PIE_CHART_VIS_NAME); await PageObjects.visualize.openLegendOptionColors('80,000'); await PageObjects.visualize.selectNewLegendColorChoice('#F9D9F9'); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); const newUrl = currentUrl.replace('F9D9F9', 'FFFFFF'); - await remote.get(newUrl.toString(), false); + await browser.get(newUrl.toString(), false); await PageObjects.header.waitUntilLoadingHasFinished(); await retry.try(async () => { @@ -238,9 +238,9 @@ export default function ({ getService, getPageObjects }) { }); it('resets a pie slice color to the original when removed', async function () { - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); const newUrl = currentUrl.replace('vis:(colors:(%2780,000%27:%23FFFFFF))', ''); - await remote.get(newUrl.toString(), false); + await browser.get(newUrl.toString(), false); await PageObjects.header.waitUntilLoadingHasFinished(); await retry.try(async () => { diff --git a/test/functional/apps/dashboard/_dashboard_time.js b/test/functional/apps/dashboard/_dashboard_time.js index 5e6ff78fb2079a..e804d8e3f732eb 100644 --- a/test/functional/apps/dashboard/_dashboard_time.js +++ b/test/functional/apps/dashboard/_dashboard_time.js @@ -26,7 +26,7 @@ const toTime = '2015-09-23 18:31:44.000'; export default function ({ getPageObjects, getService }) { const PageObjects = getPageObjects(['dashboard', 'header']); - const remote = getService('remote'); + const browser = getService('browser'); describe('dashboard time', () => { before(async function () { @@ -94,14 +94,14 @@ export default function ({ getPageObjects, getService }) { // However, if the URL also contains time in the global state, then the global state // time should take precedence. it('should be overwritten by global state', async function () { - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); const kibanaBaseUrl = currentUrl.substring(0, currentUrl.indexOf('#')); const id = await PageObjects.dashboard.getDashboardIdFromCurrentUrl(); await PageObjects.dashboard.gotoDashboardLandingPage(); const urlWithGlobalTime = `${kibanaBaseUrl}#/dashboard/${id}?_g=(time:(from:now-1h,mode:quick,to:now))`; - await remote.get(urlWithGlobalTime, false); + await browser.get(urlWithGlobalTime, false); const prettyPrint = await PageObjects.header.getPrettyDuration(); expect(prettyPrint).to.equal('Last 1 hour'); }); diff --git a/test/functional/apps/dashboard/_embed_mode.js b/test/functional/apps/dashboard/_embed_mode.js index 922f2a9c37abe0..22fb42108ce2ca 100644 --- a/test/functional/apps/dashboard/_embed_mode.js +++ b/test/functional/apps/dashboard/_embed_mode.js @@ -22,7 +22,7 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { const retry = getService('retry'); const PageObjects = getPageObjects(['dashboard', 'common']); - const remote = getService('remote'); + const browser = getService('browser'); describe('embed mode', async () => { before(async () => { @@ -33,11 +33,11 @@ export default function ({ getService, getPageObjects }) { let isChromeVisible = await PageObjects.common.isChromeVisible(); expect(isChromeVisible).to.be(true); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); const newUrl = currentUrl + '&embed=true'; // Embed parameter only works on a hard refresh. const useTimeStamp = true; - await remote.get(newUrl.toString(), useTimeStamp); + await browser.get(newUrl.toString(), useTimeStamp); await retry.try(async () => { isChromeVisible = await PageObjects.common.isChromeVisible(); @@ -46,14 +46,14 @@ export default function ({ getService, getPageObjects }) { }); after(async function () { - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); const newUrl = currentUrl.replace('&embed=true', ''); // First use the timestamp to cause a hard refresh so the new embed parameter works correctly. let useTimeStamp = true; - await remote.get(newUrl.toString(), useTimeStamp); + await browser.get(newUrl.toString(), useTimeStamp); // Then get rid of the timestamp so the rest of the tests work with state and app switching. useTimeStamp = false; - await remote.get(newUrl.toString(), useTimeStamp); + await browser.get(newUrl.toString(), useTimeStamp); }); }); } diff --git a/test/functional/apps/dashboard/_embeddable_rendering.js b/test/functional/apps/dashboard/_embeddable_rendering.js index 5e36bed3b4d404..9cec0582a4e3e6 100644 --- a/test/functional/apps/dashboard/_embeddable_rendering.js +++ b/test/functional/apps/dashboard/_embeddable_rendering.js @@ -29,7 +29,7 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { const find = getService('find'); - const remote = getService('remote'); + const browser = getService('browser'); const dashboardExpect = getService('dashboardExpect'); const dashboardAddPanel = getService('dashboardAddPanel'); const PageObjects = getPageObjects(['common', 'dashboard', 'header', 'visualize', 'discover']); @@ -91,9 +91,9 @@ export default function ({ getService, getPageObjects }) { after(async () => { // Get rid of the timestamp added in this test, as well any global or app state. - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); const newUrl = currentUrl.replace(/\?.*$/, ''); - await remote.get(newUrl, false); + await browser.get(newUrl, false); }); it('adding visualizations', async () => { @@ -132,8 +132,8 @@ export default function ({ getService, getPageObjects }) { }); it('data rendered correctly when dashboard is hard refreshed', async () => { - const currentUrl = await remote.getCurrentUrl(); - await remote.get(currentUrl, true); + const currentUrl = await browser.getCurrentUrl(); + await browser.get(currentUrl, true); await expectAllDataRenders(); }); diff --git a/test/functional/apps/dashboard/_full_screen_mode.js b/test/functional/apps/dashboard/_full_screen_mode.js index e2870f81f728af..68bb2f58be8d02 100644 --- a/test/functional/apps/dashboard/_full_screen_mode.js +++ b/test/functional/apps/dashboard/_full_screen_mode.js @@ -21,7 +21,7 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { const retry = getService('retry'); - const remote = getService('remote'); + const browser = getService('browser'); const dashboardPanelActions = getService('dashboardPanelActions'); const PageObjects = getPageObjects(['dashboard', 'common']); @@ -69,7 +69,7 @@ export default function ({ getService, getPageObjects }) { it('exits when the text button is clicked on', async () => { const logoButton = await PageObjects.dashboard.getExitFullScreenLogoButton(); - await remote.moveMouseTo(logoButton); + await browser.moveMouseTo(logoButton); await PageObjects.dashboard.clickExitFullScreenTextButton(); await retry.try(async () => { diff --git a/test/functional/apps/dashboard/_panel_controls.js b/test/functional/apps/dashboard/_panel_controls.js index 5aed6b7cac516b..1c9a6eea291606 100644 --- a/test/functional/apps/dashboard/_panel_controls.js +++ b/test/functional/apps/dashboard/_panel_controls.js @@ -26,7 +26,7 @@ import { export default function ({ getService, getPageObjects }) { const kibanaServer = getService('kibanaServer'); - const remote = getService('remote'); + const browser = getService('browser'); const dashboardPanelActions = getService('dashboardPanelActions'); const dashboardAddPanel = getService('dashboardAddPanel'); const PageObjects = getPageObjects(['dashboard', 'header', 'visualize', 'discover']); @@ -36,7 +36,7 @@ export default function ({ getService, getPageObjects }) { before(async function () { await PageObjects.dashboard.initTests(); await kibanaServer.uiSettings.disableToastAutohide(); - await remote.refresh(); + await browser.refresh(); // This flip between apps fixes the url so state is preserved when switching apps in test mode. // Without this flip the url in test mode looks something like @@ -79,9 +79,9 @@ export default function ({ getService, getPageObjects }) { // Based off an actual bug encountered in a PR where a hard refresh in edit mode did not show the edit mode // controls. it('are shown in edit mode after a hard refresh', async () => { - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); // the second parameter of true will include the timestamp in the url and trigger a hard refresh. - await remote.get(currentUrl.toString(), true); + await browser.get(currentUrl.toString(), true); await PageObjects.header.waitUntilLoadingHasFinished(); await dashboardPanelActions.openContextMenu(); @@ -89,7 +89,7 @@ export default function ({ getService, getPageObjects }) { await dashboardPanelActions.expectExistsRemovePanelAction(); // Get rid of the timestamp in the url. - await remote.get(currentUrl.toString(), false); + await browser.get(currentUrl.toString(), false); }); describe('on an expanded panel', function () { @@ -116,7 +116,7 @@ export default function ({ getService, getPageObjects }) { await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); await PageObjects.header.waitUntilLoadingHasFinished(); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); expect(currentUrl).to.contain(VisualizeConstants.EDIT_PATH); }); diff --git a/test/functional/apps/dashboard/index.js b/test/functional/apps/dashboard/index.js index 53ba2a77fd0a7a..78bb951df55ef9 100644 --- a/test/functional/apps/dashboard/index.js +++ b/test/functional/apps/dashboard/index.js @@ -18,12 +18,12 @@ */ export default function ({ getService, loadTestFile, getPageObjects }) { - const remote = getService('remote'); + const browser = getService('browser'); const esArchiver = getService('esArchiver'); const PageObjects = getPageObjects(['dashboard']); async function loadCurrentData() { - await remote.setWindowSize(1300, 900); + await browser.setWindowSize(1300, 900); await PageObjects.dashboard.initTests({ kibanaIndex: 'dashboard/current/kibana', dataIndex: 'dashboard/current/data', @@ -75,7 +75,7 @@ export default function ({ getService, loadTestFile, getPageObjects }) { // legacy data only for specifically testing BWC situations. describe('using legacy data', function () { this.tags('ciGroup4'); - before(() => remote.setWindowSize(1200, 900)); + before(() => browser.setWindowSize(1200, 900)); loadTestFile(require.resolve('./_dashboard_time_picker')); loadTestFile(require.resolve('./_bwc_shared_urls')); @@ -85,7 +85,7 @@ export default function ({ getService, loadTestFile, getPageObjects }) { describe('using legacy data', function () { this.tags('ciGroup5'); - before(() => remote.setWindowSize(1200, 900)); + before(() => browser.setWindowSize(1200, 900)); loadTestFile(require.resolve('./_dashboard_save')); loadTestFile(require.resolve('./_dashboard_time')); diff --git a/test/functional/apps/discover/_discover.js b/test/functional/apps/discover/_discover.js index 2c12356a276370..4265e3445d1057 100644 --- a/test/functional/apps/discover/_discover.js +++ b/test/functional/apps/discover/_discover.js @@ -23,7 +23,7 @@ export default function ({ getService, getPageObjects }) { const log = getService('log'); const retry = getService('retry'); const esArchiver = getService('esArchiver'); - const remote = getService('remote'); + const browser = getService('browser'); const kibanaServer = getService('kibanaServer'); const filterBar = getService('filterBar'); const PageObjects = getPageObjects(['common', 'discover', 'header']); @@ -240,7 +240,7 @@ export default function ({ getService, getPageObjects }) { const expectedChartInterval = 'Daily'; const expectedBarChartData = [4757, 4614, 4633]; - await remote.goBack(); + await browser.goBack(); await retry.try(async function tryingForTime() { const actualInterval = await PageObjects.discover.getChartInterval(); expect(actualInterval).to.be(expectedChartInterval); @@ -413,7 +413,7 @@ export default function ({ getService, getPageObjects }) { describe('time zone switch', () => { it('should show bars in the correct time zone after switching', async function () { await kibanaServer.uiSettings.replace({ 'dateFormat:tz': 'America/Phoenix' }); - await remote.refresh(); + await browser.refresh(); await PageObjects.header.setAbsoluteRange(fromTime, toTime); const ticks = await PageObjects.discover.getBarChartXTicks(); expect(ticks).to.eql(['2015-09-19 17:00', '2015-09-20 17:00', '2015-09-21 17:00', '2015-09-22 17:00']); diff --git a/test/functional/apps/discover/index.js b/test/functional/apps/discover/index.js index 37e1853eea7933..420c0de35115cb 100644 --- a/test/functional/apps/discover/index.js +++ b/test/functional/apps/discover/index.js @@ -19,13 +19,13 @@ export default function ({ getService, loadTestFile }) { const esArchiver = getService('esArchiver'); - const remote = getService('remote'); + const browser = getService('browser'); describe('discover app', function () { this.tags('ciGroup6'); before(function () { - return remote.setWindowSize(1200, 800); + return browser.setWindowSize(1200, 800); }); after(function unloadMakelogs() { diff --git a/test/functional/apps/getting_started/index.js b/test/functional/apps/getting_started/index.js index 3a18bff81b81af..c5a900be0d1ba3 100644 --- a/test/functional/apps/getting_started/index.js +++ b/test/functional/apps/getting_started/index.js @@ -18,13 +18,13 @@ */ export default function ({ getService, loadTestFile }) { - const remote = getService('remote'); + const browser = getService('browser'); describe('Getting Started ', function () { this.tags('ciGroup6'); before(async function () { - await remote.setWindowSize(1200, 800); + await browser.setWindowSize(1200, 800); }); // https://www.elastic.co/guide/en/kibana/current/tutorial-load-dataset.html loadTestFile(require.resolve('./_shakespeare')); diff --git a/test/functional/apps/home/_home.js b/test/functional/apps/home/_home.js index 04623018e5225d..7f51b317e0287a 100644 --- a/test/functional/apps/home/_home.js +++ b/test/functional/apps/home/_home.js @@ -21,7 +21,7 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { - const remote = getService('remote'); + const browser = getService('browser'); const PageObjects = getPageObjects(['common', 'home']); describe('Kibana takes you home', function describeIndexTests() { @@ -29,13 +29,13 @@ export default function ({ getService, getPageObjects }) { it('clicking on kibana logo should take you to home page', async ()=> { await PageObjects.common.navigateToApp('settings'); await PageObjects.home.clickKibanaIcon(); - const url = await remote.getCurrentUrl(); + const url = await browser.getCurrentUrl(); expect(url.includes('/app/kibana#/home')).to.be(true); }); it('clicking on console on homepage should take you to console app', async ()=> { await PageObjects.home.clickSynopsis('console'); - const url = await remote.getCurrentUrl(); + const url = await browser.getCurrentUrl(); expect(url.includes('/app/kibana#/dev_tools/console')).to.be(true); }); diff --git a/test/functional/apps/home/index.js b/test/functional/apps/home/index.js index 496eaf9fd6af88..97942dfae4cba3 100644 --- a/test/functional/apps/home/index.js +++ b/test/functional/apps/home/index.js @@ -18,13 +18,13 @@ */ export default function ({ getService, loadTestFile }) { - const remote = getService('remote'); + const browser = getService('browser'); describe('homepage app', function () { this.tags('ciGroup6'); before(function () { - return remote.setWindowSize(1200, 800); + return browser.setWindowSize(1200, 800); }); loadTestFile(require.resolve('./_home')); diff --git a/test/functional/apps/management/_handle_version_conflict.js b/test/functional/apps/management/_handle_version_conflict.js index 4a515473449a07..dc5627c7b096c1 100644 --- a/test/functional/apps/management/_handle_version_conflict.js +++ b/test/functional/apps/management/_handle_version_conflict.js @@ -31,7 +31,7 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { const esArchiver = getService('esArchiver'); - const remote = getService('remote'); + const browser = getService('browser'); const es = getService('es'); const retry = getService('retry'); const scriptedFiledName = 'versionConflictScript'; @@ -41,7 +41,7 @@ export default function ({ getService, getPageObjects }) { describe('index version conflict', function describeIndexTests() { before(async function () { - await remote.setWindowSize(1200, 800); + await browser.setWindowSize(1200, 800); await esArchiver.load('discover'); }); diff --git a/test/functional/apps/management/_index_pattern_create_delete.js b/test/functional/apps/management/_index_pattern_create_delete.js index df5a4ea1d74743..002936f060bbe4 100644 --- a/test/functional/apps/management/_index_pattern_create_delete.js +++ b/test/functional/apps/management/_index_pattern_create_delete.js @@ -21,7 +21,7 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { const kibanaServer = getService('kibanaServer'); - const remote = getService('remote'); + const browser = getService('browser'); const log = getService('log'); const retry = getService('retry'); const PageObjects = getPageObjects(['settings', 'common']); @@ -54,7 +54,7 @@ export default function ({ getService, getPageObjects }) { it('should have index pattern in url', function url() { return retry.try(function tryingForTime() { - return remote.getCurrentUrl() + return browser.getCurrentUrl() .then(function (currentUrl) { expect(currentUrl).to.contain(indexPatternId); }); @@ -107,7 +107,7 @@ export default function ({ getService, getPageObjects }) { it('should remove index pattern from url', function indexNotInUrl() { // give the url time to settle return retry.try(function tryingForTime() { - return remote.getCurrentUrl() + return browser.getCurrentUrl() .then(function (currentUrl) { log.debug('currentUrl = ' + currentUrl); expect(currentUrl).to.not.contain('logstash-*'); diff --git a/test/functional/apps/management/_index_pattern_results_sort.js b/test/functional/apps/management/_index_pattern_results_sort.js index 6135d7f09b738b..48f64ab14c7174 100644 --- a/test/functional/apps/management/_index_pattern_results_sort.js +++ b/test/functional/apps/management/_index_pattern_results_sort.js @@ -35,14 +35,16 @@ export default function ({ getService, getPageObjects }) { first: '@message', last: 'xss.raw', selector: async function () { - return await PageObjects.settings.getTableRow(0, 0).getVisibleText(); + const tableRow = await PageObjects.settings.getTableRow(0, 0); + return await tableRow.getVisibleText(); } }, { heading: 'Type', first: '_source', last: 'string', selector: async function () { - return await PageObjects.settings.getTableRow(0, 1).getVisibleText(); + const tableRow = await PageObjects.settings.getTableRow(0, 1); + return await tableRow.getVisibleText(); } }]; diff --git a/test/functional/apps/management/_kibana_settings.js b/test/functional/apps/management/_kibana_settings.js index 602a3ca276f7a4..622ea78fa2443a 100644 --- a/test/functional/apps/management/_kibana_settings.js +++ b/test/functional/apps/management/_kibana_settings.js @@ -21,7 +21,7 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { const kibanaServer = getService('kibanaServer'); - const remote = getService('remote'); + const browser = getService('browser'); const PageObjects = getPageObjects(['settings', 'common', 'dashboard', 'header']); describe('kibana settings', function describeIndexTests() { @@ -58,7 +58,7 @@ export default function ({ getService, getPageObjects }) { await PageObjects.common.navigateToApp('dashboard'); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.header.setAbsoluteRange('2015-09-19 06:31:44.000', '2015-09-23 18:31:44.000'); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); const urlPieces = currentUrl.match(/(.*)?_g=(.*)&_a=(.*)/); const globalState = urlPieces[2]; const appState = urlPieces[3]; @@ -81,7 +81,7 @@ export default function ({ getService, getPageObjects }) { await PageObjects.common.navigateToApp('dashboard'); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.header.setAbsoluteRange('2015-09-19 06:31:44.000', '2015-09-23 18:31:44.000'); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); const urlPieces = currentUrl.match(/(.*)?_g=(.*)&_a=(.*)/); const globalState = urlPieces[2]; const appState = urlPieces[3]; diff --git a/test/functional/apps/management/_scripted_fields.js b/test/functional/apps/management/_scripted_fields.js index a4fbf7e222b387..be70fb47982784 100644 --- a/test/functional/apps/management/_scripted_fields.js +++ b/test/functional/apps/management/_scripted_fields.js @@ -34,7 +34,7 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { const kibanaServer = getService('kibanaServer'); const log = getService('log'); - const remote = getService('remote'); + const browser = getService('browser'); const retry = getService('retry'); const testSubjects = getService('testSubjects'); const PageObjects = getPageObjects(['common', 'header', 'settings', 'visualize', 'discover']); @@ -42,7 +42,7 @@ export default function ({ getService, getPageObjects }) { describe('scripted fields', () => { before(async function () { - await remote.setWindowSize(1200, 800); + await browser.setWindowSize(1200, 800); // delete .kibana index and then wait for Kibana to re-create it await kibanaServer.uiSettings.replace({ 'dateFormat:tz': 'UTC' }); await PageObjects.settings.navigateTo(); diff --git a/test/functional/apps/management/_scripted_fields_filter.js b/test/functional/apps/management/_scripted_fields_filter.js index 3e0e02617233d0..8f150c0b2aa607 100644 --- a/test/functional/apps/management/_scripted_fields_filter.js +++ b/test/functional/apps/management/_scripted_fields_filter.js @@ -24,14 +24,14 @@ export default function ({ getService, getPageObjects }) { const kibanaServer = getService('kibanaServer'); const retry = getService('retry'); const log = getService('log'); - const remote = getService('remote'); + const browser = getService('browser'); const esArchiver = getService('esArchiver'); const PageObjects = getPageObjects(['settings']); describe('filter scripted fields', function describeIndexTests() { before(async function () { // delete .kibana index and then wait for Kibana to re-create it - await remote.setWindowSize(1200, 800); + await browser.setWindowSize(1200, 800); await esArchiver.load('management'); await kibanaServer.uiSettings.replace({ 'dateFormat:tz': 'UTC', diff --git a/test/functional/apps/management/_scripted_fields_preview.js b/test/functional/apps/management/_scripted_fields_preview.js index 21eef4bebdbc35..e1ba2fc8be5848 100644 --- a/test/functional/apps/management/_scripted_fields_preview.js +++ b/test/functional/apps/management/_scripted_fields_preview.js @@ -21,13 +21,13 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { const kibanaServer = getService('kibanaServer'); - const remote = getService('remote'); + const browser = getService('browser'); const PageObjects = getPageObjects(['settings']); const SCRIPTED_FIELD_NAME = 'myScriptedField'; describe('scripted fields preview', () => { before(async function () { - await remote.setWindowSize(1200, 800); + await browser.setWindowSize(1200, 800); // delete .kibana index and then wait for Kibana to re-create it await kibanaServer.uiSettings.replace({ 'dateFormat:tz': 'UTC' }); await PageObjects.settings.navigateTo(); diff --git a/test/functional/apps/timelion/index.js b/test/functional/apps/timelion/index.js index 286f14f0fbcdd0..08affa8cd00dad 100644 --- a/test/functional/apps/timelion/index.js +++ b/test/functional/apps/timelion/index.js @@ -18,7 +18,7 @@ */ export default function ({ getService, loadTestFile }) { - const remote = getService('remote'); + const browser = getService('browser'); const log = getService('log'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); @@ -28,7 +28,7 @@ export default function ({ getService, loadTestFile }) { before(async function () { log.debug('Starting timelion before method'); - remote.setWindowSize(1280, 800); + browser.setWindowSize(1280, 800); await esArchiver.loadIfNeeded('logstash_functional'); await kibanaServer.uiSettings.replace({ 'dateFormat:tz': 'UTC', 'defaultIndex': 'logstash-*' }); }); diff --git a/test/functional/apps/visualize/_area_chart.js b/test/functional/apps/visualize/_area_chart.js index 714878edb0d9af..155e7c646b48f1 100644 --- a/test/functional/apps/visualize/_area_chart.js +++ b/test/functional/apps/visualize/_area_chart.js @@ -21,7 +21,7 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { const log = getService('log'); - const remote = getService('remote'); + const browser = getService('browser'); const retry = getService('retry'); const PageObjects = getPageObjects(['common', 'visualize', 'header', 'settings']); @@ -148,7 +148,7 @@ export default function ({ getService, getPageObjects }) { }); it('should hide side editor if embed is set to true in url', async () => { - const url = await remote.getCurrentUrl(); + const url = await browser.getCurrentUrl(); const embedUrl = url.split('/visualize/').pop().replace('?_g=', '?embed=true&_g='); await PageObjects.common.navigateToUrl('visualize', embedUrl); await PageObjects.header.waitUntilLoadingHasFinished(); diff --git a/test/functional/apps/visualize/_tag_cloud.js b/test/functional/apps/visualize/_tag_cloud.js index 1c76e49d4fa9d6..f1ea314ea8f314 100644 --- a/test/functional/apps/visualize/_tag_cloud.js +++ b/test/functional/apps/visualize/_tag_cloud.js @@ -22,7 +22,7 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { const filterBar = getService('filterBar'); const log = getService('log'); - const remote = getService('remote'); + const browser = getService('browser'); const retry = getService('retry'); const find = getService('find'); const PageObjects = getPageObjects(['common', 'visualize', 'header', 'settings']); @@ -90,9 +90,9 @@ export default function ({ getService, getPageObjects }) { }); it('should still show all tags after browser was resized very small', async function () { - await remote.setWindowSize(200, 200); + await browser.setWindowSize(200, 200); await PageObjects.common.sleep(1000); - await remote.setWindowSize(1200, 800); + await browser.setWindowSize(1200, 800); await PageObjects.common.sleep(1000); const data = await PageObjects.visualize.getTextTag(); expect(data).to.eql([ '32,212,254,720', '21,474,836,480', '20,401,094,656', '19,327,352,832', '18,253,611,008' ]); diff --git a/test/functional/apps/visualize/_tile_map.js b/test/functional/apps/visualize/_tile_map.js index 3a5e19ee1500a3..94940795e767de 100644 --- a/test/functional/apps/visualize/_tile_map.js +++ b/test/functional/apps/visualize/_tile_map.js @@ -22,7 +22,7 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { const log = getService('log'); const retry = getService('retry'); - const remote = getService('remote'); + const browser = getService('browser'); const PageObjects = getPageObjects(['common', 'visualize', 'header', 'settings']); @@ -33,7 +33,7 @@ export default function ({ getService, getPageObjects }) { before(async function () { - remote.setWindowSize(1280, 1000); + browser.setWindowSize(1280, 1000); const fromTime = '2015-09-19 06:31:44.000'; const toTime = '2015-09-23 18:31:44.000'; @@ -63,7 +63,7 @@ export default function ({ getService, getPageObjects }) { describe('complete config', function describeIndexTests() { before(async function () { - remote.setWindowSize(1280, 1000); + browser.setWindowSize(1280, 1000); const fromTime = '2015-09-19 06:31:44.000'; const toTime = '2015-09-23 18:31:44.000'; diff --git a/test/functional/apps/visualize/index.js b/test/functional/apps/visualize/index.js index c8a7fafed0ad64..f28f51f69e0412 100644 --- a/test/functional/apps/visualize/index.js +++ b/test/functional/apps/visualize/index.js @@ -18,7 +18,7 @@ */ export default function ({ getService, loadTestFile }) { - const remote = getService('remote'); + const browser = getService('browser'); const log = getService('log'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); @@ -27,7 +27,7 @@ export default function ({ getService, loadTestFile }) { describe('visualize app', function () { before(async ()=> { log.debug('Starting visualize before method'); - remote.setWindowSize(1280, 800); + browser.setWindowSize(1280, 800); await esArchiver.loadIfNeeded('logstash_functional'); await esArchiver.load('visualize'); await kibanaServer.uiSettings.replace({ 'dateFormat:tz': 'UTC', 'defaultIndex': 'logstash-*' }); diff --git a/test/functional/config.js b/test/functional/config.js index a32efdf9f4cbe6..1542dfe2b06a2d 100644 --- a/test/functional/config.js +++ b/test/functional/config.js @@ -54,6 +54,7 @@ import { EmbeddingProvider, RenderableProvider, TableProvider, + BrowserProvider, } from './services'; export default async function ({ readConfigFile }) { @@ -95,7 +96,7 @@ export default async function ({ readConfigFile }) { esArchiver: commonConfig.get('services.esArchiver'), kibanaServer: commonConfig.get('services.kibanaServer'), retry: commonConfig.get('services.retry'), - remote: RemoteProvider, + __leadfoot__: RemoteProvider, filterBar: FilterBarProvider, queryBar: QueryBarProvider, find: FindProvider, @@ -113,6 +114,7 @@ export default async function ({ readConfigFile }) { embedding: EmbeddingProvider, renderable: RenderableProvider, table: TableProvider, + browser: BrowserProvider, }, servers: commonConfig.get('servers'), diff --git a/test/functional/page_objects/common_page.js b/test/functional/page_objects/common_page.js index f55e26352b99eb..ca7957c6eab239 100644 --- a/test/functional/page_objects/common_page.js +++ b/test/functional/page_objects/common_page.js @@ -25,7 +25,7 @@ import getUrl from '../../../src/test_utils/get_url'; export function CommonPageProvider({ getService, getPageObjects }) { const log = getService('log'); const config = getService('config'); - const remote = getService('remote'); + const browser = getService('browser'); const retry = getService('retry'); const find = getService('find'); const testSubjects = getService('testSubjects'); @@ -58,7 +58,7 @@ export function CommonPageProvider({ getService, getPageObjects }) { const appUrl = getUrl.noAuth(config.get('servers.kibana'), appConfig); await retry.try(async () => { log.debug(`navigateToUrl ${appUrl}`); - await remote.get(appUrl); + await browser.get(appUrl); const currentUrl = await this.loginIfPrompted(appUrl); if (!currentUrl.includes(appUrl)) { throw new Error(`expected ${currentUrl}.includes(${appUrl})`); @@ -68,9 +68,9 @@ export function CommonPageProvider({ getService, getPageObjects }) { async loginIfPrompted(appUrl) { - let currentUrl = await remote.getCurrentUrl(); + let currentUrl = await browser.getCurrentUrl(); log.debug(`currentUrl = ${currentUrl}\n appUrl = ${appUrl}`); - await remote.setFindTimeout(defaultTryTimeout * 2).findByCssSelector('[data-test-subj="kibanaChrome"]'); + await find.byCssSelector('[data-test-subj="kibanaChrome"]', defaultTryTimeout * 2); const loginPage = currentUrl.includes('/login'); const wantedLoginPage = appUrl.includes('/login') || appUrl.includes('/logout'); @@ -80,9 +80,9 @@ export function CommonPageProvider({ getService, getPageObjects }) { config.get('servers.kibana.username'), config.get('servers.kibana.password') ); - await remote.setFindTimeout(20000).findByCssSelector('[data-test-subj="kibanaChrome"] nav:not(.ng-hide)'); - await remote.get(appUrl); - currentUrl = await remote.getCurrentUrl(); + await find.byCssSelector('[data-test-subj="kibanaChrome"] nav:not(.ng-hide)', 20000); + await browser.get(appUrl); + currentUrl = await browser.getCurrentUrl(); log.debug(`Finished login process currentUrl = ${currentUrl}`); } return currentUrl; @@ -116,14 +116,14 @@ export function CommonPageProvider({ getService, getPageObjects }) { }) .then(function () { log.debug('navigate to: ' + url); - return remote.get(url); + return browser.get(url); }) .then(function () { return self.sleep(700); }) .then(function () { log.debug('returned from get, calling refresh'); - return remote.refresh(); + return browser.refresh(); }) .then(async function () { const currentUrl = await self.loginIfPrompted(appUrl); @@ -133,7 +133,7 @@ export function CommonPageProvider({ getService, getPageObjects }) { } }) .then(async function () { - const currentUrl = (await remote.getCurrentUrl()).replace(/\/\/\w+:\w+@/, '//'); + const currentUrl = (await browser.getCurrentUrl()).replace(/\/\/\w+:\w+@/, '//'); const maxAdditionalLengthOnNavUrl = 230; // On several test failures at the end of the TileMap test we try to navigate back to // Visualize so we can create the next Vertical Bar Chart, but we can see from the @@ -174,7 +174,7 @@ export function CommonPageProvider({ getService, getPageObjects }) { // give the app time to update the URL return self.sleep(501) .then(function () { - return remote.getCurrentUrl(); + return browser.getCurrentUrl(); }) .then(function (currentUrl) { log.debug('in navigateTo url = ' + currentUrl); @@ -194,26 +194,6 @@ export function CommonPageProvider({ getService, getPageObjects }) { }); } - runScript(fn, timeout = 10000) { - // wait for deps on window before running script - return remote - .setExecuteAsyncTimeout(timeout) - .executeAsync(function (done) { - const interval = setInterval(function () { - const ready = (document.readyState === 'complete'); - const hasJQuery = !!window.$; - - if (ready && hasJQuery) { - console.log('doc ready, jquery loaded'); - clearInterval(interval); - done(); - } - }, 10); - }).then(function () { - return remote.execute(fn); - }); - } - async sleep(sleepMilliseconds) { log.debug('... sleep(' + sleepMilliseconds + ') start'); await delay(sleepMilliseconds); @@ -235,7 +215,7 @@ export function CommonPageProvider({ getService, getPageObjects }) { async waitUntilUrlIncludes(path) { await retry.try(async () => { - const url = await remote.getCurrentUrl(); + const url = await browser.getCurrentUrl(); if (!url.includes(path)) { throw new Error('Url not found'); } @@ -269,7 +249,7 @@ export function CommonPageProvider({ getService, getPageObjects }) { } async pressEnterKey() { - await remote.pressKeys('\uE007'); + await browser.pressKeys('\uE007'); } // pass in true if your test will show multiple modals @@ -306,21 +286,6 @@ export function CommonPageProvider({ getService, getPageObjects }) { return await testSubjects.getVisibleText('top-nav'); } - async doesCssSelectorExist(selector) { - log.debug(`doesCssSelectorExist ${selector}`); - - const exists = await remote - .setFindTimeout(1000) - .findByCssSelector(selector) - .then(() => true) - .catch(() => false); - - remote.setFindTimeout(defaultFindTimeout); - - log.debug(`exists? ${exists}`); - return exists; - } - async isChromeVisible() { const globalNavShown = await testSubjects.exists('globalNav'); const topNavShown = await testSubjects.exists('top-nav'); @@ -338,7 +303,7 @@ export function CommonPageProvider({ getService, getPageObjects }) { async closeToast() { const toast = await find.byCssSelector('.euiToast'); - await remote.moveMouseTo(toast); + await browser.moveMouseTo(toast); const title = await (await find.byCssSelector('.euiToastHeader__title')).getVisibleText(); log.debug(title); await find.clickByCssSelector('.euiToast__closeButton'); @@ -349,7 +314,7 @@ export function CommonPageProvider({ getService, getPageObjects }) { const toasts = await find.allByCssSelector('.euiToast'); for (const toastElement of toasts) { try { - await remote.moveMouseTo(toastElement); + await browser.moveMouseTo(toastElement); const closeBtn = await toastElement.findByCssSelector('.euiToast__closeButton'); await closeBtn.click(); } catch (err) { diff --git a/test/functional/page_objects/context_page.js b/test/functional/page_objects/context_page.js index 8126d4f3614b3e..af6a7c26dbe145 100644 --- a/test/functional/page_objects/context_page.js +++ b/test/functional/page_objects/context_page.js @@ -26,7 +26,7 @@ const DEFAULT_INITIAL_STATE = { }; export function ContextPageProvider({ getService, getPageObjects }) { - const remote = getService('remote'); + const browser = getService('browser'); const config = getService('config'); const retry = getService('retry'); const testSubjects = getService('testSubjects'); @@ -44,7 +44,7 @@ export function ContextPageProvider({ getService, getPageObjects }) { hash: `${config.get('apps.context.hash')}/${indexPattern}/${anchorType}/${anchorId}?_a=${initialState}`, }); - await remote.get(appUrl); + await browser.get(appUrl); await PageObjects.header.awaitGlobalLoadingIndicatorHidden(); await this.waitUntilContextLoadingHasFinished(); // For lack of a better way, using a sleep to ensure page is loaded before proceeding diff --git a/test/functional/page_objects/dashboard_page.js b/test/functional/page_objects/dashboard_page.js index bf702ec6ee7680..0c175ce1b90a22 100644 --- a/test/functional/page_objects/dashboard_page.js +++ b/test/functional/page_objects/dashboard_page.js @@ -29,7 +29,7 @@ export function DashboardPageProvider({ getService, getPageObjects }) { const find = getService('find'); const retry = getService('retry'); const config = getService('config'); - const remote = getService('remote'); + const browser = getService('browser'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); @@ -62,8 +62,8 @@ export function DashboardPageProvider({ getService, getPageObjects }) { } async preserveCrossAppState() { - const url = await remote.getCurrentUrl(); - await remote.get(url, false); + const url = await browser.getCurrentUrl(); + await browser.get(url, false); await PageObjects.header.waitUntilLoadingHasFinished(); } @@ -108,7 +108,7 @@ export function DashboardPageProvider({ getService, getPageObjects }) { } async getDashboardIdFromCurrentUrl() { - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); const urlSubstring = 'kibana#/dashboard/'; const startOfIdIndex = currentUrl.indexOf(urlSubstring) + urlSubstring.length; const endIndex = currentUrl.indexOf('?'); diff --git a/test/functional/page_objects/discover_page.js b/test/functional/page_objects/discover_page.js index f773f2992c65db..06675cee97418e 100644 --- a/test/functional/page_objects/discover_page.js +++ b/test/functional/page_objects/discover_page.js @@ -20,7 +20,6 @@ import expect from 'expect.js'; export function DiscoverPageProvider({ getService, getPageObjects }) { - const config = getService('config'); const log = getService('log'); const retry = getService('retry'); const testSubjects = getService('testSubjects'); @@ -28,26 +27,18 @@ export function DiscoverPageProvider({ getService, getPageObjects }) { const flyout = getService('flyout'); const PageObjects = getPageObjects(['header', 'common']); - const getRemote = () => ( - getService('remote') - .setFindTimeout(config.get('timeouts.find')) - ); - class DiscoverPage { - getQueryField() { - return getRemote() - .findByCssSelector('input[ng-model=\'state.query\']'); + async getQueryField() { + return await find.byCssSelector('input[ng-model=\'state.query\']'); } - getQuerySearchButton() { - return getRemote() - .findByCssSelector('button[aria-label=\'Search\']'); + async getQuerySearchButton() { + return await find.byCssSelector('button[aria-label=\'Search\']'); } - getChartTimespan() { - return getRemote() - .findByCssSelector('.small > span:nth-child(1)') - .getVisibleText(); + async getChartTimespan() { + const el = await find.byCssSelector('.small > span:nth-child(1)'); + return await el.getVisibleText(); } async saveSearch(searchName) { @@ -126,9 +117,8 @@ export function DiscoverPageProvider({ getService, getPageObjects }) { } async getBarChartXTicks() { - return getRemote() - .findAllByCssSelector('.x.axis.CategoryAxis-1 > .tick > text') - .getVisibleText(); + const elements = await find.allByCssSelector('.x.axis.CategoryAxis-1 > .tick > text'); + return await Promise.all(elements.map(async el => el.getVisibleText())); } getBarChartData() { @@ -137,8 +127,7 @@ export function DiscoverPageProvider({ getService, getPageObjects }) { return PageObjects.header.waitUntilLoadingHasFinished() .then(() => { - return getRemote() - .findByCssSelector('div.visAxis__splitAxes--y > div > svg > g > g:last-of-type'); + return find.byCssSelector('div.visAxis__splitAxes--y > div > svg > g > g:last-of-type'); }) .then(function setYAxisLabel(y) { return y @@ -151,8 +140,7 @@ export function DiscoverPageProvider({ getService, getPageObjects }) { }) // 2). find and save the y-axis pixel size (the chart height) .then(function getRect() { - return getRemote() - .findByCssSelector('rect.background') + return find.byCssSelector('rect.background') .then(function getRectHeight(chartAreaObj) { return chartAreaObj .getAttribute('height') @@ -165,9 +153,8 @@ export function DiscoverPageProvider({ getService, getPageObjects }) { }) // 3). get the visWrapper__chart elements .then(function () { - return getRemote() // #kibana-body > div.content > div > div > div > div.visEditor__canvas > visualize > div.visChart > div > div.visWrapper__column > div.visWrapper__chart > div > svg > g > g.series.\30 > rect:nth-child(1) - .findAllByCssSelector('svg > g > g.series > rect') // rect + return find.allByCssSelector('svg > g > g.series > rect') // rect .then(function (chartTypes) { function getChartType(chart) { return chart @@ -203,13 +190,11 @@ export function DiscoverPageProvider({ getService, getPageObjects }) { } query(queryString) { - return getRemote() - .findByCssSelector('input[aria-label="Search input"]') + return find.byCssSelector('input[aria-label="Search input"]') .clearValue() .type(queryString) .then(() => { - return getRemote() - .findByCssSelector('button[aria-label="Search"]') + return find.byCssSelector('button[aria-label="Search"]') .click(); }) .then(() => { @@ -217,52 +202,41 @@ export function DiscoverPageProvider({ getService, getPageObjects }) { }); } - getDocHeader() { - return getRemote() - .findByCssSelector('thead > tr:nth-child(1)') - .getVisibleText(); + async getDocHeader() { + const header = await find.byCssSelector('thead > tr:nth-child(1)'); + return await header.getVisibleText(); } - getDocTableIndex(index) { - return getRemote() - .findByCssSelector('tr.kbnDocTable__row:nth-child(' + (index) + ')') - .getVisibleText(); + async getDocTableIndex(index) { + const row = await find.byCssSelector('tr.kbnDocTable__row:nth-child(' + (index) + ')'); + return await row.getVisibleText(); } - clickDocSortDown() { - return getRemote() - .findByCssSelector('.fa-sort-down') - .click(); + async clickDocSortDown() { + await find.clickByCssSelector('.fa-sort-down'); } - clickDocSortUp() { - return getRemote() - .findByCssSelector('.fa-sort-up') - .click(); + async clickDocSortUp() { + await find.clickByCssSelector('.fa-sort-up'); } - getMarks() { - return getRemote() - .findAllByCssSelector('mark') - .getVisibleText(); + async getMarks() { + const marks = await find.allByCssSelector('mark'); + return await Promise.all(marks.map((mark) => mark.getVisibleText())); } async toggleSidebarCollapse() { return await testSubjects.click('collapseSideBarButton'); } - getAllFieldNames() { - return getRemote() - .findAllByClassName('sidebar-item') - .then((items) => { - return Promise.all(items.map((item) => item.getVisibleText())); - }); + async getAllFieldNames() { + const items = await find.allByCssSelector('.sidebar-item'); + return await Promise.all(items.map((item) => item.getVisibleText())); } - getSidebarWidth() { - return getRemote() - .findByClassName('sidebar-list') - .getProperty('clientWidth'); + async getSidebarWidth() { + const sidebar = await find.byCssSelector('.sidebar-list'); + return await sidebar.getProperty('clientWidth'); } async hasNoResults() { @@ -298,24 +272,20 @@ export function DiscoverPageProvider({ getService, getPageObjects }) { async clickFieldListPlusFilter(field, value) { // this method requires the field details to be open from clickFieldListItem() // testSubjects.find doesn't handle spaces in the data-test-subj value - await getRemote() - .findByCssSelector(`[data-test-subj="plus-${field}-${value}"]`) - .click(); + await find.clickByCssSelector(`[data-test-subj="plus-${field}-${value}"]`); await PageObjects.header.waitUntilLoadingHasFinished(); } async clickFieldListMinusFilter(field, value) { // this method requires the field details to be open from clickFieldListItem() // testSubjects.find doesn't handle spaces in the data-test-subj value - await getRemote() - .findByCssSelector('[data-test-subj="minus-' + field + '-' + value + '"]') - .click(); + await find.clickByCssSelector('[data-test-subj="minus-' + field + '-' + value + '"]'); await PageObjects.header.waitUntilLoadingHasFinished(); } async selectIndexPattern(indexPattern) { - await getRemote().findByClassName('index-pattern-selection').click(); - await getRemote().findByClassName('ui-select-search').type(indexPattern + '\n'); + await find.clickByCssSelector('.index-pattern-selection'); + await find.setValue('.ui-select-search', indexPattern + '\n'); await PageObjects.header.waitUntilLoadingHasFinished(); } diff --git a/test/functional/page_objects/header_page.js b/test/functional/page_objects/header_page.js index 0e914ef6b14d40..4d4dd7cdc64d8a 100644 --- a/test/functional/page_objects/header_page.js +++ b/test/functional/page_objects/header_page.js @@ -19,7 +19,6 @@ export function HeaderPageProvider({ getService, getPageObjects }) { const config = getService('config'); - const remote = getService('remote'); const log = getService('log'); const retry = getService('retry'); const find = getService('find'); @@ -89,7 +88,6 @@ export function HeaderPageProvider({ getService, getPageObjects }) { async clickQuickButton() { await retry.try(async () => { - remote.setFindTimeout(defaultFindTimeout); await testSubjects.click('timepicker-quick-button'); }); } @@ -100,7 +98,7 @@ export function HeaderPageProvider({ getService, getPageObjects }) { async isAbsoluteSectionShowing() { log.debug('isAbsoluteSectionShowing'); - return await PageObjects.common.doesCssSelectorExist('input[ng-model=\'absolute.from\']'); + return await find.existsByCssSelector('input[ng-model=\'absolute.from\']'); } async showAbsoluteSection() { @@ -108,7 +106,6 @@ export function HeaderPageProvider({ getService, getPageObjects }) { const isAbsoluteSectionShowing = await this.isAbsoluteSectionShowing(); if (!isAbsoluteSectionShowing) { await retry.try(async () => { - await remote.setFindTimeout(defaultFindTimeout); await testSubjects.click('timepicker-absolute-button'); // Check to make sure one of the elements on the absolute section is showing. await this.getFromTime(); @@ -121,9 +118,8 @@ export function HeaderPageProvider({ getService, getPageObjects }) { return await retry.try(async () => { await this.ensureTimePickerIsOpen(); await this.showAbsoluteSection(); - remote.setFindTimeout(defaultFindTimeout); - return await remote.findByCssSelector('input[ng-model=\'absolute.from\']') - .getProperty('value'); + const element = await find.byCssSelector('input[ng-model=\'absolute.from\']'); + return await element.getProperty('value'); }); } @@ -132,9 +128,8 @@ export function HeaderPageProvider({ getService, getPageObjects }) { return await retry.try(async () => { await this.ensureTimePickerIsOpen(); await this.showAbsoluteSection(); - remote.setFindTimeout(defaultFindTimeout); - return await remote.findByCssSelector('input[ng-model=\'absolute.to\']') - .getProperty('value'); + const element = await find.byCssSelector('input[ng-model=\'absolute.to\']'); + return await element.getProperty('value'); }); } @@ -143,10 +138,7 @@ export function HeaderPageProvider({ getService, getPageObjects }) { await retry.try(async () => { await this.ensureTimePickerIsOpen(); await this.showAbsoluteSection(); - remote.setFindTimeout(defaultFindTimeout); - await remote.findByCssSelector('input[ng-model=\'absolute.from\']') - .clearValue() - .type(timeString); + await find.setValue('input[ng-model=\'absolute.from\']', timeString); }); } @@ -155,17 +147,13 @@ export function HeaderPageProvider({ getService, getPageObjects }) { await retry.try(async () => { await this.ensureTimePickerIsOpen(); await this.showAbsoluteSection(); - remote.setFindTimeout(defaultFindTimeout); - await remote.findByCssSelector('input[ng-model=\'absolute.to\']') - .clearValue() - .type(timeString); + await find.setValue('input[ng-model=\'absolute.to\']', timeString); }); } async clickGoButton() { log.debug('clickGoButton'); await retry.try(async () => { - remote.setFindTimeout(defaultFindTimeout); await testSubjects.click('timepickerGoButton'); await this.waitUntilLoadingHasFinished(); }); @@ -200,8 +188,7 @@ export function HeaderPageProvider({ getService, getPageObjects }) { await this.ensureTimePickerIsOpen(); log.debug('--Clicking Quick button'); await this.clickQuickButton(); - await remote.setFindTimeout(defaultFindTimeout) - .findByLinkText(quickTime).click(); + await find.clickByLinkText(quickTime); } async getAutoRefreshState() { @@ -238,11 +225,7 @@ export function HeaderPageProvider({ getService, getPageObjects }) { async clickToastOK() { log.debug('clickToastOK'); - await retry.try(async () => { - remote.setFindTimeout(defaultFindTimeout); - await remote.findByCssSelector('button[ng-if="notif.accept"]') - .click(); - }); + await find.clickByCssSelector('button[ng-if="notif.accept"]'); } async waitUntilLoadingHasFinished() { diff --git a/test/functional/page_objects/monitoring_page.js b/test/functional/page_objects/monitoring_page.js index 9407c163e5f87e..ea6fd825ea425b 100644 --- a/test/functional/page_objects/monitoring_page.js +++ b/test/functional/page_objects/monitoring_page.js @@ -19,32 +19,25 @@ export function MonitoringPageProvider({ getService }) { const testSubjects = getService('testSubjects'); - - const getRemote = (timeout) => - getService('remote') - .setFindTimeout( - timeout || getService('config').get('timeouts.find') - ); + const find = getService('find'); class MonitoringPage { - getWelcome() { - return getRemote() - .findDisplayedByCssSelector('render-directive') - .getVisibleText(); + async getWelcome() { + const el = await find.displayedByCssSelector('render-directive'); + return await el.getVisibleText(); } dismissWelcome() { return testSubjects.click('notifierDismissButton'); } - getToasterContents() { - return getRemote() - .findByCssSelector('div.toaster-container') - .getVisibleText(); + async getToasterContents() { + const el = await find.byCssSelector('div.toaster-container'); + return await el.getVisibleText(); } - clickOptOut() { - return getRemote().findByLinkText('Opt out here').click(); + async clickOptOut() { + return find.clickByLinkText('Opt out here'); } } diff --git a/test/functional/page_objects/point_series_page.js b/test/functional/page_objects/point_series_page.js index 01ac49b1576c90..a0a6aacda24fe4 100644 --- a/test/functional/page_objects/point_series_page.js +++ b/test/functional/page_objects/point_series_page.js @@ -18,170 +18,103 @@ */ export function PointSeriesPageProvider({ getService }) { - const remote = getService('remote'); - const config = getService('config'); const testSubjects = getService('testSubjects'); const log = getService('log'); - - const defaultFindTimeout = config.get('timeouts.find'); + const find = getService('find'); class PointSeriesVis { - clickOptions() { - return remote - .setFindTimeout(defaultFindTimeout) - .findByPartialLinkText('Panel Settings') - .click(); + async clickOptions() { + return await find.clickByPartialLinkText('Panel Settings'); } - clickAxisOptions() { - return remote - .setFindTimeout(defaultFindTimeout) - .findByPartialLinkText('Metrics & Axes') - .click(); + async clickAxisOptions() { + return await find.clickByPartialLinkText('Metrics & Axes'); } async clickAddAxis() { return await testSubjects.click('visualizeAddYAxisButton'); } - setAxisTitle(title, { index = 0 } = {}) { - return remote - .setFindTimeout(defaultFindTimeout) - .findByCssSelector(`#valueAxisTitle${index}`) - .clearValue() - .type(title); - } - - getValueAxesCount() { - return remote - .setFindTimeout(defaultFindTimeout) - .findAllByCssSelector('.kuiSideBarSection:contains("Value Axes") > .kuiSideBarSection') - .then(all => all.length); - } - - getSeriesCount() { - return remote - .setFindTimeout(defaultFindTimeout) - .findAllByCssSelector('.kuiSideBarSection:contains("Series") > .kuiSideBarSection') - .then(all => all.length); - } - - getRightValueAxes() { - return remote - .setFindTimeout(defaultFindTimeout) - .findAllByCssSelector('.visAxis__column--right g.axis') - .then(all => all.length); - } - - getHistogramSeries() { - return remote - .setFindTimeout(defaultFindTimeout) - .findAllByCssSelector('.series.histogram') - .then(all => all.length); - } - - getGridLines() { - return remote - .setFindTimeout(defaultFindTimeout) - .findAllByCssSelector('g.grid > path') - .then(function (data) { - function getGridLine(gridLine) { - return gridLine - .getAttribute('d') - .then(dAttribute => { - const firstPoint = dAttribute.split('L')[0].replace('M', '').split(','); - return { x: parseFloat(firstPoint[0]), y: parseFloat(firstPoint[1]) }; - }); - } - const promises = data.map(getGridLine); - return Promise.all(promises); - }) - .then(function (gridLines) { - return gridLines; - }); - } - - toggleGridCategoryLines() { - return remote - .setFindTimeout(defaultFindTimeout) - .findByCssSelector('#showCategoryLines') - .click(); - } - - setGridValueAxis(axis) { - return remote - .setFindTimeout(defaultFindTimeout) - .findByCssSelector(`select#gridAxis option[value="${axis}"]`) - .click(); - } - - toggleCollapsibleTitle(title) { - return remote - .setFindTimeout(defaultFindTimeout) - .findAllByCssSelector('.kuiSideBarCollapsibleTitle .kuiSideBarCollapsibleTitle__text') - .then(sidebarTitles => { - log.debug('found sidebar titles ' + sidebarTitles.length); - function getTitle(titleDiv) { - return titleDiv - .getVisibleText() - .then(titleString => { - log.debug('sidebar title ' + titleString); - if (titleString === title) { - log.debug('clicking sidebar title ' + titleString); - return titleDiv.click(); - } - }); - } - const sidebarTitlePromises = sidebarTitles.map(getTitle); - return Promise.all(sidebarTitlePromises); - }); - } - - setValue(newValue) { - return remote - .setFindTimeout(defaultFindTimeout * 2) - .findByCssSelector('button[ng-click="numberListCntr.add()"]') - .click() - .then(() => { - return remote - .setFindTimeout(defaultFindTimeout) - .findByCssSelector('input[ng-model="numberListCntr.getList()[$index]"]') - .clearValue(); - }) - .then(() => { - return remote - .setFindTimeout(defaultFindTimeout) - .findByCssSelector('input[ng-model="numberListCntr.getList()[$index]"]') - .type(newValue); - }); - } - - setValueAxisPosition(axis, position) { - return remote - .setFindTimeout(defaultFindTimeout) - .findByCssSelector(`select#valueAxisPosition${axis} option[label="${position}"]`) - .click(); - } - - setCategoryAxisPosition(newValue) { - return remote - .setFindTimeout(defaultFindTimeout) - .findByCssSelector(`select#categoryAxisPosition option[label="${newValue}"]`) - .click(); - } - - setSeriesAxis(series, axis) { - return remote - .setFindTimeout(defaultFindTimeout) - .findByCssSelector(`select#seriesValueAxis${series} option[value="${axis}"]`) - .click(); - } - - setSeriesType(series, type) { - return remote - .setFindTimeout(defaultFindTimeout) - .findByCssSelector(`select#seriesType${series} option[label="${type}"]`) - .click(); + async setAxisTitle(title, { index = 0 } = {}) { + return await find.setValue(`#valueAxisTitle${index}`, title); + } + + async getValueAxesCount() { + const axes = await find.allByCssSelector('.kuiSideBarSection:contains("Value Axes") > .kuiSideBarSection'); + return axes.length; + } + + async getSeriesCount() { + const series = await find.allByCssSelector('.kuiSideBarSection:contains("Series") > .kuiSideBarSection'); + return series.length; + } + + async getRightValueAxes() { + const axes = await find.allByCssSelector('.visAxis__column--right g.axis'); + return axes.length; + } + + async getHistogramSeries() { + const series = await find.allByCssSelector('.series.histogram'); + return series.length; + } + + async getGridLines() { + const gridLines = await find.allByCssSelector('g.grid > path'); + + return await Promise.all(gridLines.map(async (gridLine) => { + const dAttribute = await gridLine.getAttribute('d'); + + const firstPoint = dAttribute.split('L')[0].replace('M', '').split(','); + return { + x: parseFloat(firstPoint[0]), + y: parseFloat(firstPoint[1]), + }; + })); + } + + async toggleGridCategoryLines() { + return await find.clickByCssSelector('#showCategoryLines'); + } + + async setGridValueAxis(axis) { + return await find.clickByCssSelector(`select#gridAxis option[value="${axis}"]`); + } + + async toggleCollapsibleTitle(title) { + const sidebarTitles = await find.allByCssSelector('.kuiSideBarCollapsibleTitle .kuiSideBarCollapsibleTitle__text'); + log.debug('found sidebar titles ' + sidebarTitles.length); + + return Promise.all(sidebarTitles.map(async (titleDiv) => { + const titleString = await titleDiv.getVisibleText(); + log.debug('sidebar title ' + titleString); + + if (titleString === title) { + log.debug('clicking sidebar title ' + titleString); + return titleDiv.click(); + } + })); + } + + async setValue(newValue) { + await find.click('button[ng-click="numberListCntr.add()"]'); + await find.setValue('input[ng-model="numberListCntr.getList()[$index]"]', newValue); + } + + async setValueAxisPosition(axis, position) { + await find.clickByCssSelector(`select#valueAxisPosition${axis} option[label="${position}"]`); + } + + async setCategoryAxisPosition(newValue) { + await find.clickByCssSelector(`select#categoryAxisPosition option[label="${newValue}"]`); + } + + async setSeriesAxis(series, axis) { + await find.clickByCssSelector(`select#seriesValueAxis${series} option[value="${axis}"]`); + } + + async setSeriesType(series, type) { + await find.clickByCssSelector(`select#seriesType${series} option[label="${type}"]`); } } diff --git a/test/functional/page_objects/settings_page.js b/test/functional/page_objects/settings_page.js index 872175e3ac5e6f..43f84c4c46a9bf 100644 --- a/test/functional/page_objects/settings_page.js +++ b/test/functional/page_objects/settings_page.js @@ -23,11 +23,9 @@ import expect from 'expect.js'; export function SettingsPageProvider({ getService, getPageObjects }) { const log = getService('log'); const retry = getService('retry'); - const remote = getService('remote'); + const browser = getService('browser'); const find = getService('find'); const flyout = getService('flyout'); - const config = getService('config'); - const defaultFindTimeout = config.get('timeouts.find'); const testSubjects = getService('testSubjects'); const comboBox = getService('comboBox'); const PageObjects = getPageObjects(['header', 'common']); @@ -172,13 +170,13 @@ export function SettingsPageProvider({ getService, getPageObjects }) { return Promise.all(getChartTypesPromises); } - getTableRow(rowNumber, colNumber) { - return remote.setFindTimeout(defaultFindTimeout) - // passing in zero-based index, but adding 1 for css 1-based indexes - .findByCssSelector('table.euiTable tbody tr:nth-child(' + - (rowNumber + 1) + ') td.euiTableRowCell:nth-child(' + - (colNumber + 1) + ')' - ); + async getTableRow(rowNumber, colNumber) { + // passing in zero-based index, but adding 1 for css 1-based indexes + return await find.byCssSelector( + 'table.euiTable tbody tr:nth-child(' + + (rowNumber + 1) + ') td.euiTableRowCell:nth-child(' + + (colNumber + 1) + ')' + ); } async getFieldsTabCount() { @@ -291,7 +289,7 @@ export function SettingsPageProvider({ getService, getPageObjects }) { }); await PageObjects.header.waitUntilLoadingHasFinished(); await retry.try(async () => { - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); log.info('currentUrl', currentUrl); if (!currentUrl.match(/indices\/.+\?/)) { throw new Error('Index pattern not created'); @@ -311,7 +309,7 @@ export function SettingsPageProvider({ getService, getPageObjects }) { } async getIndexPatternIdFromUrl() { - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); const indexPatternId = currentUrl.match(/.*\/(.*)/)[1]; log.debug('index pattern ID: ', indexPatternId); @@ -356,7 +354,7 @@ export function SettingsPageProvider({ getService, getPageObjects }) { await testSubjects.click('confirmModalConfirmButton'); }); await retry.try(async () => { - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); if (currentUrl.match(/indices\/.+\?/)) { throw new Error('Index pattern not removed'); } diff --git a/test/functional/page_objects/visualize_page.js b/test/functional/page_objects/visualize_page.js index 2dcf52d888fc64..7f3ccf9dceb874 100644 --- a/test/functional/page_objects/visualize_page.js +++ b/test/functional/page_objects/visualize_page.js @@ -23,7 +23,7 @@ import expect from 'expect.js'; import Keys from 'leadfoot/keys'; export function VisualizePageProvider({ getService, getPageObjects }) { - const remote = getService('remote'); + const browser = getService('browser'); const config = getService('config'); const testSubjects = getService('testSubjects'); const retry = getService('retry'); @@ -54,7 +54,7 @@ export function VisualizePageProvider({ getService, getPageObjects }) { async waitForVisualizationSelectPage() { await retry.try(async () => { const visualizeSelectTypePage = await testSubjects.find('visNewDialogTypes'); - if (!visualizeSelectTypePage.isDisplayed()) { + if (!await visualizeSelectTypePage.isDisplayed()) { throw new Error('wait for visualization select page'); } }); @@ -177,7 +177,7 @@ export function VisualizePageProvider({ getService, getPageObjects }) { } async getExperimentalTypeLinks() { - return await remote.findAllByCssSelector('[data-vis-stage="experimental"]'); + return await find.allByCssSelector('[data-vis-stage="experimental"]'); } async isExperimentalInfoShown() { @@ -385,7 +385,8 @@ export function VisualizePageProvider({ getService, getPageObjects }) { const testSubject = type === 'bucket' ? 'bucketsAggGroup' : 'metricsAggGroup'; await retry.try(async () => { const chartTypes = await retry.try( - async () => await find.allByCssSelector(`[data-test-subj="${testSubject}"] .list-group-menu-item`)); + async () => await find.allByCssSelector(`[data-test-subj="${testSubject}"] .list-group-menu-item`) + ); log.debug('found bucket types ' + chartTypes.length); async function getChartType(chart) { @@ -415,7 +416,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 remote.pressKeys('\uE006'); + await browser.pressKeys('\uE006'); }); await PageObjects.common.sleep(500); } @@ -526,7 +527,7 @@ export function VisualizePageProvider({ getService, getPageObjects }) { await find.clickByCssSelector(selector); const input = await find.byCssSelector(`${selector} input.ui-select-search`); await input.type(fieldValue); - await remote.pressKeys('\uE006'); + await browser.pressKeys('\uE006'); }); await PageObjects.common.sleep(500); } @@ -561,7 +562,7 @@ export function VisualizePageProvider({ getService, getPageObjects }) { async setInterval(newValue) { const input = await find.byCssSelector('select[ng-model="agg.params.interval"]'); await input.type(newValue); - await remote.pressKeys(Keys.RETURN); + await browser.pressKeys(Keys.RETURN); } async setCustomInterval(newValue) { @@ -627,7 +628,7 @@ export function VisualizePageProvider({ getService, getPageObjects }) { async sizeUpEditor() { await testSubjects.click('visualizeEditorResizer'); - await remote.pressKeys(Keys.ARROW_RIGHT); + await browser.pressKeys(Keys.ARROW_RIGHT); } async clickOptions() { @@ -762,13 +763,7 @@ export function VisualizePageProvider({ getService, getPageObjects }) { async clickVisualizationByName(vizName) { log.debug('clickVisualizationByLinkText(' + vizName + ')'); - - return retry.try(function tryingForTime() { - return remote - .setFindTimeout(defaultFindTimeout) - .findByPartialLinkText(vizName) - .click(); - }); + return find.clickByPartialLinkText(vizName); } async loadSavedVisualization(vizName, { navigateToVisualize = true } = {}) { @@ -1137,14 +1132,14 @@ export function VisualizePageProvider({ getService, getPageObjects }) { await retry.try(async () => { const table = await testSubjects.find('tableVis'); const cell = await table.findByCssSelector(`tbody tr:nth-child(${row}) td:nth-child(${column})`); - await remote.moveMouseTo(cell); + await browser.moveMouseTo(cell); const filterBtn = await testSubjects.findDescendant('filterForCellValue', cell); await filterBtn.click(); }); } async toggleLegend(show = true) { - const isVisible = remote.findByCssSelector('vislib-legend .legend-ul'); + const isVisible = find.byCssSelector('vislib-legend .legend-ul'); if ((show && !isVisible) || (!show && isVisible)) { await testSubjects.click('vislibToggleLegend'); } @@ -1181,8 +1176,8 @@ export function VisualizePageProvider({ getService, getPageObjects }) { async filterPieSlice(name) { const slice = await this.getPieSlice(name); // Since slice is an SVG element we can't simply use .click() for it - await remote.moveMouseTo(slice); - await remote.clickMouseButton(); + await browser.moveMouseTo(slice); + await browser.clickMouseButton(); } async getPieSlice(name) { diff --git a/test/functional/services/browser.js b/test/functional/services/browser.js new file mode 100644 index 00000000000000..1435aacf51231c --- /dev/null +++ b/test/functional/services/browser.js @@ -0,0 +1,252 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { modifyUrl } from '../../../src/core/utils'; + +export function BrowserProvider({ getService }) { + const leadfoot = getService('__leadfoot__'); + + return new class BrowserService { + /** + * Gets the dimensions of a window. + * https://theintern.io/leadfoot/module-leadfoot_Session.html#getWindowSize + * + * @param {string} windowHandle Optional - Omit this argument to query the currently focused window. + * @return {Promise<{width: number, height: number}>} + */ + async getWindowSize(...args) { + return await leadfoot.getWindowSize(...args); + } + + + /** + * Sets the dimensions of a window. + * https://theintern.io/leadfoot/module-leadfoot_Session.html#setWindowSize + * + * @param {string} windowHandle Optional + * @param {number} width + * @param {number} height + * @return {Promise} + */ + async setWindowSize(...args) { + await leadfoot.setWindowSize(...args); + } + + /** + * Gets the URL that is loaded in the focused window/frame. + * https://theintern.io/leadfoot/module-leadfoot_Session.html#getCurrentUrl + * + * @return {Promise} + */ + async getCurrentUrl() { + // strip _t=Date query param when url is read + const current = await leadfoot.getCurrentUrl(); + const currentWithoutTime = modifyUrl(current, parsed => { + delete parsed.query._t; + }); + return currentWithoutTime; + } + + /** + * Navigates the focused window/frame to a new URL. + * https://theintern.io/leadfoot/module-leadfoot_Session.html#get + * + * @param {string} url + * @param {boolean} insertTimestamp Optional + * @return {Promise} + */ + async get(url, insertTimestamp = true) { + if (insertTimestamp) { + const urlWithTime = modifyUrl(url, parsed => { + parsed.query._t = Date.now(); + }); + + return await leadfoot.get(urlWithTime); + } + return await leadfoot.get(url); + } + + /** + * Moves the remote environment’s mouse cursor to the specified element or relative + * position. If the element is outside of the viewport, the remote driver will attempt + * to scroll it into view automatically. + * https://theintern.io/leadfoot/module-leadfoot_Session.html#moveMouseTo + * + * @param {Element} element Optional + * @param {number} xOffset Optional + * @param {number} yOffset Optional + * @return {Promise} + */ + async moveMouseTo(...args) { + await leadfoot.moveMouseTo(...args); + } + + /** + * Reloads the current browser window/frame. + * https://theintern.io/leadfoot/module-leadfoot_Session.html#refresh + * + * @return {Promise} + */ + async refresh() { + await leadfoot.refresh(); + } + + /** + * Navigates the focused window/frame back one page using the browser’s navigation history. + * https://theintern.io/leadfoot/module-leadfoot_Session.html#goBack + * + * @return {Promise} + */ + async goBack() { + await leadfoot.goBack(); + } + + /** + * Types into the focused window/frame/element. + * https://theintern.io/leadfoot/module-leadfoot_Session.html#pressKeys + * + * @param {string|string[]} keys + * @return {Promise} + */ + async pressKeys(...args) { + await leadfoot.pressKeys(...args); + } + + /** + * Clicks a mouse button at the point where the mouse cursor is currently positioned. This + * method may fail to execute with an error if the mouse has not been moved anywhere since + * the page was loaded. + * https://theintern.io/leadfoot/module-leadfoot_Session.html#clickMouseButton + * + * @param {number} button Optional + * @return {Promise} + */ + async clickMouseButton(...args) { + await leadfoot.clickMouseButton(...args); + } + + /** + * Depresses a mouse button without releasing it. + * https://theintern.io/leadfoot/module-leadfoot_Session.html#pressMouseButton + * + * @param {number} button Optional + * @return {Promise} + */ + async pressMouseButton(...args) { + await leadfoot.pressMouseButton(...args); + } + + /** + * Releases a previously depressed mouse button. + * https://theintern.io/leadfoot/module-leadfoot_Session.html#releaseMouseButton + * + * @param {number} button Optional + * @return {Promise} + */ + async releaseMouseButton(...args) { + await leadfoot.releaseMouseButton(...args); + } + + /** + * Gets the HTML loaded in the focused window/frame. This markup is serialised by the remote + * environment so may not exactly match the HTML provided by the Web server. + * https://theintern.io/leadfoot/module-leadfoot_Session.html#getPageSource + * + * @return {Promise} + */ + async getPageSource(...args) { + return await leadfoot.getPageSource(...args); + } + + /** + * Gets all logs from the remote environment of the given type. The logs in the remote + * environment are cleared once they have been retrieved. + * https://theintern.io/leadfoot/module-leadfoot_Session.html#getLogsFor + * + * @param {string} type + * @return {Promise} + */ + async getLogsFor(...args) { + return await leadfoot.getLogsFor(...args); + } + + /** + * Gets a screenshot of the focused window and returns it in PNG format. + * https://theintern.io/leadfoot/module-leadfoot_Session.html#takeScreenshot + * + * @return {Promise} + */ + async takeScreenshot(...args) { + return await leadfoot.takeScreenshot(...args); + } + + /** + * Double-clicks the primary mouse button. + * https://theintern.io/leadfoot/module-leadfoot_Session.html#doubleClick + * + * @return {Promise} + */ + async doubleClick(...args) { + await leadfoot.doubleClick(...args); + } + + /** + * Switches the currently focused window to a new window. + * https://theintern.io/leadfoot/module-leadfoot_Session.html#switchToWindow + * + * @param {string} handle + * @return {Promise} + */ + async switchToWindow(...args) { + await leadfoot.switchToWindow(...args); + } + + /** + * Gets a list of identifiers for all currently open windows. + * https://theintern.io/leadfoot/module-leadfoot_Session.html#getAllWindowHandles + * + * @return {Promise} + */ + async getAllWindowHandles(...args) { + return await leadfoot.getAllWindowHandles(...args); + } + + /** + * Closes the currently focused window. In most environments, after the window has been + * closed, it is necessary to explicitly switch to whatever window is now focused. + * https://theintern.io/leadfoot/module-leadfoot_Session.html#closeCurrentWindow + * + * @return {Promise} + */ + async closeCurrentWindow(...args) { + await leadfoot.closeCurrentWindow(...args); + } + + /** + * Executes JavaScript code within the focused window/frame. The code should return a value synchronously. + * https://theintern.io/leadfoot/module-leadfoot_Session.html#execute + * + * @param {string|function} function + * @param {...any[]} args + */ + async execute(...args) { + return await leadfoot.execute(...args); + } + }; +} diff --git a/test/functional/services/dashboard/panel_actions.js b/test/functional/services/dashboard/panel_actions.js index 82b4d30f391385..47d527d18be2ea 100644 --- a/test/functional/services/dashboard/panel_actions.js +++ b/test/functional/services/dashboard/panel_actions.js @@ -26,7 +26,7 @@ const OPEN_INSPECTOR_TEST_SUBJ = 'dashboardPanelAction-openInspector'; export function DashboardPanelActionsProvider({ getService, getPageObjects }) { const log = getService('log'); - const remote = getService('remote'); + const browser = getService('browser'); const testSubjects = getService('testSubjects'); const PageObjects = getPageObjects(['header', 'common']); @@ -45,7 +45,7 @@ export function DashboardPanelActionsProvider({ getService, getPageObjects }) { async toggleContextMenu(parent) { log.debug('toggleContextMenu'); - await (parent ? remote.moveMouseTo(parent) : testSubjects.moveMouseTo('dashboardPanelTitle')); + await (parent ? browser.moveMouseTo(parent) : testSubjects.moveMouseTo('dashboardPanelTitle')); const toggleMenuItem = await this.findContextMenu(parent); await toggleMenuItem.click(); } diff --git a/test/functional/services/embedding.js b/test/functional/services/embedding.js index afb70510fbc1fc..2242be2923c156 100644 --- a/test/functional/services/embedding.js +++ b/test/functional/services/embedding.js @@ -18,16 +18,16 @@ */ export function EmbeddingProvider({ getService, getPageObjects }) { - const remote = getService('remote'); + const browser = getService('browser'); const log = getService('log'); const PageObjects = getPageObjects(['header']); class Embedding { async openInEmbeddedMode() { - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); log.debug(`Opening in embedded mode: ${currentUrl}`); - await remote.get(`${currentUrl}&embed=true`); + await browser.get(`${currentUrl}&embed=true`); await PageObjects.header.waitUntilLoadingHasFinished(); } diff --git a/test/functional/services/failure_debugging.js b/test/functional/services/failure_debugging.js index 2e55e050eb88c7..32526ecc0ee58e 100644 --- a/test/functional/services/failure_debugging.js +++ b/test/functional/services/failure_debugging.js @@ -31,25 +31,25 @@ export async function FailureDebuggingProvider({ getService }) { const config = getService('config'); const lifecycle = getService('lifecycle'); const log = getService('log'); - const remote = getService('remote'); + const browser = getService('browser'); await del(config.get('failureDebugging.htmlDirectory')); async function logCurrentUrl() { - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); log.info(`Current URL is: ${currentUrl}`); } async function savePageHtml(name) { await mkdirAsync(config.get('failureDebugging.htmlDirectory')); const htmlOutputFileName = resolve(config.get('failureDebugging.htmlDirectory'), `${name}.html`); - const pageSource = await remote.getPageSource(); + const pageSource = await browser.getPageSource(); log.info(`Saving page source to: ${htmlOutputFileName}`); await writeFileAsync(htmlOutputFileName, pageSource); } async function logBrowserConsole() { - const browserLogs = await remote.getLogsFor('browser'); + const browserLogs = await browser.getLogsFor('browser'); const browserOutput = browserLogs.reduce((acc, log) => acc += `${log.message.replace(/\\n/g, '\n')}\n`, ''); log.info(`Browser output is: ${browserOutput}`); } diff --git a/test/functional/services/filter_bar.js b/test/functional/services/filter_bar.js index d722e638dba496..be62b9b81df4ee 100644 --- a/test/functional/services/filter_bar.js +++ b/test/functional/services/filter_bar.js @@ -20,7 +20,7 @@ import Keys from 'leadfoot/keys'; export function FilterBarProvider({ getService, getPageObjects }) { - const remote = getService('remote'); + const browser = getService('browser'); const testSubjects = getService('testSubjects'); const find = getService('find'); const PageObjects = getPageObjects(['common', 'header']); @@ -43,21 +43,21 @@ export function FilterBarProvider({ getService, getPageObjects }) { async removeFilter(key) { const filterElement = await testSubjects.find(`filter & filter-key-${key}`); - await remote.moveMouseTo(filterElement); + await browser.moveMouseTo(filterElement); await testSubjects.click(`filter & filter-key-${key} removeFilter-${key}`); await PageObjects.header.awaitGlobalLoadingIndicatorHidden(); } async toggleFilterEnabled(key) { const filterElement = await testSubjects.find(`filter & filter-key-${key}`); - await remote.moveMouseTo(filterElement); + await browser.moveMouseTo(filterElement); await testSubjects.click(`filter & filter-key-${key} disableFilter-${key}`); await PageObjects.header.awaitGlobalLoadingIndicatorHidden(); } async toggleFilterPinned(key) { const filterElement = await testSubjects.find(`filter & filter-key-${key}`); - await remote.moveMouseTo(filterElement); + await browser.moveMouseTo(filterElement); await testSubjects.click(`filter & filter-key-${key} pinFilter-${key}`); } @@ -92,7 +92,7 @@ export function FilterBarProvider({ getService, getPageObjects }) { } for (let j = 0; j < fieldValues.length; j++) { await paramFields[i].type(fieldValues[j]); - await remote.pressKeys(Keys.RETURN); + await browser.pressKeys(Keys.RETURN); } } await testSubjects.click('saveFilter'); @@ -101,7 +101,7 @@ export function FilterBarProvider({ getService, getPageObjects }) { async clickEditFilter(key, value) { const pill = await testSubjects.find(`filter & filter-key-${key} & filter-value-${value}`); - await remote.moveMouseTo(pill); + await browser.moveMouseTo(pill); await testSubjects.click('editFilter'); } diff --git a/test/functional/services/find.js b/test/functional/services/find.js index e3e99998051b7a..39daed1f721051 100644 --- a/test/functional/services/find.js +++ b/test/functional/services/find.js @@ -35,7 +35,7 @@ export const WAIT_FOR_EXISTS_TIME = 2500; export function FindProvider({ getService }) { const log = getService('log'); const config = getService('config'); - const remote = getService('remote'); + const leadfoot = getService('__leadfoot__'); const retry = getService('retry'); const defaultFindTimeout = config.get('timeouts.find'); @@ -43,10 +43,10 @@ export function FindProvider({ getService }) { class Find { async _withTimeout(timeout, block) { try { - const remoteWithTimeout = remote.setFindTimeout(timeout); - return await block(remoteWithTimeout); + const leadfootWithTimeout = leadfoot.setFindTimeout(timeout); + return await block(leadfootWithTimeout); } finally { - remote.setFindTimeout(defaultFindTimeout); + leadfoot.setFindTimeout(defaultFindTimeout); } } @@ -61,39 +61,43 @@ export function FindProvider({ getService }) { async _ensureElementWithTimeout(timeout, getElementFunction) { try { - const remoteWithTimeout = remote.setFindTimeout(timeout); + const leadfootWithTimeout = leadfoot.setFindTimeout(timeout); return await retry.try(async () => { - const element = await getElementFunction(remoteWithTimeout); + const element = await getElementFunction(leadfootWithTimeout); // Calling any method forces a staleness check element.isEnabled(); return element; }); } finally { - remote.setFindTimeout(defaultFindTimeout); + leadfoot.setFindTimeout(defaultFindTimeout); } } async byName(selector, timeout = defaultFindTimeout) { log.debug(`find.byName(${selector})`); - return await this._ensureElementWithTimeout(timeout, async remote => { - return await remote.findByName(selector); + return await this._ensureElementWithTimeout(timeout, async leadfoot => { + return await leadfoot.findByName(selector); }); } async byCssSelector(selector, timeout = defaultFindTimeout) { log.debug(`findByCssSelector ${selector}`); - return await this._ensureElementWithTimeout(timeout, async remote => { - return await remote.findByCssSelector(selector); + return await this._ensureElementWithTimeout(timeout, async leadfoot => { + return await leadfoot.findByCssSelector(selector); }); } async byClassName(selector, timeout = defaultFindTimeout) { log.debug(`findByCssSelector ${selector}`); - return await this._ensureElementWithTimeout(timeout, async remote => { - return await remote.findByClassName(selector); + return await this._ensureElementWithTimeout(timeout, async leadfoot => { + return await leadfoot.findByClassName(selector); }); } + async activeElement() { + return await leadfoot.getActiveElement(); + } + async setValue(selector, text) { return await retry.try(async () => { const element = await this.byCssSelector(selector); @@ -102,16 +106,16 @@ export function FindProvider({ getService }) { // in case the input element is actually a child of the testSubject, we // call clearValue() and type() on the element that is focused after // clicking on the testSubject - const input = await remote.getActiveElement(); + const input = await this.activeElement(); await input.clearValue(); await input.type(text); }); } async allByCustom(findAllFunction, timeout = defaultFindTimeout) { - return await this._withTimeout(timeout, async remote => { + return await this._withTimeout(timeout, async leadfoot => { return await retry.try(async () => { - let elements = await findAllFunction(remote); + let elements = await findAllFunction(leadfoot); if (!elements) elements = []; // Force isStale checks for all the retrieved elements. await Promise.all(elements.map(async element => await element.isEnabled())); @@ -122,12 +126,12 @@ export function FindProvider({ getService }) { async allByLinkText(selector, timeout = defaultFindTimeout) { log.debug('find.allByLinkText: ' + selector); - return await this.allByCustom(remote => remote.findAllByLinkText(selector), timeout); + return await this.allByCustom(leadfoot => leadfoot.findAllByLinkText(selector), timeout); } async allByCssSelector(selector, timeout = defaultFindTimeout) { log.debug('in findAllByCssSelector: ' + selector); - return await this.allByCustom(remote => remote.findAllByCssSelector(selector), timeout); + return await this.allByCustom(leadfoot => leadfoot.findAllByCssSelector(selector), timeout); } async descendantExistsByCssSelector(selector, parentElement, timeout = WAIT_FOR_EXISTS_TIME) { @@ -150,36 +154,36 @@ export function FindProvider({ getService }) { async displayedByCssSelector(selector, timeout = defaultFindTimeout, parentElement) { log.debug('in displayedByCssSelector: ' + selector); - return await this._ensureElementWithTimeout(timeout, async remote => { - return await remote.findDisplayedByCssSelector(selector); + return await this._ensureElementWithTimeout(timeout, async leadfoot => { + return await leadfoot.findDisplayedByCssSelector(selector); }, parentElement); } async byLinkText(selector, timeout = defaultFindTimeout) { log.debug('Find.byLinkText: ' + selector); - return await this._ensureElementWithTimeout(timeout, async remote => { - return await remote.findByLinkText(selector); + return await this._ensureElementWithTimeout(timeout, async leadfoot => { + return await leadfoot.findByLinkText(selector); }); } async findDisplayedByLinkText(selector, timeout = defaultFindTimeout) { log.debug('Find.byLinkText: ' + selector); - return await this._ensureElementWithTimeout(timeout, async remote => { - return await remote.findDisplayedByLinkText(selector); + return await this._ensureElementWithTimeout(timeout, async leadfoot => { + return await leadfoot.findDisplayedByLinkText(selector); }); } async byPartialLinkText(partialLinkText, timeout = defaultFindTimeout) { log.debug(`find.byPartialLinkText(${partialLinkText})`); - return await this._ensureElementWithTimeout(timeout, async remote => { - return await remote.findByPartialLinkText(partialLinkText); + return await this._ensureElementWithTimeout(timeout, async leadfoot => { + return await leadfoot.findByPartialLinkText(partialLinkText); }); } async exists(findFunction, timeout = WAIT_FOR_EXISTS_TIME) { - return await this._withTimeout(timeout, async remote => { + return await this._withTimeout(timeout, async leadfoot => { try { - await findFunction(remote); + await findFunction(leadfoot); return true; } catch (error) { return false; @@ -189,17 +193,17 @@ export function FindProvider({ getService }) { async existsByLinkText(linkText, timeout = WAIT_FOR_EXISTS_TIME) { log.debug(`existsByLinkText ${linkText}`); - return await this.exists(async remote => await remote.findDisplayedByLinkText(linkText), timeout); + return await this.exists(async leadfoot => await leadfoot.findDisplayedByLinkText(linkText), timeout); } async existsByDisplayedByCssSelector(selector, timeout = WAIT_FOR_EXISTS_TIME) { log.debug(`existsByDisplayedByCssSelector ${selector}`); - return await this.exists(async remote => await remote.findDisplayedByCssSelector(selector), timeout); + return await this.exists(async leadfoot => await leadfoot.findDisplayedByCssSelector(selector), timeout); } async existsByCssSelector(selector, timeout = WAIT_FOR_EXISTS_TIME) { log.debug(`existsByCssSelector ${selector}`); - return await this.exists(async remote => await remote.findByCssSelector(selector), timeout); + return await this.exists(async leadfoot => await leadfoot.findByCssSelector(selector), timeout); } async clickByCssSelectorWhenNotDisabled(selector, { timeout } = { timeout: defaultFindTimeout }) { @@ -208,7 +212,7 @@ export function FindProvider({ getService }) { // will never be re-grabbed. Let errors bubble, but continue checking for disabled property until // it's gone. const element = await this.byCssSelector(selector, timeout); - await remote.moveMouseTo(element); + await leadfoot.moveMouseTo(element); const clickIfNotDisabled = async (element, resolve) => { const disabled = await element.getProperty('disabled'); @@ -228,7 +232,7 @@ export function FindProvider({ getService }) { log.debug(`clickByPartialLinkText(${linkText})`); await retry.try(async () => { const element = await this.byPartialLinkText(linkText, timeout); - await remote.moveMouseTo(element); + await leadfoot.moveMouseTo(element); await element.click(); }); } @@ -237,12 +241,12 @@ export function FindProvider({ getService }) { log.debug(`clickByLinkText(${linkText})`); await retry.try(async () => { const element = await this.byLinkText(linkText, timeout); - await remote.moveMouseTo(element); + await leadfoot.moveMouseTo(element); await element.click(); }); } - async byButtonText(buttonText, element = remote, timeout = defaultFindTimeout) { + async byButtonText(buttonText, element = leadfoot, timeout = defaultFindTimeout) { log.debug(`byButtonText(${buttonText})`); return await retry.tryForTime(timeout, async () => { const allButtons = await element.findAllByTagName('button'); @@ -257,7 +261,7 @@ export function FindProvider({ getService }) { }); } - async clickByButtonText(buttonText, element = remote, timeout = defaultFindTimeout) { + async clickByButtonText(buttonText, element = leadfoot, timeout = defaultFindTimeout) { log.debug(`clickByButtonText(${buttonText})`); await retry.try(async () => { const button = await this.byButtonText(buttonText, element, timeout); @@ -269,7 +273,7 @@ export function FindProvider({ getService }) { log.debug(`clickByCssSelector(${selector})`); await retry.try(async () => { const element = await this.byCssSelector(selector, timeout); - await remote.moveMouseTo(element); + await leadfoot.moveMouseTo(element); await element.click(); }); } @@ -277,17 +281,20 @@ export function FindProvider({ getService }) { log.debug(`clickByDisplayedLinkText(${linkText})`); await retry.try(async () => { const element = await this.findDisplayedByLinkText(linkText, timeout); - await remote.moveMouseTo(element); + await leadfoot.moveMouseTo(element); await element.click(); }); } async clickDisplayedByCssSelector(selector, timeout = defaultFindTimeout) { await retry.try(async () => { const element = await this.findDisplayedByCssSelector(selector, timeout); - await remote.moveMouseTo(element); + await leadfoot.moveMouseTo(element); await element.click(); }); } + async waitForDeletedByCssSelector(selector) { + await leadfoot.waitForDeletedByCssSelector(selector); + } } return new Find(); diff --git a/test/functional/services/index.js b/test/functional/services/index.js index 027fe3b67f855b..0229f295367b50 100644 --- a/test/functional/services/index.js +++ b/test/functional/services/index.js @@ -31,5 +31,6 @@ export { EmbeddingProvider } from './embedding'; export { ComboBoxProvider } from './combo_box'; export { RenderableProvider } from './renderable'; export { TableProvider } from './table'; +export { BrowserProvider } from './browser'; export * from './dashboard'; diff --git a/test/functional/services/remote/interceptors.js b/test/functional/services/remote/interceptors.js deleted file mode 100644 index 936c8f50bef3b9..00000000000000 --- a/test/functional/services/remote/interceptors.js +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { modifyUrl } from '../../../../src/core/utils'; - -export const createRemoteInterceptors = remote => ({ - // inject _t=Date query param on navigation - async get(url, insertTimestamp = true) { - if (insertTimestamp) { - const urlWithTime = modifyUrl(url, parsed => { - parsed.query._t = Date.now(); - }); - - return await remote.get(urlWithTime); - } - return await remote.get(url); - }, - - // strip _t=Date query param when url is read - async getCurrentUrl() { - const current = await remote.getCurrentUrl(); - const currentWithoutTime = modifyUrl(current, parsed => { - delete parsed.query._t; - }); - return currentWithoutTime; - } -}); diff --git a/test/functional/services/remote/remote.js b/test/functional/services/remote/remote.js index 3fa7856e9f6c58..7fa95b685d4193 100644 --- a/test/functional/services/remote/remote.js +++ b/test/functional/services/remote/remote.js @@ -18,7 +18,6 @@ */ import { initLeadfootCommand } from './leadfoot_command'; -import { createRemoteInterceptors } from './interceptors'; import { BrowserDriverApi } from './browser_driver_api'; export async function RemoteProvider({ getService }) { @@ -38,12 +37,11 @@ export async function RemoteProvider({ getService }) { await browserDriverApi.start(); const { command } = await initLeadfootCommand({ log, browserDriverApi: browserDriverApi }); - const interceptors = createRemoteInterceptors(command); log.info('Remote initialized'); lifecycle.on('beforeTests', async () => { - // hard coded default, can be overridden per suite using `remote.setWindowSize()` + // hard coded default, can be overridden per suite using `browser.setWindowSize()` // and will be automatically reverted after each suite await command.setWindowSize(1600, 1000); }); @@ -66,10 +64,6 @@ export async function RemoteProvider({ getService }) { return undefined; } - if (interceptors.hasOwnProperty(prop)) { - return interceptors[prop]; - } - return command[prop]; } }); diff --git a/test/functional/services/screenshots.js b/test/functional/services/screenshots.js index 9c4b9a93178857..da29b4072436c1 100644 --- a/test/functional/services/screenshots.js +++ b/test/functional/services/screenshots.js @@ -30,7 +30,7 @@ const writeFileAsync = promisify(writeFile); export async function ScreenshotsProvider({ getService }) { const log = getService('log'); const config = getService('config'); - const remote = getService('remote'); + const browser = getService('browser'); const SESSION_DIRECTORY = resolve(config.get('screenshots.directory'), 'session'); const FAILURE_DIRECTORY = resolve(config.get('screenshots.directory'), 'failure'); @@ -75,7 +75,7 @@ export async function ScreenshotsProvider({ getService }) { try { log.info(`Taking screenshot "${path}"`); const [screenshot] = await Promise.all([ - remote.takeScreenshot(), + browser.takeScreenshot(), fcb(cb => mkdirp(dirname(path), cb)), ]); await fcb(cb => writeFile(path, screenshot, cb)); diff --git a/test/functional/services/test_subjects.js b/test/functional/services/test_subjects.js index e84d81b70345f5..480b29555d6153 100644 --- a/test/functional/services/test_subjects.js +++ b/test/functional/services/test_subjects.js @@ -29,7 +29,7 @@ import { WAIT_FOR_EXISTS_TIME } from './find'; export function TestSubjectsProvider({ getService }) { const log = getService('log'); const retry = getService('retry'); - const remote = getService('remote'); + const browser = getService('browser'); const find = getService('find'); const config = getService('config'); const defaultFindTimeout = config.get('timeouts.find'); @@ -79,8 +79,8 @@ export function TestSubjectsProvider({ getService }) { log.debug(`TestSubjects.doubleClick(${selector})`); return await retry.try(async () => { const element = await this.find(selector, timeout); - await remote.moveMouseTo(element); - await remote.doubleClick(); + await browser.moveMouseTo(element); + await browser.doubleClick(); }); } @@ -139,7 +139,7 @@ export function TestSubjectsProvider({ getService }) { // in case the input element is actually a child of the testSubject, we // call clearValue() and type() on the element that is focused after // clicking on the testSubject - const input = await remote.getActiveElement(); + const input = await find.activeElement(); await input.clearValue(); await input.type(text); }); @@ -191,7 +191,7 @@ export function TestSubjectsProvider({ getService }) { // moveMouseTo function. await retry.try(async () => { const element = await this.find(selector); - await remote.moveMouseTo(element); + await browser.moveMouseTo(element); }); } @@ -203,7 +203,7 @@ export function TestSubjectsProvider({ getService }) { } async waitForDeleted(selector) { - await remote.waitForDeletedByCssSelector(testSubjSelector(selector)); + await find.waitForDeletedByCssSelector(testSubjSelector(selector)); } } diff --git a/test/plugin_functional/test_suites/custom_visualizations/index.js b/test/plugin_functional/test_suites/custom_visualizations/index.js index 7ee98d850b1f72..73af70371fae09 100644 --- a/test/plugin_functional/test_suites/custom_visualizations/index.js +++ b/test/plugin_functional/test_suites/custom_visualizations/index.js @@ -18,7 +18,7 @@ */ export default function ({ getService, loadTestFile }) { - const remote = getService('remote'); + const browser = getService('browser'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); @@ -27,7 +27,7 @@ export default function ({ getService, loadTestFile }) { await esArchiver.loadIfNeeded('../functional/fixtures/es_archiver/logstash_functional'); await esArchiver.loadIfNeeded('../functional/fixtures/es_archiver/visualize'); await kibanaServer.uiSettings.replace({ 'dateFormat:tz': 'Australia/North', 'defaultIndex': 'logstash-*' }); - await remote.setWindowSize(1300, 900); + await browser.setWindowSize(1300, 900); }); loadTestFile(require.resolve('./self_changing_vis')); diff --git a/test/plugin_functional/test_suites/embedding_visualizations/index.js b/test/plugin_functional/test_suites/embedding_visualizations/index.js index 6aa6a03b6984d3..47ece41262bf62 100644 --- a/test/plugin_functional/test_suites/embedding_visualizations/index.js +++ b/test/plugin_functional/test_suites/embedding_visualizations/index.js @@ -18,7 +18,7 @@ */ export default function ({ getService, getPageObjects, loadTestFile }) { - const remote = getService('remote'); + const browser = getService('browser'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const PageObjects = getPageObjects(['common', 'header']); @@ -28,7 +28,7 @@ export default function ({ getService, getPageObjects, loadTestFile }) { await esArchiver.loadIfNeeded('../functional/fixtures/es_archiver/logstash_functional'); await esArchiver.load('../functional/fixtures/es_archiver/visualize_embedding'); await kibanaServer.uiSettings.replace({ 'dateFormat:tz': 'Australia/North', 'defaultIndex': 'logstash-*' }); - await remote.setWindowSize(1300, 900); + await browser.setWindowSize(1300, 900); await PageObjects.common.navigateToApp('settings'); await PageObjects.header.clickGlobalNavigationLink('Embedding Vis'); }); diff --git a/test/plugin_functional/test_suites/panel_actions/index.js b/test/plugin_functional/test_suites/panel_actions/index.js index 42b059084aba56..8e17341ea9f9ea 100644 --- a/test/plugin_functional/test_suites/panel_actions/index.js +++ b/test/plugin_functional/test_suites/panel_actions/index.js @@ -24,13 +24,13 @@ export const DATA_ARCHIVE_PATH = path.resolve(__dirname, '../../../functional/fi export default function ({ getService, getPageObjects, loadTestFile }) { - const remote = getService('remote'); + const browser = getService('browser'); const esArchiver = getService('esArchiver'); const PageObjects = getPageObjects(['dashboard']); describe('pluggable panel actions', function () { before(async () => { - await remote.setWindowSize(1300, 900); + await browser.setWindowSize(1300, 900); await PageObjects.dashboard.initTests({ kibanaIndex: KIBANA_ARCHIVE_PATH, dataIndex: DATA_ARCHIVE_PATH, diff --git a/x-pack/test/functional/apps/canvas/smoke_test.js b/x-pack/test/functional/apps/canvas/smoke_test.js index 88ef51248f4a59..e94001a6e05089 100644 --- a/x-pack/test/functional/apps/canvas/smoke_test.js +++ b/x-pack/test/functional/apps/canvas/smoke_test.js @@ -10,7 +10,7 @@ import { parse } from 'url'; export default function canvasSmokeTest({ getService, getPageObjects }) { const esArchiver = getService('esArchiver'); const testSubjects = getService('testSubjects'); - const remote = getService('remote'); + const browser = getService('browser'); const retry = getService('retry'); const PageObjects = getPageObjects(['common']); @@ -46,7 +46,7 @@ export default function canvasSmokeTest({ getService, getPageObjects }) { await retry.waitFor('workpad page', () => testSubjects.exists('canvasWorkpadPage')); // check that workpad loaded in url - const url = await remote.getCurrentUrl(); + const url = await browser.getCurrentUrl(); expect(parse(url).hash).to.equal(`#/workpad/${testWorkpadId}/page/1`); }); diff --git a/x-pack/test/functional/apps/dashboard_mode/dashboard_view_mode.js b/x-pack/test/functional/apps/dashboard_mode/dashboard_view_mode.js index 51e023609276ea..8e20bbf1ea28a1 100644 --- a/x-pack/test/functional/apps/dashboard_mode/dashboard_view_mode.js +++ b/x-pack/test/functional/apps/dashboard_mode/dashboard_view_mode.js @@ -9,7 +9,7 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { const kibanaServer = getService('kibanaServer'); const esArchiver = getService('esArchiver'); - const remote = getService('remote'); + const browser = getService('browser'); const log = getService('log'); const find = getService('find'); const testSubjects = getService('testSubjects'); @@ -37,7 +37,7 @@ export default function ({ getService, getPageObjects }) { 'defaultIndex': 'logstash-*' }); await kibanaServer.uiSettings.disableToastAutohide(); - remote.setWindowSize(1600, 1000); + browser.setWindowSize(1600, 1000); await PageObjects.common.navigateToApp('discover'); await PageObjects.dashboard.setTimepickerInHistoricalDataRange(); @@ -128,7 +128,7 @@ export default function ({ getService, getPageObjects }) { }); it('shows the dashboard landing page by default', async () => { - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); console.log('url: ', currentUrl); expect(currentUrl).to.contain('dashboards'); }); diff --git a/x-pack/test/functional/apps/graph/graph.js b/x-pack/test/functional/apps/graph/graph.js index c6ab1bd44882e0..3126698e294d40 100644 --- a/x-pack/test/functional/apps/graph/graph.js +++ b/x-pack/test/functional/apps/graph/graph.js @@ -11,14 +11,14 @@ export default function ({ getService, getPageObjects }) { const PageObjects = getPageObjects(['settings', 'common', 'graph', 'header']); const log = getService('log'); const esArchiver = getService('esArchiver'); - const remote = getService('remote'); + const browser = getService('browser'); const kibanaServer = getService('kibanaServer'); const retry = getService('retry'); describe.skip('graph', function () { // eslint-disable-line jest/no-disabled-tests before(async () => { - await remote.setWindowSize(1600, 1000); + await browser.setWindowSize(1600, 1000); log.debug('load graph/secrepo data'); await esArchiver.loadIfNeeded('graph/secrepo'); await esArchiver.load('empty_kibana'); diff --git a/x-pack/test/functional/apps/grok_debugger/grok_debugger.js b/x-pack/test/functional/apps/grok_debugger/grok_debugger.js index f3cf8f487597f7..bd77d93a94dcb7 100644 --- a/x-pack/test/functional/apps/grok_debugger/grok_debugger.js +++ b/x-pack/test/functional/apps/grok_debugger/grok_debugger.js @@ -5,7 +5,7 @@ */ export default function ({ getService, getPageObjects }) { - const remote = getService('remote'); + const browser = getService('browser'); const grokDebugger = getService('grokDebugger'); const esArchiver = getService('esArchiver'); @@ -16,7 +16,7 @@ export default function ({ getService, getPageObjects }) { await esArchiver.load('empty_kibana'); // Increase window height to ensure "Simulate" button is shown above the // fold. Otherwise it can't be clicked by the browser driver. - remote.setWindowSize(1600, 1000); + browser.setWindowSize(1600, 1000); await PageObjects.grokDebugger.gotoGrokDebugger(); }); diff --git a/x-pack/test/functional/apps/logstash/pipeline_create.js b/x-pack/test/functional/apps/logstash/pipeline_create.js index 4b855b1238de0f..9ca7bd8b7c903f 100644 --- a/x-pack/test/functional/apps/logstash/pipeline_create.js +++ b/x-pack/test/functional/apps/logstash/pipeline_create.js @@ -7,7 +7,7 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { - const remote = getService('remote'); + const browser = getService('browser'); const esArchiver = getService('esArchiver'); const random = getService('random'); const pipelineList = getService('pipelineList'); @@ -18,14 +18,14 @@ export default function ({ getService, getPageObjects }) { let originalWindowSize; before(async () => { - originalWindowSize = await remote.getWindowSize(); - await remote.setWindowSize(1600, 1000); + originalWindowSize = await browser.getWindowSize(); + await browser.setWindowSize(1600, 1000); await esArchiver.load('logstash/empty'); }); after(async () => { await esArchiver.unload('logstash/empty'); - await remote.setWindowSize(originalWindowSize.width, originalWindowSize.height); + await browser.setWindowSize(originalWindowSize.width, originalWindowSize.height); }); it('starts with the default values', async () => { diff --git a/x-pack/test/functional/apps/logstash/pipeline_list.js b/x-pack/test/functional/apps/logstash/pipeline_list.js index 3a6c716325a77b..71e95776a6ad14 100644 --- a/x-pack/test/functional/apps/logstash/pipeline_list.js +++ b/x-pack/test/functional/apps/logstash/pipeline_list.js @@ -8,7 +8,7 @@ import expect from 'expect.js'; import { omit } from 'lodash'; export default function ({ getService, getPageObjects }) { - const remote = getService('remote'); + const browser = getService('browser'); const esArchiver = getService('esArchiver'); const random = getService('random'); const pipelineList = getService('pipelineList'); @@ -19,15 +19,15 @@ export default function ({ getService, getPageObjects }) { let originalWindowSize; before(async () => { - originalWindowSize = await remote.getWindowSize(); - await remote.setWindowSize(1600, 1000); + originalWindowSize = await browser.getWindowSize(); + await browser.setWindowSize(1600, 1000); await esArchiver.load('logstash/example_pipelines'); await PageObjects.logstash.gotoPipelineList(); }); after(async () => { await esArchiver.unload('logstash/example_pipelines'); - await remote.setWindowSize(originalWindowSize.width, originalWindowSize.height); + await browser.setWindowSize(originalWindowSize.width, originalWindowSize.height); }); it('shows example pipelines', async () => { diff --git a/x-pack/test/functional/apps/monitoring/_get_lifecycle_methods.js b/x-pack/test/functional/apps/monitoring/_get_lifecycle_methods.js index 59cc817a38308b..252eb6e34bacfd 100644 --- a/x-pack/test/functional/apps/monitoring/_get_lifecycle_methods.js +++ b/x-pack/test/functional/apps/monitoring/_get_lifecycle_methods.js @@ -15,9 +15,9 @@ export const getLifecycleMethods = (getService, getPageObjects) => { _archive = archive; const kibanaServer = getService('kibanaServer'); - const remote = getService('remote'); + const browser = getService('browser'); - await remote.setWindowSize(1600, 1000); + await browser.setWindowSize(1600, 1000); await esArchiver.load(archive); await kibanaServer.uiSettings.replace({ diff --git a/x-pack/test/functional/apps/monitoring/enable_monitoring/index.js b/x-pack/test/functional/apps/monitoring/enable_monitoring/index.js index d04fa9cf3a8630..eee4551bf1139e 100644 --- a/x-pack/test/functional/apps/monitoring/enable_monitoring/index.js +++ b/x-pack/test/functional/apps/monitoring/enable_monitoring/index.js @@ -15,8 +15,8 @@ export default function ({ getService, getPageObjects }) { describe('Monitoring is turned off', () => { before(async () => { - const remote = getService('remote'); - await remote.setWindowSize(1600, 1000); + const browser = getService('browser'); + await browser.setWindowSize(1600, 1000); await PageObjects.monitoring.navigateTo(); await noData.isOnNoDataPage(); }); diff --git a/x-pack/test/functional/apps/security/doc_level_security_roles.js b/x-pack/test/functional/apps/security/doc_level_security_roles.js index 535a0c2c4164a8..7971b893096d06 100644 --- a/x-pack/test/functional/apps/security/doc_level_security_roles.js +++ b/x-pack/test/functional/apps/security/doc_level_security_roles.js @@ -9,7 +9,7 @@ import { indexBy } from 'lodash'; export default function ({ getService, getPageObjects }) { const esArchiver = getService('esArchiver'); - const remote = getService('remote'); + const browser = getService('browser'); const retry = getService('retry'); const log = getService('log'); const screenshot = getService('screenshots'); @@ -24,7 +24,7 @@ export default function ({ getService, getPageObjects }) { before('initialize tests', async () => { await esArchiver.load('empty_kibana'); await esArchiver.loadIfNeeded('security/dlstest'); - remote.setWindowSize(1600, 1000); + browser.setWindowSize(1600, 1000); await PageObjects.settings.createIndexPattern('dlstest', null); diff --git a/x-pack/test/functional/apps/security/field_level_security.js b/x-pack/test/functional/apps/security/field_level_security.js index a0fc042f58540c..a36a5922d8f5fb 100644 --- a/x-pack/test/functional/apps/security/field_level_security.js +++ b/x-pack/test/functional/apps/security/field_level_security.js @@ -9,7 +9,7 @@ import { indexBy } from 'lodash'; export default function ({ getService, getPageObjects }) { const esArchiver = getService('esArchiver'); - const remote = getService('remote'); + const browser = getService('browser'); const retry = getService('retry'); const log = getService('log'); const PageObjects = getPageObjects(['security', 'settings', 'common', 'discover', 'header']); @@ -18,7 +18,7 @@ export default function ({ getService, getPageObjects }) { before('initialize tests', async () => { await esArchiver.loadIfNeeded('security/flstest'); await esArchiver.load('empty_kibana'); - remote.setWindowSize(1600, 1000); + browser.setWindowSize(1600, 1000); await PageObjects.settings.navigateTo(); await PageObjects.settings.clickKibanaIndices(); await PageObjects.settings.createIndexPattern('flstest', null); diff --git a/x-pack/test/functional/apps/security/management.js b/x-pack/test/functional/apps/security/management.js index 32b6eef2d96bb1..fc908acaa29eb9 100644 --- a/x-pack/test/functional/apps/security/management.js +++ b/x-pack/test/functional/apps/security/management.js @@ -15,7 +15,7 @@ import { export default function ({ getService, getPageObjects }) { const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); - const remote = getService('remote'); + const browser = getService('browser'); const PageObjects = getPageObjects(['security', 'settings', 'common', 'header']); describe('Management', () => { @@ -44,13 +44,13 @@ export default function ({ getService, getPageObjects }) { it('Can navigate to create user section', async () => { await PageObjects.security.clickElasticsearchUsers(); await PageObjects.security.clickCreateNewUser(); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); expect(currentUrl).to.contain(EDIT_USERS_PATH); }); it('Clicking cancel in create user section brings user back to listing', async () => { await PageObjects.security.clickCancelEditUser(); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); expect(currentUrl).to.contain(USERS_PATH); expect(currentUrl).to.not.contain(EDIT_USERS_PATH); }); @@ -66,14 +66,14 @@ export default function ({ getService, getPageObjects }) { await PageObjects.security.clickSaveEditUser(); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); expect(currentUrl).to.contain(USERS_PATH); expect(currentUrl).to.not.contain(EDIT_USERS_PATH); }); it('Can navigate to edit user section', async () => { await PageObjects.settings.clickLinkText('new-user'); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); expect(currentUrl).to.contain(EDIT_USERS_PATH); const userNameInput = await testSubjects.find('userFormUserNameInput'); // allow time for user to load @@ -84,19 +84,19 @@ export default function ({ getService, getPageObjects }) { it('Can navigate to roles section', async () => { await PageObjects.settings.clickLinkText('Roles'); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); expect(currentUrl).to.contain(ROLES_PATH); }); it('Can navigate to create role section', async () => { await PageObjects.security.clickCreateNewRole(); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); expect(currentUrl).to.contain(EDIT_ROLES_PATH); }); it('Clicking cancel in create role section brings user back to listing', async () => { await PageObjects.security.clickCancelEditRole(); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); expect(currentUrl).to.contain(ROLES_PATH); expect(currentUrl).to.not.contain(EDIT_ROLES_PATH); }); @@ -108,14 +108,14 @@ export default function ({ getService, getPageObjects }) { await PageObjects.security.clickSaveEditRole(); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); expect(currentUrl).to.contain(ROLES_PATH); expect(currentUrl).to.not.contain(EDIT_ROLES_PATH); }); it('Can navigate to edit role section', async () => { await PageObjects.settings.clickLinkText('my-new-role'); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); expect(currentUrl).to.contain(EDIT_ROLES_PATH); const userNameInput = await testSubjects.find('roleFormNameInput'); @@ -141,7 +141,7 @@ export default function ({ getService, getPageObjects }) { await PageObjects.settings.navigateTo(); await PageObjects.settings.clickLinkText('Users'); await PageObjects.settings.clickLinkText('kibana_dashboard_only_user'); - const currentUrl = await remote.getCurrentUrl(); + const currentUrl = await browser.getCurrentUrl(); expect(currentUrl).to.contain(EDIT_ROLES_PATH); }); }); diff --git a/x-pack/test/functional/apps/security/rbac_phase1.js b/x-pack/test/functional/apps/security/rbac_phase1.js index 7492c53522ed48..628eddf79b5899 100644 --- a/x-pack/test/functional/apps/security/rbac_phase1.js +++ b/x-pack/test/functional/apps/security/rbac_phase1.js @@ -11,12 +11,12 @@ export default function ({ getService, getPageObjects }) { const PageObjects = getPageObjects(['security', 'settings', 'common', 'visualize', 'header']); const log = getService('log'); const esArchiver = getService('esArchiver'); - const remote = getService('remote'); + const browser = getService('browser'); const kibanaServer = getService('kibanaServer'); describe('rbac ', async function () { before(async () => { - await remote.setWindowSize(1600, 1000); + await browser.setWindowSize(1600, 1000); log.debug('users'); await esArchiver.loadIfNeeded('logstash_functional'); log.debug('load kibana index with default index pattern'); diff --git a/x-pack/test/functional/apps/security/secure_roles_perm.js b/x-pack/test/functional/apps/security/secure_roles_perm.js index a185c193d9db45..f4b067239bf39f 100644 --- a/x-pack/test/functional/apps/security/secure_roles_perm.js +++ b/x-pack/test/functional/apps/security/secure_roles_perm.js @@ -11,7 +11,7 @@ export default function ({ getService, getPageObjects }) { const PageObjects = getPageObjects(['security', 'settings', 'monitoring', 'discover', 'common', 'reporting', 'header']); const log = getService('log'); const esArchiver = getService('esArchiver'); - const remote = getService('remote'); + const browser = getService('browser'); const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); const retry = getService('retry'); @@ -20,7 +20,7 @@ export default function ({ getService, getPageObjects }) { describe('secure roles and permissions', function () { before(async () => { - await remote.setWindowSize(1600, 1000); + await browser.setWindowSize(1600, 1000); log.debug('users'); await esArchiver.loadIfNeeded('logstash_functional'); log.debug('load kibana index with default index pattern'); diff --git a/x-pack/test/functional/apps/watcher/watcher_test.js b/x-pack/test/functional/apps/watcher/watcher_test.js index 657dcefb3645f9..cfd0ea6f095457 100644 --- a/x-pack/test/functional/apps/watcher/watcher_test.js +++ b/x-pack/test/functional/apps/watcher/watcher_test.js @@ -11,14 +11,14 @@ const watchID = "watchID"; const watchName = "watch Name"; const updatedName = "updatedName"; export default function ({ getService, getPageObjects }) { - const remote = getService('remote'); + const browser = getService('browser'); const testSubjects = getService('testSubjects'); const log = getService('log'); const PageObjects = getPageObjects(['security', 'common', 'header', 'settings', 'watcher']); describe('watcher_test', function () { before('initialize tests', async () => { - await remote.setWindowSize(1600, 1000); + await browser.setWindowSize(1600, 1000); await PageObjects.common.navigateToApp('settings'); await PageObjects.settings.clickLinkText('Watcher'); await PageObjects.watcher.clearAllWatches(); diff --git a/x-pack/test/functional/page_objects/graph_page.js b/x-pack/test/functional/page_objects/graph_page.js index 88591f2b95876c..b4990c1653f097 100644 --- a/x-pack/test/functional/page_objects/graph_page.js +++ b/x-pack/test/functional/page_objects/graph_page.js @@ -5,11 +5,9 @@ */ export function GraphPageProvider({ getService, getPageObjects }) { - const remote = getService('remote'); - const config = getService('config'); + const find = getService('find'); const log = getService('log'); const testSubjects = getService('testSubjects'); - const defaultFindTimeout = config.get('timeouts.find'); const PageObjects = getPageObjects(['common', 'header', 'settings']); const retry = getService('retry'); @@ -17,23 +15,21 @@ export function GraphPageProvider({ getService, getPageObjects }) { class GraphPage { async selectIndexPattern(pattern) { - await remote.setFindTimeout(defaultFindTimeout).findDisplayedByCssSelector('.gphIndexSelect').click(); - await remote.setFindTimeout(defaultFindTimeout).findByCssSelector('.gphIndexSelect > option[label="' + pattern + '"]').click(); + await find.clickDisplayedByCssSelector('.gphIndexSelect'); + await find.clickByCssSelector('.gphIndexSelect > option[label="' + pattern + '"]'); } async clickAddField() { await retry.try(async () => { - await remote.setFindTimeout(defaultFindTimeout).findById('addVertexFieldButton') - .click(); + await find.clickByCssSelector('#addVertexFieldButton'); // make sure the fieldSelectionList is not hidden - await remote.setFindTimeout(defaultFindTimeout).findDisplayedByCssSelector('[data-test-subj="fieldSelectionList"]'); + await testSubjects.exists('fieldSelectionList'); }); } async selectField(field) { - await remote.setFindTimeout(defaultFindTimeout).findDisplayedByCssSelector('select[id="fieldList"] > option[label="' + field + '"]') - .click(); - await remote.setFindTimeout(defaultFindTimeout).findDisplayedByCssSelector('button[ng-click="addFieldToSelection()"]').click(); + await find.clickDisplayedByCssSelector('select[id="fieldList"] > option[label="' + field + '"]'); + await find.clickDisplayedByCssSelector('button[ng-click="addFieldToSelection()"]'); } async addField(field) { @@ -44,14 +40,13 @@ export function GraphPageProvider({ getService, getPageObjects }) { } async query(str) { - await remote.setFindTimeout(defaultFindTimeout).findByCssSelector('input.kuiLocalSearchInput').type(str); - await remote.setFindTimeout(defaultFindTimeout).findByCssSelector('button.kuiLocalSearchButton').click(); + await find.setValue('input.kuiLocalSearchInput', str); + await find.clickDisplayedByCssSelector('button.kuiLocalSearchButton'); } async getGraphCircleText() { - const chartTypes = await remote.setFindTimeout(defaultFindTimeout) - .findAllByCssSelector('text.gphNode__label'); + const chartTypes = await find.allByCssSelector('text.gphNode__label'); async function getCircleText(circle) { return circle.getVisibleText(); @@ -62,8 +57,7 @@ export function GraphPageProvider({ getService, getPageObjects }) { } async getGraphConnectingLines() { - const chartTypes = await remote.setFindTimeout(defaultFindTimeout) - .findAllByCssSelector('line.edge'); + const chartTypes = await find.allByCssSelector('line.edge'); async function getLineStyle(line) { return line.getAttribute('style'); @@ -75,16 +69,14 @@ export function GraphPageProvider({ getService, getPageObjects }) { // click the line which matches the style async clickGraphConnectingLine(style) { - await remote.setFindTimeout(defaultFindTimeout) - .findByCssSelector('line.edge[style="' + style + '"]').click(); + await find.clickByCssSelector('line.edge[style="' + style + '"]'); } async newGraph() { log.debug('Click New Workspace'); - await remote.setFindTimeout(defaultFindTimeout) - .findByCssSelector('[aria-label="New Workspace"]').click(); + await find.clickByCssSelector('[aria-label="New Workspace"]'); await PageObjects.common.sleep(1000); - const modal = await remote.setFindTimeout(defaultFindTimeout).findByCssSelector('#kibana-body'); + const modal = await find.byCssSelector('#kibana-body'); const page = await modal.getVisibleText(); if (page.includes('This will clear the workspace - are you sure?')) { return testSubjects.click('confirmModalConfirmButton'); @@ -92,62 +84,55 @@ export function GraphPageProvider({ getService, getPageObjects }) { } async saveGraph(name) { - await remote.setFindTimeout(defaultFindTimeout) - .findByCssSelector('[aria-label="Save Workspace"]').click(); - await remote.setFindTimeout(defaultFindTimeout) - .findById('workspaceTitle').type(name); - await remote.setFindTimeout(defaultFindTimeout) - .findByCssSelector('button[aria-label="Save workspace"]').click(); + await find.clickByCssSelector('[aria-label="Save Workspace"]'); + await find.setValue('#workspaceTitle', name); + await find.clickByCssSelector('button[aria-label="Save workspace"]'); // Confirm that the Graph has been saved. return await testSubjects.exists('saveGraphSuccess'); } async openGraph(name) { - await remote.setFindTimeout(defaultFindTimeout) - .findByCssSelector('[aria-label="Load Saved Workspace"]').click(); - await remote.setFindTimeout(defaultFindTimeout) - .findByCssSelector('input[name="filter"]').type(name); + await find.clickByCssSelector('[aria-label="Load Saved Workspace"]'); + await find.setValue('input[name="filter"]', name); await PageObjects.common.sleep(1000); - await remote.setFindTimeout(defaultFindTimeout) - .findByLinkText(name).click(); + await find.clickByLinkText(name); await PageObjects.common.sleep(5000); } async deleteGraph() { - await remote.setFindTimeout(defaultFindTimeout) - .findByCssSelector('[aria-label="Delete Saved Workspace"]').click(); + await find.clickByCssSelector('[aria-label="Delete Saved Workspace"]'); await testSubjects.click('confirmModalConfirmButton'); } - getVennTerm1() { - return remote.setFindTimeout(defaultFindTimeout) - .findByCssSelector('span.vennTerm1').getVisibleText(); + async getVennTerm1() { + const el = await find.byCssSelector('span.vennTerm1'); + return await el.getVisibleText(); } - getVennTerm2() { - return remote.setFindTimeout(defaultFindTimeout) - .findByCssSelector('span.vennTerm2').getVisibleText(); + async getVennTerm2() { + const el = await find.byCssSelector('span.vennTerm2'); + return await el.getVisibleText(); } - getSmallVennTerm1() { - return remote.setFindTimeout(defaultFindTimeout) - .findByCssSelector('small.vennTerm1').getVisibleText(); + async getSmallVennTerm1() { + const el = await find.byCssSelector('small.vennTerm1'); + return await el.getVisibleText(); } - getSmallVennTerm12() { - return remote.setFindTimeout(defaultFindTimeout) - .findByCssSelector('small.vennTerm12').getVisibleText(); + async getSmallVennTerm12() { + const el = await find.byCssSelector('small.vennTerm12'); + return await el.getVisibleText(); } - getSmallVennTerm2() { - return remote.setFindTimeout(defaultFindTimeout) - .findByCssSelector('small.vennTerm2').getVisibleText(); + async getSmallVennTerm2() { + const el = await find.byCssSelector('small.vennTerm2'); + return await el.getVisibleText(); } async getVennEllipse1() { - const el = await remote.setFindTimeout(defaultFindTimeout).findByCssSelector('ellipse.venn1'); + const el = await find.byCssSelector('ellipse.venn1'); const cx = await el.getAttribute('cx'); const cy = await el.getAttribute('cy'); const rx = await el.getAttribute('rx'); @@ -155,7 +140,7 @@ export function GraphPageProvider({ getService, getPageObjects }) { } async getVennEllipse2() { - const el = await remote.setFindTimeout(defaultFindTimeout).findByCssSelector('ellipse.venn2'); + const el = await find.byCssSelector('ellipse.venn2'); const cx = await el.getAttribute('cx'); const cy = await el.getAttribute('cy'); const rx = await el.getAttribute('rx'); diff --git a/x-pack/test/functional/page_objects/reporting_page.js b/x-pack/test/functional/page_objects/reporting_page.js index d5e6ef80c28cba..45c5f0f0e23204 100644 --- a/x-pack/test/functional/page_objects/reporting_page.js +++ b/x-pack/test/functional/page_objects/reporting_page.js @@ -13,7 +13,7 @@ export function ReportingPageProvider({ getService, getPageObjects }) { const config = getService('config'); const testSubjects = getService('testSubjects'); const esArchiver = getService('esArchiver'); - const remote = getService('remote'); + const browser = getService('browser'); const kibanaServer = getService('kibanaServer'); const PageObjects = getPageObjects(['common', 'security', 'header', 'settings', 'share']); @@ -28,22 +28,22 @@ export function ReportingPageProvider({ getService, getPageObjects }) { 'defaultIndex': 'logstash-*' }); - await remote.setWindowSize(1600, 850); + await browser.setWindowSize(1600, 850); } async getUrlOfTab(tabIndex) { return await retry.try(async () => { log.debug(`reportingPage.getUrlOfTab(${tabIndex}`); - const handles = await remote.getAllWindowHandles(); + const handles = await browser.getAllWindowHandles(); log.debug(`Switching to window ${handles[tabIndex]}`); - await remote.switchToWindow(handles[tabIndex]); + await browser.switchToWindow(handles[tabIndex]); - const url = await remote.getCurrentUrl(); + const url = await browser.getCurrentUrl(); if (!url || url === 'about:blank') { throw new Error('url is blank'); } - await remote.switchToWindow(handles[0]); + await browser.switchToWindow(handles[0]); return url; }); } @@ -51,16 +51,16 @@ export function ReportingPageProvider({ getService, getPageObjects }) { async closeTab(tabIndex) { return await retry.try(async () => { log.debug(`reportingPage.closeTab(${tabIndex}`); - const handles = await remote.getAllWindowHandles(); + const handles = await browser.getAllWindowHandles(); log.debug(`Switching to window ${handles[tabIndex]}`); - await remote.switchToWindow(handles[tabIndex]); - await remote.closeCurrentWindow(); - await remote.switchToWindow(handles[0]); + await browser.switchToWindow(handles[tabIndex]); + await browser.closeCurrentWindow(); + await browser.switchToWindow(handles[0]); }); } async forceSharedItemsContainerSize({ width }) { - await remote.execute(` + await browser.execute(` var el = document.querySelector('[data-shared-items-container]'); el.style.flex="none"; el.style.width="${width}px"; @@ -68,7 +68,7 @@ export function ReportingPageProvider({ getService, getPageObjects }) { } async removeForceSharedItemsContainerSize() { - await remote.execute(` + await browser.execute(` var el = document.querySelector('[data-shared-items-container]'); el.style.flex = null; el.style.width = null; diff --git a/x-pack/test/functional/page_objects/security_page.js b/x-pack/test/functional/page_objects/security_page.js index 9c7bfc61ecc3b5..9b2ba88cb5990a 100644 --- a/x-pack/test/functional/page_objects/security_page.js +++ b/x-pack/test/functional/page_objects/security_page.js @@ -7,7 +7,7 @@ import { map as mapAsync } from 'bluebird'; export function SecurityPageProvider({ getService, getPageObjects }) { - const remote = getService('remote'); + const browser = getService('browser'); const config = getService('config'); const retry = getService('retry'); const find = getService('find'); @@ -15,7 +15,6 @@ export function SecurityPageProvider({ getService, getPageObjects }) { const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); const esArchiver = getService('esArchiver'); - const defaultFindTimeout = config.get('timeouts.find'); const PageObjects = getPageObjects(['common', 'header', 'settings', 'home']); class LoginPage { @@ -36,10 +35,10 @@ export function SecurityPageProvider({ getService, getPageObjects }) { // wait for either space selector, kibanaChrome or loginErrorMessage if (expectSpaceSelector) { await retry.try(() => testSubjects.find('kibanaSpaceSelector')); - log.debug(`Finished login process, landed on space selector. currentUrl = ${await remote.getCurrentUrl()}`); + log.debug(`Finished login process, landed on space selector. currentUrl = ${await browser.getCurrentUrl()}`); } else if (expectSuccess) { - await remote.setFindTimeout(20000).findByCssSelector('[data-test-subj="kibanaChrome"] nav:not(.ng-hide) '); - log.debug(`Finished login process currentUrl = ${await remote.getCurrentUrl()}`); + await find.byCssSelector('[data-test-subj="kibanaChrome"] nav:not(.ng-hide) ', 20000); + log.debug(`Finished login process currentUrl = ${await browser.getCurrentUrl()}`); } } @@ -67,7 +66,7 @@ export function SecurityPageProvider({ getService, getPageObjects }) { await esArchiver.load('empty_kibana'); await kibanaServer.uiSettings.disableToastAutohide(); await esArchiver.loadIfNeeded('logstash_functional'); - remote.setWindowSize(1600, 1000); + browser.setWindowSize(1600, 1000); } async login(username, password, options = {}) { @@ -158,7 +157,7 @@ export function SecurityPageProvider({ getService, getPageObjects }) { async clickSaveEditRole() { const saveButton = await retry.try(() => testSubjects.find('roleFormSaveButton')); - await remote.moveMouseTo(saveButton); + await browser.moveMouseTo(saveButton); await saveButton.click(); await PageObjects.header.waitUntilLoadingHasFinished(); } @@ -195,22 +194,14 @@ export function SecurityPageProvider({ getService, getPageObjects }) { await PageObjects.common.navigateToApp('settings'); } - clickElasticsearchUsers() { - return this.navigateTo() - .then(() => { - return remote.setFindTimeout(defaultFindTimeout) - .findDisplayedByLinkText('Users') - .click(); - }); + async clickElasticsearchUsers() { + await this.navigateTo(); + await find.clickByDisplayedLinkText('Users'); } - clickElasticsearchRoles() { - return this.navigateTo() - .then(() => { - return remote.setFindTimeout(defaultFindTimeout) - .findDisplayedByLinkText('Roles') - .click(); - }); + async clickElasticsearchRoles() { + await this.navigateTo(); + await find.clickByDisplayedLinkText('Roles'); } @@ -291,9 +282,7 @@ export function SecurityPageProvider({ getService, getPageObjects }) { return testSubjects.append('roleFormNameInput', roleName); }) .then(function () { - return remote.setFindTimeout(defaultFindTimeout) - .findByCssSelector('[data-test-subj="indicesInput0"] input') - .type(userObj.elasticsearch.indices[0].names + '\n'); + return find.setValue('[data-test-subj="indicesInput0"] input', userObj.elasticsearch.indices[0].names + '\n'); }) .then(function () { return testSubjects.click('restrictDocumentsQuery0'); @@ -344,9 +333,7 @@ export function SecurityPageProvider({ getService, getPageObjects }) { return field.reduce(function (promise, fieldName) { return promise .then(function () { - return remote.setFindTimeout(defaultFindTimeout) - .findByCssSelector('[data-test-subj="fieldInput0"] input') - .type(fieldName + '\n'); + return find.setValue('[data-test-subj="fieldInput0"] input', fieldName + '\n'); }) .then(function () { return PageObjects.common.sleep(1000); @@ -357,9 +344,7 @@ export function SecurityPageProvider({ getService, getPageObjects }) { if (userObj.elasticsearch.indices[0].field_security) { // have to remove the '*' - return remote.setFindTimeout(defaultFindTimeout) - .findByCssSelector('div[data-test-subj="fieldInput0"] .euiBadge[title="*"]') - .click() + return find.clickByCssSelector('div[data-test-subj="fieldInput0"] .euiBadge[title="*"]') .then(function () { return addGrantedField(userObj.elasticsearch.indices[0].field_security.grant); }); @@ -386,7 +371,7 @@ export function SecurityPageProvider({ getService, getPageObjects }) { deleteUser(username) { let alertText; log.debug('Delete user ' + username); - return remote.findDisplayedByLinkText(username).click() + return find.clickByDisplayedLinkText(username) .then(() => { return PageObjects.header.awaitGlobalLoadingIndicatorHidden(); }) @@ -410,10 +395,9 @@ export function SecurityPageProvider({ getService, getPageObjects }) { }); } - getPermissionDeniedMessage() { - return remote.setFindTimeout(defaultFindTimeout) - .findDisplayedByCssSelector('span.kuiInfoPanelHeader__title') - .getVisibleText(); + async getPermissionDeniedMessage() { + const el = await find.displayedByCssSelector('span.kuiInfoPanelHeader__title'); + return await el.getVisibleText(); } } return new SecurityPage(); diff --git a/x-pack/test/functional/page_objects/space_selector_page.js b/x-pack/test/functional/page_objects/space_selector_page.js index aebe065fe6ef94..89c18d9ec57d0c 100644 --- a/x-pack/test/functional/page_objects/space_selector_page.js +++ b/x-pack/test/functional/page_objects/space_selector_page.js @@ -10,7 +10,8 @@ export function SpaceSelectorPageProvider({ getService, getPageObjects }) { const retry = getService('retry'); const log = getService('log'); const testSubjects = getService('testSubjects'); - const remote = getService('remote'); + const browser = getService('browser'); + const find = getService('find'); const PageObjects = getPageObjects(['common', 'home', 'security']); class SpaceSelectorPage { @@ -30,8 +31,8 @@ export function SpaceSelectorPageProvider({ getService, getPageObjects }) { return await retry.try(async () => { log.debug(`expectHomePage(${spaceId})`); await this.dismissWelcomeScreen(); - await remote.setFindTimeout(20000).findByCssSelector('[data-test-subj="kibanaChrome"] nav:not(.ng-hide) '); - const url = await remote.getCurrentUrl(); + await find.byCssSelector('[data-test-subj="kibanaChrome"] nav:not(.ng-hide) ', 20000); + const url = await browser.getCurrentUrl(); if (spaceId === 'default') { expect(url).to.contain(`/app/kibana#/home`); } else { diff --git a/x-pack/test/functional/page_objects/status_page.js b/x-pack/test/functional/page_objects/status_page.js index b56423b417d764..36915dff5dd09d 100644 --- a/x-pack/test/functional/page_objects/status_page.js +++ b/x-pack/test/functional/page_objects/status_page.js @@ -9,7 +9,8 @@ import expect from 'expect.js'; export function StatusPagePageProvider({ getService, getPageObjects }) { const retry = getService('retry'); const log = getService('log'); - const remote = getService('remote'); + const browser = getService('browser'); + const find = getService('find'); const PageObjects = getPageObjects(['common', 'home', 'security']); class StatusPage { @@ -21,15 +22,15 @@ export function StatusPagePageProvider({ getService, getPageObjects }) { return await retry.try(async () => { const url = PageObjects.common.getHostPort() + '/status'; log.info(`StatusPage:navigateToPage(): ${url}`); - await remote.get(url); + await browser.get(url); }); } async expectStatusPage() { return await retry.try(async () => { log.debug(`expectStatusPage()`); - await remote.setFindTimeout(20000).findByCssSelector('[data-test-subj="kibanaChrome"] nav:not(.ng-hide) '); - const url = await remote.getCurrentUrl(); + await find.byCssSelector('[data-test-subj="kibanaChrome"] nav:not(.ng-hide) ', 20000); + const url = await browser.getCurrentUrl(); expect(url).to.contain(`/status`); }); } diff --git a/x-pack/test/functional/page_objects/watcher_page.js b/x-pack/test/functional/page_objects/watcher_page.js index 3b285106ccae22..29b42b54e6b668 100644 --- a/x-pack/test/functional/page_objects/watcher_page.js +++ b/x-pack/test/functional/page_objects/watcher_page.js @@ -8,7 +8,7 @@ import { map as mapAsync } from 'bluebird'; export function WatcherPageProvider({ getPageObjects, getService }) { const PageObjects = getPageObjects(['common', 'header', 'settings']); - const remote = getService('remote'); + const find = getService('find'); const testSubjects = getService('testSubjects'); class WatcherPage { @@ -24,8 +24,8 @@ export function WatcherPageProvider({ getPageObjects, getService }) { async createWatch(watchName, name) { await testSubjects.click('createAdvancedWatchButton'); - await remote.findById('id').type(watchName); - await remote.findById('name').type(name); + await find.setValue('#id', watchName); + await find.setValue('#name', name); await testSubjects.click('btnSaveWatch'); await PageObjects.header.waitUntilLoadingHasFinished(); } @@ -47,7 +47,7 @@ export function WatcherPageProvider({ getPageObjects, getService }) { //get all the watches in the list async getWatches() { - const watches = await remote.findAllByCssSelector('.kuiTableRow'); + const watches = await find.allByCssSelector('.kuiTableRow'); return mapAsync(watches, async watch => { const checkBox = await watch.findByCssSelector('td:nth-child(1)'); const id = await watch.findByCssSelector('td:nth-child(2)'); diff --git a/x-pack/test/functional/services/ace_editor.js b/x-pack/test/functional/services/ace_editor.js index dd4c890a59cc03..55deee4a32dbbd 100644 --- a/x-pack/test/functional/services/ace_editor.js +++ b/x-pack/test/functional/services/ace_editor.js @@ -8,7 +8,7 @@ import { map as mapAsync } from 'bluebird'; export function AceEditorProvider({ getService }) { const testSubjects = getService('testSubjects'); - const remote = getService('remote'); + const find = getService('find'); const retry = getService('retry'); // see https://w3c.github.io/webdriver/webdriver-spec.html#keyboard-actions @@ -21,7 +21,7 @@ export function AceEditorProvider({ getService }) { await retry.try(async () => { const container = await testSubjects.find(testSubjectSelector); await container.click(); - const input = await remote.getActiveElement(); + const input = await find.activeElement(); const modifier = process.platform === 'darwin' ? CMD_KEY : CTRL_KEY; await input.type([modifier, 'a']); // select all