2021-12-15 01:10:44 +08:00
|
|
|
const { expect } = require('@playwright/test');
|
|
|
|
const e = require('../core/elements');
|
|
|
|
const c = require('./constants');
|
|
|
|
const { ELEMENT_WAIT_TIME, ELEMENT_WAIT_LONGER_TIME } = require('../core/constants');
|
|
|
|
|
|
|
|
async function forceListenOnly(test) {
|
|
|
|
await test.wasRemoved(e.echoYesButton);
|
2022-01-20 03:50:59 +08:00
|
|
|
await test.hasText(e.toastContainer, e.joiningMessageToast);
|
2021-12-15 01:10:44 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
function hexToRgb(hex) {
|
|
|
|
const bigint = parseInt(hex, 16);
|
|
|
|
const r = (bigint >> 16) & 255;
|
|
|
|
const g = (bigint >> 8) & 255;
|
|
|
|
const b = bigint & 255;
|
|
|
|
return `rgb(${r}, ${g}, ${b})`;
|
|
|
|
}
|
|
|
|
|
|
|
|
async function zoomIn(test) {
|
|
|
|
try {
|
2021-12-15 05:16:37 +08:00
|
|
|
await test.page.evaluate((selector) => {
|
2021-12-15 01:10:44 +08:00
|
|
|
setInterval(() => {
|
2021-12-15 05:16:37 +08:00
|
|
|
document.querySelector(selector).scrollBy(0, 10);
|
2021-12-15 01:10:44 +08:00
|
|
|
}, 100);
|
2022-01-20 21:03:18 +08:00
|
|
|
}, e.zoomInBtn);
|
2021-12-15 01:10:44 +08:00
|
|
|
return true;
|
|
|
|
} catch (err) {
|
|
|
|
console.log(err);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function zoomOut(test) {
|
|
|
|
try {
|
2021-12-15 05:16:37 +08:00
|
|
|
await test.page.evaluate((selector) => {
|
2021-12-15 01:10:44 +08:00
|
|
|
setInterval(() => {
|
2021-12-15 05:16:37 +08:00
|
|
|
document.querySelector(selector).scrollBy(10, 0);
|
2021-12-15 01:10:44 +08:00
|
|
|
}, 100);
|
2022-01-20 21:03:18 +08:00
|
|
|
}, e.zoomInBtn);
|
2021-12-15 01:10:44 +08:00
|
|
|
return true;
|
|
|
|
} catch (err) {
|
|
|
|
console.log(err);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function poll(page1, page2) {
|
|
|
|
await page1.waitForSelector(e.whiteboard, ELEMENT_WAIT_LONGER_TIME);
|
|
|
|
await page1.waitAndClick(e.actions);
|
|
|
|
await page1.waitAndClick(e.polling);
|
|
|
|
await page1.waitAndClick(e.pollYesNoAbstentionBtn);
|
|
|
|
await page1.waitAndClick(e.startPoll);
|
|
|
|
await page2.waitForSelector(e.pollingContainer);
|
2022-01-20 21:03:18 +08:00
|
|
|
await page2.waitAndClickElement(e.pollAnswerOptionBtn);
|
2021-12-15 01:10:44 +08:00
|
|
|
await page1.waitAndClick(e.publishPollingLabel);
|
|
|
|
}
|
|
|
|
|
|
|
|
async function previousSlide(test) {
|
|
|
|
await test.waitAndClick(e.prevSlide);
|
|
|
|
}
|
|
|
|
|
|
|
|
async function nextSlide(test) {
|
|
|
|
await test.waitAndClick(e.nextSlide);
|
|
|
|
}
|
|
|
|
|
|
|
|
async function annotation(test) {
|
2022-01-20 21:03:18 +08:00
|
|
|
await test.waitAndClick(e.toolsButton);
|
2021-12-15 01:10:44 +08:00
|
|
|
await test.waitAndClick(e.pencil);
|
|
|
|
await test.waitAndClick(e.whiteboard);
|
|
|
|
await test.page.waitForFunction(
|
|
|
|
(whiteboard) => document.querySelectorAll(`${whiteboard} > g > g`)[1].innerHTML !== '',
|
|
|
|
e.whiteboard,
|
|
|
|
{ timeout: ELEMENT_WAIT_TIME }
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
function encodeCustomParams(param) {
|
|
|
|
try {
|
|
|
|
let splited = param.split('=');
|
|
|
|
splited[1] = encodeURIComponent(splited[1]).replace(/%20/g, '+');
|
|
|
|
return splited.join('=');
|
|
|
|
} catch (err) {
|
|
|
|
console.log(err);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function getAllShortcutParams() {
|
|
|
|
const getParams = (shortcutArray) => {
|
2021-12-15 05:16:37 +08:00
|
|
|
return Object.values(shortcutArray.map(elem => `"${elem.param}"`));
|
2021-12-15 01:10:44 +08:00
|
|
|
}
|
|
|
|
return c.shortcuts.replace('$', [...getParams(c.initialShortcuts), ...getParams(c.laterShortcuts)]);
|
|
|
|
}
|
|
|
|
|
|
|
|
async function checkAccesskey(test, key) {
|
|
|
|
return test.checkElement(`[accesskey="${key}"]`);
|
|
|
|
}
|
|
|
|
|
|
|
|
async function checkShortcutsArray(test, shortcut) {
|
|
|
|
for (const { key } of shortcut) {
|
|
|
|
const resp = await checkAccesskey(test, key);
|
|
|
|
await expect(resp).toBeTruthy();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
exports.zoomIn = zoomIn;
|
|
|
|
exports.zoomOut = zoomOut;
|
|
|
|
exports.poll = poll;
|
|
|
|
exports.previousSlide = previousSlide;
|
|
|
|
exports.nextSlide = nextSlide;
|
|
|
|
exports.annotation = annotation;
|
|
|
|
exports.hexToRgb = hexToRgb;
|
|
|
|
exports.forceListenOnly = forceListenOnly;
|
|
|
|
exports.encodeCustomParams = encodeCustomParams;
|
|
|
|
exports.getAllShortcutParams = getAllShortcutParams;
|
|
|
|
exports.checkAccesskey = checkAccesskey;
|
|
|
|
exports.checkShortcutsArray = checkShortcutsArray;
|