mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 17:28:26 -04:00
79 lines
3 KiB
TypeScript
79 lines
3 KiB
TypeScript
/*
|
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
* or more contributor license agreements. Licensed under the Elastic License
|
|
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
|
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
|
* Side Public License, v 1.
|
|
*/
|
|
|
|
import { FtrService } from '../ftr_provider_context';
|
|
|
|
export class ToastsService extends FtrService {
|
|
private readonly testSubjects = this.ctx.getService('testSubjects');
|
|
|
|
/**
|
|
* Returns the title and message of a specific error toast.
|
|
* This method is specific to toasts created via `.addError` since they contain
|
|
* an additional button, that should not be part of the message.
|
|
*
|
|
* @param index The index of the toast (1-based, NOT 0-based!) of the toast. Use first by default.
|
|
* @returns The title and message of the specified error toast.https://github.com/elastic/kibana/issues/17087
|
|
*/
|
|
public async getErrorToast(index: number = 1) {
|
|
const toast = await this.getToastElement(index);
|
|
const titleElement = await this.testSubjects.findDescendant('euiToastHeader', toast);
|
|
const title: string = await titleElement.getVisibleText();
|
|
const messageElement = await this.testSubjects.findDescendant('errorToastMessage', toast);
|
|
const message: string = await messageElement.getVisibleText();
|
|
return { title, message };
|
|
}
|
|
|
|
/**
|
|
* Dismiss a specific toast from the toast list. Since toasts usually should time out themselves,
|
|
* you only need to call this for permanent toasts (e.g. error toasts).
|
|
*
|
|
* @param index The 1-based index of the toast to dismiss. Use first by default.
|
|
*/
|
|
public async dismissToast(index: number = 1) {
|
|
const toast = await this.getToastElement(index);
|
|
await toast.moveMouseTo();
|
|
const dismissButton = await this.testSubjects.findDescendant('toastCloseButton', toast);
|
|
await dismissButton.click();
|
|
}
|
|
|
|
public async dismissAllToasts() {
|
|
const list = await this.getGlobalToastList();
|
|
const toasts = await list.findAllByCssSelector(`.euiToast`);
|
|
|
|
if (toasts.length === 0) return;
|
|
|
|
for (const toast of toasts) {
|
|
await toast.moveMouseTo();
|
|
|
|
if (await this.testSubjects.descendantExists('toastCloseButton', toast)) {
|
|
try {
|
|
const dismissButton = await this.testSubjects.findDescendant('toastCloseButton', toast);
|
|
await dismissButton.click();
|
|
} catch (err) {
|
|
// ignore errors
|
|
// toasts are finnicky because they can dismiss themselves right before you close them
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public async getToastElement(index: number) {
|
|
const list = await this.getGlobalToastList();
|
|
return await list.findByCssSelector(`.euiToast:nth-child(${index})`);
|
|
}
|
|
|
|
private async getGlobalToastList() {
|
|
return await this.testSubjects.find('globalToastList');
|
|
}
|
|
|
|
public async getToastCount() {
|
|
const list = await this.getGlobalToastList();
|
|
const toasts = await list.findAllByCssSelector(`.euiToast`);
|
|
return toasts.length;
|
|
}
|
|
}
|