c4176cc35d
(cherry picked from commit 96c7f16d4b6cbb4dbd8f2e2dead45d4cad5d0f67)
143 lines
3.5 KiB
JavaScript
143 lines
3.5 KiB
JavaScript
const puppeteer = require('puppeteer');
|
|
const helper = require('./helper');
|
|
const params = require('./params');
|
|
const e = require('./elements');
|
|
|
|
class Page
|
|
{
|
|
// Initializes the page
|
|
async init(args)
|
|
{
|
|
this.browser = await puppeteer.launch(args);
|
|
this.page = await this.browser.newPage();
|
|
}
|
|
|
|
// Navigates to a page
|
|
async goto(page)
|
|
{
|
|
this.page.goto(page);
|
|
}
|
|
|
|
// Run the test for the page
|
|
async test()
|
|
{
|
|
}
|
|
|
|
// Closes the page
|
|
async close()
|
|
{
|
|
await this.browser.close();
|
|
}
|
|
|
|
// Gets the DOM elements being tested, as strings
|
|
async getTestElements()
|
|
{
|
|
}
|
|
|
|
// Get the default arguments for creating a page
|
|
static getArgs()
|
|
{
|
|
return {headless: true, args: ["--no-sandbox", "--use-fake-ui-for-media-stream"]};
|
|
}
|
|
|
|
// Creates a BigBlueButton meeting
|
|
async createBBBMeeting()
|
|
{
|
|
var meetingID = await helper.createMeeting(params);
|
|
await this.joinBBBMeeting(meetingID);
|
|
return meetingID;
|
|
}
|
|
|
|
// Navigates the page to join a BigBlueButton meeting
|
|
async joinBBBMeeting(meetingID)
|
|
{
|
|
var joinURL = helper.getJoinURL(meetingID, params, true);
|
|
await this.goto(joinURL);
|
|
}
|
|
|
|
// Joins a BigBlueButton as a listener
|
|
async joinAudioListenOnly()
|
|
{
|
|
await this.page.waitFor(e.listenButton);
|
|
await this.page.click(e.listenButton);
|
|
await this.elementRemoved(e.audioDialog);
|
|
console.log("Joined meeting as listener");
|
|
}
|
|
|
|
// Joins a BigBlueButton meeting with a microphone
|
|
async joinAudioMicrophone()
|
|
{
|
|
await this.page.waitFor(e.microphoneButton);
|
|
await this.page.click(e.microphoneButton);
|
|
await this.page.waitFor(e.echoYes);
|
|
await helper.sleep(500); // Echo test confirmation sometimes fails without this
|
|
await this.page.click(e.echoYes);
|
|
await this.elementRemoved(e.audioDialog);
|
|
console.log("Joined meeting with microphone");
|
|
}
|
|
|
|
// Joins a BigBlueButton meeting without audio
|
|
async joinWithoutAudio()
|
|
{
|
|
await this.page.waitFor(e.listenButton);
|
|
await this.page.waitFor(e.closeAudio);
|
|
await this.page.click(e.closeAudio);
|
|
await this.elementRemoved(e.audioDialog);
|
|
console.log("Joined meeting without audio");
|
|
}
|
|
|
|
// Returns a Promise that resolves when an element does not exist/is removed from the DOM
|
|
elementRemoved(element)
|
|
{
|
|
return this.page.waitFor((element) => {return !document.querySelector(element);}, {}, element);
|
|
}
|
|
|
|
// Presses a hotkey (Ctrl, Alt and Shift can be held down while pressing the key)
|
|
async hotkey(key, ctrl, alt, shift)
|
|
{
|
|
if(ctrl) {await this.page.keyboard.down('Control');}
|
|
if(alt) {await this.page.keyboard.down('Alt');}
|
|
if(shift) {await this.page.keyboard.down('Shift');}
|
|
|
|
await this.page.keyboard.press(key);
|
|
|
|
if(ctrl) {await this.page.keyboard.up('Control');}
|
|
if(alt) {await this.page.keyboard.up('Alt');}
|
|
if(shift) {await this.page.keyboard.up('Shift');}
|
|
}
|
|
|
|
// Presses the Tab key a set number of times
|
|
async tab(count)
|
|
{
|
|
for(var i = 0; i < count; i++)
|
|
{
|
|
await this.page.keyboard.press('Tab');
|
|
}
|
|
}
|
|
|
|
// Presses the Enter key
|
|
async enter()
|
|
{
|
|
await this.page.keyboard.press('Enter');
|
|
}
|
|
|
|
// Presses the Down Arrow key a set number of times
|
|
async down(count)
|
|
{
|
|
for(var i = 0; i < count; i++)
|
|
{
|
|
await this.page.keyboard.press('ArrowDown');
|
|
}
|
|
}
|
|
|
|
// Presses the up arrow key a set number of times
|
|
async up(count)
|
|
{
|
|
for(var i = 0; i < count; i++)
|
|
{
|
|
await this.page.keyboard.press('ArrowUp');
|
|
}
|
|
}
|
|
};
|
|
|
|
module.exports = exports = Page; |