mirror of
https://github.com/elastic/kibana.git
synced 2025-06-27 18:51:07 -04:00
Fix flakiness on custom time range saved searches (#165454)
A bunch of tests on dashboards are customising some of the panels settings and providing custom time ranges: <img width="409" alt="image" src="c869c1a3
-f7db-4ccd-ad00-c5403f2b4201"> Currently, the logic is not waiting for the quick toggle animation to complete, before proceeding to select a time range. This can cause a flaky behavior if the logic tries to customize the range before the button is actually available, as seen on [this failed test](018a4c46
-0e7a-4b69-9a3d-9c54c27165b0_4fcbc47e71644919129e320eea8bb3bc.html?response-content-type=text%2Fhtml&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAQPCP3C7LZWZ5UB5F%2F20230901%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230901T094837Z&X-Amz-Expires=600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEB0aCXVzLWVhc3QtMSJGMEQCIGCyKcVLGPUawZubNzZdt5oZNb5v0saiIuPqXwI7rmwlAiAsOj%2Fiep94v%2BYZJtLY3Gw0m%2FmK5mJw2IcIBdNKFXgK%2BCr6Awjm%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDAzMjM3OTcwNTMwMyIMXOd1Hm6ks%2FNE37V0Ks4DgMUso7syv87hnPcC%2BB1soxvFFnj4JnNZc6ZgkLUe93z99iPFBUsqH%2BRbUTfSbjVOEJYBKGYuvp32xvSWsYNVPXKmcej18LC0yNi%2BBzoG2X%2Bj80g%2BbGMm6YfTncjPhOE0CHHqOWXts9nQ8WpDy8XOl0zfMtuiPjzOXHo9lvw2mgYDZIJIMV72FYB9JGg8FPbLQtD3rysLGNE0VDKgl5LCnYwhY1pwRCRHnVW41QfV0pwK%2FbjNf9HjdK31LQvMY%2FGPuB3M6O2CUZLsvLGfWBeGYHtkqb0hrL9ijO1Uo28ZSS1FytPftEdF0e1kAC9C5zD56HtYm55aktOWtaaC0XPWLdWWGUq%2FKQzhxSCiXK6ovATU3zI3yPNoZs92YBYmIPMOpEI40dCCpksjPwAMCiQd%2F9gMNKP5Qp5CbYd2Khy%2FeXaT8J7HOZCueN63O0j%2FtX1tbwfznhbr74lAcRQjueRYmwboZaGSDZUQ33lSSmyZk1V9WF9eJyt88oHvIx0q9bIjvOlW05DiNKfEFWYwfBywdGuvRU6eGMs1QcDNu33Lb%2BhymudM2JZmQKIjZOcb2l3Fzctp614owH4JcRlmF4%2BIa4xHeBdRlTMysS8bTIsgMK7axacGOqYBzIpC1wgZWJ1kZ0agLWCNaMIdUl%2B4xrr7w%2Fz0843WWMhRrvbJhDTHqk5UclF%2FSROAMe0FH2XEXiQ65ILyUPlrUMels5tfQ3Pp%2FJWPi9NsQJUQ1n9uLN%2BFPDOoMo8Uxg4%2FkG2O7yTkrIdArfA6pWN9I21gFMW%2BFZy9BMYltt5T65ZKOyYAIFGpLhgfBySIBCUMgwR1kusfDhf1%2FRTvtDKD2sJKN5a0IA%3D%3D&X-Amz-SignedHeaders=host&X-Amz-Signature=35fabe908aa7514e4a92de0ed12973af85ccfb439984fc3bdd7ef3bb8fe3419b). (part of this [failed CI build](https://buildkite.com/elastic/kibana-pull-request/builds/155285#018a4c46-0e7a-4b69-9a3d-9c54c27165b0)) The goal of this PR is to add a small waiting period, to make sure the toggle animation has completed, and that the time range controls are visible and clickable. I used the opportunity to cleanup some "await delay millis" calls, reusing existing logic instead. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
parent
823a1d542b
commit
b98b6d08cd
12 changed files with 92 additions and 44 deletions
|
@ -236,6 +236,9 @@ export class DashboardAddPanelService extends FtrService {
|
|||
await this.testSubjects.click(`savedObjectTitle${embeddableName.split(' ').join('-')}`);
|
||||
await this.testSubjects.exists('addObjectToDashboardSuccess');
|
||||
await this.closeAddPanel();
|
||||
|
||||
// close "Added successfully" toast
|
||||
await this.common.clearAllToasts();
|
||||
return embeddableName;
|
||||
}
|
||||
|
||||
|
|
|
@ -8,8 +8,9 @@
|
|||
|
||||
import { FtrProviderContext } from '../../ftr_provider_context';
|
||||
import { CommonlyUsed } from '../../page_objects/time_picker';
|
||||
import { WebElementWrapper } from '../lib/web_element_wrapper';
|
||||
|
||||
export function DashboardCustomizePanelProvider({ getService }: FtrProviderContext) {
|
||||
export function DashboardCustomizePanelProvider({ getService, getPageObject }: FtrProviderContext) {
|
||||
const log = getService('log');
|
||||
const retry = getService('retry');
|
||||
const toasts = getService('toasts');
|
||||
|
@ -39,6 +40,48 @@ export function DashboardCustomizePanelProvider({ getService }: FtrProviderConte
|
|||
await testSubjects.missingOrFail(this.TOGGLE_TIME_RANGE_TEST_SUBJ);
|
||||
}
|
||||
|
||||
public async findCustomTimeRangeToggleButton(): Promise<WebElementWrapper> {
|
||||
log.debug('findCustomTimeRangeToggleButton');
|
||||
let button: WebElementWrapper | undefined;
|
||||
await retry.waitFor('custom time range toggle button', async () => {
|
||||
button = await testSubjects.find(this.TOGGLE_TIME_RANGE_TEST_SUBJ);
|
||||
return Boolean(button);
|
||||
});
|
||||
return button!;
|
||||
}
|
||||
|
||||
public async enableCustomTimeRange() {
|
||||
log.debug('enableCustomTimeRange');
|
||||
const toggle = await this.findCustomTimeRangeToggleButton();
|
||||
|
||||
await retry.try(async () => {
|
||||
if ((await toggle.getAttribute('aria-checked')) === 'false') {
|
||||
await toggle.click();
|
||||
await retry.waitForWithTimeout(
|
||||
'custom time range to be enabled',
|
||||
1000,
|
||||
async () => (await toggle.getAttribute('aria-checked')) === 'true'
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public async disableCustomTimeRange() {
|
||||
log.debug('disableCustomTimeRange');
|
||||
const toggle = await this.findCustomTimeRangeToggleButton();
|
||||
|
||||
await retry.try(async () => {
|
||||
if ((await toggle.getAttribute('aria-checked')) === 'true') {
|
||||
await toggle.click();
|
||||
await retry.waitForWithTimeout(
|
||||
'custom time range to be disabled',
|
||||
1000,
|
||||
async () => (await toggle.getAttribute('aria-checked')) === 'false'
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public async findFlyout() {
|
||||
log.debug('findFlyout');
|
||||
return await testSubjects.find(this.FLYOUT_TEST_SUBJ);
|
||||
|
@ -50,15 +93,21 @@ export function DashboardCustomizePanelProvider({ getService }: FtrProviderConte
|
|||
return await flyout.findByCssSelector(`[data-test-subj="${testSubject}"]`);
|
||||
}
|
||||
|
||||
public async findToggleQuickMenuButton() {
|
||||
log.debug('findToggleQuickMenuButton');
|
||||
public async findDatePickerQuickMenuButton() {
|
||||
log.debug('findDatePickerQuickMenuButton');
|
||||
return await this.findFlyoutTestSubject('superDatePickerToggleQuickMenuButton');
|
||||
}
|
||||
|
||||
public async clickToggleQuickMenuButton() {
|
||||
log.debug('clickToggleQuickMenuButton');
|
||||
const button = await this.findToggleQuickMenuButton();
|
||||
await button.click();
|
||||
public async openDatePickerQuickMenu() {
|
||||
log.debug('openDatePickerQuickMenu');
|
||||
let button: WebElementWrapper | undefined;
|
||||
await retry.waitFor('superDatePickerToggleQuickMenuButton to be present', async () => {
|
||||
button = await this.findDatePickerQuickMenuButton();
|
||||
return Boolean(button);
|
||||
});
|
||||
if (button) {
|
||||
await button.click();
|
||||
}
|
||||
}
|
||||
|
||||
public async clickCommonlyUsedTimeRange(time: CommonlyUsed) {
|
||||
|
@ -111,10 +160,5 @@ export function DashboardCustomizePanelProvider({ getService }: FtrProviderConte
|
|||
await testSubjects.waitForDeleted('cancelCustomizePanelButton');
|
||||
});
|
||||
}
|
||||
|
||||
public async clickToggleShowCustomTimeRange() {
|
||||
log.debug('clickToggleShowCustomTimeRange');
|
||||
await testSubjects.click(this.TOGGLE_TIME_RANGE_TEST_SUBJ);
|
||||
}
|
||||
})();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue