2020-02-08 02:03:06 +08:00
|
|
|
const Page = require('../core/page');
|
2020-02-10 21:47:24 +08:00
|
|
|
const params = require('../params');
|
2020-02-20 01:28:27 +08:00
|
|
|
const util = require('../chat/util');
|
2021-03-08 07:53:58 +08:00
|
|
|
const pe = require('../core/elements');
|
|
|
|
const ne = require('../notifications/elements');
|
|
|
|
const ple = require('../polling/elemens');
|
|
|
|
const { ELEMENT_WAIT_TIME, ELEMENT_WAIT_LONGER_TIME } = require('../core/constants');
|
|
|
|
const { sleep } = require('../core/helper');
|
2020-02-08 02:03:06 +08:00
|
|
|
|
2020-02-13 04:18:41 +08:00
|
|
|
class MultiUsers {
|
2020-02-08 02:03:06 +08:00
|
|
|
constructor() {
|
2020-02-13 04:18:41 +08:00
|
|
|
this.page1 = new Page();
|
|
|
|
this.page2 = new Page();
|
2020-02-22 02:06:05 +08:00
|
|
|
this.page3 = new Page();
|
2020-02-08 02:03:06 +08:00
|
|
|
}
|
|
|
|
|
2020-02-13 04:18:41 +08:00
|
|
|
// Join BigBlueButton meeting
|
2021-02-26 23:52:17 +08:00
|
|
|
async init(meetingId, testFolderName) {
|
|
|
|
await this.page1.init(Page.getArgs(), meetingId, params, undefined, testFolderName);
|
|
|
|
await this.page2.init(Page.getArgs(), this.page1.meetingId, { ...params, fullName: 'User2' }, undefined, testFolderName);
|
2020-02-08 02:03:06 +08:00
|
|
|
}
|
|
|
|
|
2020-02-11 06:09:17 +08:00
|
|
|
// Run the test for the page
|
|
|
|
async checkForOtherUser() {
|
2020-02-13 04:18:41 +08:00
|
|
|
const firstCheck = await this.page1.page.evaluate(() => document.querySelectorAll('[data-test="userListItem"]').length > 0);
|
|
|
|
const secondCheck = await this.page2.page.evaluate(() => document.querySelectorAll('[data-test="userListItem"]').length > 0);
|
|
|
|
return {
|
|
|
|
firstCheck,
|
|
|
|
secondCheck,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2020-02-20 01:28:27 +08:00
|
|
|
async multiUsersPublicChat() {
|
2021-02-17 04:57:10 +08:00
|
|
|
const chat0 = await this.page1.page.evaluate(() => document.querySelectorAll('p[data-test="chatUserMessageText"]').length);
|
2020-02-20 01:28:27 +08:00
|
|
|
await util.sendPublicChatMessage(this.page1, this.page2);
|
2021-02-17 04:57:10 +08:00
|
|
|
const chat1 = await this.page1.page.evaluate(() => document.querySelectorAll('p[data-test="chatUserMessageText"]').length);
|
|
|
|
return chat0 !== chat1;
|
2020-02-20 01:28:27 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
async multiUsersPrivateChat() {
|
|
|
|
await util.openPrivateChatMessage(this.page1, this.page2);
|
2021-02-17 04:57:10 +08:00
|
|
|
const chat0 = await this.page1.page.evaluate(() => document.querySelectorAll('p[data-test="chatUserMessageText"]').length);
|
2020-02-20 01:28:27 +08:00
|
|
|
await util.sendPrivateChatMessage(this.page1, this.page2);
|
2021-02-17 04:57:10 +08:00
|
|
|
const chat1 = await this.page1.page.evaluate(() => document.querySelectorAll('p[data-test="chatUserMessageText"]').length);
|
|
|
|
return chat0 !== chat1;
|
2020-02-20 01:28:27 +08:00
|
|
|
}
|
|
|
|
|
2020-02-13 04:18:41 +08:00
|
|
|
async test() {
|
2020-02-19 01:18:55 +08:00
|
|
|
const checks = await this.checkForOtherUser();
|
2020-02-13 04:18:41 +08:00
|
|
|
return checks.firstCheck !== false && checks.secondCheck !== false;
|
2020-02-08 02:03:06 +08:00
|
|
|
}
|
2020-02-11 06:09:17 +08:00
|
|
|
|
2021-03-08 07:53:58 +08:00
|
|
|
async randomPoll(testName) {
|
|
|
|
try {
|
|
|
|
await this.page1.startRecording(testName);
|
|
|
|
await this.page1.closeAudioModal();
|
|
|
|
await this.page2.closeAudioModal();
|
|
|
|
await this.page1.waitForSelector(pe.actions, ELEMENT_WAIT_TIME);
|
|
|
|
await this.page1.click(pe.actions, true);
|
|
|
|
await this.page1.waitForSelector(ne.polling, ELEMENT_WAIT_TIME);
|
|
|
|
await this.page1.click(ne.polling, true);
|
|
|
|
await this.page1.waitForSelector(ple.pollQuestionArea, ELEMENT_WAIT_TIME);
|
|
|
|
await this.page1.page.focus(ple.pollQuestionArea);
|
|
|
|
await this.page1.page.keyboard.type(ple.pollQuestion);
|
|
|
|
|
|
|
|
const chosenRandomNb = await this.page1.page.evaluate(() => {
|
|
|
|
const responseTypesDiv = document.querySelector('div[data-test="responseTypes"]');
|
|
|
|
const buttons = responseTypesDiv.querySelectorAll('button');
|
|
|
|
const countButtons = buttons.length;
|
|
|
|
const randomNb = Math.floor(Math.random() * countButtons) + 1;
|
|
|
|
// const chosenRandomNb = 1;
|
|
|
|
const chosenRandomNb = randomNb - 1;
|
|
|
|
responseTypesDiv.querySelectorAll('button')[chosenRandomNb].click();
|
|
|
|
return chosenRandomNb;
|
|
|
|
});
|
|
|
|
switch (chosenRandomNb) {
|
|
|
|
case 0:
|
|
|
|
console.log({ chosenRandomNb }, ' <= True / False');
|
|
|
|
await this.page1.waitForSelector(ple.responseChoices, ELEMENT_WAIT_TIME);
|
|
|
|
await this.page1.waitForSelector(ple.addItem, ELEMENT_WAIT_TIME);
|
|
|
|
await this.page1.click(ple.addItem, true);
|
|
|
|
await this.page1.click(ple.pollOptionItem, true);
|
|
|
|
await this.page1.tab(2);
|
|
|
|
await this.page1.page.keyboard.type(ple.uncertain);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
console.log({ chosenRandomNb }, ' <= A / B / C / D');
|
|
|
|
await this.page1.page.evaluate(() => {
|
|
|
|
const responseChoices = document.querySelector('div[data-test="responseChoices"]');
|
|
|
|
responseChoices.querySelectorAll('button[data-test="deletePollOption"]')[0].click();
|
|
|
|
});
|
|
|
|
await this.page1.waitForSelector(ple.deletePollOption, ELEMENT_WAIT_TIME);
|
|
|
|
await this.page1.click(ple.deletePollOption, true);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
console.log({ chosenRandomNb }, ' <= Yes / No / Abstention');
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 3:
|
|
|
|
console.log({ chosenRandomNb }, ' <= User Response');
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
await this.page1.waitForSelector(ple.startPoll, ELEMENT_WAIT_TIME);
|
|
|
|
await this.page1.click(ple.startPoll, true);
|
|
|
|
await this.page2.waitForSelector(ple.pollingContainer, ELEMENT_WAIT_TIME);
|
|
|
|
await this.page2.waitForSelector(ple.pollAnswerOption, ELEMENT_WAIT_TIME);
|
|
|
|
await this.page2.click(ple.pollAnswerOption, true);
|
|
|
|
await this.page1.waitForSelector(ple.publishLabel, ELEMENT_WAIT_TIME);
|
|
|
|
await this.page1.click(ple.publishLabel, true);
|
|
|
|
await sleep(3000);
|
|
|
|
return true;
|
|
|
|
} catch (e) {
|
|
|
|
console.log(e);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
await sleep(50000);
|
|
|
|
}
|
|
|
|
|
2020-02-11 06:09:17 +08:00
|
|
|
// Close all Pages
|
2020-06-17 23:29:43 +08:00
|
|
|
async close(page1, page2) {
|
|
|
|
await page1.close();
|
|
|
|
await page2.close();
|
2020-02-11 06:09:17 +08:00
|
|
|
}
|
2020-03-21 04:31:58 +08:00
|
|
|
|
2020-03-23 20:15:10 +08:00
|
|
|
async closePage(page) {
|
|
|
|
await page.close();
|
2020-03-21 04:31:58 +08:00
|
|
|
}
|
2020-02-08 02:03:06 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = exports = MultiUsers;
|