71 lines
1.6 KiB
TypeScript
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);
|
|
}
|
|
}
|