diff --git a/packages/kbn-test-subj-selector/__tests__/index.js b/packages/kbn-test-subj-selector/__tests__/index.js index c5a3826d1947..e18405b99ae5 100755 --- a/packages/kbn-test-subj-selector/__tests__/index.js +++ b/packages/kbn-test-subj-selector/__tests__/index.js @@ -22,8 +22,15 @@ const expect = require('@kbn/expect'); describe('testSubjSelector()', function() { it('converts subjectSelectors to cssSelectors', function() { - expect(testSubjSelector('foo bar')).to.eql('[data-test-subj~="foo"] [data-test-subj~="bar"]'); - expect(testSubjSelector('foo&bar')).to.eql('[data-test-subj~="foo"][data-test-subj~="bar"]'); - expect(testSubjSelector('foo & bar')).to.eql('[data-test-subj~="foo"][data-test-subj~="bar"]'); + expect(testSubjSelector('foo bar')).to.eql('[data-test-subj="foo bar"]'); + expect(testSubjSelector('foo > bar')).to.eql('[data-test-subj="foo"] [data-test-subj="bar"]'); + expect(testSubjSelector('foo > bar baz')).to.eql( + '[data-test-subj="foo"] [data-test-subj="bar baz"]' + ); + expect(testSubjSelector('foo> ~bar')).to.eql('[data-test-subj="foo"] [data-test-subj~="bar"]'); + expect(testSubjSelector('~ foo')).to.eql('[data-test-subj~="foo"]'); + expect(testSubjSelector('~foo & ~ bar')).to.eql( + '[data-test-subj~="foo"][data-test-subj~="bar"]' + ); }); }); diff --git a/packages/kbn-test-subj-selector/index.js b/packages/kbn-test-subj-selector/index.js index 317f8eca4633..3984c15c00fe 100755 --- a/packages/kbn-test-subj-selector/index.js +++ b/packages/kbn-test-subj-selector/index.js @@ -19,12 +19,20 @@ function selectorToTerms(selector) { return selector - .replace(/\s*&\s*/g, '&') // remove all whitespace around joins - .split(/\s+/); + .replace(/\s*~\s*/g, '~') // css locator with '~' operator cannot contain spaces + .replace(/\s*>\s*/g, '>') // remove all whitespace around joins > + .replace(/\s*&\s*/g, '&') // remove all whitespace around joins & + .split(/>+/); } function termToCssSelector(term) { - return term ? '[data-test-subj~="' + term + '"]' : ''; + if (term) { + return term.startsWith('~') + ? '[data-test-subj~="' + term.substring(1).replace(/\s/g, '') + '"]' + : '[data-test-subj="' + term + '"]'; + } else { + return ''; + } } module.exports = function testSubjSelector(selector) { diff --git a/test/functional/page_objects/settings_page.js b/test/functional/page_objects/settings_page.js index ec6381cfbc1a..5c40750f0520 100644 --- a/test/functional/page_objects/settings_page.js +++ b/test/functional/page_objects/settings_page.js @@ -56,7 +56,7 @@ export function SettingsPageProvider({ getService, getPageObjects }) { // check for the index pattern info flyout that covers the // create index pattern button on smaller screens if (await testSubjects.exists('CreateIndexPatternPrompt')) { - await testSubjects.click('CreateIndexPatternPrompt euiFlyoutCloseButton'); + await testSubjects.click('CreateIndexPatternPrompt > euiFlyoutCloseButton'); } } @@ -208,21 +208,21 @@ export function SettingsPageProvider({ getService, getPageObjects }) { } async getFieldNames() { - const fieldNameCells = await testSubjects.findAll('editIndexPattern indexedFieldName'); + const fieldNameCells = await testSubjects.findAll('editIndexPattern > indexedFieldName'); return await mapAsync(fieldNameCells, async cell => { return (await cell.getVisibleText()).trim(); }); } async getFieldTypes() { - const fieldNameCells = await testSubjects.findAll('editIndexPattern indexedFieldType'); + const fieldNameCells = await testSubjects.findAll('editIndexPattern > indexedFieldType'); return await mapAsync(fieldNameCells, async cell => { return (await cell.getVisibleText()).trim(); }); } async getScriptedFieldLangs() { - const fieldNameCells = await testSubjects.findAll('editIndexPattern scriptedFieldLang'); + const fieldNameCells = await testSubjects.findAll('editIndexPattern > scriptedFieldLang'); return await mapAsync(fieldNameCells, async cell => { return (await cell.getVisibleText()).trim(); }); diff --git a/test/functional/page_objects/visualize_page.js b/test/functional/page_objects/visualize_page.js index d02638d37aa4..7886fcae2e5f 100644 --- a/test/functional/page_objects/visualize_page.js +++ b/test/functional/page_objects/visualize_page.js @@ -595,12 +595,12 @@ export function VisualizePageProvider({ getService, getPageObjects, updateBaseli } async setSize(newValue, aggId) { - const dataTestSubj = aggId ? `visEditorAggAccordion${aggId} sizeParamEditor` : 'sizeParamEditor'; + const dataTestSubj = aggId ? `visEditorAggAccordion${aggId} > sizeParamEditor` : 'sizeParamEditor'; await testSubjects.setValue(dataTestSubj, String(newValue)); } async toggleDisabledAgg(agg) { - await testSubjects.click(`visEditorAggAccordion${agg} toggleDisableAggregationBtn`); + await testSubjects.click(`visEditorAggAccordion${agg} > ~toggleDisableAggregationBtn`); await PageObjects.header.waitUntilLoadingHasFinished(); } @@ -610,11 +610,11 @@ export function VisualizePageProvider({ getService, getPageObjects, updateBaseli } async toggleOtherBucket(agg = 2) { - return await testSubjects.click(`visEditorAggAccordion${agg} otherBucketSwitch`); + return await testSubjects.click(`visEditorAggAccordion${agg} > otherBucketSwitch`); } async toggleMissingBucket(agg = 2) { - return await testSubjects.click(`visEditorAggAccordion${agg} missingBucketSwitch`); + return await testSubjects.click(`visEditorAggAccordion${agg} > missingBucketSwitch`); } async isApplyEnabled() { @@ -1273,7 +1273,7 @@ export function VisualizePageProvider({ getService, getPageObjects, updateBaseli } async removeDimension(agg) { - await testSubjects.click(`visEditorAggAccordion${agg} removeDimensionBtn`); + await testSubjects.click(`visEditorAggAccordion${agg} > removeDimensionBtn`); } async setFilterParams({ aggNth = 0, indexPattern, field }) { diff --git a/test/functional/services/combo_box.ts b/test/functional/services/combo_box.ts index c845c4f1ddba..212cf5ac3185 100644 --- a/test/functional/services/combo_box.ts +++ b/test/functional/services/combo_box.ts @@ -166,11 +166,11 @@ export function ComboBoxProvider({ getService, getPageObjects }: FtrProviderCont const menu = await retry.try(async () => { await testSubjects.click(comboBoxSelector); await this.waitForOptionsListLoading(comboBox); - const isOptionsListOpen = await testSubjects.exists('comboBoxOptionsList'); + const isOptionsListOpen = await testSubjects.exists('~comboBoxOptionsList'); if (!isOptionsListOpen) { throw new Error('Combo box options list did not open on click'); } - return await testSubjects.find('comboBoxOptionsList'); + return await testSubjects.find('~comboBoxOptionsList'); }); const optionsText = await menu.getVisibleText(); await this.closeOptionsList(comboBox); @@ -242,7 +242,7 @@ export function ComboBoxProvider({ getService, getPageObjects }: FtrProviderCont * @param comboBoxElement element that wraps up EuiComboBox */ public async closeOptionsList(comboBoxElement: WebElementWrapper): Promise { - const isOptionsListOpen = await testSubjects.exists('comboBoxOptionsList'); + const isOptionsListOpen = await testSubjects.exists('~comboBoxOptionsList'); if (isOptionsListOpen) { const input = await comboBoxElement.findByTagName('input'); await input.pressKeys(browser.keys.ESCAPE); @@ -255,7 +255,7 @@ export function ComboBoxProvider({ getService, getPageObjects }: FtrProviderCont * @param comboBoxElement element that wraps up EuiComboBox */ public async openOptionsList(comboBoxElement: WebElementWrapper): Promise { - const isOptionsListOpen = await testSubjects.exists('comboBoxOptionsList'); + const isOptionsListOpen = await testSubjects.exists('~comboBoxOptionsList'); if (!isOptionsListOpen) { const toggleBtn = await comboBoxElement.findByCssSelector( '[data-test-subj="comboBoxToggleListButton"]' diff --git a/test/functional/services/doc_table.ts b/test/functional/services/doc_table.ts index e09500317cd3..6957b0fa9992 100644 --- a/test/functional/services/doc_table.ts +++ b/test/functional/services/doc_table.ts @@ -37,7 +37,7 @@ export function DocTableProvider({ getService, getPageObjects }: FtrProviderCont public async getRowsText() { const table = await this.getTable(); const $ = await table.parseDomContent(); - return $.findTestSubjects('docTableRow') + return $.findTestSubjects('~docTableRow') .toArray() .map((row: any) => $(row) @@ -96,7 +96,7 @@ export function DocTableProvider({ getService, getPageObjects }: FtrProviderCont public async getFields(options: { isAnchorRow: boolean } = { isAnchorRow: false }) { const table = await this.getTable(); const $ = await table.parseDomContent(); - const rowLocator = options.isAnchorRow ? 'docTableAnchorRow' : 'docTableRow'; + const rowLocator = options.isAnchorRow ? '~docTableAnchorRow' : '~docTableRow'; const rows = $.findTestSubjects(rowLocator).toArray(); const fields = rows.map((row: any) => $(row) @@ -110,7 +110,7 @@ export function DocTableProvider({ getService, getPageObjects }: FtrProviderCont public async getHeaderFields(): Promise { const table = await this.getTable(); const $ = await table.parseDomContent(); - return $.findTestSubjects('docTableHeaderField') + return $.findTestSubjects('~docTableHeaderField') .toArray() .map((field: any) => $(field) diff --git a/test/functional/services/filter_bar.ts b/test/functional/services/filter_bar.ts index 987fa1b2df1d..adf0f2266ba1 100644 --- a/test/functional/services/filter_bar.ts +++ b/test/functional/services/filter_bar.ts @@ -34,8 +34,8 @@ export function FilterBarProvider({ getService, getPageObjects }: FtrProviderCon */ public async hasFilter(key: string, value: string, enabled: boolean = true): Promise { const filterActivationState = enabled ? 'enabled' : 'disabled'; - return await testSubjects.exists( - `filter & filter-key-${key} & filter-value-${value} & filter-${filterActivationState}`, + return testSubjects.exists( + `filter filter-${filterActivationState} filter-key-${key} filter-value-${value}`, { allowHidden: true, } @@ -48,7 +48,7 @@ export function FilterBarProvider({ getService, getPageObjects }: FtrProviderCon * @param key field name */ public async removeFilter(key: string): Promise { - await testSubjects.click(`filter & filter-key-${key}`); + await testSubjects.click(`~filter & ~filter-key-${key}`); await testSubjects.click(`deleteFilter`); await PageObjects.header.awaitGlobalLoadingIndicatorHidden(); } @@ -69,19 +69,19 @@ export function FilterBarProvider({ getService, getPageObjects }: FtrProviderCon * @param key field name */ public async toggleFilterEnabled(key: string): Promise { - await testSubjects.click(`filter & filter-key-${key}`); + await testSubjects.click(`~filter & ~filter-key-${key}`); await testSubjects.click(`disableFilter`); await PageObjects.header.awaitGlobalLoadingIndicatorHidden(); } public async toggleFilterPinned(key: string): Promise { - await testSubjects.click(`filter & filter-key-${key}`); + await testSubjects.click(`~filter & ~filter-key-${key}`); await testSubjects.click(`pinFilter`); await PageObjects.header.awaitGlobalLoadingIndicatorHidden(); } public async getFilterCount(): Promise { - const filters = await testSubjects.findAll('filter'); + const filters = await testSubjects.findAll('~filter'); return filters.length; } @@ -138,7 +138,7 @@ export function FilterBarProvider({ getService, getPageObjects }: FtrProviderCon * @param value field value */ public async clickEditFilter(key: string, value: string): Promise { - await testSubjects.click(`filter & filter-key-${key} & filter-value-${value}`); + await testSubjects.click(`~filter & ~filter-key-${key} & ~filter-value-${value}`); await testSubjects.click(`editFilter`); await PageObjects.header.awaitGlobalLoadingIndicatorHidden(); } @@ -147,7 +147,7 @@ export function FilterBarProvider({ getService, getPageObjects }: FtrProviderCon * Returns available phrases in the filter */ public async getFilterEditorSelectedPhrases(): Promise { - return await comboBox.getComboBoxSelectedOptions('filterParamsComboBox'); + return await comboBox.getComboBoxSelectedOptions('~filterParamsComboBox'); } /** diff --git a/test/functional/services/global_nav.ts b/test/functional/services/global_nav.ts index 9622d2980093..164ea999fa27 100644 --- a/test/functional/services/global_nav.ts +++ b/test/functional/services/global_nav.ts @@ -25,11 +25,11 @@ export function GlobalNavProvider({ getService }: FtrProviderContext) { class GlobalNav { public async moveMouseToLogo(): Promise { - await testSubjects.moveMouseTo('headerGlobalNav logo'); + await testSubjects.moveMouseTo('headerGlobalNav > logo'); } public async clickLogo(): Promise { - return await testSubjects.click('headerGlobalNav logo'); + return await testSubjects.click('headerGlobalNav > logo'); } public async exists(): Promise { @@ -37,11 +37,15 @@ export function GlobalNavProvider({ getService }: FtrProviderContext) { } public async getFirstBreadcrumb(): Promise { - return await testSubjects.getVisibleText('headerGlobalNav breadcrumbs first&breadcrumb'); + return await testSubjects.getVisibleText( + 'headerGlobalNav > breadcrumbs > ~breadcrumb & ~first' + ); } public async getLastBreadcrumb(): Promise { - return await testSubjects.getVisibleText('headerGlobalNav breadcrumbs last&breadcrumb'); + return await testSubjects.getVisibleText( + 'headerGlobalNav > breadcrumbs > ~breadcrumb & ~last' + ); } public async badgeExistsOrFail(expectedLabel: string): Promise { diff --git a/test/functional/services/saved_query_management_component.js b/test/functional/services/saved_query_management_component.js index 346b470f0e5d..d898abaf19e9 100644 --- a/test/functional/services/saved_query_management_component.js +++ b/test/functional/services/saved_query_management_component.js @@ -66,10 +66,10 @@ export function SavedQueryManagementComponentProvider({ getService }) { async loadSavedQuery(title) { await this.openSavedQueryManagementComponent(); - await testSubjects.click(`load-saved-query-${title}-button`); + await testSubjects.click(`~load-saved-query-${title}-button`); await retry.try(async () => { await this.openSavedQueryManagementComponent(); - const selectedSavedQueryText = await testSubjects.getVisibleText('saved-query-list-item-selected'); + const selectedSavedQueryText = await testSubjects.getVisibleText('~saved-query-list-item-selected'); expect(selectedSavedQueryText).to.eql(title); }); await this.closeSavedQueryManagementComponent(); @@ -77,7 +77,7 @@ export function SavedQueryManagementComponentProvider({ getService }) { async deleteSavedQuery(title) { await this.openSavedQueryManagementComponent(); - await testSubjects.click(`delete-saved-query-${title}-button`); + await testSubjects.click(`~delete-saved-query-${title}-button`); await testSubjects.click('confirmModalConfirmButton'); } @@ -110,13 +110,13 @@ export function SavedQueryManagementComponentProvider({ getService }) { async savedQueryExistOrFail(title) { await this.openSavedQueryManagementComponent(); - await testSubjects.existOrFail(`load-saved-query-${title}-button`); + await testSubjects.existOrFail(`~load-saved-query-${title}-button`); } async savedQueryMissingOrFail(title) { await retry.try(async () => { await this.openSavedQueryManagementComponent(); - await testSubjects.missingOrFail(`load-saved-query-${title}-button`); + await testSubjects.missingOrFail(`~load-saved-query-${title}-button`); }); await this.closeSavedQueryManagementComponent(); } diff --git a/x-pack/legacy/plugins/infra/public/components/logging/log_entry_flyout/log_entry_actions_menu.test.tsx b/x-pack/legacy/plugins/infra/public/components/logging/log_entry_flyout/log_entry_actions_menu.test.tsx index b704032a1f67..bb051878f4cc 100644 --- a/x-pack/legacy/plugins/infra/public/components/logging/log_entry_flyout/log_entry_actions_menu.test.tsx +++ b/x-pack/legacy/plugins/infra/public/components/logging/log_entry_flyout/log_entry_actions_menu.test.tsx @@ -37,7 +37,7 @@ describe('LogEntryActionsMenu component', () => { elementWrapper.update(); expect( - elementWrapper.find(`a${testSubject('uptimeLogEntryActionsMenuItem')}`).prop('href') + elementWrapper.find(`a${testSubject('~uptimeLogEntryActionsMenuItem')}`).prop('href') ).toMatchInlineSnapshot(`"/app/uptime#/?search=(host.ip:HOST_IP)"`); }); @@ -65,7 +65,7 @@ describe('LogEntryActionsMenu component', () => { elementWrapper.update(); expect( - elementWrapper.find(`a${testSubject('uptimeLogEntryActionsMenuItem')}`).prop('href') + elementWrapper.find(`a${testSubject('~uptimeLogEntryActionsMenuItem')}`).prop('href') ).toMatchInlineSnapshot(`"/app/uptime#/?search=(container.id:CONTAINER_ID)"`); }); @@ -93,7 +93,7 @@ describe('LogEntryActionsMenu component', () => { elementWrapper.update(); expect( - elementWrapper.find(`a${testSubject('uptimeLogEntryActionsMenuItem')}`).prop('href') + elementWrapper.find(`a${testSubject('~uptimeLogEntryActionsMenuItem')}`).prop('href') ).toMatchInlineSnapshot(`"/app/uptime#/?search=(kubernetes.pod.uid:POD_UID)"`); }); @@ -125,7 +125,7 @@ describe('LogEntryActionsMenu component', () => { elementWrapper.update(); expect( - elementWrapper.find(`a${testSubject('uptimeLogEntryActionsMenuItem')}`).prop('href') + elementWrapper.find(`a${testSubject('~uptimeLogEntryActionsMenuItem')}`).prop('href') ).toMatchInlineSnapshot( `"/app/uptime#/?search=(container.id:CONTAINER_ID OR host.ip:HOST_IP OR kubernetes.pod.uid:POD_UID)"` ); @@ -156,7 +156,7 @@ describe('LogEntryActionsMenu component', () => { expect( elementWrapper - .find(`button${testSubject('uptimeLogEntryActionsMenuItem')}`) + .find(`button${testSubject('~uptimeLogEntryActionsMenuItem')}`) .prop('disabled') ).toEqual(true); }); @@ -187,7 +187,7 @@ describe('LogEntryActionsMenu component', () => { elementWrapper.update(); expect( - elementWrapper.find(`a${testSubject('apmLogEntryActionsMenuItem')}`).prop('href') + elementWrapper.find(`a${testSubject('~apmLogEntryActionsMenuItem')}`).prop('href') ).toMatchInlineSnapshot( `"/app/apm#/traces?kuery=${encodeURIComponent( 'trace.id:1234567' @@ -223,7 +223,7 @@ describe('LogEntryActionsMenu component', () => { elementWrapper.update(); expect( - elementWrapper.find(`a${testSubject('apmLogEntryActionsMenuItem')}`).prop('href') + elementWrapper.find(`a${testSubject('~apmLogEntryActionsMenuItem')}`).prop('href') ).toMatchInlineSnapshot( `"/app/apm#/traces?kuery=${encodeURIComponent( 'trace.id:1234567' @@ -255,7 +255,7 @@ describe('LogEntryActionsMenu component', () => { elementWrapper.update(); expect( - elementWrapper.find(`button${testSubject('apmLogEntryActionsMenuItem')}`).prop('disabled') + elementWrapper.find(`button${testSubject('~apmLogEntryActionsMenuItem')}`).prop('disabled') ).toEqual(true); }); }); diff --git a/x-pack/test/functional/apps/canvas/smoke_test.js b/x-pack/test/functional/apps/canvas/smoke_test.js index 2a3dfbf669e4..152d681d6d5e 100644 --- a/x-pack/test/functional/apps/canvas/smoke_test.js +++ b/x-pack/test/functional/apps/canvas/smoke_test.js @@ -16,7 +16,7 @@ export default function canvasSmokeTest({ getService, getPageObjects }) { describe('smoke test', function () { this.tags('smoke'); - const workpadListSelector = 'canvasWorkpadLoaderTable canvasWorkpadLoaderWorkpad'; + const workpadListSelector = 'canvasWorkpadLoaderTable > canvasWorkpadLoaderWorkpad'; const testWorkpadId = 'workpad-1705f884-6224-47de-ba49-ca224fe6ec31'; before(async () => { @@ -58,7 +58,7 @@ export default function canvasSmokeTest({ getService, getPageObjects }) { await retry.try(async () => { // check for elements on the page const elements = await testSubjects.findAll( - 'canvasWorkpadPage canvasWorkpadPageElementContent' + 'canvasWorkpadPage > canvasWorkpadPageElementContent' ); expect(elements).to.have.length(4); diff --git a/x-pack/test/functional/apps/code/code_intelligence.ts b/x-pack/test/functional/apps/code/code_intelligence.ts index 1c6183faab97..48a95b96ccea 100644 --- a/x-pack/test/functional/apps/code/code_intelligence.ts +++ b/x-pack/test/functional/apps/code/code_intelligence.ts @@ -27,7 +27,7 @@ export default function codeIntelligenceFunctionalTests({ describe('Code Intelligence', () => { describe('Code intelligence in source view page', () => { - const repositoryListSelector = 'codeRepositoryList codeRepositoryItem'; + const repositoryListSelector = 'codeRepositoryList > codeRepositoryItem'; const testGoToDefinition = async () => { await retry.try(async () => { expect(await exists('codeSourceViewer')).to.be(true); diff --git a/x-pack/test/functional/apps/code/explore_repository.ts b/x-pack/test/functional/apps/code/explore_repository.ts index 6e4e92c9e3db..8eb40c484526 100644 --- a/x-pack/test/functional/apps/code/explore_repository.ts +++ b/x-pack/test/functional/apps/code/explore_repository.ts @@ -30,7 +30,7 @@ export default function exploreRepositoryFunctionalTests({ describe.skip('Explore Repository', function() { this.tags('smoke'); describe('Explore a repository', () => { - const repositoryListSelector = 'codeRepositoryList codeRepositoryItem'; + const repositoryListSelector = 'codeRepositoryList > codeRepositoryItem'; before(async () => { await repoLoad( diff --git a/x-pack/test/functional/apps/code/file_tree.ts b/x-pack/test/functional/apps/code/file_tree.ts index ab1205ab8d65..0a8d27228895 100644 --- a/x-pack/test/functional/apps/code/file_tree.ts +++ b/x-pack/test/functional/apps/code/file_tree.ts @@ -24,7 +24,7 @@ export default function exploreRepositoryFunctionalTests({ // FLAKY: https://github.com/elastic/kibana/issues/45079 describe.skip('File Tree', function() { this.tags('smoke'); - const repositoryListSelector = 'codeRepositoryList codeRepositoryItem'; + const repositoryListSelector = 'codeRepositoryList > codeRepositoryItem'; before(async () => { await repoLoad( diff --git a/x-pack/test/functional/apps/code/history.ts b/x-pack/test/functional/apps/code/history.ts index 4421b2bf1c4b..33d75c3173ae 100644 --- a/x-pack/test/functional/apps/code/history.ts +++ b/x-pack/test/functional/apps/code/history.ts @@ -29,7 +29,7 @@ export default function manageRepositoriesFunctionalTests({ describe('History', function() { this.tags('smoke'); - const repositoryListSelector = 'codeRepositoryList codeRepositoryItem'; + const repositoryListSelector = 'codeRepositoryList > codeRepositoryItem'; describe('browser history can go back while exploring code app', () => { let driver: any; diff --git a/x-pack/test/functional/apps/code/manage_repositories.ts b/x-pack/test/functional/apps/code/manage_repositories.ts index 771d0fab057f..5f9844f4a270 100644 --- a/x-pack/test/functional/apps/code/manage_repositories.ts +++ b/x-pack/test/functional/apps/code/manage_repositories.ts @@ -19,7 +19,7 @@ export default function manageRepositoriesFunctionalTests({ describe('Manage Repositories', function() { this.tags('smoke'); - const repositoryListSelector = 'codeRepositoryList codeRepositoryItem'; + const repositoryListSelector = 'codeRepositoryList > codeRepositoryItem'; describe('Manage Repositories', () => { before(async () => { diff --git a/x-pack/test/functional/apps/code/search.ts b/x-pack/test/functional/apps/code/search.ts index e5e9390f0b76..1fc73e07f290 100644 --- a/x-pack/test/functional/apps/code/search.ts +++ b/x-pack/test/functional/apps/code/search.ts @@ -16,10 +16,11 @@ export default function searchFunctonalTests({ getService, getPageObjects }: Ftr describe('Search', function() { this.tags('smoke'); - const symbolTypeaheadListSelector = 'codeTypeaheadList-symbol codeTypeaheadItem'; - const fileTypeaheadListSelector = 'codeTypeaheadList-file codeTypeaheadItem'; - const searchResultListSelector = 'codeSearchResultList codeSearchResultFileItem'; - const languageFilterListSelector = 'codeSearchLanguageFilterList codeSearchLanguageFilterItem'; + const symbolTypeaheadListSelector = 'codeTypeaheadList-symbol > codeTypeaheadItem'; + const fileTypeaheadListSelector = 'codeTypeaheadList-file > codeTypeaheadItem'; + const searchResultListSelector = 'codeSearchResultList > codeSearchResultFileItem'; + const languageFilterListSelector = + 'codeSearchLanguageFilterList > codeSearchLanguageFilterItem'; describe('Code Search', () => { before(async () => { diff --git a/x-pack/test/functional/apps/code/with_security.ts b/x-pack/test/functional/apps/code/with_security.ts index 2752e82baf2d..587edb8f9556 100644 --- a/x-pack/test/functional/apps/code/with_security.ts +++ b/x-pack/test/functional/apps/code/with_security.ts @@ -17,7 +17,7 @@ export default function testWithSecurity({ getService, getPageObjects }: FtrProv const dummyPassword = '123321'; const codeAdmin = 'codeAdmin'; const codeUser = 'codeUser'; - const repositoryListSelector = 'codeRepositoryList codeRepositoryItem'; + const repositoryListSelector = 'codeRepositoryList > codeRepositoryItem'; const manageButtonSelectors = ['indexRepositoryButton', 'deleteRepositoryButton']; const log = getService('log'); const security = getService('security'); diff --git a/x-pack/test/functional/apps/graph/feature_controls/graph_security.ts b/x-pack/test/functional/apps/graph/feature_controls/graph_security.ts index 808a21388bcd..7a5844824bf5 100644 --- a/x-pack/test/functional/apps/graph/feature_controls/graph_security.ts +++ b/x-pack/test/functional/apps/graph/feature_controls/graph_security.ts @@ -84,7 +84,7 @@ export default function({ getPageObjects, getService }: FtrProviderContext) { it('allows creating a new workspace', async () => { await PageObjects.common.navigateToApp('graph'); await testSubjects.click('graphCreateWorkspacePromptButton'); - const breadcrumb = await testSubjects.find('graphCurrentWorkspaceBreadcrumb'); + const breadcrumb = await testSubjects.find('~graphCurrentWorkspaceBreadcrumb'); expect(await breadcrumb.getVisibleText()).to.equal('Unsaved workspace'); }); diff --git a/x-pack/test/functional/apps/graph/feature_controls/graph_spaces.ts b/x-pack/test/functional/apps/graph/feature_controls/graph_spaces.ts index 25c094dc5ec9..c5032ff015f2 100644 --- a/x-pack/test/functional/apps/graph/feature_controls/graph_spaces.ts +++ b/x-pack/test/functional/apps/graph/feature_controls/graph_spaces.ts @@ -54,7 +54,7 @@ export default function({ getPageObjects, getService }: FtrProviderContext) { basePath: '/s/custom_space', }); await testSubjects.click('graphCreateWorkspacePromptButton'); - const breadcrumb = await testSubjects.find('graphCurrentWorkspaceBreadcrumb'); + const breadcrumb = await testSubjects.find('~graphCurrentWorkspaceBreadcrumb'); expect(await breadcrumb.getVisibleText()).to.equal('Unsaved workspace'); }); }); diff --git a/x-pack/test/functional/apps/monitoring/cluster/alerts.js b/x-pack/test/functional/apps/monitoring/cluster/alerts.js index 70df964e2810..b2842c03e141 100644 --- a/x-pack/test/functional/apps/monitoring/cluster/alerts.js +++ b/x-pack/test/functional/apps/monitoring/cluster/alerts.js @@ -157,7 +157,7 @@ export default function ({ getService, getPageObjects }) { .to.be(`${tableData[index].alertIcon} ${tableData[index].alertText}`); }); - await PageObjects.monitoring.clickBreadcrumb('breadcrumbClusters'); + await PageObjects.monitoring.clickBreadcrumb('~breadcrumbClusters'); }); }); @@ -183,7 +183,7 @@ export default function ({ getService, getPageObjects }) { await alertAction.click(); expect(await indices.isOnListing()).to.be(true); - await PageObjects.monitoring.clickBreadcrumb('breadcrumbClusters'); + await PageObjects.monitoring.clickBreadcrumb('~breadcrumbClusters'); }); it('with alert on listing table page', async () => { @@ -194,7 +194,7 @@ export default function ({ getService, getPageObjects }) { await alertAction.click(); expect(await indices.isOnListing()).to.be(true); - await PageObjects.monitoring.clickBreadcrumb('breadcrumbClusters'); + await PageObjects.monitoring.clickBreadcrumb('~breadcrumbClusters'); }); }); diff --git a/x-pack/test/functional/apps/monitoring/cluster/list.js b/x-pack/test/functional/apps/monitoring/cluster/list.js index c3eb509c6eed..70e89689a89d 100644 --- a/x-pack/test/functional/apps/monitoring/cluster/list.js +++ b/x-pack/test/functional/apps/monitoring/cluster/list.js @@ -131,7 +131,7 @@ export default function ({ getService, getPageObjects }) { expect(await clusterOverview.isOnClusterOverview()).to.be(true); expect(await clusterOverview.getClusterName()).to.be('production'); - await PageObjects.monitoring.clickBreadcrumb('breadcrumbClusters'); // reset for next test + await PageObjects.monitoring.clickBreadcrumb('~breadcrumbClusters'); // reset for next test }); }); diff --git a/x-pack/test/functional/apps/monitoring/elasticsearch/index_detail.js b/x-pack/test/functional/apps/monitoring/elasticsearch/index_detail.js index 718d4c012989..7fbb8990d1f2 100644 --- a/x-pack/test/functional/apps/monitoring/elasticsearch/index_detail.js +++ b/x-pack/test/functional/apps/monitoring/elasticsearch/index_detail.js @@ -16,7 +16,7 @@ export default function ({ getService, getPageObjects }) { describe('Elasticsearch index detail', () => { afterEach(async () => { - await PageObjects.monitoring.clickBreadcrumb('breadcrumbEsIndices'); // return back for next test + await PageObjects.monitoring.clickBreadcrumb('~breadcrumbEsIndices'); // return back for next test await indicesList.clearFilter(); }); diff --git a/x-pack/test/functional/apps/monitoring/elasticsearch/node_detail.js b/x-pack/test/functional/apps/monitoring/elasticsearch/node_detail.js index eeaf214ded51..99dce6c1b89b 100644 --- a/x-pack/test/functional/apps/monitoring/elasticsearch/node_detail.js +++ b/x-pack/test/functional/apps/monitoring/elasticsearch/node_detail.js @@ -33,7 +33,7 @@ export default function ({ getService, getPageObjects }) { }); afterEach(async () => { - await PageObjects.monitoring.clickBreadcrumb('breadcrumbEsNodes'); // return back for next test + await PageObjects.monitoring.clickBreadcrumb('~breadcrumbEsNodes'); // return back for next test }); it('should show node summary of master node with 20 indices and 38 shards', async () => { diff --git a/x-pack/test/functional/apps/monitoring/elasticsearch/shards.js b/x-pack/test/functional/apps/monitoring/elasticsearch/shards.js index e22d160f4faf..5137f0d200e0 100644 --- a/x-pack/test/functional/apps/monitoring/elasticsearch/shards.js +++ b/x-pack/test/functional/apps/monitoring/elasticsearch/shards.js @@ -31,7 +31,7 @@ export default function ({ getService, getPageObjects }) { describe('Shard Allocation Per Node', () => { before(async () => { // start on cluster overview - await PageObjects.monitoring.clickBreadcrumb('breadcrumbClusters'); + await PageObjects.monitoring.clickBreadcrumb('~breadcrumbClusters'); await PageObjects.header.waitUntilLoadingHasFinished(); @@ -41,7 +41,7 @@ export default function ({ getService, getPageObjects }) { }); afterEach(async () => { - await PageObjects.monitoring.clickBreadcrumb('breadcrumbEsNodes'); // return back for next test + await PageObjects.monitoring.clickBreadcrumb('~breadcrumbEsNodes'); // return back for next test }); it('master-data node with 20 indices and 38 shards', async () => { @@ -98,7 +98,7 @@ export default function ({ getService, getPageObjects }) { describe('Shard Allocation Per Index', () => { before(async () => { // start on cluster overview - await PageObjects.monitoring.clickBreadcrumb('breadcrumbClusters'); + await PageObjects.monitoring.clickBreadcrumb('~breadcrumbClusters'); // go to indices listing await overview.clickEsIndices(); @@ -106,7 +106,7 @@ export default function ({ getService, getPageObjects }) { }); afterEach(async () => { - await PageObjects.monitoring.clickBreadcrumb('breadcrumbEsIndices'); // return back for next test + await PageObjects.monitoring.clickBreadcrumb('~breadcrumbEsIndices'); // return back for next test }); it('green status index with full shard allocation', async () => { diff --git a/x-pack/test/functional/page_objects/gis_page.js b/x-pack/test/functional/page_objects/gis_page.js index f46abfd28f1f..26d67baa55ea 100644 --- a/x-pack/test/functional/page_objects/gis_page.js +++ b/x-pack/test/functional/page_objects/gis_page.js @@ -539,7 +539,7 @@ export function GisPageProvider({ getService, getPageObjects }) { } async openInspectorMapView() { - await inspector.openInspectorView('inspectorViewChooserMap'); + await inspector.openInspectorView('~inspectorViewChooserMap'); } // Method should only be used when multiple requests are expected diff --git a/x-pack/test/functional/page_objects/reporting_page.js b/x-pack/test/functional/page_objects/reporting_page.js index 8dae2d5e3b52..30de10c400c8 100644 --- a/x-pack/test/functional/page_objects/reporting_page.js +++ b/x-pack/test/functional/page_objects/reporting_page.js @@ -157,7 +157,7 @@ export function ReportingPageProvider({ getService, getPageObjects }) { }); // Close toast so it doesn't obscure the UI. if (isToastPresent) { - await testSubjects.click('completeReportSuccess toastCloseButton'); + await testSubjects.click('completeReportSuccess > toastCloseButton'); } return isToastPresent; diff --git a/x-pack/test/functional/services/grok_debugger.js b/x-pack/test/functional/services/grok_debugger.js index 48717bee0e3a..140dbc149afa 100644 --- a/x-pack/test/functional/services/grok_debugger.js +++ b/x-pack/test/functional/services/grok_debugger.js @@ -14,13 +14,13 @@ export function GrokDebuggerProvider({ getService }) { // test subject selectors const SUBJ_CONTAINER = 'grokDebugger'; - const SUBJ_UI_ACE_EVENT_INPUT = `${SUBJ_CONTAINER} aceEventInput codeEditorContainer`; - const SUBJ_UI_ACE_PATTERN_INPUT = `${SUBJ_CONTAINER} acePatternInput codeEditorContainer`; - const SUBJ_UI_ACE_CUSTOM_PATTERNS_INPUT = `${SUBJ_CONTAINER} aceCustomPatternsInput codeEditorContainer`; - const SUBJ_UI_ACE_EVENT_OUTPUT = `${SUBJ_CONTAINER} aceEventOutput codeEditorContainer`; + const SUBJ_UI_ACE_EVENT_INPUT = `${SUBJ_CONTAINER} > aceEventInput > codeEditorContainer`; + const SUBJ_UI_ACE_PATTERN_INPUT = `${SUBJ_CONTAINER} > acePatternInput > codeEditorContainer`; + const SUBJ_UI_ACE_CUSTOM_PATTERNS_INPUT = `${SUBJ_CONTAINER} > aceCustomPatternsInput > codeEditorContainer`; + const SUBJ_UI_ACE_EVENT_OUTPUT = `${SUBJ_CONTAINER} > aceEventOutput > codeEditorContainer`; - const SUBJ_BTN_TOGGLE_CUSTOM_PATTERNS_INPUT = `${SUBJ_CONTAINER} btnToggleCustomPatternsInput`; - const SUBJ_BTN_SIMULATE = `${SUBJ_CONTAINER} btnSimulate`; + const SUBJ_BTN_TOGGLE_CUSTOM_PATTERNS_INPUT = `${SUBJ_CONTAINER} > btnToggleCustomPatternsInput`; + const SUBJ_BTN_SIMULATE = `${SUBJ_CONTAINER} > btnSimulate`; return new class GrokDebugger { async clickSimulate() { diff --git a/x-pack/test/functional/services/machine_learning/job_management.ts b/x-pack/test/functional/services/machine_learning/job_management.ts index 29380c85ad7a..44cf06ab4473 100644 --- a/x-pack/test/functional/services/machine_learning/job_management.ts +++ b/x-pack/test/functional/services/machine_learning/job_management.ts @@ -16,7 +16,7 @@ export function MachineLearningJobManagementProvider({ getService }: FtrProvider }, async assertJobTableExists() { - await testSubjects.existOrFail('mlJobListTable'); + await testSubjects.existOrFail('~mlJobListTable'); }, async assertCreateNewJobButtonExists() { @@ -24,7 +24,7 @@ export function MachineLearningJobManagementProvider({ getService }: FtrProvider }, async assertJobStatsBarExists() { - await testSubjects.existOrFail('mlJobStatsBar'); + await testSubjects.existOrFail('~mlJobStatsBar'); }, }; } diff --git a/x-pack/test/functional/services/machine_learning/job_table.ts b/x-pack/test/functional/services/machine_learning/job_table.ts index 85142edb6507..13c8cd7b2d43 100644 --- a/x-pack/test/functional/services/machine_learning/job_table.ts +++ b/x-pack/test/functional/services/machine_learning/job_table.ts @@ -13,11 +13,11 @@ export function MachineLearningJobTableProvider({ getService }: FtrProviderConte return new (class MlJobTable { public async parseJobTable() { - const table = await testSubjects.find('mlJobListTable'); + const table = await testSubjects.find('~mlJobListTable'); const $ = await table.parseDomContent(); const rows = []; - for (const tr of $.findTestSubjects('row').toArray()) { + for (const tr of $.findTestSubjects('~row').toArray()) { const $tr = $(tr); const $description = $tr.findTestSubject('description').find('.euiTableCellContent'); @@ -83,10 +83,10 @@ export function MachineLearningJobTableProvider({ getService }: FtrProviderConte await testSubjects.click(this.detailsSelector(jobId, 'tab-counts')); const countsTable = await testSubjects.find( - this.detailsSelector(jobId, 'details-counts counts') + this.detailsSelector(jobId, 'details-counts > counts') ); const modelSizeStatsTable = await testSubjects.find( - this.detailsSelector(jobId, 'details-counts modelSizeStats') + this.detailsSelector(jobId, 'details-counts > modelSizeStats') ); // parse a table by reading each row @@ -119,13 +119,13 @@ export function MachineLearningJobTableProvider({ getService }: FtrProviderConte } public rowSelector(jobId: string, subSelector?: string) { - const row = `mlJobListTable row-${jobId}`; - return !subSelector ? row : `${row} ${subSelector}`; + const row = `~mlJobListTable > ~row-${jobId}`; + return !subSelector ? row : `${row} > ${subSelector}`; } public detailsSelector(jobId: string, subSelector?: string) { - const row = `mlJobListTable details-${jobId}`; - return !subSelector ? row : `${row} ${subSelector}`; + const row = `~mlJobListTable > ~details-${jobId}`; + return !subSelector ? row : `${row} > ${subSelector}`; } public async withDetailsOpen(jobId: string, block: () => Promise): Promise { @@ -159,12 +159,12 @@ export function MachineLearningJobTableProvider({ getService }: FtrProviderConte public async waitForJobsToLoad() { await retry.waitFor( 'jobs table to exist', - async () => await testSubjects.exists('mlJobListTable') + async () => await testSubjects.exists('~mlJobListTable') ); await retry.waitFor( 'jobs table to be done loading', - async () => await testSubjects.exists('mlJobListTable&loaded') + async () => await testSubjects.exists('mlJobListTable loaded') ); } diff --git a/x-pack/test/functional/services/machine_learning/job_wizard_common.ts b/x-pack/test/functional/services/machine_learning/job_wizard_common.ts index 7a593d3a367c..18eb9f720dea 100644 --- a/x-pack/test/functional/services/machine_learning/job_wizard_common.ts +++ b/x-pack/test/functional/services/machine_learning/job_wizard_common.ts @@ -38,12 +38,12 @@ export function MachineLearningJobWizardCommonProvider({ getService }: FtrProvid }, async assertAggAndFieldInputExists() { - await testSubjects.existOrFail('mlJobWizardAggSelection comboBoxInput'); + await testSubjects.existOrFail('mlJobWizardAggSelection > comboBoxInput'); }, async assertAggAndFieldSelection(identifier: string) { const comboBoxSelectedOptions = await comboBox.getComboBoxSelectedOptions( - 'mlJobWizardAggSelection comboBoxInput' + 'mlJobWizardAggSelection > comboBoxInput' ); expect(comboBoxSelectedOptions.length).to.eql(1); expect(comboBoxSelectedOptions[0]).to.eql(identifier); @@ -82,19 +82,19 @@ export function MachineLearningJobWizardCommonProvider({ getService }: FtrProvid }, async assertJobGroupInputExists() { - await testSubjects.existOrFail('mlJobWizardComboBoxJobGroups comboBoxInput'); + await testSubjects.existOrFail('mlJobWizardComboBoxJobGroups > comboBoxInput'); }, async assertJobGroupSelection(jobGroups: string[]) { const comboBoxSelectedOptions = await comboBox.getComboBoxSelectedOptions( - 'mlJobWizardComboBoxJobGroups comboBoxInput' + 'mlJobWizardComboBoxJobGroups > comboBoxInput' ); expect(comboBoxSelectedOptions).to.eql(jobGroups); }, async assertModelPlotSwitchExists() { await this.ensureAdvancedSectionOpen(); - await testSubjects.existOrFail('mlJobWizardAdvancedSection mlJobWizardSwitchModelPlot', { + await testSubjects.existOrFail('mlJobWizardAdvancedSection > mlJobWizardSwitchModelPlot', { allowHidden: true, }); }, @@ -102,7 +102,7 @@ export function MachineLearningJobWizardCommonProvider({ getService }: FtrProvid async assertDedicatedIndexSwitchExists() { await this.ensureAdvancedSectionOpen(); await testSubjects.existOrFail( - 'mlJobWizardAdvancedSection mlJobWizardSwitchUseDedicatedIndex', + 'mlJobWizardAdvancedSection > mlJobWizardSwitchUseDedicatedIndex', { allowHidden: true } ); }, @@ -120,43 +120,45 @@ export function MachineLearningJobWizardCommonProvider({ getService }: FtrProvid async getDedicatedIndexSwitchCheckedState() { await this.ensureAdvancedSectionOpen(); return await testSubjects.isSelected( - 'mlJobWizardAdvancedSection mlJobWizardSwitchUseDedicatedIndex' + 'mlJobWizardAdvancedSection > mlJobWizardSwitchUseDedicatedIndex' ); }, async assertModelMemoryLimitInputExists() { await this.ensureAdvancedSectionOpen(); - await testSubjects.existOrFail('mlJobWizardAdvancedSection mlJobWizardInputModelMemoryLimit'); + await testSubjects.existOrFail( + 'mlJobWizardAdvancedSection > mlJobWizardInputModelMemoryLimit' + ); }, async assertModelMemoryLimitValue(expectedValue: string) { await this.ensureAdvancedSectionOpen(); const actualModelMemoryLimit = await testSubjects.getAttribute( - 'mlJobWizardAdvancedSection mlJobWizardInputModelMemoryLimit', + 'mlJobWizardAdvancedSection > mlJobWizardInputModelMemoryLimit', 'value' ); expect(actualModelMemoryLimit).to.eql(expectedValue); }, async assertMultiMetricSplitFieldInputExists() { - await testSubjects.existOrFail('mlJobWizardSplitFieldSelection comboBoxInput'); + await testSubjects.existOrFail('mlJobWizardSplitFieldSelection > comboBoxInput'); }, async assertMultiMetricSplitFieldSelection(identifier: string) { const comboBoxSelectedOptions = await comboBox.getComboBoxSelectedOptions( - 'mlJobWizardSplitFieldSelection comboBoxInput' + 'mlJobWizardSplitFieldSelection > comboBoxInput' ); expect(comboBoxSelectedOptions.length).to.eql(1); expect(comboBoxSelectedOptions[0]).to.eql(identifier); }, async assertInfluencerInputExists() { - await testSubjects.existOrFail('mlJobWizardInfluencerSelection comboBoxInput'); + await testSubjects.existOrFail('mlJobWizardInfluencerSelection > comboBoxInput'); }, async assertInfluencerSelection(influencers: string[]) { const comboBoxSelectedOptions = await comboBox.getComboBoxSelectedOptions( - 'mlJobWizardInfluencerSelection comboBoxInput' + 'mlJobWizardInfluencerSelection > comboBoxInput' ); expect(comboBoxSelectedOptions).to.eql(influencers); }, @@ -166,28 +168,28 @@ export function MachineLearningJobWizardCommonProvider({ getService }: FtrProvid detectorPosition: number, chartType: string ) { - await testSubjects.existOrFail(`detector&${detectorPosition}`); - await testSubjects.existOrFail(`detector&${detectorPosition} detectorTitle`); + await testSubjects.existOrFail(`detector ${detectorPosition}`); + await testSubjects.existOrFail(`detector ${detectorPosition} > detectorTitle`); expect( - await testSubjects.getVisibleText(`detector&${detectorPosition} detectorTitle`) + await testSubjects.getVisibleText(`detector ${detectorPosition} > detectorTitle`) ).to.eql(aggAndFieldIdentifier); - await testSubjects.existOrFail(`detector&${detectorPosition} mlAnomalyChart&${chartType}`); + await testSubjects.existOrFail(`detector ${detectorPosition} > mlAnomalyChart ${chartType}`); }, async assertDetectorSplitExists(splitField: string) { - await testSubjects.existOrFail(`dataSplit dataSplitTitle&${splitField}`); - await testSubjects.existOrFail(`dataSplit splitCard&front`); - await testSubjects.existOrFail(`dataSplit splitCard&back`); + await testSubjects.existOrFail(`dataSplit > dataSplitTitle ${splitField}`); + await testSubjects.existOrFail(`dataSplit > splitCard front`); + await testSubjects.existOrFail(`dataSplit > splitCard back`); }, async assertDetectorSplitFrontCardTitle(frontCardTitle: string) { - expect(await testSubjects.getVisibleText(`dataSplit splitCard&front splitCardTitle`)).to.eql( - frontCardTitle - ); + expect( + await testSubjects.getVisibleText(`dataSplit > splitCard front > splitCardTitle`) + ).to.eql(frontCardTitle); }, async assertDetectorSplitNumberOfBackCards(numberOfBackCards: number) { - expect(await testSubjects.findAll(`dataSplit splitCard&back`)).to.have.length( + expect(await testSubjects.findAll(`dataSplit > splitCard back`)).to.have.length( numberOfBackCards ); }, @@ -205,7 +207,7 @@ export function MachineLearningJobWizardCommonProvider({ getService }: FtrProvid }, async selectAggAndField(identifier: string) { - await comboBox.set('mlJobWizardAggSelection comboBoxInput', identifier); + await comboBox.set('mlJobWizardAggSelection > comboBoxInput', identifier); }, async setBucketSpan(bucketSpan: string) { @@ -221,15 +223,15 @@ export function MachineLearningJobWizardCommonProvider({ getService }: FtrProvid }, async addJobGroup(jobGroup: string) { - await comboBox.setCustom('mlJobWizardComboBoxJobGroups comboBoxInput', jobGroup); + await comboBox.setCustom('mlJobWizardComboBoxJobGroups > comboBoxInput', jobGroup); }, async selectMultiMetricSplitField(identifier: string) { - await comboBox.set('mlJobWizardSplitFieldSelection comboBoxInput', identifier); + await comboBox.set('mlJobWizardSplitFieldSelection > comboBoxInput', identifier); }, async addInfluencer(influencer: string) { - await comboBox.setCustom('mlJobWizardInfluencerSelection comboBoxInput', influencer); + await comboBox.setCustom('mlJobWizardInfluencerSelection > comboBoxInput', influencer); }, async ensureAdvancedSectionOpen() { diff --git a/x-pack/test/functional/services/monitoring/beat_detail.js b/x-pack/test/functional/services/monitoring/beat_detail.js index 82372b526ed6..b76bda68a380 100644 --- a/x-pack/test/functional/services/monitoring/beat_detail.js +++ b/x-pack/test/functional/services/monitoring/beat_detail.js @@ -10,19 +10,19 @@ export function MonitoringBeatDetailProvider({ getService }) { const SUBJ_DETAIL_PAGE = 'beatDetailPage'; const SUBJ_SUMMARY_01 = 'beatSummaryStatus01'; - const SUBJ_SUMMARY_NAME = `${SUBJ_SUMMARY_01} name`; - const SUBJ_SUMMARY_VERSION = `${SUBJ_SUMMARY_01} version`; - const SUBJ_SUMMARY_TYPE = `${SUBJ_SUMMARY_01} type`; - const SUBJ_SUMMARY_HOST = `${SUBJ_SUMMARY_01} host`; - const SUBJ_SUMMARY_OUTPUT = `${SUBJ_SUMMARY_01} output`; - const SUBJ_SUMMARY_CONFIG_RELOADS = `${SUBJ_SUMMARY_01} configReloads`; - const SUBJ_SUMMARY_UPTIME = `${SUBJ_SUMMARY_01} uptime`; + const SUBJ_SUMMARY_NAME = `${SUBJ_SUMMARY_01} > name`; + const SUBJ_SUMMARY_VERSION = `${SUBJ_SUMMARY_01} > version`; + const SUBJ_SUMMARY_TYPE = `${SUBJ_SUMMARY_01} > type`; + const SUBJ_SUMMARY_HOST = `${SUBJ_SUMMARY_01} > host`; + const SUBJ_SUMMARY_OUTPUT = `${SUBJ_SUMMARY_01} > output`; + const SUBJ_SUMMARY_CONFIG_RELOADS = `${SUBJ_SUMMARY_01} > configReloads`; + const SUBJ_SUMMARY_UPTIME = `${SUBJ_SUMMARY_01} > uptime`; const SUBJ_SUMMARY_02 = 'beatSummaryStatus02'; - const SUBJ_SUMMARY_EVENTS_TOTAL = `${SUBJ_SUMMARY_02} eventsTotal`; - const SUBJ_SUMMARY_EVENTS_EMITTED = `${SUBJ_SUMMARY_02} eventsEmitted`; - const SUBJ_SUMMARY_EVENTS_DROPPED = `${SUBJ_SUMMARY_02} eventsDropped`; - const SUBJ_SUMMARY_BYTES_WRITTEN = `${SUBJ_SUMMARY_02} bytesWritten`; + const SUBJ_SUMMARY_EVENTS_TOTAL = `${SUBJ_SUMMARY_02} > eventsTotal`; + const SUBJ_SUMMARY_EVENTS_EMITTED = `${SUBJ_SUMMARY_02} > eventsEmitted`; + const SUBJ_SUMMARY_EVENTS_DROPPED = `${SUBJ_SUMMARY_02} > eventsDropped`; + const SUBJ_SUMMARY_BYTES_WRITTEN = `${SUBJ_SUMMARY_02} > bytesWritten`; return new class BeatDetail { diff --git a/x-pack/test/functional/services/monitoring/beats_listing.js b/x-pack/test/functional/services/monitoring/beats_listing.js index 3e61f1ea2991..475af9f49253 100644 --- a/x-pack/test/functional/services/monitoring/beats_listing.js +++ b/x-pack/test/functional/services/monitoring/beats_listing.js @@ -14,8 +14,8 @@ export function MonitoringBeatsListingProvider({ getService, getPageObjects }) { const SUBJ_NO_RECENT_ACTIVITY_MESSAGE = 'noRecentActivityMessage'; const SUBJ_TABLE_CONTAINER = 'beatsTableContainer'; - const SUBJ_SEARCH_BAR = `${SUBJ_TABLE_CONTAINER} monitoringTableToolBar`; - const SUBJ_INDEX_LINK_PREFIX = `${SUBJ_TABLE_CONTAINER} beatLink-`; + const SUBJ_SEARCH_BAR = `${SUBJ_TABLE_CONTAINER} > monitoringTableToolBar`; + const SUBJ_INDEX_LINK_PREFIX = `${SUBJ_TABLE_CONTAINER} > beatLink-`; return new class BeatsListing { diff --git a/x-pack/test/functional/services/monitoring/beats_summary_status.js b/x-pack/test/functional/services/monitoring/beats_summary_status.js index 2773b1e76e32..8321a25bffb0 100644 --- a/x-pack/test/functional/services/monitoring/beats_summary_status.js +++ b/x-pack/test/functional/services/monitoring/beats_summary_status.js @@ -8,10 +8,10 @@ export function MonitoringBeatsSummaryStatusProvider({ getService }) { const testSubjects = getService('testSubjects'); const SUBJ_SUMMARY = 'beatsSummaryStatus'; - const SUBJ_TYPES_COUNTS = `${SUBJ_SUMMARY} typeCount`; + const SUBJ_TYPES_COUNTS = `${SUBJ_SUMMARY} > typeCount`; - const SUBJ_TOTAL_EVENTS = `${SUBJ_SUMMARY} totalEvents`; - const SUBJ_BYTES_SENT = `${SUBJ_SUMMARY} bytesSent`; + const SUBJ_TOTAL_EVENTS = `${SUBJ_SUMMARY} > totalEvents`; + const SUBJ_BYTES_SENT = `${SUBJ_SUMMARY} > bytesSent`; return new class BeatsSummaryStatus { diff --git a/x-pack/test/functional/services/monitoring/cluster_alerts.js b/x-pack/test/functional/services/monitoring/cluster_alerts.js index 6b51380600f0..37d611e55f28 100644 --- a/x-pack/test/functional/services/monitoring/cluster_alerts.js +++ b/x-pack/test/functional/services/monitoring/cluster_alerts.js @@ -19,14 +19,14 @@ export function MonitoringClusterAlertsProvider({ getService, getPageObjects }) const SUBJ_OVERVIEW_ICONS = `[data-test-subj="${SUBJ_OVERVIEW_CLUSTER_ALERTS}"] ` + `[data-test-subj="topAlertItem"] .euiCallOutHeader__title`; - const SUBJ_OVERVIEW_TEXTS = `${SUBJ_OVERVIEW_CLUSTER_ALERTS} alertText`; - const SUBJ_OVERVIEW_ACTIONS = `${SUBJ_OVERVIEW_CLUSTER_ALERTS} alertAction`; - const SUBJ_OVERVIEW_VIEW_ALL = `${SUBJ_OVERVIEW_CLUSTER_ALERTS} viewAllAlerts`; + const SUBJ_OVERVIEW_TEXTS = `${SUBJ_OVERVIEW_CLUSTER_ALERTS} > alertText`; + const SUBJ_OVERVIEW_ACTIONS = `${SUBJ_OVERVIEW_CLUSTER_ALERTS} > alertAction`; + const SUBJ_OVERVIEW_VIEW_ALL = `${SUBJ_OVERVIEW_CLUSTER_ALERTS} > viewAllAlerts`; const SUBJ_TABLE_BODY = 'alertsTableContainer'; - const SUBJ_TABLE_ICONS = `${SUBJ_TABLE_BODY} alertIcon`; - const SUBJ_TABLE_TEXTS = `${SUBJ_TABLE_BODY} alertText`; - const SUBJ_TABLE_ACTIONS = `${SUBJ_TABLE_BODY} alertAction`; + const SUBJ_TABLE_ICONS = `${SUBJ_TABLE_BODY} > alertIcon`; + const SUBJ_TABLE_TEXTS = `${SUBJ_TABLE_BODY} > alertText`; + const SUBJ_TABLE_ACTIONS = `${SUBJ_TABLE_BODY} > alertAction`; return new class ClusterAlerts { @@ -56,7 +56,7 @@ export function MonitoringClusterAlertsProvider({ getService, getPageObjects }) */ getOverviewAlerts() { - return testSubjects.findAll(`${SUBJ_OVERVIEW_CLUSTER_ALERTS} topAlertItem`); + return testSubjects.findAll(`${SUBJ_OVERVIEW_CLUSTER_ALERTS} > topAlertItem`); } async getOverviewAlertsAll() { diff --git a/x-pack/test/functional/services/monitoring/cluster_list.js b/x-pack/test/functional/services/monitoring/cluster_list.js index a157cf97827b..57f1c617e008 100644 --- a/x-pack/test/functional/services/monitoring/cluster_list.js +++ b/x-pack/test/functional/services/monitoring/cluster_list.js @@ -10,10 +10,10 @@ export function MonitoringClusterListProvider({ getService, getPageObjects }) { const PageObjects = getPageObjects(['monitoring']); const SUBJ_TABLE_CONTAINER = 'clusterTableContainer'; - const SUBJ_TABLE_NO_DATA = `${SUBJ_TABLE_CONTAINER} monitoringTableNoData`; - const SUBJ_SEARCH_BAR = `${SUBJ_TABLE_CONTAINER} monitoringTableToolBar`; + const SUBJ_TABLE_NO_DATA = `${SUBJ_TABLE_CONTAINER} > monitoringTableNoData`; + const SUBJ_SEARCH_BAR = `${SUBJ_TABLE_CONTAINER} > monitoringTableToolBar`; - const SUBJ_CLUSTER_ROW_PREFIX = `${SUBJ_TABLE_CONTAINER} clusterRow_`; + const SUBJ_CLUSTER_ROW_PREFIX = `${SUBJ_TABLE_CONTAINER} > clusterRow_`; return new class ClusterList { @@ -42,31 +42,31 @@ export function MonitoringClusterListProvider({ getService, getPageObjects }) { } getClusterLink(clusterUuid) { - return testSubjects.find(`${SUBJ_CLUSTER_ROW_PREFIX}${clusterUuid} clusterLink`); + return testSubjects.find(`${SUBJ_CLUSTER_ROW_PREFIX}${clusterUuid} > clusterLink`); } getClusterName(clusterUuid) { - return testSubjects.getVisibleText(`${SUBJ_CLUSTER_ROW_PREFIX}${clusterUuid} clusterLink`); + return testSubjects.getVisibleText(`${SUBJ_CLUSTER_ROW_PREFIX}${clusterUuid} > clusterLink`); } getClusterStatus(clusterUuid) { - return testSubjects.getVisibleText(`${SUBJ_CLUSTER_ROW_PREFIX}${clusterUuid} alertsStatus`); + return testSubjects.getVisibleText(`${SUBJ_CLUSTER_ROW_PREFIX}${clusterUuid} > alertsStatus`); } getClusterNodesCount(clusterUuid) { - return testSubjects.getVisibleText(`${SUBJ_CLUSTER_ROW_PREFIX}${clusterUuid} nodesCount`); + return testSubjects.getVisibleText(`${SUBJ_CLUSTER_ROW_PREFIX}${clusterUuid} > nodesCount`); } getClusterIndicesCount(clusterUuid) { - return testSubjects.getVisibleText(`${SUBJ_CLUSTER_ROW_PREFIX}${clusterUuid} indicesCount`); + return testSubjects.getVisibleText(`${SUBJ_CLUSTER_ROW_PREFIX}${clusterUuid} > indicesCount`); } getClusterDataSize(clusterUuid) { - return testSubjects.getVisibleText(`${SUBJ_CLUSTER_ROW_PREFIX}${clusterUuid} dataSize`); + return testSubjects.getVisibleText(`${SUBJ_CLUSTER_ROW_PREFIX}${clusterUuid} > dataSize`); } getClusterLogstashCount(clusterUuid) { - return testSubjects.getVisibleText(`${SUBJ_CLUSTER_ROW_PREFIX}${clusterUuid} logstashCount`); + return testSubjects.getVisibleText(`${SUBJ_CLUSTER_ROW_PREFIX}${clusterUuid} > logstashCount`); } getClusterKibanaCount(clusterUuid) { - return testSubjects.getVisibleText(`${SUBJ_CLUSTER_ROW_PREFIX}${clusterUuid} kibanaCount`); + return testSubjects.getVisibleText(`${SUBJ_CLUSTER_ROW_PREFIX}${clusterUuid} > kibanaCount`); } getClusterLicense(clusterUuid) { - return testSubjects.getVisibleText(`${SUBJ_CLUSTER_ROW_PREFIX}${clusterUuid} clusterLicense`); + return testSubjects.getVisibleText(`${SUBJ_CLUSTER_ROW_PREFIX}${clusterUuid} > clusterLicense`); } }; } diff --git a/x-pack/test/functional/services/monitoring/cluster_overview.js b/x-pack/test/functional/services/monitoring/cluster_overview.js index 83657bd88496..a9d7ce0ac003 100644 --- a/x-pack/test/functional/services/monitoring/cluster_overview.js +++ b/x-pack/test/functional/services/monitoring/cluster_overview.js @@ -12,46 +12,46 @@ export function MonitoringClusterOverviewProvider({ getService }) { const SUBJ_CLUSTER_ALERTS = `clusterAlertsContainer`; const SUBJ_CLUSTER_OVERVIEW = 'clusterOverviewContainer'; - const SUBJ_CLUSTER_NAME = `${SUBJ_CLUSTER_OVERVIEW} clusterName`; + const SUBJ_CLUSTER_NAME = `${SUBJ_CLUSTER_OVERVIEW} > clusterName`; const SUBJ_ES_PANEL = `clusterItemContainerElasticsearch`; - const SUBJ_ES_STATUS = `${SUBJ_ES_PANEL} statusIcon`; - const SUBJ_ES_VERSION = `${SUBJ_ES_PANEL} esVersion`; - const SUBJ_ES_UPTIME = `${SUBJ_ES_PANEL} esUptime`; - const SUBJ_ES_OVERVIEW = `${SUBJ_ES_PANEL} esOverview`; - const SUBJ_ES_NUMBER_OF_NODES = `${SUBJ_ES_PANEL} esNumberOfNodes`; - const SUBJ_ES_DISK_AVAILABLE = `${SUBJ_ES_PANEL} esDiskAvailable`; - const SUBJ_ES_JVM_HEAP = `${SUBJ_ES_PANEL} esJvmHeap`; - const SUBJ_ES_NUMBER_OF_INDICES = `${SUBJ_ES_PANEL} esNumberOfIndices`; - const SUBJ_ES_DOCUMENTS_COUNT = `${SUBJ_ES_PANEL} esDocumentsCount`; - const SUBJ_ES_DISK_USAGE = `${SUBJ_ES_PANEL} esDiskUsage`; - const SUBJ_ES_PRIMARY_SHARDS = `${SUBJ_ES_PANEL} esPrimaryShards`; - const SUBJ_ES_REPLICA_SHARDS = `${SUBJ_ES_PANEL} esReplicaShards`; - const SUBJ_ES_ML_JOBS = `${SUBJ_ES_PANEL} esMlJobs`; + const SUBJ_ES_STATUS = `${SUBJ_ES_PANEL} > statusIcon`; + const SUBJ_ES_VERSION = `${SUBJ_ES_PANEL} > esVersion`; + const SUBJ_ES_UPTIME = `${SUBJ_ES_PANEL} > esUptime`; + const SUBJ_ES_OVERVIEW = `${SUBJ_ES_PANEL} > esOverview`; + const SUBJ_ES_NUMBER_OF_NODES = `${SUBJ_ES_PANEL} > esNumberOfNodes`; + const SUBJ_ES_DISK_AVAILABLE = `${SUBJ_ES_PANEL} > esDiskAvailable`; + const SUBJ_ES_JVM_HEAP = `${SUBJ_ES_PANEL} > esJvmHeap`; + const SUBJ_ES_NUMBER_OF_INDICES = `${SUBJ_ES_PANEL} > esNumberOfIndices`; + const SUBJ_ES_DOCUMENTS_COUNT = `${SUBJ_ES_PANEL} > esDocumentsCount`; + const SUBJ_ES_DISK_USAGE = `${SUBJ_ES_PANEL} > esDiskUsage`; + const SUBJ_ES_PRIMARY_SHARDS = `${SUBJ_ES_PANEL} > esPrimaryShards`; + const SUBJ_ES_REPLICA_SHARDS = `${SUBJ_ES_PANEL} > esReplicaShards`; + const SUBJ_ES_ML_JOBS = `${SUBJ_ES_PANEL} > esMlJobs`; const SUBJ_KBN_PANEL = `clusterItemContainerKibana`; - const SUBJ_KBN_STATUS = `${SUBJ_KBN_PANEL} statusIcon`; - const SUBJ_KBN_REQUESTS = `${SUBJ_KBN_PANEL} kbnRequests`; - const SUBJ_KBN_MAX_RESPONSE_TIME = `${SUBJ_KBN_PANEL} kbnMaxResponseTime`; - const SUBJ_KBN_CONNECTIONS = `${SUBJ_KBN_PANEL} kbnConnections`; - const SUBJ_KBN_MEMORY_USAGE = `${SUBJ_KBN_PANEL} kbnMemoryUsage`; - const SUBJ_KBN_OVERVIEW = `${SUBJ_KBN_PANEL} kbnOverview`; - const SUBJ_KBN_INSTANCES = `${SUBJ_KBN_PANEL} kbnInstances`; + const SUBJ_KBN_STATUS = `${SUBJ_KBN_PANEL} > statusIcon`; + const SUBJ_KBN_REQUESTS = `${SUBJ_KBN_PANEL} > kbnRequests`; + const SUBJ_KBN_MAX_RESPONSE_TIME = `${SUBJ_KBN_PANEL} > kbnMaxResponseTime`; + const SUBJ_KBN_CONNECTIONS = `${SUBJ_KBN_PANEL} > kbnConnections`; + const SUBJ_KBN_MEMORY_USAGE = `${SUBJ_KBN_PANEL} > kbnMemoryUsage`; + const SUBJ_KBN_OVERVIEW = `${SUBJ_KBN_PANEL} > kbnOverview`; + const SUBJ_KBN_INSTANCES = `${SUBJ_KBN_PANEL} > kbnInstances`; const SUBJ_LS_PANEL = `clusterItemContainerLogstash`; - const SUBJ_LS_EVENTS_RECEIVED = `${SUBJ_LS_PANEL} lsEventsReceived`; - const SUBJ_LS_EVENTS_EMITTED = `${SUBJ_LS_PANEL} lsEventsEmitted`; - const SUBJ_LS_NODES = `${SUBJ_LS_PANEL} lsNodes`; - const SUBJ_LS_UPTIME = `${SUBJ_LS_PANEL} lsUptime`; - const SUBJ_LS_JVM_HEAP = `${SUBJ_LS_PANEL} lsJvmHeap`; - const SUBJ_LS_PIPELINES = `${SUBJ_LS_PANEL} lsPipelines`; + const SUBJ_LS_EVENTS_RECEIVED = `${SUBJ_LS_PANEL} > lsEventsReceived`; + const SUBJ_LS_EVENTS_EMITTED = `${SUBJ_LS_PANEL} > lsEventsEmitted`; + const SUBJ_LS_NODES = `${SUBJ_LS_PANEL} > lsNodes`; + const SUBJ_LS_UPTIME = `${SUBJ_LS_PANEL} > lsUptime`; + const SUBJ_LS_JVM_HEAP = `${SUBJ_LS_PANEL} > lsJvmHeap`; + const SUBJ_LS_PIPELINES = `${SUBJ_LS_PANEL} > lsPipelines`; const SUBJ_BEATS_PANEL = `clusterItemContainerBeats`; - const SUBJ_BEATS_OVERVIEW = `${SUBJ_BEATS_PANEL} beatsOverview`; - const SUBJ_BEATS_TOTAL_EVENTS = `${SUBJ_BEATS_PANEL} beatsTotalEvents`; - const SUBJ_BEATS_BYTES_SENT = `${SUBJ_BEATS_PANEL} beatsBytesSent`; - const SUBJ_BEATS_LISTING = `${SUBJ_BEATS_PANEL} beatsListing`; - const SUBJ_BEATS_TYPES_COUNTS = `${SUBJ_BEATS_PANEL} beatTypeCount`; + const SUBJ_BEATS_OVERVIEW = `${SUBJ_BEATS_PANEL} > beatsOverview`; + const SUBJ_BEATS_TOTAL_EVENTS = `${SUBJ_BEATS_PANEL} > beatsTotalEvents`; + const SUBJ_BEATS_BYTES_SENT = `${SUBJ_BEATS_PANEL} > beatsBytesSent`; + const SUBJ_BEATS_LISTING = `${SUBJ_BEATS_PANEL} > beatsListing`; + const SUBJ_BEATS_TYPES_COUNTS = `${SUBJ_BEATS_PANEL} > beatTypeCount`; return new class ClusterOverview { @@ -186,7 +186,7 @@ export function MonitoringClusterOverviewProvider({ getService }) { return testSubjects.getVisibleText(SUBJ_BEATS_BYTES_SENT); } async getBeatsListingDetail() { - const total = await testSubjects.getVisibleText(SUBJ_BEATS_LISTING + ' beatsTotal'); + const total = await testSubjects.getVisibleText(SUBJ_BEATS_LISTING + '> beatsTotal'); const counts = await testSubjects.getAttributeAll(SUBJ_BEATS_TYPES_COUNTS, 'data-test-beat-type-count'); const countsByType = counts.reduce((accum, text) => { diff --git a/x-pack/test/functional/services/monitoring/elasticsearch_index_detail.js b/x-pack/test/functional/services/monitoring/elasticsearch_index_detail.js index 14574a235904..4d4f3f50d44c 100644 --- a/x-pack/test/functional/services/monitoring/elasticsearch_index_detail.js +++ b/x-pack/test/functional/services/monitoring/elasticsearch_index_detail.js @@ -8,12 +8,12 @@ export function MonitoringElasticsearchIndexDetailProvider({ getService }) { const testSubjects = getService('testSubjects'); const SUBJ_SUMMARY = 'elasticsearchIndexDetailStatus'; - const SUBJ_SUMMARY_DATA_SIZE = `${SUBJ_SUMMARY} dataSize`; - const SUBJ_SUMMARY_DATA_SIZE_PRIMARIES = `${SUBJ_SUMMARY} dataSizePrimaries`; - const SUBJ_SUMMARY_DOCUMENT_COUNT = `${SUBJ_SUMMARY} documentCount`; - const SUBJ_SUMMARY_TOTAL_SHARDS = `${SUBJ_SUMMARY} totalShards`; - const SUBJ_SUMMARY_UNASSIGNED_SHARDS = `${SUBJ_SUMMARY} unassignedShards`; - const SUBJ_SUMMARY_HEALTH = `${SUBJ_SUMMARY} statusIcon`; + const SUBJ_SUMMARY_DATA_SIZE = `${SUBJ_SUMMARY} > dataSize`; + const SUBJ_SUMMARY_DATA_SIZE_PRIMARIES = `${SUBJ_SUMMARY} > dataSizePrimaries`; + const SUBJ_SUMMARY_DOCUMENT_COUNT = `${SUBJ_SUMMARY} > documentCount`; + const SUBJ_SUMMARY_TOTAL_SHARDS = `${SUBJ_SUMMARY} > totalShards`; + const SUBJ_SUMMARY_UNASSIGNED_SHARDS = `${SUBJ_SUMMARY} > unassignedShards`; + const SUBJ_SUMMARY_HEALTH = `${SUBJ_SUMMARY} > statusIcon`; return new class ElasticsearchIndexDetail { diff --git a/x-pack/test/functional/services/monitoring/elasticsearch_indices.js b/x-pack/test/functional/services/monitoring/elasticsearch_indices.js index cc2fcd831c59..1af2b552412a 100644 --- a/x-pack/test/functional/services/monitoring/elasticsearch_indices.js +++ b/x-pack/test/functional/services/monitoring/elasticsearch_indices.js @@ -14,20 +14,20 @@ export function MonitoringElasticsearchIndicesProvider({ getService, getPageObje const SUBJ_LISTING_PAGE = 'elasticsearchIndicesListingPage'; const SUBJ_TABLE_CONTAINER = 'elasticsearchIndicesTableContainer'; - const SUBJ_TABLE_NO_DATA = `${SUBJ_TABLE_CONTAINER} monitoringTableNoData`; - const SUBJ_SEARCH_BAR = `${SUBJ_TABLE_CONTAINER} monitoringTableToolBar`; + const SUBJ_TABLE_NO_DATA = `${SUBJ_TABLE_CONTAINER} > monitoringTableNoData`; + const SUBJ_SEARCH_BAR = `${SUBJ_TABLE_CONTAINER} > monitoringTableToolBar`; const SUBJ_TABLE_SORT_SEARCH_COL = `${SUBJ_TABLE_CONTAINER} tableHeaderCell_search_rate_5`; - const SUBJ_INDICES_NAMES = `${SUBJ_TABLE_CONTAINER} name`; - const SUBJ_INDICES_STATUSES = `${SUBJ_TABLE_CONTAINER} statusIcon`; - const SUBJ_INDICES_DOCUMENT_COUNTS = `${SUBJ_TABLE_CONTAINER} documentCount`; - const SUBJ_INDICES_DATA_SIZES = `${SUBJ_TABLE_CONTAINER} dataSize`; - const SUBJ_INDICES_INDEX_RATES = `${SUBJ_TABLE_CONTAINER} indexRate`; - const SUBJ_INDICES_SEARCH_RATES = `${SUBJ_TABLE_CONTAINER} searchRate`; - const SUBJ_INDICES_UNASSIGNED_SHARD_COUNTS = `${SUBJ_TABLE_CONTAINER} unassignedShards`; + const SUBJ_INDICES_NAMES = `${SUBJ_TABLE_CONTAINER} > name`; + const SUBJ_INDICES_STATUSES = `${SUBJ_TABLE_CONTAINER} > statusIcon`; + const SUBJ_INDICES_DOCUMENT_COUNTS = `${SUBJ_TABLE_CONTAINER} > documentCount`; + const SUBJ_INDICES_DATA_SIZES = `${SUBJ_TABLE_CONTAINER} > dataSize`; + const SUBJ_INDICES_INDEX_RATES = `${SUBJ_TABLE_CONTAINER} > indexRate`; + const SUBJ_INDICES_SEARCH_RATES = `${SUBJ_TABLE_CONTAINER} > searchRate`; + const SUBJ_INDICES_UNASSIGNED_SHARD_COUNTS = `${SUBJ_TABLE_CONTAINER} > unassignedShards`; - const SUBJ_INDEX_LINK_PREFIX = `${SUBJ_TABLE_CONTAINER} indexLink-`; + const SUBJ_INDEX_LINK_PREFIX = `${SUBJ_TABLE_CONTAINER} > indexLink-`; return new class ElasticsearchIndices { async isOnListing() { diff --git a/x-pack/test/functional/services/monitoring/elasticsearch_node_detail.js b/x-pack/test/functional/services/monitoring/elasticsearch_node_detail.js index 616b02b350e5..8814481b6e77 100644 --- a/x-pack/test/functional/services/monitoring/elasticsearch_node_detail.js +++ b/x-pack/test/functional/services/monitoring/elasticsearch_node_detail.js @@ -8,15 +8,15 @@ export function MonitoringElasticsearchNodeDetailProvider({ getService }) { const testSubjects = getService('testSubjects'); const SUBJ_SUMMARY = 'elasticsearchNodeDetailStatus'; - const SUBJ_SUMMARY_TRANSPORT_ADDRESS = `${SUBJ_SUMMARY} transportAddress`; - const SUBJ_SUMMARY_JVM_HEAP = `${SUBJ_SUMMARY} jvmHeap`; - const SUBJ_SUMMARY_FREE_DISK_SPACE = `${SUBJ_SUMMARY} freeDiskSpace`; - const SUBJ_SUMMARY_DOCUMENT_COUNT = `${SUBJ_SUMMARY} documentCount`; - const SUBJ_SUMMARY_DATA_SIZE = `${SUBJ_SUMMARY} dataSize`; - const SUBJ_SUMMARY_INDICES_COUNT = `${SUBJ_SUMMARY} indicesCount`; - const SUBJ_SUMMARY_SHARDS_COUNT = `${SUBJ_SUMMARY} shardsCount`; - const SUBJ_SUMMARY_NODE_TYPE = `${SUBJ_SUMMARY} nodeType`; - const SUBJ_SUMMARY_STATUS = `${SUBJ_SUMMARY} statusIcon`; + const SUBJ_SUMMARY_TRANSPORT_ADDRESS = `${SUBJ_SUMMARY} > transportAddress`; + const SUBJ_SUMMARY_JVM_HEAP = `${SUBJ_SUMMARY} > jvmHeap`; + const SUBJ_SUMMARY_FREE_DISK_SPACE = `${SUBJ_SUMMARY} > freeDiskSpace`; + const SUBJ_SUMMARY_DOCUMENT_COUNT = `${SUBJ_SUMMARY} > documentCount`; + const SUBJ_SUMMARY_DATA_SIZE = `${SUBJ_SUMMARY} > dataSize`; + const SUBJ_SUMMARY_INDICES_COUNT = `${SUBJ_SUMMARY} > indicesCount`; + const SUBJ_SUMMARY_SHARDS_COUNT = `${SUBJ_SUMMARY} > shardsCount`; + const SUBJ_SUMMARY_NODE_TYPE = `${SUBJ_SUMMARY} > nodeType`; + const SUBJ_SUMMARY_STATUS = `${SUBJ_SUMMARY} > statusIcon`; return new class ElasticsearchNodeDetail { diff --git a/x-pack/test/functional/services/monitoring/elasticsearch_nodes.js b/x-pack/test/functional/services/monitoring/elasticsearch_nodes.js index 3ed02fc4984c..93877eeea9d0 100644 --- a/x-pack/test/functional/services/monitoring/elasticsearch_nodes.js +++ b/x-pack/test/functional/services/monitoring/elasticsearch_nodes.js @@ -14,27 +14,27 @@ export function MonitoringElasticsearchNodesProvider({ getService, getPageObject const SUBJ_LISTING_PAGE = 'elasticsearchNodesListingPage'; const SUBJ_TABLE_CONTAINER = 'elasticsearchNodesTableContainer'; - const SUBJ_TABLE_NO_DATA = `${SUBJ_TABLE_CONTAINER} monitoringTableNoData`; - const SUBJ_SEARCH_BAR = `${SUBJ_TABLE_CONTAINER} monitoringTableToolBar`; + const SUBJ_TABLE_NO_DATA = `${SUBJ_TABLE_CONTAINER} > monitoringTableNoData`; + const SUBJ_SEARCH_BAR = `${SUBJ_TABLE_CONTAINER} > monitoringTableToolBar`; - const SUBJ_TABLE_SORT_NAME_COL = `${SUBJ_TABLE_CONTAINER} tableHeaderCell_name_0`; - const SUBJ_TABLE_SORT_STATUS_COL = `${SUBJ_TABLE_CONTAINER} tableHeaderCell_isOnline_1`; - const SUBJ_TABLE_SORT_SHARDS_COL = `${SUBJ_TABLE_CONTAINER} tableHeaderCell_shardCount_2`; - const SUBJ_TABLE_SORT_CPU_COL = `${SUBJ_TABLE_CONTAINER} tableHeaderCell_node_cpu_utilization_3`; - const SUBJ_TABLE_SORT_LOAD_COL = `${SUBJ_TABLE_CONTAINER} tableHeaderCell_node_load_average_4`; - const SUBJ_TABLE_SORT_MEM_COL = `${SUBJ_TABLE_CONTAINER} tableHeaderCell_node_jvm_mem_percent_5`; - const SUBJ_TABLE_SORT_DISK_COL = `${SUBJ_TABLE_CONTAINER} tableHeaderCell_node_free_space_6`; + const SUBJ_TABLE_SORT_NAME_COL = `${SUBJ_TABLE_CONTAINER} > tableHeaderCell_name_0`; + const SUBJ_TABLE_SORT_STATUS_COL = `${SUBJ_TABLE_CONTAINER} > tableHeaderCell_isOnline_1`; + const SUBJ_TABLE_SORT_SHARDS_COL = `${SUBJ_TABLE_CONTAINER} > tableHeaderCell_shardCount_2`; + const SUBJ_TABLE_SORT_CPU_COL = `${SUBJ_TABLE_CONTAINER} > tableHeaderCell_node_cpu_utilization_3`; + const SUBJ_TABLE_SORT_LOAD_COL = `${SUBJ_TABLE_CONTAINER} > tableHeaderCell_node_load_average_4`; + const SUBJ_TABLE_SORT_MEM_COL = `${SUBJ_TABLE_CONTAINER} > tableHeaderCell_node_jvm_mem_percent_5`; + const SUBJ_TABLE_SORT_DISK_COL = `${SUBJ_TABLE_CONTAINER} > tableHeaderCell_node_free_space_6`; const SUBJ_TABLE_BODY = 'elasticsearchNodesTableContainer'; - const SUBJ_NODES_NAMES = `${SUBJ_TABLE_BODY} name`; - const SUBJ_NODES_STATUSES = `${SUBJ_TABLE_BODY} statusIcon`; - const SUBJ_NODES_CPUS = `${SUBJ_TABLE_BODY} cpuUsage`; - const SUBJ_NODES_LOADS = `${SUBJ_TABLE_BODY} loadAverage`; - const SUBJ_NODES_MEMS = `${SUBJ_TABLE_BODY} jvmMemory`; - const SUBJ_NODES_DISKS = `${SUBJ_TABLE_BODY} diskFreeSpace`; - const SUBJ_NODES_SHARDS = `${SUBJ_TABLE_BODY} shards`; + const SUBJ_NODES_NAMES = `${SUBJ_TABLE_BODY} > name`; + const SUBJ_NODES_STATUSES = `${SUBJ_TABLE_BODY} > statusIcon`; + const SUBJ_NODES_CPUS = `${SUBJ_TABLE_BODY} > cpuUsage`; + const SUBJ_NODES_LOADS = `${SUBJ_TABLE_BODY} > loadAverage`; + const SUBJ_NODES_MEMS = `${SUBJ_TABLE_BODY} > jvmMemory`; + const SUBJ_NODES_DISKS = `${SUBJ_TABLE_BODY} > diskFreeSpace`; + const SUBJ_NODES_SHARDS = `${SUBJ_TABLE_BODY} > shards`; - const SUBJ_NODE_LINK_PREFIX = `${SUBJ_TABLE_BODY} nodeLink-`; + const SUBJ_NODE_LINK_PREFIX = `${SUBJ_TABLE_BODY} > nodeLink-`; return new class ElasticsearchIndices { async isOnListing() { diff --git a/x-pack/test/functional/services/monitoring/elasticsearch_shards.js b/x-pack/test/functional/services/monitoring/elasticsearch_shards.js index 415b260177b6..cc1feb9de8ce 100644 --- a/x-pack/test/functional/services/monitoring/elasticsearch_shards.js +++ b/x-pack/test/functional/services/monitoring/elasticsearch_shards.js @@ -27,10 +27,10 @@ const classificationsAndTooltipsReducer = (classifications, tooltips) => { export function MonitoringElasticsearchShardsProvider({ getService }) { const testSubjects = getService('testSubjects'); - const SUBJ_UNASSIGNED_SHARDS = `clusterView-Unassigned shardIcon`; + const SUBJ_UNASSIGNED_SHARDS = `clusterView-Unassigned > shardIcon`; const SUBJ_ASSIGNED_CONTAINER_PREFIX = 'clusterView-Assigned-'; const SUBJ_SHOW_SYSTEM_INDICES = 'shardShowSystemIndices'; - const getAssignedShardsSelector = parent => parent + ' shardIcon'; // will be used in a descendant search starting with SUBJ_ASSIGNED_CONTAINER + const getAssignedShardsSelector = parent => parent + '> shardIcon'; // will be used in a descendant search starting with SUBJ_ASSIGNED_CONTAINER return new class ElasticsearchShards { diff --git a/x-pack/test/functional/services/monitoring/elasticsearch_summary_status.js b/x-pack/test/functional/services/monitoring/elasticsearch_summary_status.js index 781a83a0c1e0..458d3b4ffe96 100644 --- a/x-pack/test/functional/services/monitoring/elasticsearch_summary_status.js +++ b/x-pack/test/functional/services/monitoring/elasticsearch_summary_status.js @@ -8,14 +8,14 @@ export function MonitoringElasticsearchSummaryStatusProvider({ getService }) { const testSubjects = getService('testSubjects'); const SUBJ_SUMMARY = 'elasticsearchClusterStatus'; - const SUBJ_SUMMARY_NODES_COUNT = `${SUBJ_SUMMARY} nodesCount`; - const SUBJ_SUMMARY_INDICES_COUNT = `${SUBJ_SUMMARY} indicesCount`; - const SUBJ_SUMMARY_MEMORY = `${SUBJ_SUMMARY} memory`; - const SUBJ_SUMMARY_TOTAL_SHARDS = `${SUBJ_SUMMARY} totalShards`; - const SUBJ_SUMMARY_UNASSIGNED_SHARDS = `${SUBJ_SUMMARY} unassignedShards`; - const SUBJ_SUMMARY_DOCUMENT_COUNT = `${SUBJ_SUMMARY} documentCount`; - const SUBJ_SUMMARY_DATA_SIZE = `${SUBJ_SUMMARY} dataSize`; - const SUBJ_SUMMARY_HEALTH = `${SUBJ_SUMMARY} statusIcon`; + const SUBJ_SUMMARY_NODES_COUNT = `${SUBJ_SUMMARY} > nodesCount`; + const SUBJ_SUMMARY_INDICES_COUNT = `${SUBJ_SUMMARY} > indicesCount`; + const SUBJ_SUMMARY_MEMORY = `${SUBJ_SUMMARY} > memory`; + const SUBJ_SUMMARY_TOTAL_SHARDS = `${SUBJ_SUMMARY} > totalShards`; + const SUBJ_SUMMARY_UNASSIGNED_SHARDS = `${SUBJ_SUMMARY} > unassignedShards`; + const SUBJ_SUMMARY_DOCUMENT_COUNT = `${SUBJ_SUMMARY} > documentCount`; + const SUBJ_SUMMARY_DATA_SIZE = `${SUBJ_SUMMARY} > dataSize`; + const SUBJ_SUMMARY_HEALTH = `${SUBJ_SUMMARY} > statusIcon`; return new class ElasticsearchSummaryStatus { diff --git a/x-pack/test/functional/services/monitoring/kibana_instance.js b/x-pack/test/functional/services/monitoring/kibana_instance.js index 66edafaa9bab..c468f93d0a32 100644 --- a/x-pack/test/functional/services/monitoring/kibana_instance.js +++ b/x-pack/test/functional/services/monitoring/kibana_instance.js @@ -11,11 +11,11 @@ export function MonitoringKibanaInstanceProvider({ getService }) { const SUBJ_INSTANCE_PAGE = 'kibanaInstancePage'; const SUBJ_SUMMARY = 'kibanaDetailStatus'; - const SUBJ_SUMMARY_TRANSPORT_ADDRESS = `${SUBJ_SUMMARY} transportAddress`; - const SUBJ_SUMMARY_OS_FREE_MEMORY = `${SUBJ_SUMMARY} osFreeMemory`; - const SUBJ_SUMMARY_VERSION = `${SUBJ_SUMMARY} version`; - const SUBJ_SUMMARY_UPTIME = `${SUBJ_SUMMARY} uptime`; - const SUBJ_SUMMARY_HEALTH = `${SUBJ_SUMMARY} statusIcon`; + const SUBJ_SUMMARY_TRANSPORT_ADDRESS = `${SUBJ_SUMMARY} > transportAddress`; + const SUBJ_SUMMARY_OS_FREE_MEMORY = `${SUBJ_SUMMARY} > osFreeMemory`; + const SUBJ_SUMMARY_VERSION = `${SUBJ_SUMMARY} > version`; + const SUBJ_SUMMARY_UPTIME = `${SUBJ_SUMMARY} > uptime`; + const SUBJ_SUMMARY_HEALTH = `${SUBJ_SUMMARY} > statusIcon`; return new class KibanaInstance { diff --git a/x-pack/test/functional/services/monitoring/kibana_instances.js b/x-pack/test/functional/services/monitoring/kibana_instances.js index 1153227c8675..3a934600710c 100644 --- a/x-pack/test/functional/services/monitoring/kibana_instances.js +++ b/x-pack/test/functional/services/monitoring/kibana_instances.js @@ -11,7 +11,7 @@ export function MonitoringKibanaInstancesProvider({ getService }) { const SUBJ_INSTANCES_PAGE = 'kibanaInstancesPage'; const SUBJ_TABLE_BODY = 'kibanaInstancesTableContainer'; - const SUBJ_INDEX_LINK_PREFIX = `${SUBJ_TABLE_BODY} kibanaLink-`; + const SUBJ_INDEX_LINK_PREFIX = `${SUBJ_TABLE_BODY} > kibanaLink-`; return new class KibanaInstances { diff --git a/x-pack/test/functional/services/monitoring/kibana_summary_status.js b/x-pack/test/functional/services/monitoring/kibana_summary_status.js index 45a961621c18..6ce00c7635e3 100644 --- a/x-pack/test/functional/services/monitoring/kibana_summary_status.js +++ b/x-pack/test/functional/services/monitoring/kibana_summary_status.js @@ -8,12 +8,12 @@ export function MonitoringKibanaSummaryStatusProvider({ getService }) { const testSubjects = getService('testSubjects'); const SUBJ_SUMMARY = 'kibanaClusterStatus'; - const SUBJ_SUMMARY_INSTANCES = `${SUBJ_SUMMARY} instances`; - const SUBJ_SUMMARY_MEMORY = `${SUBJ_SUMMARY} memory`; - const SUBJ_SUMMARY_REQUESTS = `${SUBJ_SUMMARY} requests`; - const SUBJ_SUMMARY_CONNECTIONS = `${SUBJ_SUMMARY} connections`; - const SUBJ_SUMMARY_MAX_RESPONSE_TIME = `${SUBJ_SUMMARY} maxResponseTime`; - const SUBJ_SUMMARY_HEALTH = `${SUBJ_SUMMARY} statusIcon`; + const SUBJ_SUMMARY_INSTANCES = `${SUBJ_SUMMARY} > instances`; + const SUBJ_SUMMARY_MEMORY = `${SUBJ_SUMMARY} > memory`; + const SUBJ_SUMMARY_REQUESTS = `${SUBJ_SUMMARY} > requests`; + const SUBJ_SUMMARY_CONNECTIONS = `${SUBJ_SUMMARY} > connections`; + const SUBJ_SUMMARY_MAX_RESPONSE_TIME = `${SUBJ_SUMMARY} > maxResponseTime`; + const SUBJ_SUMMARY_HEALTH = `${SUBJ_SUMMARY} > statusIcon`; return new class KibanaSummaryStatus { diff --git a/x-pack/test/functional/services/monitoring/logstash_pipelines.js b/x-pack/test/functional/services/monitoring/logstash_pipelines.js index be5251a748c9..f2c3fb839f7a 100644 --- a/x-pack/test/functional/services/monitoring/logstash_pipelines.js +++ b/x-pack/test/functional/services/monitoring/logstash_pipelines.js @@ -14,14 +14,14 @@ export function MonitoringLogstashPipelinesProvider({ getService, getPageObjects const SUBJ_LISTING_PAGE = 'logstashPipelinesListing'; const SUBJ_TABLE_CONTAINER = 'monitoringLogstashPipelinesTableContainer'; - const SUBJ_TABLE_NO_DATA = `${SUBJ_TABLE_CONTAINER} monitoringTableNoData`; - const SUBJ_SEARCH_BAR = `${SUBJ_TABLE_CONTAINER} monitoringTableToolBar`; + const SUBJ_TABLE_NO_DATA = `${SUBJ_TABLE_CONTAINER} > monitoringTableNoData`; + const SUBJ_SEARCH_BAR = `${SUBJ_TABLE_CONTAINER} > monitoringTableToolBar`; - const SUBJ_TABLE_SORT_EVENTS_EMITTED_RATE_COL = `${SUBJ_TABLE_CONTAINER} tableHeaderCell_latestThroughput_1`; + const SUBJ_TABLE_SORT_EVENTS_EMITTED_RATE_COL = `${SUBJ_TABLE_CONTAINER} > tableHeaderCell_latestThroughput_1`; - const SUBJ_PIPELINES_IDS = `${SUBJ_TABLE_CONTAINER} id`; - const SUBJ_PIPELINES_EVENTS_EMITTED_RATES = `${SUBJ_TABLE_CONTAINER} eventsEmittedRate`; - const SUBJ_PIPELINES_NODE_COUNTS = `${SUBJ_TABLE_CONTAINER} nodeCount`; + const SUBJ_PIPELINES_IDS = `${SUBJ_TABLE_CONTAINER} > id`; + const SUBJ_PIPELINES_EVENTS_EMITTED_RATES = `${SUBJ_TABLE_CONTAINER} > eventsEmittedRate`; + const SUBJ_PIPELINES_NODE_COUNTS = `${SUBJ_TABLE_CONTAINER} > nodeCount`; return new class LogstashPipelines { async isOnListing() { diff --git a/x-pack/test/functional/services/monitoring/logstash_summary_status.js b/x-pack/test/functional/services/monitoring/logstash_summary_status.js index 276413504097..dd819b3a284d 100644 --- a/x-pack/test/functional/services/monitoring/logstash_summary_status.js +++ b/x-pack/test/functional/services/monitoring/logstash_summary_status.js @@ -8,10 +8,10 @@ export function MonitoringLogstashSummaryStatusProvider({ getService }) { const testSubjects = getService('testSubjects'); const SUBJ_SUMMARY = 'logstashClusterStatus'; - const SUBJ_SUMMARY_NODE_COUNT = `${SUBJ_SUMMARY} node_count`; - const SUBJ_SUMMARY_MEMORY_USED = `${SUBJ_SUMMARY} memory_used`; - const SUBJ_SUMMARY_EVENTS_IN_TOTAL = `${SUBJ_SUMMARY} events_in_total`; - const SUBJ_SUMMARY_EVENTS_OUT_TOTAL = `${SUBJ_SUMMARY} events_out_total`; + const SUBJ_SUMMARY_NODE_COUNT = `${SUBJ_SUMMARY} > node_count`; + const SUBJ_SUMMARY_MEMORY_USED = `${SUBJ_SUMMARY} > memory_used`; + const SUBJ_SUMMARY_EVENTS_IN_TOTAL = `${SUBJ_SUMMARY} > events_in_total`; + const SUBJ_SUMMARY_EVENTS_OUT_TOTAL = `${SUBJ_SUMMARY} > events_out_total`; return new class LogstashSummaryStatus { diff --git a/x-pack/test/functional/services/pipeline_editor.js b/x-pack/test/functional/services/pipeline_editor.js index 67a349aa6f89..264ffd06fd36 100644 --- a/x-pack/test/functional/services/pipeline_editor.js +++ b/x-pack/test/functional/services/pipeline_editor.js @@ -13,23 +13,23 @@ export function PipelineEditorProvider({ getService }) { const testSubjects = getService('testSubjects'); // test subject selectors - const SUBJ_CONTAINER = 'pipelineEdit'; - const getContainerSubjForId = id => `pipelineEdit-${id}`; - const SUBJ_INPUT_ID = 'pipelineEdit inputId'; - const SUBJ_INPUT_DESCRIPTION = 'pipelineEdit inputDescription'; - const SUBJ_UI_ACE_PIPELINE = 'pipelineEdit acePipeline'; + const SUBJ_CONTAINER = '~pipelineEdit'; + const getContainerSubjForId = id => `~pipelineEdit-${id}`; + const SUBJ_INPUT_ID = '~pipelineEdit > inputId'; + const SUBJ_INPUT_DESCRIPTION = '~pipelineEdit > inputDescription'; + const SUBJ_UI_ACE_PIPELINE = '~pipelineEdit > acePipeline'; - const SUBJ_INPUT_WORKERS = 'pipelineEdit inputWorkers'; - const SUBJ_INPUT_BATCH_SIZE = 'pipelineEdit inputBatchSize'; - const SUBJ_SELECT_QUEUE_TYPE = 'pipelineEdit selectQueueType'; - const SUBJ_INPUT_QUEUE_MAX_BYTES_NUMBER = 'pipelineEdit inputQueueMaxBytesNumber'; - const SUBJ_SELECT_QUEUE_MAX_BYTES_UNITS = 'pipelineEdit selectQueueMaxBytesUnits'; - const SUBJ_INPUT_QUEUE_CHECKPOINT_WRITES = 'pipelineEdit inputQueueCheckpointWrites'; + const SUBJ_INPUT_WORKERS = '~pipelineEdit > inputWorkers'; + const SUBJ_INPUT_BATCH_SIZE = '~pipelineEdit > inputBatchSize'; + const SUBJ_SELECT_QUEUE_TYPE = '~pipelineEdit > selectQueueType'; + const SUBJ_INPUT_QUEUE_MAX_BYTES_NUMBER = '~pipelineEdit > inputQueueMaxBytesNumber'; + const SUBJ_SELECT_QUEUE_MAX_BYTES_UNITS = '~pipelineEdit > selectQueueMaxBytesUnits'; + const SUBJ_INPUT_QUEUE_CHECKPOINT_WRITES = '~pipelineEdit > inputQueueCheckpointWrites'; - const SUBJ_BTN_SAVE = 'pipelineEdit btnSavePipeline'; - const SUBJ_BTN_CANCEL = 'pipelineEdit btnCancel'; - const SUBJ_BTN_DELETE = 'pipelineEdit btnDeletePipeline'; - const SUBJ_LNK_BREADCRUMB_MANAGEMENT = 'breadcrumbs lnkBreadcrumb0'; + const SUBJ_BTN_SAVE = '~pipelineEdit > btnSavePipeline'; + const SUBJ_BTN_CANCEL = '~pipelineEdit > btnCancel'; + const SUBJ_BTN_DELETE = '~pipelineEdit > btnDeletePipeline'; + const SUBJ_LNK_BREADCRUMB_MANAGEMENT = 'breadcrumbs > lnkBreadcrumb0'; const DEFAULT_INPUT_VALUES = { id: '', diff --git a/x-pack/test/functional/services/pipeline_list.js b/x-pack/test/functional/services/pipeline_list.js index 07e7a4618016..aee2bf16f315 100644 --- a/x-pack/test/functional/services/pipeline_list.js +++ b/x-pack/test/functional/services/pipeline_list.js @@ -11,13 +11,13 @@ export function PipelineListProvider({ getService }) { // test subject selectors const SUBJ_CONTAINER = `pipelineList`; - const SUBJ_BTN_ADD = `pipelineList btnAdd`; - const SUBJ_BTN_DELETE = `pipelineList btnDeletePipeline`; - const getCloneLinkSubjForId = id => `pipelineList lnkPipelineClone-${id}`; - const SUBJ_FILTER = `pipelineList filter`; - const SUBJ_SELECT_ALL = `pipelineList pipelineTable checkboxSelectAll`; - const getSelectCheckbox = id => `pipelineList pipelineTable checkboxSelectRow-${id}`; - const SUBJ_BTN_NEXT_PAGE = `pipelineList pagination-button-next`; + const SUBJ_BTN_ADD = `pipelineList > btnAdd`; + const SUBJ_BTN_DELETE = `pipelineList > btnDeletePipeline`; + const getCloneLinkSubjForId = id => `pipelineList > lnkPipelineClone-${id}`; + const SUBJ_FILTER = `pipelineList > filter`; + const SUBJ_SELECT_ALL = `pipelineList > pipelineTable > checkboxSelectAll`; + const getSelectCheckbox = id => `pipelineList > pipelineTable > checkboxSelectRow-${id}`; + const SUBJ_BTN_NEXT_PAGE = `pipelineList > pagination-button-next`; const INNER_SUBJ_ROW = `row`; const INNER_SUBJ_CELL_ID = `cellId`; @@ -25,7 +25,7 @@ export function PipelineListProvider({ getService }) { const INNER_SUBJ_CELL_LAST_MODIFIED = `cellLastModified`; const INNER_SUBJ_CELL_USERNAME = `cellUsername`; - const SUBJ_CELL_ID = `${SUBJ_CONTAINER} ${INNER_SUBJ_ROW} ${INNER_SUBJ_CELL_ID}`; + const SUBJ_CELL_ID = `${SUBJ_CONTAINER} > ${INNER_SUBJ_ROW} > ${INNER_SUBJ_CELL_ID}`; return new class PipelineList { /** diff --git a/x-pack/test/functional/services/user_menu.js b/x-pack/test/functional/services/user_menu.js index 330ceae52f83..a19655be01f7 100644 --- a/x-pack/test/functional/services/user_menu.js +++ b/x-pack/test/functional/services/user_menu.js @@ -11,12 +11,12 @@ export function UserMenuProvider({ getService }) { return new class UserMenu { async clickLogoutButton() { await this._ensureMenuOpen(); - await testSubjects.click('userMenu logoutLink'); + await testSubjects.click('userMenu > logoutLink'); } async clickProvileLink() { await this._ensureMenuOpen(); - await testSubjects.click('userMenu profileLink'); + await testSubjects.click('userMenu > profileLink'); } async logoutLinkExists() { @@ -25,7 +25,7 @@ export function UserMenuProvider({ getService }) { } await this._ensureMenuOpen(); - return await testSubjects.exists('userMenu logoutLink'); + return await testSubjects.exists('userMenu > logoutLink'); } async closeMenu() {