bigbluebutton-Github/bigbluebutton-html5/tests/puppeteer/breakout/create.js

199 lines
10 KiB
JavaScript
Raw Normal View History

2020-02-22 02:06:05 +08:00
const Page = require('../core/page');
const params = require('../params');
const moment = require('moment');
const path = require('path');
2020-02-22 02:06:05 +08:00
const util = require('./util');
const be = require('./elements');
const we = require('../webcam/elements');
const e = require('../core/elements');
const { element } = require('prop-types');
const today = moment().format('DD-MM-YYYY');
2020-02-22 02:06:05 +08:00
class Create {
constructor() {
this.page1 = new Page();
this.page2 = new Page();
this.page3 = new Page();
}
// Join BigBlueButton meeting
async init(meetingId) {
await this.page1.init(Page.getArgs(), meetingId, { ...params, fullName: 'Moderator1' }, undefined);
await this.page2.init(Page.getArgs(), this.page1.meetingId, { ...params, fullName: 'Viewer1', moderatorPW: '' }, undefined);
}
// Create Breakoutrooms
async create(testName) {
await this.page1.screenshot(`${testName}`, `01-page01-initialized-${testName}`);
await this.page2.screenshot(`${testName}`, `01-page02-initialized-${testName}`);
this.page1.logger('page01 initialized');
this.page2.logger('page02 initialized');
await this.page1.page.evaluate(util.clickTestElement, be.manageUsers);
await this.page1.page.evaluate(util.clickTestElement, be.createBreakoutRooms);
this.page1.logger('page01 breakout rooms menu loaded');
await this.page1.screenshot(`${testName}`, `02-page01-creating-breakoutrooms-${testName}`);
await this.page1.waitForSelector(be.randomlyAssign);
await this.page1.page.evaluate(util.clickTestElement, be.randomlyAssign);
this.page1.logger('page01 randomly assigned users');
await this.page1.screenshot(`${testName}`, `03-page01-randomly-assign-user-${testName}`);
await this.page1.waitForSelector(be.modalConfirmButton);
await this.page1.page.evaluate(util.clickTestElement, be.modalConfirmButton);
this.page1.logger('page01 breakout rooms creation confirmed');
await this.page1.screenshot(`${testName}`, `04-page01-confirm-breakoutrooms-creation-${testName}`);
await this.page2.waitForSelector(be.modalConfirmButton);
await this.page2.page.evaluate(util.clickTestElement, be.modalConfirmButton);
this.page2.logger('page02 breakout rooms join confirmed');
await this.page2.screenshot(`${testName}`, `02-page02-accept-invite-breakoutrooms-${testName}`);
const page2 = await this.page2.browser.pages();
await page2[2].bringToFront();
this.page2.logger('before closing audio modal');
await page2[2].screenshot({path: path.join(__dirname, `../${process.env.TEST_FOLDER}/test-${today}-${testName}/screenshots/03-breakout-page02-before-closing-audio-modal.png`)});
await this.page2.waitForBreakoutElement('button[aria-label="Close Join audio modal"]', 2);
await this.page2.clickBreakoutElement('button[aria-label="Close Join audio modal"]', 2);
await page2[2].screenshot({path: path.join(__dirname, `../${process.env.TEST_FOLDER}/test-${today}-${testName}/screenshots/04-breakout-page02-after-closing-audio-modal.png`)});
this.page2.logger('audio modal closed');
2020-02-22 02:06:05 +08:00
}
// Check if Breakoutrooms have been created
async testCreatedBreakout(testName) {
const resp = await this.page1.page.evaluate(() => document.querySelectorAll('div[data-test="breakoutRoomsItem"]').length !== 0);
if (resp === true) {
await this.page1.screenshot(`${testName}`, `05-page01-success-${testName}`);
return true;
};
await this.page1.screenshot(`${testName}`, `05-page01-fail-${testName}`);
return false;
}
// Initialize a Moderator session
async joinWithUser3(testName) {
if(testName == 'joinBreakoutroomsWithAudio') {
await this.page3.init(Page.getArgsWithAudio(), this.page1.meetingId, { ...params, fullName: 'Moderator3' }, undefined);
await this.page3.closeAudioModal();
await this.page3.waitForSelector(be.breakoutRoomsButton);
await this.page3.click(be.breakoutRoomsButton, true);
await this.page3.waitForSelector(be.joinRoom1);
await this.page3.click(be.joinRoom1, true);
const page3 = await this.page3.browser.pages();
await page3[2].waitForSelector('button[aria-label="Microphone"]');
// await this.page3.waitForBreakoutElement('button[aria-label="Microphone"]', 2);
await this.page3.clickBreakoutElement('button[aria-label="Microphone"]', 2);
await page3[2].waitForSelector('div[class^="connecting--"]');
// await this.page3.waitForBreakoutElement('div[class^="connecting--"]', 2);
await page3[2].waitForSelector('button[aria-label="Echo is audible"]');
// await this.page3.waitForBreakoutElement('button[aria-label="Echo is audible"]', 2);
await this.page3.clickBreakoutElement('button[aria-label="Echo is audible"]', 2);
console.log('with audio');
this.page2.logger('before pages check');
const page2 = await this.page2.browser.pages();
await page2[2].waitForSelector('div[aria-label^="Moderator3"]');
await page2[2].waitForSelector('[data-test="isTalking"]');
const resp = await page3[2].evaluate(async ()=>{
const foundUserElement = await document.querySelectorAll('div[aria-label^="Moderator3"]').length !== 0;
const foundTalkingIndicatorElement = await document.querySelectorAll('[data-test="isTalking"]').length !== 0;
return foundUserElement && foundTalkingIndicatorElement;
});
await page2[2].screenshot({path: path.join(__dirname, `../${process.env.TEST_FOLDER}/test-${today}-${testName}/screenshots/05-breakout-page02-user-joined-with-audio-success.png`)});
this.page2.logger('after pages check');
return resp;
} else if (testName == 'joinBreakoutroomsWithVideo') {
await this.page3.init(Page.getArgsWithVideo(), this.page1.meetingId, { ...params, fullName: 'Moderator3' }, undefined);
await this.page3.closeAudioModal();
await this.page3.waitForSelector(be.breakoutRoomsButton);
await this.page3.click(be.breakoutRoomsButton, true);
await this.page3.waitForSelector(be.joinRoom1);
await this.page3.click(be.joinRoom1, true);
const page3 = await this.page3.browser.pages();
await page3[2].bringToFront();
await page3[2].waitForSelector('button[aria-label="Share webcam"]');
// await this.page3.waitForBreakoutElement('button[aria-label="Share webcam"]', 2);
await this.page3.clickBreakoutElement('button[aria-label="Share webcam"]', 2);
await page3[2].waitForSelector('video[id="preview"]');
// await this.page3.waitForBreakoutElement('video[id="preview"]', 2);
await page3[2].waitForSelector('button[aria-label="Start sharing"]');
// await this.page3.waitForBreakoutElement('button[aria-label="Start sharing"]', 2);
await this.page3.clickBreakoutElement('button[aria-label="Start sharing"]', 2);
console.log('with video');
this.page2.logger('before pages check');
const page2 = await this.page2.browser.pages();
await page2[2].waitForSelector('div[aria-label^="Moderator3"]');
await page2[2].waitForSelector('div[class^="videoListItem"]');
const resp = await page3[2].evaluate(async ()=>{
const foundUserElement = await document.querySelectorAll('div[aria-label^="Moderator3"]').length !== 0;
const webcamContainerElement = await document.querySelectorAll('div[class^="videoListItem"]').length !== 0;
return foundUserElement && webcamContainerElement;
});
await page2[2].screenshot({path: path.join(__dirname, `../${process.env.TEST_FOLDER}/test-${today}-${testName}/screenshots/05-breakout-page02-user-joined-with-webcam-success.png`)});
this.page2.logger('after pages check');
return resp;
} else if (testName === 'joinBreakoutroomsAndShareScreen') {
await this.page3.init(Page.getArgs(), this.page1.meetingId, { ...params, fullName: 'Moderator3' }, undefined);
await this.page3.closeAudioModal();
await this.page3.waitForSelector(be.breakoutRoomsButton);
await this.page3.click(be.breakoutRoomsButton, true);
await this.page3.waitForSelector(be.joinRoom1);
await this.page3.click(be.joinRoom1, true);
const page2 = await this.page2.browser.pages();
const page3 = await this.page3.browser.pages();
await this.page3.waitForSelector('span[class^="usersAssignedNumberLabel"]');
const respCountUsers = await this.page3.page.evaluate(async ()=>
await document.querySelectorAll('span[class^="usersAssignedNumberLabel"]')[0].innerText.includes('2') === true
);
console.log('with screenshare');
await page2[2].waitForSelector('div[aria-label^="Moderator3"]');
await page3[2].evaluate(async ()=> {
await document.querySelectorAll('div[aria-label^="Moderator3"]')[0].click();
await document.querySelectorAll('div[aria-label^="Take presenter"]')[0].click();
});
await page3[2].waitForSelector('button[aria-label="Share your screen"]');
await this.page3.clickBreakoutElement('button[aria-label="Share your screen"]', 2);
await page3[2].on('dialog',async dialog => {
await dialog.accept();
});
const resp = await page3[2].evaluate(async ()=>{
const foundUserElement = await document.querySelectorAll('div[aria-label^="Moderator3"]').length !== 0;
return foundUserElement;
});
await page2[2].screenshot({path: path.join(__dirname, `../${process.env.TEST_FOLDER}/test-${today}-${testName}/screenshots/05-breakout-page02-user-joined-success.png`)});
return resp && respCountUsers;
} else {
await this.page3.waitForSelector(be.breakoutRoomsButton);
await this.page3.click(be.breakoutRoomsButton, true);
const page3 = await this.page3.browser.pages();
await page3[2].evaluate(util.clickTestElement, be.breakoutJoin);
await this.page3.init(Page.getArgs(), this.page1.meetingId, { ...params, fullName: 'Moderator3' }, undefined);
console.log('with nothing');
const page2 = await this.page2.browser.pages();
await page2[2].waitForSelector('div[aria-label^="Moderator3"]');
const resp = await page3[2].evaluate(async ()=>{
const foundUserElement = await document.querySelectorAll('div[aria-label^="Moderator3"]').length !== 0;
return foundUserElement;
});
await page2[2].screenshot({path: path.join(__dirname, `../${process.env.TEST_FOLDER}/test-${today}-${testName}/screenshots/05-breakout-page02-user-joined-success.png`)});
return resp;
}
}
// Close pages
async close() {
await this.page1.close();
await this.page2.close();
2020-02-22 02:06:05 +08:00
}
}
module.exports = exports = Create;