diff --git a/packages/shared-ux/modal/tabbed/src/tabbed_modal.tsx b/packages/shared-ux/modal/tabbed/src/tabbed_modal.tsx index d20add86c5eb43..84326d4761a900 100644 --- a/packages/shared-ux/modal/tabbed/src/tabbed_modal.tsx +++ b/packages/shared-ux/modal/tabbed/src/tabbed_modal.tsx @@ -79,6 +79,7 @@ const TabbedModalInner: FC = ({ onClose, modalTitle, modalWid disabled={tab.disabled} prepend={tab.prepend} append={tab.append} + data-test-subj={tab.name} > {tab.name} diff --git a/test/functional/apps/dashboard/group3/dashboard_state.ts b/test/functional/apps/dashboard/group3/dashboard_state.ts index 650d2e6b79269c..2cca231a4627bf 100644 --- a/test/functional/apps/dashboard/group3/dashboard_state.ts +++ b/test/functional/apps/dashboard/group3/dashboard_state.ts @@ -181,7 +181,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }; } ); - + await PageObjects.share.closeShareModal(); // We need to add a timestamp to the URL because URL changes now only work with a hard refresh. await browser.get(newUrl.toString()); await PageObjects.header.waitUntilLoadingHasFinished(); diff --git a/test/functional/apps/dashboard/group5/share.ts b/test/functional/apps/dashboard/group5/share.ts index 9bf7706d19e5a7..644b676eff8c83 100644 --- a/test/functional/apps/dashboard/group5/share.ts +++ b/test/functional/apps/dashboard/group5/share.ts @@ -38,8 +38,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const filterBar = getService('filterBar'); const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); - const dashboardPanelActions = getService('dashboardPanelActions'); - const dashboardCustomizePanel = getService('dashboardCustomizePanel'); const PageObjects = getPageObjects(['dashboard', 'common', 'share', 'timePicker']); @@ -109,45 +107,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.common.unsetTime(); }); - describe('snapshot share', async () => { - describe('test local state', async () => { - it('should not have "panels" state when not in unsaved changes state', async () => { - await testSubjects.missingOrFail('dashboardUnsavedChangesBadge'); - expect(await getSharedUrl()).to.not.contain('panels'); - }); - - it('should have "panels" in app state when a panel has been modified', async () => { - await dashboardPanelActions.customizePanel(); - await dashboardCustomizePanel.setCustomPanelTitle('Test New Title'); - await dashboardCustomizePanel.clickSaveButton(); - await PageObjects.dashboard.waitForRenderComplete(); - await testSubjects.existOrFail('dashboardUnsavedChangesBadge'); - - const sharedUrl = await getSharedUrl(); - const { appState } = getStateFromUrl(sharedUrl); - expect(appState).to.contain('panels'); - }); - - it('should once again not have "panels" state when save is clicked', async () => { - await PageObjects.dashboard.clickQuickSave(); - await PageObjects.dashboard.waitForRenderComplete(); - await testSubjects.missingOrFail('dashboardUnsavedChangesBadge'); - expect(await getSharedUrl()).to.not.contain('panels'); + describe('saved object share', async () => { + afterEach(async () => { + retry.waitFor('close share modal', async () => { + await PageObjects.share.closeShareModal(); // close modal + return await testSubjects.exists('shareTopNavButton'); }); }); - - describe('test filter state', async () => { - await testFilterState(); - }); - - after(async () => { - await filterBar.removeAllFilters(); - await PageObjects.dashboard.clickQuickSave(); - await PageObjects.dashboard.waitForRenderComplete(); - }); - }); - - describe('saved object share', async () => { describe('test filter state', async () => { await testFilterState(); }); diff --git a/x-pack/test/functional/apps/canvas/reports.ts b/x-pack/test/functional/apps/canvas/reports.ts index cc805104b8ad2c..21a4085d9dc6d9 100644 --- a/x-pack/test/functional/apps/canvas/reports.ts +++ b/x-pack/test/functional/apps/canvas/reports.ts @@ -55,7 +55,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.canvas.goToListingPage(); await PageObjects.canvas.loadFirstWorkpad('The Very Cool Workpad for PDF Tests'); - this.log.debug(`openShareMenuItem title: PDF Reports`); + log.debug(`openShareMenuItem title: PDF Reports`); const isShareMenuOpen = await this.isShareMenuOpen(); if (!isShareMenuOpen) { await this.clickShareTopNavButton(); diff --git a/x-pack/test/functional/apps/dashboard/group1/feature_controls/dashboard_security.ts b/x-pack/test/functional/apps/dashboard/group1/feature_controls/dashboard_security.ts index ceacbc9731f406..4dddf0609a2695 100644 --- a/x-pack/test/functional/apps/dashboard/group1/feature_controls/dashboard_security.ts +++ b/x-pack/test/functional/apps/dashboard/group1/feature_controls/dashboard_security.ts @@ -322,13 +322,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await panelActions.expectMissingPanelAction('embeddablePanelAction-copyToDashboard'); }); - it(`Permalinks doesn't show create short-url button`, async () => { - await PageObjects.share.openShareMenuItem('Permalinks'); - await PageObjects.share.createShortUrlMissingOrFail(); - // close the menu - await PageObjects.share.clickShareTopNavButton(); - }); - it('allows loading a saved query via the saved query management component', async () => { await savedQueryManagementComponent.loadSavedQuery('OKJpgs'); const queryString = await queryBar.getQueryString(); diff --git a/x-pack/test/functional/apps/discover/feature_controls/discover_security.ts b/x-pack/test/functional/apps/discover/feature_controls/discover_security.ts index 0315a11fedc16c..b4d141cdf377d9 100644 --- a/x-pack/test/functional/apps/discover/feature_controls/discover_security.ts +++ b/x-pack/test/functional/apps/discover/feature_controls/discover_security.ts @@ -189,12 +189,6 @@ export default function (ctx: FtrProviderContext) { await PageObjects.unifiedFieldList.expectMissingFieldListItemVisualize('bytes'); }); - it(`Permalinks doesn't show create short-url button`, async () => { - await PageObjects.share.clickShareTopNavButton(); - await PageObjects.share.createShortUrlMissingOrFail(); - await PageObjects.share.clickShareTopNavButton(); - }); - savedQuerySecurityUtils.shouldDisallowSavingButAllowLoadingSavedQueries(); }); diff --git a/x-pack/test/functional/apps/lens/group6/lens_reporting.ts b/x-pack/test/functional/apps/lens/group6/lens_reporting.ts index 2ba0cb4772c491..168b6d9e5c2443 100644 --- a/x-pack/test/functional/apps/lens/group6/lens_reporting.ts +++ b/x-pack/test/functional/apps/lens/group6/lens_reporting.ts @@ -88,7 +88,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // open the share menu and check that reporting is disabled await PageObjects.lens.clickShareMenu(); - expect(await PageObjects.lens.isShareActionEnabled(`${type}Reports`)); + expect(await PageObjects.lens.isShareActionEnabled(`Export`)); }); it(`should be able to download report of the current visualization`, async () => { diff --git a/x-pack/test/functional/apps/maps/group3/reports/index.ts b/x-pack/test/functional/apps/maps/group3/reports/index.ts index ac813abb689314..636f86bdd565a0 100644 --- a/x-pack/test/functional/apps/maps/group3/reports/index.ts +++ b/x-pack/test/functional/apps/maps/group3/reports/index.ts @@ -12,6 +12,7 @@ const REPORTS_FOLDER = __dirname; export default function ({ getPageObjects, getService }: FtrProviderContext) { const PageObjects = getPageObjects(['reporting', 'common', 'dashboard']); + const testSubjects = getService('testSubjects'); const browser = getService('browser'); const config = getService('config'); const log = getService('log'); @@ -64,6 +65,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('Ecommerce Map'); await PageObjects.reporting.openExportTab(); + await testSubjects.click('pngReportOption'); await PageObjects.reporting.clickGenerateReportButton(); const percentDiff = await measurePngDifference('geo_map_report'); @@ -76,6 +78,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('map embeddable example'); await PageObjects.reporting.openExportTab(); + await testSubjects.click('pngReportOption'); await PageObjects.reporting.clickGenerateReportButton(); const percentDiff = await measurePngDifference('example_map_report'); diff --git a/x-pack/test/functional/apps/security/secure_roles_perm.ts b/x-pack/test/functional/apps/security/secure_roles_perm.ts index 9788712a6207c2..92cfa7f232137c 100644 --- a/x-pack/test/functional/apps/security/secure_roles_perm.ts +++ b/x-pack/test/functional/apps/security/secure_roles_perm.ts @@ -85,7 +85,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.discover.loadSavedSearch('A Saved Search'); log.debug('click Top Nav Share button'); await PageObjects.share.clickShareTopNavButton(); - await testSubjects.existOrFail('sharePanel-CSVReports'); + await testSubjects.existOrFail('Exports'); }); after(async function () { diff --git a/x-pack/test/functional/apps/visualize/reporting.ts b/x-pack/test/functional/apps/visualize/reporting.ts index 740decfbf7867d..ae1ba6b9f4525a 100644 --- a/x-pack/test/functional/apps/visualize/reporting.ts +++ b/x-pack/test/functional/apps/visualize/reporting.ts @@ -19,6 +19,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const config = getService('config'); const kibanaServer = getService('kibanaServer'); const png = getService('png'); + const testSubjects = getService('testSubjects'); + const retry = getService('retry'); const PageObjects = getPageObjects([ 'reporting', @@ -70,6 +72,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.unset('timepicker:timeDefaults'); }); + afterEach(async () => { + retry.waitFor('close share modal', async () => { + await PageObjects.share.closeShareModal(); // close modal + return await testSubjects.exists('shareTopNavButton'); + }); + }); + it('is available if new', async () => { await PageObjects.visualize.gotoVisualizationLandingPage(); await PageObjects.visualize.clickNewVisualization(); @@ -117,7 +126,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); afterEach(async () => { - await PageObjects.share.closeShareModal(); + retry.waitFor('close share modal', async () => { + await PageObjects.share.closeShareModal(); // close modal + return await testSubjects.exists('shareTopNavButton'); + }); }); it('TSVB Gauge: PNG file matches the baseline image', async function () { log.debug('load saved visualization'); diff --git a/x-pack/test/functional/page_objects/lens_page.ts b/x-pack/test/functional/page_objects/lens_page.ts index 8fd1b6e6045484..0edd11f9f464d0 100644 --- a/x-pack/test/functional/page_objects/lens_page.ts +++ b/x-pack/test/functional/page_objects/lens_page.ts @@ -1819,20 +1819,16 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont return await testSubjects.isEnabled('lnsApp_shareButton'); }, - async isShareActionEnabled(action: 'csvDownload' | 'permalinks' | 'PNGReports' | 'PDFReports') { + async isShareActionEnabled(action: 'Export' | 'Links') { switch (action) { - case 'csvDownload': - return await testSubjects.isEnabled('sharePanel-CSVDownload'); - case 'permalinks': - return await testSubjects.isEnabled('sharePanel-Permalinks'); + case 'Links': + return await testSubjects.isEnabled('Links'); default: - return await testSubjects.isEnabled(`sharePanel-${action}`); + return await testSubjects.isEnabled(action); } }, - async ensureShareMenuIsOpen( - action: 'csvDownload' | 'permalinks' | 'PNGReports' | 'PDFReports' - ) { + async ensureShareMenuIsOpen(action: 'Export' | 'Links') { await this.clickShareMenu(); if (!(await testSubjects.exists('shareContextMenu'))) { @@ -1844,8 +1840,8 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont }, async openPermalinkShare() { - await this.ensureShareMenuIsOpen('permalinks'); - await testSubjects.click('sharePanel-Permalinks'); + await this.ensureShareMenuIsOpen('Links'); + await testSubjects.click('Links'); }, async getAvailableUrlSharingOptions() { @@ -1875,8 +1871,8 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont }, async openCSVDownloadShare() { - await this.ensureShareMenuIsOpen('csvDownload'); - await testSubjects.click('sharePanel-CSVDownload'); + await this.ensureShareMenuIsOpen('Export'); + await testSubjects.click('Export'); }, async setCSVDownloadDebugFlag(value: boolean = true) { @@ -1886,8 +1882,8 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont }, async openReportingShare(type: 'PNG' | 'PDF') { - await this.ensureShareMenuIsOpen(`${type}Reports`); - await testSubjects.click(`sharePanel-${type}Reports`); + await this.ensureShareMenuIsOpen(`Export`); + await testSubjects.click(`Export`); }, async getCSVContent() { diff --git a/x-pack/test/reporting_functional/services/scenarios.ts b/x-pack/test/reporting_functional/services/scenarios.ts index b1d9bb36549684..e87b0424b4d7ac 100644 --- a/x-pack/test/reporting_functional/services/scenarios.ts +++ b/x-pack/test/reporting_functional/services/scenarios.ts @@ -136,6 +136,7 @@ export function createScenarios( }; const tryGeneratePngSuccess = async () => { await PageObjects.reporting.openExportTab(); + await testSubjects.click('PngReportOption'); expect(await PageObjects.reporting.canReportBeCreated()).to.be(true); }; const tryReportsNotAvailable = async () => { diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/reporting.ts b/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/reporting.ts index 844dad8a825ceb..96051d4776bc5d 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/reporting.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/reporting.ts @@ -62,6 +62,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }; describe('Discover CSV Export', () => { + afterEach(async () => { + retry.waitFor('close share modal', async () => { + await PageObjects.share.closeShareModal(); // close modal + return await testSubjects.exists('shareTopNavButton'); + }); + }); describe('Check Available', () => { before(async () => { await PageObjects.svlCommonPage.loginAsAdmin(); @@ -112,6 +118,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.discover.selectIndexPattern('ecommerce'); }); + afterEach(async () => { + retry.waitFor('close share modal', async () => { + await PageObjects.share.closeShareModal(); // close modal + return await testSubjects.exists('shareTopNavButton'); + }); + }); + it('generates a report with single timefilter', async () => { await PageObjects.discover.clickNewSearchButton(); await PageObjects.timePicker.setCommonlyUsedTime('Last_24 hours'); @@ -291,6 +304,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); + afterEach(async () => { + retry.waitFor('close share modal', async () => { + await PageObjects.share.closeShareModal(); // close modal + return await testSubjects.exists('shareTopNavButton'); + }); + }); + it(`handles field formatting for a field that doesn't exist initially`, async () => { const res = await getReport(); expect(res.status).to.equal(200);