diff --git a/conda/js/test/selenium_tutorial_test.js b/conda/js/test/selenium_tutorial_test.js index fc9cd577c21e0ab322f9d0f96beb2fcbb43c2dd5..df6170deda63248d967412cb5c10c9a0a659bc0a 100644 --- a/conda/js/test/selenium_tutorial_test.js +++ b/conda/js/test/selenium_tutorial_test.js @@ -2,8 +2,13 @@ const {Builder, By, Key, until} = require('selenium-webdriver'); const firefox = require('selenium-webdriver/firefox'); +// window size we're testing with const winX = 1920, winY = 1080; const options = new firefox.Options(); +// sometimes, selenium will hang forever in the middle of the test if the test is ran headlessly +// if you encounter this issue, comment out this headless flag +// (it doesn't seem to ever hang when running non-headlessly) +// the test shouldnt take more than a minute-ish either way options.addArguments('-headless'); options.addArguments(`--window-size=${ winX },${ winY }`); @@ -16,6 +21,7 @@ options.addArguments(`--window-size=${ winX },${ winY }`); /************************************************************** * MEANS EXP */ + // navigate to exp list await driver.findElement(By.linkText('experiments')).click(); //.sendKeys('webdriver', Key.RETURN); @@ -27,10 +33,10 @@ options.addArguments(`--window-size=${ winX },${ winY }`); await driver.wait(until.elementLocated(By.css('.modal')), 2000); // make new exp - const eUser = await driver.findElement(By.css('input[placeholder="Experiment user..."]')); + let eUser = await driver.findElement(By.css('input[placeholder="Experiment user..."]')); await eUser.clear(); await eUser.sendKeys('selenium'); - const eName = driver.findElement(By.css('input[placeholder="Experiment name..."]')); + let eName = driver.findElement(By.css('input[placeholder="Experiment name..."]')); await eName.clear(); await eName.sendKeys('means'); await driver.sleep(1000); @@ -79,6 +85,7 @@ options.addArguments(`--window-size=${ winX },${ winY }`); /************************************************************** * ADVANCED IRIS TOOLCHAIN */ + // navigate to tc list await driver.findElement(By.linkText('toolchains')).click(); await driver.wait(until.elementLocated(By.css('input[placeholder="Search toolchains..."]'), 2000)); @@ -170,18 +177,16 @@ options.addArguments(`--window-size=${ winX },${ winY }`); await driver.findElement(By.css('.modal button.close')).click(); await driver.sleep(1000); - //console.log('connecting'); // connect pre_training to rest of tc // data to pre let fromBox = await driver.findElement(By.css('rect#training_data-output-measurements')); let toBox = await driver.findElement(By.css('rect#pre_training-input-measurements')); - await driver.actions().dragAndDrop(fromBox, toBox).pause(500).perform(); + await driver.actions().dragAndDrop(fromBox, toBox).pause(200).perform(); // pre to alg fromBox = await driver.findElement(By.css('rect#pre_training-output-measurements')); toBox = await driver.findElement(By.css('rect#training_alg-input-measurements')); - await driver.actions().dragAndDrop(fromBox, toBox).pause(500).perform(); + await driver.actions().dragAndDrop(fromBox, toBox).pause(200).perform(); - //console.log('connecting 2'); // connect pre_testing to rest of tc // data to pre fromBox = await driver.findElement(By.css('rect#testing_data-output-measurements')); @@ -192,7 +197,6 @@ options.addArguments(`--window-size=${ winX },${ winY }`); toBox = await driver.findElement(By.css('rect#testing_alg-input-measurements')); await driver.actions().dragAndDrop(fromBox, toBox).pause(500).perform(); - //console.log('fix channel'); // fix the channel on pre_training await driver.findElement(By.css('#block_pre_training')).click(); await driver.sleep(1000); @@ -202,7 +206,6 @@ options.addArguments(`--window-size=${ winX },${ winY }`); await driver.findElement(By.css('.modal button.close')).click(); await driver.sleep(1000); - //console.log('getting layout'); // layout the tc await driver.findElement(By.xpath('//button[contains(.,"Layout")]')).click(); // needs to communicate w graphviz, give it some time @@ -212,38 +215,161 @@ options.addArguments(`--window-size=${ winX },${ winY }`); await driver.wait(until.elementLocated(By.css('.badge-success')), 2000); // save - //await driver.findElement(By.css('div.toolchainEditor > div.d-flex > button.btn-outline-secondary')).click(); - //await driver.sleep(1000); + await driver.findElement(By.css('div.toolchainEditor > div.d-flex > button.btn-outline-secondary')).click(); + await driver.sleep(1000); /************************************************************** * CLEANUP */ - // go back and delete toolchain - await driver.findElement(By.linkText('toolchains')).click(); - await driver.wait(until.elementLocated(By.css('input[placeholder="Search toolchains..."]'), 2000)); - tLink = await driver.findElement(By.linkText('selenium/iris_advanced/1')); - await tLink.findElement(By.xpath('../..')).findElement(By.css('button.btn-outline-danger')).click(); - await driver.sleep(1000); - await driver.findElement(By.css('.modal button.btn-danger')).click(); - await driver.sleep(1000); - /************************************************************** * ADVANCED IRIS PREPROCESSOR ALGORITHM */ - /************************************************************** - * CLEANUP - */ + // navigate to alg list + await driver.findElement(By.linkText('algorithms')).click(); + await driver.wait(until.elementLocated(By.css('input[placeholder="Search algorithms..."]'), 2000)); + + // click the new button + await driver.findElement(By.css('.dropdown + div > .btn-outline-success')).click(); + await driver.wait(until.elementLocated(By.css('.modal')), 2000); + + // make new alg + const aUser = await driver.findElement(By.css('input[placeholder="Algorithm user..."]')); + await aUser.clear(); + await aUser.sendKeys('selenium'); + const aName = driver.findElement(By.css('input[placeholder="New algorithm name..."]')); + await aName.clear(); + await aName.sendKeys('iris_preprocessor'); + await driver.sleep(1000); + await driver.findElement(By.css('.modal button.btn-primary')).click(); + await driver.wait(until.elementLocated(By.linkText('selenium/iris_preprocessor/1')), 2000); + await driver.sleep(1000); + + // go to new alg + await driver.findElement(By.linkText('selenium/iris_preprocessor/1')).click(); + await driver.wait(until.elementLocated(By.css('ul.nav-fill.nav.nav-tabs')), 2000); + + // add an input & output + await driver.findElement(By.css('#newInputBtn')).click(); + await driver.findElement(By.css('#newOutputBtn')).click(); + + // change input & output name to "measurements" + let aiDiv = await driver.findElement(By.css('#newInputBtn')).findElement(By.xpath('..')).findElement(By.css('div:first-child')); + let aoDiv = await driver.findElement(By.css('#newOutputBtn')).findElement(By.xpath('..')).findElement(By.css('div:first-child')); + let aiName = await aiDiv.findElement(By.css('input')); + await aiName.clear(); + await aiName.sendKeys('measurements'); + let aoName = await aoDiv.findElement(By.css('input')); + await aoName.clear(); + await aoName.sendKeys('measurements'); + + // select type system/array_1d_floats/1 + await aiDiv.findElement(By.css('select.custom-select')).click(); + await aiDiv.findElement(By.css('select.custom-select option[value="system/array_1d_floats/1"]')).click(); + await aoDiv.findElement(By.css('select.custom-select')).click(); + await aoDiv.findElement(By.css('select.custom-select option[value="system/array_1d_floats/1"]')).click(); + await driver.sleep(500); + + // save + await driver.findElement(By.css('.tab-pane.active > div > div.d-flex > button.btn-outline-secondary')).click(); + await driver.sleep(1000); /************************************************************** * ADVANCED IRIS EXPERIMENT */ + // navigate to exp list + await driver.findElement(By.linkText('experiments')).click(); + //.sendKeys('webdriver', Key.RETURN); + await driver.wait(until.elementLocated(By.css('input[placeholder="Search experiments..."]'), 2000)); + + // click the new button + await driver.findElement(By.css('.dropdown + div > .btn-outline-success')).click(); + await driver.wait(until.elementLocated(By.css('.modal')), 2000); + + // make new exp + eUser = await driver.findElement(By.css('input[placeholder="Experiment user..."]')); + await eUser.clear(); + await eUser.sendKeys('selenium'); + let eTc = await driver.findElement(By.css('.modal select')); + await eTc.click(); + await eTc.findElement(By.css('select option[value="selenium/iris_advanced/1"]')).click(); + eName = driver.findElement(By.css('input[placeholder="Experiment name..."]')); + await eName.clear(); + await eName.sendKeys('iris'); + await driver.sleep(1000); + await driver.findElement(By.css('.modal button.btn-primary')).click(); + await driver.wait(until.elementLocated(By.linkText('selenium/selenium/iris_advanced/1/iris')), 2000); + await driver.sleep(1000); + + // go to new exp + await driver.findElement(By.linkText('selenium/selenium/iris_advanced/1/iris')).click(); + await driver.wait(until.elementLocated(By.css('div.experimentEditor')), 2000); + + // assign dataset protocol + await driver.findElement(By.css('.datasets select')).click(); + await driver.findElement(By.css(`.datasets select option[value='{"testing_data":{"database":"iris/1","protocol":"Main","set":"training"},"training_data":{"database":"iris/1","protocol":"Main","set":"testing"}}']`)).click(); + + // pre_training block + await driver.findElement(By.css('rect#block_pre_training')).click(); + await driver.wait(until.elementLocated(By.css('div.block_pre_training')), 2000); + await driver.findElement(By.css('select.custom-select')).click(); + await driver.findElement(By.css('select.custom-select option[value="selenium/iris_preprocessor/1"]')).click(); + + // pre_testing block + await driver.findElement(By.css('rect#block_pre_testing')).click(); + await driver.wait(until.elementLocated(By.css('div.block_pre_testing')), 2000); + await driver.findElement(By.css('select.custom-select')).click(); + await driver.findElement(By.css('select.custom-select option[value="selenium/iris_preprocessor/1"]')).click(); + + // training_alg block + await driver.findElement(By.css('rect#block_training_alg')).click(); + await driver.wait(until.elementLocated(By.css('div.block_training_alg')), 2000); + await driver.findElement(By.css('select.custom-select')).click(); + await driver.findElement(By.css('select.custom-select option[value="test/iris_training/1"]')).click(); + + // testing_alg block + await driver.findElement(By.css('rect#block_testing_alg')).click(); + await driver.wait(until.elementLocated(By.css('div.block_testing_alg')), 2000); + await driver.findElement(By.css('select.custom-select')).click(); + await driver.findElement(By.css('select.custom-select option[value="test/iris_testing/1"]')).click(); + + // analyzer block + await driver.findElement(By.css('rect#block_analyzer')).click(); + await driver.wait(until.elementLocated(By.css('div.block_analyzer')), 2000); + await driver.findElement(By.css('select.custom-select')).click(); + await driver.findElement(By.css('select.custom-select option[value="test/iris_analyzer/1"]')).click(); + + // make sure the exp is still valid + await driver.wait(until.elementLocated(By.css('.badge-success')), 2000); + + // save exp + await driver.findElement(By.css('div.experimentEditor > div.d-flex > button.btn-outline-secondary')).click(); + await driver.sleep(1000); + /************************************************************** * CLEANUP */ + // go back and delete toolchain (which also deletes the associated experiment) + await driver.findElement(By.linkText('toolchains')).click(); + await driver.wait(until.elementLocated(By.css('input[placeholder="Search toolchains..."]'), 2000)); + tLink = await driver.findElement(By.linkText('selenium/iris_advanced/1')); + await tLink.findElement(By.xpath('../..')).findElement(By.css('button.btn-outline-danger')).click(); + await driver.sleep(1000); + await driver.findElement(By.css('.modal button.btn-danger')).click(); + await driver.sleep(1000); + + // go back and delete algorithm + await driver.findElement(By.linkText('algorithms')).click(); + await driver.wait(until.elementLocated(By.css('input[placeholder="Search algorithms..."]'), 2000)); + tLink = await driver.findElement(By.linkText('selenium/iris_preprocessor/1')); + await tLink.findElement(By.xpath('../..')).findElement(By.css('button.btn-outline-danger')).click(); + await driver.sleep(1000); + await driver.findElement(By.css('.modal button.btn-danger')).click(); + await driver.sleep(1000); + console.log('selenium tests finished successfully!'); } catch(e) { console.log('selenium tests failed!');