Merge branch 'master' into bwindels/lltests

pull/21833/head
Bruno Windels 2018-09-11 17:21:30 +02:00
commit 40577109c2
11 changed files with 32 additions and 28 deletions

View File

@ -15,7 +15,7 @@ limitations under the License.
*/
const {acceptDialog} = require('./tests/dialog');
const {acceptDialogMaybe} = require('./tests/dialog');
const signup = require('./tests/signup');
const join = require('./tests/join');
const sendMessage = require('./tests/send-message');
@ -67,13 +67,13 @@ async function createE2ERoomAndTalk(alice, bob) {
const bobDevice = await getE2EDeviceFromSettings(bob);
// wait some time for the encryption warning dialog
// to appear after closing the settings
await bob.delay(500);
await acceptDialog(bob, "encryption");
await bob.delay(1000);
await acceptDialogMaybe(bob, "encryption");
const aliceDevice = await getE2EDeviceFromSettings(alice);
// wait some time for the encryption warning dialog
// to appear after closing the settings
await alice.delay(500);
await acceptDialog(alice, "encryption");
await alice.delay(1000);
await acceptDialogMaybe(alice, "encryption");
await verifyDeviceForUser(bob, "alice", aliceDevice);
await verifyDeviceForUser(alice, "bob", bobDevice);
const aliceMessage = "Guess what I just heard?!"

View File

@ -148,7 +148,7 @@ module.exports = class RiotSession {
return this.page.$(selector);
}
waitAndQuery(selector, timeout = 500) {
waitAndQuery(selector, timeout = 5000) {
return this.page.waitForSelector(selector, {visible: true, timeout});
}
@ -156,25 +156,29 @@ module.exports = class RiotSession {
return this.page.$$(selector);
}
async waitAndQueryAll(selector, timeout = 500) {
async waitAndQueryAll(selector, timeout = 5000) {
await this.waitAndQuery(selector, timeout);
return await this.queryAll(selector);
}
waitForNewPage(timeout = 500) {
waitForNewPage(timeout = 5000) {
return new Promise((resolve, reject) => {
const timeoutHandle = setTimeout(() => {
this.browser.removeEventListener('targetcreated', callback);
this.browser.removeListener('targetcreated', callback);
reject(new Error(`timeout of ${timeout}ms for waitForNewPage elapsed`));
}, timeout);
const callback = async (target) => {
if (target.type() !== 'page') {
return;
}
this.browser.removeListener('targetcreated', callback);
clearTimeout(timeoutHandle);
const page = await target.page();
resolve(page);
};
this.browser.once('targetcreated', callback);
this.browser.on('targetcreated', callback);
});
}

View File

@ -20,7 +20,7 @@ const {acceptDialogMaybe} = require('./dialog');
module.exports = async function acceptInvite(session, name) {
session.log.step(`accepts "${name}" invite`);
//TODO: brittle selector
const invitesHandles = await session.waitAndQueryAll('.mx_RoomTile_name.mx_RoomTile_invite', 1000);
const invitesHandles = await session.waitAndQueryAll('.mx_RoomTile_name.mx_RoomTile_invite');
const invitesWithText = await Promise.all(invitesHandles.map(async (inviteHandle) => {
const text = await session.innerText(inviteHandle);
return {inviteHandle, text};
@ -38,4 +38,4 @@ module.exports = async function acceptInvite(session, name) {
acceptDialogMaybe(session, "encryption");
session.log.done();
}
}

View File

@ -17,11 +17,11 @@ limitations under the License.
const assert = require('assert');
module.exports = async function acceptTerms(session) {
const reviewTermsButton = await session.waitAndQuery('.mx_QuestionDialog button.mx_Dialog_primary', 5000);
const reviewTermsButton = await session.waitAndQuery('.mx_QuestionDialog button.mx_Dialog_primary');
const termsPagePromise = session.waitForNewPage();
await reviewTermsButton.click();
const termsPage = await termsPagePromise;
const acceptButton = await termsPage.$('input[type=submit]');
await acceptButton.click();
await session.delay(500); //TODO yuck, timers
}
await session.delay(1000); //TODO yuck, timers
}

View File

@ -27,7 +27,7 @@ async function acceptDialog(session, expectedContent) {
async function acceptDialogMaybe(session, expectedContent) {
let dialog = null;
try {
dialog = await session.waitAndQuery(".mx_QuestionDialog", 100);
dialog = await session.waitAndQuery(".mx_QuestionDialog");
} catch(err) {
return false;
}
@ -44,4 +44,4 @@ async function acceptDialogMaybe(session, expectedContent) {
module.exports = {
acceptDialog,
acceptDialogMaybe,
};
};

View File

@ -18,7 +18,7 @@ const assert = require('assert');
module.exports = async function invite(session, userId) {
session.log.step(`invites "${userId}" to room`);
await session.delay(200);
await session.delay(1000);
const inviteButton = await session.waitAndQuery(".mx_RightPanel_invite");
await inviteButton.click();
const inviteTextArea = await session.waitAndQuery(".mx_ChatInviteDialog textarea");
@ -27,4 +27,4 @@ module.exports = async function invite(session, userId) {
const confirmButton = await session.query(".mx_Dialog_primary");
await confirmButton.click();
session.log.done();
}
}

View File

@ -33,7 +33,7 @@ module.exports = async function receiveMessage(session, message) {
}
});
// wait a bit for the incoming event to be rendered
await session.delay(500);
await session.delay(1000);
let lastTile = await session.query(".mx_EventTile_last");
const senderElement = await lastTile.$(".mx_SenderProfile_name");
const bodyElement = await lastTile.$(".mx_EventTile_body");

View File

@ -33,7 +33,7 @@ module.exports = async function changeRoomSettings(session, settings) {
session.log.startGroup(`changes the room settings`);
/// XXX delay is needed here, possible because the header is being rerendered
/// click doesn't do anything otherwise
await session.delay(500);
await session.delay(1000);
const settingsButton = await session.query(".mx_RoomHeader .mx_AccessibleButton[title=Settings]");
await settingsButton.click();
const checks = await session.waitAndQueryAll(".mx_RoomSettings_settings input[type=checkbox]");
@ -63,7 +63,7 @@ module.exports = async function changeRoomSettings(session, settings) {
const inviteOnly = radios[0];
const publicNoGuests = radios[1];
const publicWithGuests = radios[2];
if (settings.visibility === "invite_only") {
await inviteOnly.click();
} else if (settings.visibility === "public_no_guests") {
@ -80,4 +80,4 @@ module.exports = async function changeRoomSettings(session, settings) {
await saveButton.click();
session.log.endGroup();
}
}

View File

@ -19,13 +19,13 @@ const acceptInvite = require("./accept-invite")
module.exports = async function acceptServerNoticesInviteAndConsent(session) {
await acceptInvite(session, "Server Notices");
session.log.step(`accepts terms & conditions`);
const consentLink = await session.waitAndQuery(".mx_EventTile_body a", 1000);
const consentLink = await session.waitAndQuery(".mx_EventTile_body a");
const termsPagePromise = session.waitForNewPage();
await consentLink.click();
const termsPage = await termsPagePromise;
const acceptButton = await termsPage.$('input[type=submit]');
await acceptButton.click();
await session.delay(500); //TODO yuck, timers
await session.delay(1000); //TODO yuck, timers
await termsPage.close();
session.log.done();
}
}

View File

@ -44,7 +44,7 @@ module.exports = async function signup(session, username, password, homeserver)
//wait over a second because Registration/ServerConfig have a 1000ms
//delay to internally set the homeserver url
//see Registration::render and ServerConfig::props::delayTimeMs
await session.delay(1200);
await session.delay(1500);
/// focus on the button to make sure error validation
/// has happened before checking the form is good to go
const registerButton = await session.query('.mx_Login_submit');

View File

@ -63,7 +63,7 @@ async function runTests() {
} catch(err) {
failure = true;
console.log('failure: ', err);
if (!program.noLogs) {
if (program.logs) {
for(let i = 0; i < sessions.length; ++i) {
const session = sessions[i];
documentHtml = await session.page.content();