The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/public/e2e-test/core/pageObjects.ts

84 lines
2.2 KiB

import { Page } from 'puppeteer-core';
export class Selector {
static fromAriaLabel = (selector: string) => {
return `[aria-label="${selector}"]`;
};
static fromSelector = (selector: string) => {
return selector;
};
}
export interface PageObjectType {
init: (page: Page) => Promise<void>;
exists: () => Promise<void>;
containsText: (text: string) => Promise<void>;
}
export interface ClickablePageObjectType extends PageObjectType {
click: () => Promise<void>;
}
export interface InputPageObjectType extends PageObjectType {
enter: (text: string) => Promise<void>;
}
export interface SelectPageObjectType extends PageObjectType {
select: (text: string) => Promise<void>;
}
export class PageObject implements PageObjectType {
protected page: Page = null;
constructor(protected selector: string) {}
init = async (page: Page): Promise<void> => {
this.page = page;
};
exists = async (): Promise<void> => {
const options = { visible: true } as any;
await expect(this.page).not.toBeNull();
await expect(this.page).toMatchElement(this.selector, options);
};
containsText = async (text: string): Promise<void> => {
const options = { visible: true, text } as any;
await expect(this.page).not.toBeNull();
await expect(this.page).toMatchElement(this.selector, options);
};
}
export class ClickablePageObject extends PageObject implements ClickablePageObjectType {
constructor(selector: string) {
super(selector);
}
click = async (): Promise<void> => {
await expect(this.page).not.toBeNull();
await expect(this.page).toClick(this.selector);
};
}
export class InputPageObject extends PageObject implements InputPageObjectType {
constructor(selector: string) {
super(selector);
}
enter = async (text: string): Promise<void> => {
await expect(this.page).not.toBeNull();
await expect(this.page).toFill(this.selector, text);
};
}
export class SelectPageObject extends PageObject implements SelectPageObjectType {
constructor(selector: string) {
super(selector);
}
select = async (text: string): Promise<void> => {
await expect(this.page).not.toBeNull();
await this.page.select(this.selector, text);
};
}