diff --git a/tests/e2e/tutorials/jupyters.js b/tests/e2e/tutorials/jupyters.js new file mode 100644 index 00000000000..a95b4c57c23 --- /dev/null +++ b/tests/e2e/tutorials/jupyters.js @@ -0,0 +1,120 @@ +// node jupyters.js [url] [user] [password] [--demo] + +const utils = require('../utils/utils'); +const tutorialBase = require('./tutorialBase'); + +const args = process.argv.slice(2); +const { + url, + user, + pass, + newUser, + enableDemoMode +} = utils.parseCommandLineArguments(args) + +const templateName = "Jupyters"; + +async function runTutorial() { + const tutorial = new tutorialBase.TutorialBase(url, user, pass, newUser, templateName, enableDemoMode); + + tutorial.init(); + await tutorial.beforeScript(); + await tutorial.goTo(); + + const needsRegister = await tutorial.registerIfNeeded(); + if (!needsRegister) { + await tutorial.login(); + } + await tutorial.openTemplate(5000); + + // Some time for loading notebook and jupyter lab + await tutorial.waitFor(30000); + + + // open notebook + await tutorial.openNode(1); + + const iframeHandles = await tutorial.getIframe(); + // expected two iframes = loading + jupyterNB + const nbIframe = await iframeHandles[1].contentFrame(); + + // inside the iFrame, open the first notebook + const notebookCBSelector = '#notebook_list > div:nth-child(2) > div > input[type=checkbox]'; + await nbIframe.waitForSelector(notebookCBSelector); + await nbIframe.click(notebookCBSelector); + await tutorial.waitFor(2000); + const notebookViewSelector = "#notebook_toolbar > div.col-sm-8.no-padding > div.dynamic-buttons > button.view-button.btn.btn-default.btn-xs" + await nbIframe.waitForSelector(notebookViewSelector); + await nbIframe.click(notebookViewSelector); + await tutorial.waitFor(2000); + await tutorial.takeScreenshot("openNotebook"); + + // inside the first notebook, click Run button 4 times + const runNBBtnSelector = '#run_int > button:nth-child(1)'; + const runNotebookTimes = 5; + for (let i=0; i { + console.log('Puppeteer error: ' + error); + process.exit(1); + }); diff --git a/tests/e2e/tutorials/tutorialBase.js b/tests/e2e/tutorials/tutorialBase.js index df4972311b0..bb376b06b32 100644 --- a/tests/e2e/tutorials/tutorialBase.js +++ b/tests/e2e/tutorials/tutorialBase.js @@ -23,7 +23,7 @@ class TutorialBase { init() { const dir = 'screenshots'; - if (!fs.existsSync(dir)){ + if (!fs.existsSync(dir)) { fs.mkdirSync(dir); } } @@ -161,6 +161,15 @@ class TutorialBase { await utils.takeScreenshot(this.__page, this.__templateName + "_runStudy_after"); } + async openNode(nodePosInTree = 0) { + await auto.openNode(this.__page, nodePosInTree); + await utils.takeScreenshot(this.__page, this.__templateName + '_openNode_' + nodePosInTree); + } + + async getIframe() { + return await this.__page.$$("iframe"); + } + async openNodeFiles(nodePosInTree = 0) { const nodeId = await auto.openNode(this.__page, nodePosInTree); this.__responsesQueue.addResponseListener("storage/locations/0/files/metadata?uuid_filter=" + nodeId); @@ -173,11 +182,15 @@ class TutorialBase { } } - async openNodeRetrieveAndRestart(nodePosInTree = 0, waitAfterRetrieve = 5000) { - await utils.takeScreenshot(this.__page, "openNodeRetrieveAndRestart_before"); - await auto.openNode(this.__page, nodePosInTree); + async retrieve(waitAfterRetrieve = 5000) { await auto.clickRetrieve(this.__page); await this.__page.waitFor(waitAfterRetrieve); + } + + async openNodeRetrieveAndRestart(nodePosInTree = 0) { + await utils.takeScreenshot(this.__page, "openNodeRetrieveAndRestart_before"); + await auto.openNode(this.__page, nodePosInTree); + await this.retrieve(); await auto.clickRestart(this.__page); await utils.takeScreenshot("openNodeRetrieveAndRestart_after"); } @@ -218,6 +231,10 @@ class TutorialBase { async waitFor(waitFor) { await this.__page.waitFor(waitFor); } + + async takeScreenshot(screenshotTitle) { + await utils.takeScreenshot(this.__page, this.__templateName + '_' + screenshotTitle); + } } module.exports = { diff --git a/tests/e2e/utils/utils.js b/tests/e2e/utils/utils.js index 7e610509651..7d47d49a531 100644 --- a/tests/e2e/utils/utils.js +++ b/tests/e2e/utils/utils.js @@ -12,7 +12,7 @@ function parseCommandLineArguments(args) { } const url = args[0]; - const enableDemoMode = args.length > 1 ? args[1] === "--demo" : false; + const enableDemoMode = args.includes("--demo"); const { user, pass, @@ -20,7 +20,11 @@ function parseCommandLineArguments(args) { } = getUserAndPass(args); return { - url, user, pass, newUser, enableDemoMode + url, + user, + pass, + newUser, + enableDemoMode } } @@ -30,7 +34,7 @@ function getUserAndPass(args) { pass: null, newUser: true }; - if (args && args.length === 3) { + if (args && args.length > 2) { userPass.user = args[1]; userPass.pass = args[2]; userPass.newUser = false;