chatbot-template/tests/pages/chat.ts

71 lines
1.6 KiB
TypeScript

import type { Page } from "@playwright/test";
const MODEL_BUTTON_REGEX = /Kimi|Codestral|Mistral|DeepSeek|GPT|Grok/i;
export class ChatPage {
page: Page;
constructor(page: Page) {
this.page = page;
}
async goto() {
await this.page.goto("/");
}
async createNewChat() {
await this.page.goto("/");
await this.page.waitForSelector("[data-testid='multimodal-input']");
}
getInput() {
return this.page.getByTestId("multimodal-input");
}
async typeMessage(message: string) {
const input = this.getInput();
await input.fill(message);
}
async sendMessage() {
await this.page.getByTestId("send-button").click();
}
async sendUserMessage(message: string) {
await this.typeMessage(message);
await this.sendMessage();
}
getSendButton() {
return this.page.getByTestId("send-button");
}
getStopButton() {
return this.page.getByTestId("stop-button");
}
async clickSuggestedAction(index = 0) {
const suggestions = this.page.locator(
"[data-testid='suggested-actions'] button"
);
await suggestions.nth(index).click();
}
async openModelSelector() {
const modelButton = this.page
.locator("button")
.filter({ hasText: MODEL_BUTTON_REGEX })
.first();
await modelButton.click();
}
async selectModel(modelName: string) {
await this.openModelSelector();
await this.page.getByText(modelName).first().click();
}
async searchModels(query: string) {
await this.openModelSelector();
await this.page.getByPlaceholder("Search models...").fill(query);
}
}