diff --git a/x-pack/solutions/observability/test/functional/apps/infra/hosts_view.ts b/x-pack/solutions/observability/test/functional/apps/infra/hosts_view.ts index 7eda713ec0256..aaad0d9e954e4 100644 --- a/x-pack/solutions/observability/test/functional/apps/infra/hosts_view.ts +++ b/x-pack/solutions/observability/test/functional/apps/infra/hosts_view.ts @@ -334,6 +334,10 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { describe('Tabs', () => { before(async () => { + await retry.waitFor( + 'date picker to be visible before setting range', + async () => await pageObjects.timePicker.timePickerExists() + ); await pageObjects.timePicker.setAbsoluteRange( START_SYNTHTRACE_DATE.format(DATE_PICKER_FORMAT), END_SYNTHTRACE_DATE.format(DATE_PICKER_FORMAT) @@ -345,13 +349,13 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); after(async () => { - await retry.tryForTime(5000, async () => { - await pageObjects.infraHome.clickCloseFlyoutButton(); - }); + await pageObjects.infraHome.closeFlyoutWithEscape(); }); describe('Overview Tab', () => { before(async () => { + await pageObjects.infraHome.closeFlyoutWithEscape(); + await pageObjects.infraHostsView.clickTableOpenFlyoutButton(); await pageObjects.assetDetails.clickOverviewTab(); }); @@ -417,6 +421,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { describe('Metadata Tab', () => { before(async () => { + await pageObjects.infraHome.closeFlyoutWithEscape(); + await pageObjects.infraHostsView.clickTableOpenFlyoutButton(); await pageObjects.assetDetails.clickMetadataTab(); }); @@ -446,6 +452,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { describe('Metrics Tab', () => { before(async () => { + await pageObjects.infraHome.closeFlyoutWithEscape(); + await pageObjects.infraHostsView.clickTableOpenFlyoutButton(); await pageObjects.assetDetails.clickMetricsTab(); }); @@ -456,6 +464,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { describe('Processes Tab', () => { before(async () => { + await pageObjects.infraHome.closeFlyoutWithEscape(); + await pageObjects.infraHostsView.clickTableOpenFlyoutButton(); await pageObjects.assetDetails.clickProcessesTab(); }); @@ -466,6 +476,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { describe('Logs Tab', () => { before(async () => { + await pageObjects.infraHome.closeFlyoutWithEscape(); + await pageObjects.infraHostsView.clickTableOpenFlyoutButton(); await pageObjects.assetDetails.clickLogsTab(); }); @@ -476,6 +488,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { describe('Dashboards Tab', () => { before(async () => { + await pageObjects.infraHome.closeFlyoutWithEscape(); + await pageObjects.infraHostsView.clickTableOpenFlyoutButton(); await pageObjects.assetDetails.clickDashboardsTab(); }); @@ -485,6 +499,11 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); describe('Flyout links', () => { + before(async () => { + await pageObjects.infraHome.closeFlyoutWithEscape(); + await pageObjects.infraHostsView.clickTableOpenFlyoutButton(); + }); + it('should navigate to Host Details page after click', async () => { await pageObjects.assetDetails.clickOpenAsPageLink(); const dateRange = await pageObjects.timePicker.getTimeConfigAsAbsoluteTimes(); @@ -618,6 +637,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { describe('Metrics Tab', () => { before(async () => { + await browser.scrollTop(); await pageObjects.infraHostsView.visitMetricsTab(); }); diff --git a/x-pack/solutions/observability/test/functional/page_objects/infra_home_page.ts b/x-pack/solutions/observability/test/functional/page_objects/infra_home_page.ts index 75c5efe5224be..30de82b4fbfdf 100644 --- a/x-pack/solutions/observability/test/functional/page_objects/infra_home_page.ts +++ b/x-pack/solutions/observability/test/functional/page_objects/infra_home_page.ts @@ -512,6 +512,27 @@ export function InfraHomePageProvider({ getService, getPageObjects }: FtrProvide return testSubjects.click('euiFlyoutCloseButton'); }, + /** + * Closes the host/asset details flyout using Escape (EuiFlyout closes on Escape). + * Retries until the flyout is closed or timeout, then waits for the overlay mask + * to disappear so the next click (e.g. open flyout button) is not intercepted. + */ + async closeFlyoutWithEscape() { + await retry.tryForTime(5000, async () => { + await browser.pressKeys(browser.keys.ESCAPE); + const flyoutClosed = !(await testSubjects.exists('euiFlyoutCloseButton', { + timeout: 1000, + })); + if (!flyoutClosed) { + throw new Error('Flyout still open'); + } + }); + await retry.waitFor('flyout overlay mask to disappear', async () => { + const overlays = await find.allByCssSelector('.euiOverlayMask', 1000); + return overlays.length === 0; + }); + }, + async clickCustomMetricDropdown() { await testSubjects.click('infraInventoryMetricDropdown'); }, diff --git a/x-pack/solutions/observability/test/functional/page_objects/infra_hosts_view.ts b/x-pack/solutions/observability/test/functional/page_objects/infra_hosts_view.ts index 469592cc10787..e70811fe1137b 100644 --- a/x-pack/solutions/observability/test/functional/page_objects/infra_hosts_view.ts +++ b/x-pack/solutions/observability/test/functional/page_objects/infra_hosts_view.ts @@ -11,10 +11,14 @@ import type { FtrProviderContext } from '../ftr_provider_context'; export function InfraHostsViewProvider({ getService }: FtrProviderContext) { const testSubjects = getService('testSubjects'); + const retry = getService('retry'); + const browser = getService('browser'); return { async clickTableOpenFlyoutButton() { - return testSubjects.click('hostsView-flyout-button'); + await retry.tryForTime(15000, async () => { + await testSubjects.click('hostsView-flyout-button'); + }); }, async clickHostCheckbox(id: string, os: string) { @@ -122,7 +126,8 @@ export function InfraHostsViewProvider({ getService }: FtrProviderContext) { async visitMetricsTab() { const metricsTab = await this.getMetricsTab(); - return metricsTab.click(); + await metricsTab.scrollIntoViewIfNecessary(); + await browser.execute('arguments[0].click();', metricsTab); }, async getAllMetricsCharts() { @@ -167,7 +172,8 @@ export function InfraHostsViewProvider({ getService }: FtrProviderContext) { async visitLogsTab() { const logsTab = await this.getLogsTab(); - await logsTab.click(); + await logsTab.scrollIntoViewIfNecessary(); + await browser.execute('arguments[0].click();', logsTab); }, async getLogEntries() { @@ -199,7 +205,8 @@ export function InfraHostsViewProvider({ getService }: FtrProviderContext) { async visitAlertTab() { const alertsTab = await this.getAlertsTab(); - await alertsTab.click(); + await alertsTab.scrollIntoViewIfNecessary(); + await browser.execute('arguments[0].click();', alertsTab); }, setAlertStatusFilter(alertStatus?: AlertStatus) {