From: Volker Theile Date: Mon, 9 Sep 2019 14:43:13 +0000 (+0200) Subject: mgr/dashboard: Wait for breadcrumb text is present in e2e tests X-Git-Tag: v15.1.0~1603^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e28d7287bd109b5c1682dc832c4a77ea47505165;p=ceph.git mgr/dashboard: Wait for breadcrumb text is present in e2e tests When the cluster is busy it might take some time until the tested component has loaded it's data and is rendered in the browser. Waiting for the breadcrumb text to be present might help to fix errors in the e2e tests. Signed-off-by: Volker Theile --- diff --git a/src/pybind/mgr/dashboard/frontend/e2e/block/images.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/block/images.e2e-spec.ts index e5adea06ffa1..93b37627cb69 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/block/images.e2e-spec.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/block/images.e2e-spec.ts @@ -21,7 +21,7 @@ describe('Images page', () => { }); it('should open and show breadcrumb', async () => { - await expect(images.getBreadcrumbText()).toEqual('Images'); + await images.waitTextToBePresent(images.getBreadcrumb(), 'Images'); }); it('should show three tabs', async () => { diff --git a/src/pybind/mgr/dashboard/frontend/e2e/block/iscsi.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/block/iscsi.e2e-spec.ts index 22ffb9261409..f032c7657ca7 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/block/iscsi.e2e-spec.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/block/iscsi.e2e-spec.ts @@ -18,7 +18,7 @@ describe('Iscsi Page', () => { }); it('should open and show breadcrumb', async () => { - await expect(iscsi.getBreadcrumbText()).toEqual('Overview'); + await iscsi.waitTextToBePresent(iscsi.getBreadcrumb(), 'Overview'); }); }); diff --git a/src/pybind/mgr/dashboard/frontend/e2e/block/mirroring.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/block/mirroring.e2e-spec.ts index 0e59625365f9..51d7dba110d7 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/block/mirroring.e2e-spec.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/block/mirroring.e2e-spec.ts @@ -21,7 +21,7 @@ describe('Mirroring page', () => { }); it('should open and show breadcrumb', async () => { - await expect(mirroring.getBreadcrumbText()).toEqual('Mirroring'); + await mirroring.waitTextToBePresent(mirroring.getBreadcrumb(), 'Mirroring'); }); it('should show three tabs', async () => { diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/alerts.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/alerts.e2e-spec.ts index a45c8a15f735..e54f6dfca05d 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/cluster/alerts.e2e-spec.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/alerts.e2e-spec.ts @@ -18,7 +18,7 @@ describe('Alerts page', () => { }); it('should open and show breadcrumb', async () => { - await expect(alerts.getBreadcrumbText()).toEqual('Alerts'); + await alerts.waitTextToBePresent(alerts.getBreadcrumb(), 'Alerts'); }); }); }); diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/configuration.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/configuration.e2e-spec.ts index 05209f5b5376..d4e10e49136d 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/cluster/configuration.e2e-spec.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/configuration.e2e-spec.ts @@ -19,7 +19,7 @@ describe('Configuration page', () => { }); it('should open and show breadcrumb', async () => { - await expect(configuration.getBreadcrumbText()).toEqual('Configuration'); + await configuration.waitTextToBePresent(configuration.getBreadcrumb(), 'Configuration'); }); }); diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/configuration.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/configuration.po.ts index c0f6d930afd0..c5fe25b2ef04 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/cluster/configuration.po.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/configuration.po.ts @@ -63,7 +63,7 @@ export class ConfigurationPageHelper extends PageHelper { await this.getTableCell(name).click(); // click on the config to edit await element(by.cssContainingText('button', 'Edit')).click(); // clicks button to edit - await expect(this.getBreadcrumbText()).toEqual('Edit'); + await this.waitTextToBePresent(this.getBreadcrumb(), 'Edit'); for (let i = 0, valtuple; (valtuple = values[i]); i++) { // Finds desired value based off given list diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/crush-map.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/crush-map.e2e-spec.ts index 4761b6a2672c..315c5ed4a292 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/cluster/crush-map.e2e-spec.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/crush-map.e2e-spec.ts @@ -19,7 +19,7 @@ describe('CRUSH map page', () => { }); it('should open and show breadcrumb', async () => { - await expect(crushmap.getBreadcrumbText()).toEqual('CRUSH map'); + await crushmap.waitTextToBePresent(crushmap.getBreadcrumb(), 'CRUSH map'); }); }); describe('fields check', () => { diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/hosts.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/hosts.e2e-spec.ts index 9d3aa031cefb..347ba502315d 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/cluster/hosts.e2e-spec.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/hosts.e2e-spec.ts @@ -18,7 +18,7 @@ describe('Hosts page', () => { }); it('should open and show breadcrumb', async () => { - await expect(hosts.getBreadcrumbText()).toEqual('Hosts'); + await hosts.waitTextToBePresent(hosts.getBreadcrumb(), 'Hosts'); }); it('should show two tabs', async () => { diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/hosts.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/hosts.po.ts index bbc71207f74f..7bb837449b2b 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/cluster/hosts.po.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/hosts.po.ts @@ -31,9 +31,9 @@ export class HostsPageHelper extends PageHelper { // click link, check it worked by looking for changed breadcrumb, // navigate back to hosts page, repeat until all links checked await links.get(i).click(); - await expect(this.getBreadcrumbText()).toEqual('Performance Counters'); + await this.waitTextToBePresent(this.getBreadcrumb(), 'Performance Counters'); await this.navigateTo(); - await expect(this.getBreadcrumbText()).toEqual('Hosts'); + await this.waitTextToBePresent(this.getBreadcrumb(), 'Hosts'); links_tested++; } // check if any links were actually tested diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/logs.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/logs.e2e-spec.ts index d1b2dc81d78c..71127f4a3a27 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/cluster/logs.e2e-spec.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/logs.e2e-spec.ts @@ -33,7 +33,7 @@ describe('Logs page', () => { }); it('should open and show breadcrumb', async () => { - await expect(logs.getBreadcrumbText()).toEqual('Logs'); + await logs.waitTextToBePresent(logs.getBreadcrumb(), 'Logs'); }); it('should show two tabs', async () => { diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/mgr-modules.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/mgr-modules.e2e-spec.ts index 0790b127dfc1..f86c8d2d5569 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/cluster/mgr-modules.e2e-spec.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/mgr-modules.e2e-spec.ts @@ -18,7 +18,7 @@ describe('Manager modules page', () => { }); it('should open and show breadcrumb', async () => { - await expect(mgrmodules.getBreadcrumbText()).toEqual('Manager modules'); + await mgrmodules.waitTextToBePresent(mgrmodules.getBreadcrumb(), 'Manager modules'); }); }); diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/monitors.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/monitors.e2e-spec.ts index d2f27793dbaa..2eccd062c788 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/cluster/monitors.e2e-spec.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/monitors.e2e-spec.ts @@ -18,7 +18,7 @@ describe('Monitors page', () => { }); it('should open and show breadcrumb', async () => { - await expect(monitors.getBreadcrumbText()).toEqual('Monitors'); + await monitors.waitTextToBePresent(monitors.getBreadcrumb(), 'Monitors'); }); }); diff --git a/src/pybind/mgr/dashboard/frontend/e2e/cluster/osds.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/cluster/osds.e2e-spec.ts index 5ff7dd35d7e4..85b3e9b0aadd 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/cluster/osds.e2e-spec.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/cluster/osds.e2e-spec.ts @@ -18,7 +18,7 @@ describe('OSDs page', () => { }); it('should open and show breadcrumb', async () => { - await expect(osds.getBreadcrumbText()).toEqual('OSDs'); + await osds.waitTextToBePresent(osds.getBreadcrumb(), 'OSDs'); }); it('should show two tabs', async () => { diff --git a/src/pybind/mgr/dashboard/frontend/e2e/dashboard.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/dashboard.e2e-spec.ts index a5908163465c..f06c515926ef 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/dashboard.e2e-spec.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/dashboard.e2e-spec.ts @@ -50,7 +50,7 @@ describe('Dashboard Main Page', () => { for (const [linkText, breadcrumbText] of Object.entries(expectationMap)) { await expect(browser.getCurrentUrl()).toContain('/#/dashboard'); await dashboard.clickInfoCardLink(linkText); - await expect(dashboard.getBreadcrumbText()).toEqual(breadcrumbText); + await dashboard.waitTextToBePresent(dashboard.getBreadcrumb(), breadcrumbText); await dashboard.navigateBack(); } }); diff --git a/src/pybind/mgr/dashboard/frontend/e2e/filesystems/filesystems.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/filesystems/filesystems.e2e-spec.ts index 344afcd32458..604b8075454a 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/filesystems/filesystems.e2e-spec.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/filesystems/filesystems.e2e-spec.ts @@ -18,7 +18,7 @@ describe('Filesystems page', () => { }); it('should open and show breadcrumb', async () => { - await expect(filesystems.getBreadcrumbText()).toEqual('Filesystems'); + await filesystems.waitTextToBePresent(filesystems.getBreadcrumb(), 'Filesystems'); }); }); }); diff --git a/src/pybind/mgr/dashboard/frontend/e2e/nfs/nfs.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/nfs/nfs.e2e-spec.ts index d51aeaef7cf9..5addf779a960 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/nfs/nfs.e2e-spec.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/nfs/nfs.e2e-spec.ts @@ -18,7 +18,7 @@ describe('Nfs page', () => { }); it('should open and show breadcrumb', async () => { - await expect(nfs.getBreadcrumbText()).toEqual('NFS'); + await nfs.waitTextToBePresent(nfs.getBreadcrumb(), 'NFS'); }); }); }); diff --git a/src/pybind/mgr/dashboard/frontend/e2e/page-helper.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/page-helper.po.ts index df5fbf2cfb54..ba16c8482388 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/page-helper.po.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/page-helper.po.ts @@ -78,8 +78,11 @@ export abstract class PageHelper { }; } - async getBreadcrumbText(): Promise { - return $('.breadcrumb-item.active').getText(); + /** + * Get the active breadcrumb item. + */ + getBreadcrumb(): ElementFinder { + return $('.breadcrumb-item.active'); } async getTabText(index): Promise { diff --git a/src/pybind/mgr/dashboard/frontend/e2e/pools/pools.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/pools/pools.e2e-spec.ts index b747adf2295d..e98101ed54be 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/pools/pools.e2e-spec.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/pools/pools.e2e-spec.ts @@ -16,7 +16,7 @@ describe('Pools page', () => { describe('breadcrumb and tab tests', () => { it('should open and show breadcrumb', async () => { - await expect(pools.getBreadcrumbText()).toEqual('Pools'); + await pools.waitTextToBePresent(pools.getBreadcrumb(), 'Pools'); }); it('should show two tabs', async () => { diff --git a/src/pybind/mgr/dashboard/frontend/e2e/pools/pools.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/pools/pools.po.ts index c563a52fec55..5510bf21cd66 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/pools/pools.po.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/pools/pools.po.ts @@ -60,7 +60,7 @@ export class PoolPageHelper extends PageHelper { const elem = await this.getTableCellByContent(name); await elem.click(); // select pool from the table await element(by.cssContainingText('button', 'Edit')).click(); // click edit button - await expect(this.getBreadcrumbText()).toEqual('Edit'); // verify we are now on edit page + await this.waitTextToBePresent(this.getBreadcrumb(), 'Edit'); // verify we are now on edit page await $('input[name=pgNum]').sendKeys(protractor.Key.CONTROL, 'a', protractor.Key.NULL, new_pg); await element(by.css('cd-submit-button')).click(); const str = `${new_pg} active+clean`; diff --git a/src/pybind/mgr/dashboard/frontend/e2e/rgw/buckets.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/rgw/buckets.po.ts index 57d9041819de..ab902d2d2ca5 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/rgw/buckets.po.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/rgw/buckets.po.ts @@ -41,7 +41,7 @@ export class BucketsPageHelper extends PageHelper { async edit(name: string, new_owner: string) { await this.getTableCell(name).click(); // click on the bucket you want to edit in the table await element(by.cssContainingText('button', 'Edit')).click(); // click button to move to edit page - await expect(this.getBreadcrumbText()).toEqual('Edit'); + await this.waitTextToBePresent(this.getBreadcrumb(), 'Edit'); await expect(element(by.css('input[name=placement-target]')).getAttribute('value')).toBe( 'default-placement' ); @@ -144,7 +144,7 @@ export class BucketsPageHelper extends PageHelper { // Clicks the Create Bucket button but the page doesn't move. Done by testing // for the breadcrumb await element(by.cssContainingText('button', 'Create Bucket')).click(); // Clicks Create Bucket button - await expect(this.getBreadcrumbText()).toEqual('Create'); + await this.waitTextToBePresent(this.getBreadcrumb(), 'Create'); // content in fields seems to subsist through tests if not cleared, so it is cleared await nameInputField.clear(); return element(by.cssContainingText('button', 'Cancel')).click(); @@ -160,7 +160,7 @@ export class BucketsPageHelper extends PageHelper { await this.getTableCell(name).click(); // click on the bucket you want to edit in the table await element(by.cssContainingText('button', 'Edit')).click(); // click button to move to edit page - await expect(this.getBreadcrumbText()).toEqual('Edit'); + await this.waitTextToBePresent(this.getBreadcrumb(), 'Edit'); // Chooses 'Select a user' rather than a valid owner on Edit Bucket page // and checks if it's an invalid input @@ -183,6 +183,6 @@ export class BucketsPageHelper extends PageHelper { 'This field is required.' ); - await expect(this.getBreadcrumbText()).toEqual('Edit'); + await this.waitTextToBePresent(this.getBreadcrumb(), 'Edit'); } } diff --git a/src/pybind/mgr/dashboard/frontend/e2e/rgw/daemons.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/rgw/daemons.e2e-spec.ts index 24b982d7cc7e..a396ad76c748 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/rgw/daemons.e2e-spec.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/rgw/daemons.e2e-spec.ts @@ -18,7 +18,7 @@ describe('RGW daemons page', () => { }); it('should open and show breadcrumb', async () => { - await expect(daemons.getBreadcrumbText()).toEqual('Daemons'); + await daemons.waitTextToBePresent(daemons.getBreadcrumb(), 'Daemons'); }); it('should show two tabs', async () => { diff --git a/src/pybind/mgr/dashboard/frontend/e2e/rgw/users.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/rgw/users.e2e-spec.ts index c36f16fb8212..2afea64b5d74 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/rgw/users.e2e-spec.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/rgw/users.e2e-spec.ts @@ -19,7 +19,7 @@ describe('RGW users page', () => { }); it('should open and show breadcrumb', async () => { - await expect(users.getBreadcrumbText()).toEqual('Users'); + await users.waitTextToBePresent(users.getBreadcrumb(), 'Users'); }); }); diff --git a/src/pybind/mgr/dashboard/frontend/e2e/rgw/users.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/rgw/users.po.ts index ff988b10661e..cf880d6f338b 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/rgw/users.po.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/rgw/users.po.ts @@ -39,7 +39,7 @@ export class UsersPageHelper extends PageHelper { await this.getTableCell(name).click(); // click on the bucket you want to edit in the table await element(by.cssContainingText('button', 'Edit')).click(); // click button to move to edit page - await expect(this.getBreadcrumbText()).toEqual('Edit'); + await this.waitTextToBePresent(this.getBreadcrumb(), 'Edit'); // Change the full name field await element(by.id('display_name')).click(); @@ -165,7 +165,7 @@ export class UsersPageHelper extends PageHelper { await this.getTableCell(uname).click(); // click on the bucket you want to edit in the table await element(by.cssContainingText('button', 'Edit')).click(); // click button to move to edit page - await expect(this.getBreadcrumbText()).toEqual('Edit'); + await this.waitTextToBePresent(this.getBreadcrumb(), 'Edit'); // put invalid email to make field invalid await element(by.id('email')).click(); diff --git a/src/pybind/mgr/dashboard/frontend/e2e/user-mgmt.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/user-mgmt.e2e-spec.ts index 3f72e3ce6736..410b7b62aa5c 100644 --- a/src/pybind/mgr/dashboard/frontend/e2e/user-mgmt.e2e-spec.ts +++ b/src/pybind/mgr/dashboard/frontend/e2e/user-mgmt.e2e-spec.ts @@ -17,22 +17,22 @@ describe('User Management page', () => { describe('breadcrumb tests', () => { it('should check breadcrumb on users tab of user management page', async () => { await userManagement.navigateTo('users'); - await expect(userManagement.getBreadcrumbText()).toEqual('Users'); + await userManagement.waitTextToBePresent(userManagement.getBreadcrumb(), 'Users'); }); it('should check breadcrumb on roles tab of user management page', async () => { await userManagement.navigateTo('roles'); - await expect(userManagement.getBreadcrumbText()).toEqual('Roles'); + await userManagement.waitTextToBePresent(userManagement.getBreadcrumb(), 'Roles'); }); it('should check breadcrumb on user creation page', async () => { await userManagement.navigateTo('userCreate'); - await expect(userManagement.getBreadcrumbText()).toEqual('Create'); + await userManagement.waitTextToBePresent(userManagement.getBreadcrumb(), 'Create'); }); it('should check breadcrumb on role creation page', async () => { await userManagement.navigateTo('roleCreate'); - await expect(userManagement.getBreadcrumbText()).toEqual('Create'); + await userManagement.waitTextToBePresent(userManagement.getBreadcrumb(), 'Create'); }); });