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.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=e28d7287bd109b5c1682dc832c4a77ea47505165;p=ceph-ci.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 e5adea06ffa..93b37627cb6 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 22ffb926140..f032c7657ca 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 0e59625365f..51d7dba110d 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 a45c8a15f73..e54f6dfca05 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 05209f5b537..d4e10e49136 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 c0f6d930afd..c5fe25b2ef0 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 4761b6a2672..315c5ed4a29 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 9d3aa031cef..347ba502315 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 bbc71207f74..7bb837449b2 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 d1b2dc81d78..71127f4a3a2 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 0790b127dfc..f86c8d2d556 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 d2f27793dba..2eccd062c78 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 5ff7dd35d7e..85b3e9b0aad 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 a5908163465..f06c515926e 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 344afcd3245..604b8075454 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 d51aeaef7cf..5addf779a96 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 df5fbf2cfb5..ba16c848238 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 b747adf2295..e98101ed54b 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 c563a52fec5..5510bf21cd6 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 57d9041819d..ab902d2d2ca 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 24b982d7cc7..a396ad76c74 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 c36f16fb821..2afea64b5d7 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 ff988b10661..cf880d6f338 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 3f72e3ce673..410b7b62aa5 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'); }); });