Some checks failed
Create issues from TODOs / todos (push) Failing after 3s
Close inactive issues / close-issues (push) Has been cancelled
Deploy GitHub Pages / deploy-preview (push) Has been cancelled
CI / ⚙️ Variables Setup (push) Has been cancelled
CI / ⚙️ Test Guard (push) Has been cancelled
CI / 🚀 Notify external services - draft (push) Has been cancelled
CI / 📦 Build Packages (push) Has been cancelled
CI / 📦 Meteor Build (coverage) (push) Has been cancelled
CI / 📦 Meteor Build (production) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [account-service presence-service omnichannel-transcript-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [account-service presence-service omnichannel-transcript-service], fips) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [authorization-service queue-worker-service ddp-streamer-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [authorization-service queue-worker-service ddp-streamer-service], fips) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], coverage) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], fips) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [account-service presence-service omnichannel-transcript-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [authorization-service queue-worker-service ddp-streamer-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [rocketchat], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [rocketchat], coverage) (push) Has been cancelled
CI / 🚢 Publish Docker Images (ghcr.io) (push) Has been cancelled
CI / 📦 Track Image Sizes (push) Has been cancelled
CI / 🔎 Code Check - Action Lint (push) Has been cancelled
CI / 🔎 Code Check (push) Has been cancelled
CI / 🔨 Test Storybook (push) Has been cancelled
CI / 🔨 Test Unit (push) Has been cancelled
CI / 🔨 Test API (CE) (push) Has been cancelled
CI / 🔨 Test API Livechat (CE) (push) Has been cancelled
CI / 🔨 Test UI (CE) (push) Has been cancelled
CI / 🔨 Test API (EE) (push) Has been cancelled
CI / 🔨 Test API Livechat (EE) (push) Has been cancelled
CI / 🔨 Test API Apps (deno-runtime - EE) (push) Has been cancelled
CI / 🔨 Test UI (EE) (push) Has been cancelled
CI / 🔨 Test API (FIPS) (push) Has been cancelled
CI / 🔨 Test API Livechat (FIPS) (push) Has been cancelled
CI / 🔨 Test UI (FIPS) (push) Has been cancelled
CI / 🔨 Test Federation Matrix (push) Has been cancelled
CI / 📊 Report Coverage (push) Has been cancelled
CI / ✅ Tests Done (push) Has been cancelled
CI / 🚀 Publish build assets (push) Has been cancelled
CI / 🚀 Publish Docker Images (DockerHub) (push) Has been cancelled
CI / 🚀 Notify external services (push) Has been cancelled
CI / Update Version Durability (push) Has been cancelled
Release / Release (push) Has been cancelled
Auto-close duplicate issues / auto-close-duplicates (push) Failing after 1s
Code scanning - action / CodeQL-Build (push) Failing after 1s
114 lines
3.9 KiB
TypeScript
114 lines
3.9 KiB
TypeScript
import type { Locator } from '@playwright/test';
|
|
|
|
import { RoutedPage } from '../routed-page';
|
|
|
|
/** The widget as embedded on a host page, driven through `window.RocketChat.livechat`. */
|
|
export class OmnichannelLiveChatEmbedded extends RoutedPage {
|
|
protected readonly route = '/packages/rocketchat_livechat/assets/demo.html';
|
|
|
|
async waitForReady(): Promise<void> {
|
|
await this.btnOpenLiveChat().waitFor({ state: 'visible' });
|
|
}
|
|
|
|
btnOpenLiveChat(): Locator {
|
|
return this.page.frameLocator('#rocketchat-iframe').locator(`[data-qa-id="chat-button"]`);
|
|
}
|
|
|
|
btnFinishOfflineMessage(): Locator {
|
|
return this.page.frameLocator('#rocketchat-iframe').locator(`button[aria-label="OK"]`);
|
|
}
|
|
|
|
get btnOptions(): Locator {
|
|
return this.page.frameLocator('#rocketchat-iframe').locator(`button >> text="Options"`);
|
|
}
|
|
|
|
get btnCloseChat(): Locator {
|
|
return this.page.frameLocator('#rocketchat-iframe').locator(`button >> text="Finish this chat"`);
|
|
}
|
|
|
|
get btnCloseChatConfirm(): Locator {
|
|
return this.page.frameLocator('#rocketchat-iframe').locator(`button >> text="Yes"`);
|
|
}
|
|
|
|
get headerTitle(): Locator {
|
|
return this.page.frameLocator('#rocketchat-iframe').locator('[data-qa="header-title"]');
|
|
}
|
|
|
|
get btnNewChat(): Locator {
|
|
return this.page.frameLocator('#rocketchat-iframe').locator(`role=button[name="New Chat"]`);
|
|
}
|
|
|
|
get messageList(): Locator {
|
|
return this.page.frameLocator('#rocketchat-iframe').locator('[data-qa="message-list"]');
|
|
}
|
|
|
|
get messageListBackground(): Promise<string> {
|
|
return this.messageList.evaluate((el) => window.getComputedStyle(el).getPropertyValue('background-color'));
|
|
}
|
|
|
|
messageBubble(message: string): Locator {
|
|
return this.page
|
|
.frameLocator('#rocketchat-iframe')
|
|
.locator('[data-qa="message-bubble"]', { has: this.page.frameLocator('#rocketchat-iframe').locator(`div >> text="${message}"`) });
|
|
}
|
|
|
|
messageBubbleBackground(message: string): Promise<string> {
|
|
return this.messageBubble(message)
|
|
.last()
|
|
.evaluate((el) => window.getComputedStyle(el).getPropertyValue('background-color'));
|
|
}
|
|
|
|
txtChatMessage(message: string): Locator {
|
|
return this.page.frameLocator('#rocketchat-iframe').locator(`li >> text="${message}"`);
|
|
}
|
|
|
|
imgAvatar(username: string): Locator {
|
|
return this.page.frameLocator('#rocketchat-iframe').locator(`img[alt="${username}"]`).last();
|
|
}
|
|
|
|
async openLiveChat(): Promise<void> {
|
|
await this.btnOpenLiveChat().click();
|
|
}
|
|
|
|
get inputName(): Locator {
|
|
return this.page.frameLocator('#rocketchat-iframe').locator('[name="name"]');
|
|
}
|
|
|
|
get inputEmail(): Locator {
|
|
return this.page.frameLocator('#rocketchat-iframe').locator('[name="email"]');
|
|
}
|
|
|
|
get textAreaMessage(): Locator {
|
|
return this.page.frameLocator('#rocketchat-iframe').locator('[name="message"]');
|
|
}
|
|
|
|
btnSendMessage(btnText: string): Locator {
|
|
return this.page.frameLocator('#rocketchat-iframe').locator(`role=button[name="${btnText}"]`);
|
|
}
|
|
|
|
get onlineAgentMessage(): Locator {
|
|
return this.page.frameLocator('#rocketchat-iframe').locator('[contenteditable="true"]');
|
|
}
|
|
|
|
get btnSendMessageToOnlineAgent(): Locator {
|
|
return this.page.frameLocator('#rocketchat-iframe').locator('footer div div div:nth-child(3) button');
|
|
}
|
|
|
|
get btnExpandChat(): Locator {
|
|
return this.page.frameLocator('#rocketchat-iframe').getByRole('button', { name: 'Expand chat', exact: true });
|
|
}
|
|
|
|
public async sendMessage(liveChatUser: { name: string; email: string }, isOffline = true): Promise<void> {
|
|
const buttonLabel = isOffline ? 'Send' : 'Start chat';
|
|
await this.inputName.fill(liveChatUser.name);
|
|
await this.inputEmail.fill(liveChatUser.email);
|
|
if (isOffline) {
|
|
await this.textAreaMessage.fill('any_message');
|
|
await this.btnSendMessage(buttonLabel).click();
|
|
return this.btnFinishOfflineMessage().click();
|
|
}
|
|
await this.btnSendMessage(buttonLabel).click();
|
|
await this.page.frameLocator('#rocketchat-iframe').locator('[data-qa="livechat-composer"]').waitFor();
|
|
}
|
|
}
|