steps:tests for Step1,2
This commit is contained in:
parent
5a262ae3b4
commit
9466164f47
|
@ -16,7 +16,7 @@ const logger = createLogger({
|
|||
myFormat
|
||||
),
|
||||
transports: [
|
||||
//new (winston.transports.Console)(),
|
||||
new (winston.transports.Console)(),
|
||||
new (winston.transports.File)({filename: tempOutputFile})
|
||||
]
|
||||
});
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"scripts": {
|
||||
"startGanache": "npm install -g ganache-cli && ganache-cli &",
|
||||
"e2eMinted": "npm run e2eMintedUI && npm run e2eMintedWhitelist && npm run e2eMintedMincap",
|
||||
"e2eMintedUI": "mocha ./test/e2eMintedUI.js",
|
||||
"e2eMintedUI": "mocha -b ./test/e2eMintedUI.js",
|
||||
"e2eMintedWhitelist": "mocha ./test/e2eMintedWhitelist.js",
|
||||
"e2eMintedMincap": "mocha ./test/e2eMintedMincap.js",
|
||||
"e2eDutch": "npm run e2eDutchUI && npm run e2eDutchWhitelist && npm run e2eDutchMincap",
|
||||
|
|
|
@ -158,11 +158,11 @@ class ContributionPage extends Page {
|
|||
return (await super.waitUntilDisplayed(countdownTimerStatus,Twaiting));
|
||||
}
|
||||
|
||||
async clickButtonOK() {
|
||||
/* async clickButtonOK() {
|
||||
logger.info(this.name + "clickButtonOK ");
|
||||
return await super.clickWithWait(buttonOk);
|
||||
}
|
||||
|
||||
*/
|
||||
async fillContribute(amount) {
|
||||
logger.info(this.name + "fillContribute");
|
||||
return await super.fillWithWait(fieldContribute, amount);
|
||||
|
@ -217,10 +217,11 @@ class ContributionPage extends Page {
|
|||
return await super.waitUntilDisplayed(errorNotice, Twaiting);
|
||||
}
|
||||
|
||||
async waitUntilShowUpWarning(Twaiting) {
|
||||
/* async waitUntilShowUpWarning(Twaiting) {
|
||||
logger.info(this.name + "waitUntilShowUpWarning ");
|
||||
return await super.waitUntilDisplayed(buttonOk, Twaiting);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
module.exports.InvestPage = ContributionPage;
|
||||
|
|
733
pages/Page.js
733
pages/Page.js
|
@ -6,392 +6,435 @@ const By = require('selenium-webdriver/lib/by').By;
|
|||
const loader = By.className("loading-container");
|
||||
const loaderNotDisplayed = By.className("loading-container notdisplayed");
|
||||
const titles = By.className("title");
|
||||
const buttonOk = By.className("swal2-confirm swal2-styled");
|
||||
|
||||
class Page {
|
||||
|
||||
constructor(driver) {
|
||||
this.driver = driver;
|
||||
this.titleElement;
|
||||
}
|
||||
constructor(driver) {
|
||||
this.driver = driver;
|
||||
this.titleElement;
|
||||
}
|
||||
|
||||
async pressKey(key, times) {
|
||||
logger.info("press key " + key + " " + times + " times")
|
||||
try {
|
||||
const action = this.driver.actions();
|
||||
for (let i = 0; i < times; i++)
|
||||
await action.sendKeys(key).perform();
|
||||
return true;
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
async pressKey(key, times) {
|
||||
logger.info("press key " + key + " " + times + " times")
|
||||
try {
|
||||
const action = this.driver.actions();
|
||||
for ( let i = 0; i < times; i++ )
|
||||
await action.sendKeys(key).perform();
|
||||
return true;
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async waitUntilDisplayed(element, Twaiting) {
|
||||
logger.info("wait until displayed");
|
||||
let counter = Twaiting;
|
||||
if (counter === undefined) counter = 180;
|
||||
try {
|
||||
do {
|
||||
await this.driver.sleep(333);
|
||||
if (await this.isElementDisplayed(element)) return true;
|
||||
} while (counter-- > 0);
|
||||
return false;
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
async waitUntilDisplayed(element, Twaiting) {
|
||||
logger.info("wait until displayed");
|
||||
let counter = Twaiting;
|
||||
if ( counter === undefined ) counter = 180;
|
||||
try {
|
||||
do {
|
||||
await this.driver.sleep(333);
|
||||
if ( await this.isElementDisplayed(element) ) return true;
|
||||
} while ( counter-- > 0 );
|
||||
return false;
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async waitUntilLocated(element, Twaiting) {
|
||||
logger.info("wait until located");
|
||||
let counter = Twaiting;
|
||||
if (counter === undefined) counter = 180;
|
||||
try {
|
||||
do {
|
||||
await this.driver.sleep(333);
|
||||
if (await this.isElementLocated(element)) return true;
|
||||
} while (counter-- > 0);
|
||||
async waitUntilLocated(element, Twaiting) {
|
||||
logger.info("wait until located");
|
||||
let counter = Twaiting;
|
||||
if ( counter === undefined ) counter = 180;
|
||||
try {
|
||||
do {
|
||||
await this.driver.sleep(333);
|
||||
if ( await this.isElementLocated(element) ) return true;
|
||||
} while ( counter-- > 0 );
|
||||
|
||||
return false;
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async isElementLocated(element) {
|
||||
logger.info("is element located: ");
|
||||
return (await this.driver.findElements(element)).length > 0;
|
||||
}
|
||||
async isElementSelected(element) {
|
||||
logger.info("isElementSelected");
|
||||
return await this.driver.findElement(element).isSelected();
|
||||
}
|
||||
|
||||
async isElementDisplayed(element) {
|
||||
logger.info("is element displayed: ");
|
||||
try {
|
||||
if (element.constructor.name !== "WebElement") {
|
||||
return await this.driver.findElement(element).isDisplayed();
|
||||
}
|
||||
else
|
||||
return element.isDisplayed();
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Error:" + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
async isElementLocated(element) {
|
||||
logger.info("is element located: ");
|
||||
return (await this.driver.findElements(element)).length > 0;
|
||||
}
|
||||
|
||||
async getElement(element, Twaiting) {
|
||||
logger.info("getElement: " + element);
|
||||
try {
|
||||
if (Twaiting === undefined) Twaiting = 180;
|
||||
if (element.constructor.name !== "WebElement")
|
||||
return await this.driver.wait(webdriver.until.elementLocated(element), Twaiting * 333);
|
||||
else return element;
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Error: " + err);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
async isElementDisplayed(element) {
|
||||
logger.info("is element displayed: ");
|
||||
try {
|
||||
if ( element.constructor.name !== "WebElement" ) {
|
||||
return await this.driver.findElement(element).isDisplayed();
|
||||
}
|
||||
else
|
||||
return element.isDisplayed();
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Error:" + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async isElementDisabled(element) {
|
||||
logger.info("isElementDisabled " + element);
|
||||
try {
|
||||
let field = await this.getElement(element);
|
||||
return !await field.isEnabled()
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("element enabled or does not present");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
async getElement(element, Twaiting) {
|
||||
logger.info("getElement: " + element);
|
||||
try {
|
||||
if ( Twaiting === undefined ) Twaiting = 180;
|
||||
if ( element.constructor.name !== "WebElement" )
|
||||
return await this.driver.wait(webdriver.until.elementLocated(element), Twaiting * 333);
|
||||
else return element;
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Error: " + err);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async getAttribute(element, attr) {
|
||||
logger.info("get attribute = " + attr + " for element = " + element);
|
||||
try {
|
||||
let field = await this.getElement(element);
|
||||
let result = await field.getAttribute(attr);
|
||||
logger.info("received value= " + result);
|
||||
return result;
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
async isElementDisabled(element) {
|
||||
logger.info("isElementDisabled " + element);
|
||||
try {
|
||||
let field = await this.getElement(element);
|
||||
return !await field.isEnabled()
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("element enabled or does not present");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async getTextForElement(element, Twaiting) {
|
||||
logger.info("get text for element : ");
|
||||
try {
|
||||
let field = await this.getElement(element, Twaiting);
|
||||
let result = await field.getText();
|
||||
if (result.length < 100) logger.info("text received: " + result);
|
||||
return result;
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
async getAttribute(element, attr) {
|
||||
logger.info("get attribute = " + attr + " for element = " + element);
|
||||
try {
|
||||
let field = await this.getElement(element);
|
||||
let result = await field.getAttribute(attr);
|
||||
logger.info("received value= " + result);
|
||||
return result;
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async getURL() {
|
||||
logger.info("get current page URL ");
|
||||
return await this.driver.getCurrentUrl();
|
||||
}
|
||||
async getTextForElement(element, Twaiting) {
|
||||
logger.info("get text for element : ");
|
||||
try {
|
||||
let field = await this.getElement(element, Twaiting);
|
||||
let result = await field.getText();
|
||||
if ( result.length < 100 ) logger.info("text received: " + result);
|
||||
return result;
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async open(url) {
|
||||
logger.info("open: " + url);
|
||||
try {
|
||||
await this.driver.get(url);
|
||||
logger.info("Current URL: " + await this.driver.getCurrentUrl());
|
||||
logger.info("Current HANDLE: " + await this.driver.getWindowHandle());
|
||||
return true;
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
async getURL() {
|
||||
logger.info("get current page URL ");
|
||||
return await this.driver.getCurrentUrl();
|
||||
}
|
||||
|
||||
async isLocatedLoader() {
|
||||
logger.info("is loader displayed :");
|
||||
try {
|
||||
return await this.isElementLocated(loader);
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
async open(url) {
|
||||
logger.info("open: " + url);
|
||||
try {
|
||||
await this.driver.get(url);
|
||||
logger.info("Current URL: " + await this.driver.getCurrentUrl());
|
||||
logger.info("Current HANDLE: " + await this.driver.getWindowHandle());
|
||||
return true;
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async waitUntilLoaderGone() {
|
||||
logger.info("wait until loader gone :");
|
||||
if (!await this.isLocatedLoader()) return true;
|
||||
else
|
||||
return await this.waitUntilLocated(loaderNotDisplayed,180);
|
||||
}
|
||||
async isLocatedLoader() {
|
||||
logger.info("is loader displayed :");
|
||||
try {
|
||||
return await this.isElementLocated(loader);
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async refresh() {
|
||||
logger.info("refresh :");
|
||||
try {
|
||||
await this.driver.navigate().refresh();
|
||||
return true;
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
async waitUntilLoaderGone() {
|
||||
logger.info("wait until loader gone :");
|
||||
if ( !await this.isLocatedLoader() ) return true;
|
||||
else
|
||||
return await this.waitUntilLocated(loaderNotDisplayed, 180);
|
||||
}
|
||||
|
||||
async clickWithWait(element, Twaiting) {
|
||||
logger.info("click with wait: " + element);
|
||||
try {
|
||||
let field = await this.getElement(element, Twaiting);
|
||||
async refresh() {
|
||||
logger.info("refresh :");
|
||||
try {
|
||||
await this.driver.navigate().refresh();
|
||||
return true;
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
await field.click();
|
||||
return true;
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
async clickWithWait(element, Twaiting) {
|
||||
logger.info("click with wait: " + element);
|
||||
try {
|
||||
let field = await this.getElement(element, Twaiting);
|
||||
|
||||
async fillWithWait(element, k, Twaiting) {
|
||||
logger.info("fill with wait : value = " + k);
|
||||
try {
|
||||
let field = await this.getElement(element, Twaiting);
|
||||
if (field === null) return false;
|
||||
await field.sendKeys(k);
|
||||
return true;
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Element " + element + " has not appeared in" + Twaiting * 333 / 1000 + " sec.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
await field.click();
|
||||
return true;
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async findWithWait(element, Twaiting) {
|
||||
logger.info("find with wait ");
|
||||
try {
|
||||
if (Twaiting === undefined) Twaiting = 180;
|
||||
await this.driver.wait(webdriver.until.elementLocated(element), Twaiting * 333);
|
||||
return await this.driver.findElements(element);
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Element " + element + " have not appeared in" + Twaiting * 333 / 1000 + " sec.");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
async fillWithWait(element, k, Twaiting) {
|
||||
logger.info("fill with wait : value = " + k);
|
||||
try {
|
||||
let field = await this.getElement(element, Twaiting);
|
||||
if ( field === null ) return false;
|
||||
await field.sendKeys(k);
|
||||
return true;
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Element " + element + " has not appeared in" + Twaiting * 333 / 1000 + " sec.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async findWithWait(element, Twaiting) {
|
||||
logger.info("find with wait ");
|
||||
try {
|
||||
if ( Twaiting === undefined ) Twaiting = 180;
|
||||
await this.driver.wait(webdriver.until.elementLocated(element), Twaiting * 333);
|
||||
return await this.driver.findElements(element);
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Element " + element + " have not appeared in" + Twaiting * 333 / 1000 + " sec.");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async clearField(element) {
|
||||
try {
|
||||
logger.info("clear field :");
|
||||
let field = await this.getElement(element);
|
||||
let content = "";
|
||||
let counter = 3;
|
||||
do {
|
||||
await field.click();
|
||||
await this.driver.sleep(200);
|
||||
for ( let i = 0; i < 40; i++ ) {
|
||||
await field.sendKeys(key.BACK_SPACE);
|
||||
}
|
||||
await this.driver.sleep(200);
|
||||
content = await field.getAttribute('value');
|
||||
if ( content === "" ) return true;
|
||||
} while ( counter-- > 0 );
|
||||
return false;
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async clearField(element) {
|
||||
try {
|
||||
logger.info("clear field :");
|
||||
let field = await this.getElement(element);
|
||||
let content = "";
|
||||
let counter = 3;
|
||||
do {
|
||||
await field.click();
|
||||
await this.driver.sleep(200);
|
||||
for (let i = 0; i < 40; i++) {
|
||||
await field.sendKeys(key.BACK_SPACE);
|
||||
}
|
||||
await this.driver.sleep(200);
|
||||
content = await field.getAttribute('value');
|
||||
if (content === "") return true;
|
||||
} while (counter-- > 0);
|
||||
return false;
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
async clearFieldFromStart(element) {
|
||||
try {
|
||||
logger.info("clearFieldFromStart");
|
||||
let field = await this.getElement(element);
|
||||
let counter = 1;
|
||||
do {
|
||||
await this.driver.sleep(200);
|
||||
for ( let i = 0; i < 10; i++ ) {
|
||||
await field.sendKeys(key.ARROW_RIGHT);
|
||||
}
|
||||
await this.driver.sleep(200);
|
||||
for ( let i = 0; i < 10; i++ ) {
|
||||
await field.sendKeys(key.BACK_SPACE);
|
||||
}
|
||||
await this.driver.sleep(200);
|
||||
|
||||
async clearFieldFromStart(element) {
|
||||
try {
|
||||
logger.info("clearFieldFromStart");
|
||||
let field = await this.getElement(element);
|
||||
let counter = 1;
|
||||
do {
|
||||
await this.driver.sleep(200);
|
||||
for (let i = 0; i < 10; i++) {
|
||||
await field.sendKeys(key.ARROW_RIGHT);
|
||||
}
|
||||
await this.driver.sleep(200);
|
||||
for (let i = 0; i < 10; i++) {
|
||||
await field.sendKeys(key.BACK_SPACE);
|
||||
}
|
||||
await this.driver.sleep(200);
|
||||
|
||||
} while (counter-- > 0);
|
||||
return true;
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} while ( counter-- > 0 );
|
||||
return true;
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async switchToNextPage() {
|
||||
logger.info("switch to next tab :");
|
||||
let allHandles = [];
|
||||
let curHandle;
|
||||
try {
|
||||
allHandles = await this.driver.getAllWindowHandles();
|
||||
curHandle = await this.driver.getWindowHandle();
|
||||
if ( allHandles.length > 2 ) {
|
||||
let arr = [];
|
||||
arr[0] = allHandles[0];
|
||||
arr[1] = allHandles[1];
|
||||
allHandles = arr;
|
||||
logger.info("Browser has " + allHandles.length + " tabs");
|
||||
}
|
||||
let handle;
|
||||
for ( let i = 0; i < allHandles.length; i++ ) {
|
||||
if ( curHandle !== allHandles[i] ) {
|
||||
handle = allHandles[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
await this.driver.switchTo().window(handle);
|
||||
logger.info("Current handle = " + curHandle);
|
||||
logger.info("Switch to handle = " + handle);
|
||||
await this.driver.sleep(500);
|
||||
return true;
|
||||
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("can't switch to next tab " + err);
|
||||
logger.info("current handle: " + curHandle);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async goBack() {
|
||||
logger.info("goBack");
|
||||
try {
|
||||
this.driver.navigate().back();
|
||||
return true;
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async goForward() {
|
||||
logger.info("goForward");
|
||||
try {
|
||||
this.driver.navigate().forward();
|
||||
return true;
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async getChildFromElementByClassName(child, element) {
|
||||
logger.info("getChildFromElementByClassName");
|
||||
try {
|
||||
return await element.findElements(By.className(child.toString()));
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Error: " + err);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async switchToNextPage() {
|
||||
logger.info("switch to next tab :");
|
||||
let allHandles = [];
|
||||
let curHandle;
|
||||
try {
|
||||
allHandles = await this.driver.getAllWindowHandles();
|
||||
curHandle = await this.driver.getWindowHandle();
|
||||
if (allHandles.length > 2) {
|
||||
let arr = [];
|
||||
arr[0] = allHandles[0];
|
||||
arr[1] = allHandles[1];
|
||||
allHandles = arr;
|
||||
logger.info("Browser has " + allHandles.length + " tabs");
|
||||
}
|
||||
let handle;
|
||||
for (let i = 0; i < allHandles.length; i++) {
|
||||
if (curHandle !== allHandles[i]) {
|
||||
handle = allHandles[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
await this.driver.switchTo().window(handle);
|
||||
logger.info("Current handle = " + curHandle);
|
||||
logger.info("Switch to handle = " + handle);
|
||||
await this.driver.sleep(500);
|
||||
return true;
|
||||
async initTitles() {
|
||||
logger.info("initTitles ");
|
||||
try {
|
||||
let array = await this.findWithWait(titles);
|
||||
this.titleElement = array[0];
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Error: " + err);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("can't switch to next tab " + err);
|
||||
logger.info("current handle: " + curHandle);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
async getTitleText() {
|
||||
logger.info("getPageTitle ");
|
||||
await this.initTitles();
|
||||
return this.getTextForElement(this.titleElement);
|
||||
|
||||
async goBack() {
|
||||
logger.info("go back :");
|
||||
try {
|
||||
this.driver.navigate().back();
|
||||
return true;
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Error: " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async getChildFromElementByClassName(child, element) {
|
||||
logger.info("getChildFromElementByClassName");
|
||||
try {
|
||||
return await element.findElements(By.className(child.toString()));
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Error: " + err);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
async waitUntilDisplayedTitle(Twaiting) {
|
||||
logger.info("waitUntilDisplayedTitle: ");
|
||||
|
||||
async initTitles() {
|
||||
logger.info("initTitles ");
|
||||
try {
|
||||
let array = await this.findWithWait(titles);
|
||||
this.titleElement = array[0];
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Error: " + err);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return (await this.initTitles() !== null)
|
||||
&& await this.waitUntilDisplayed(this.titleElement, Twaiting);
|
||||
}
|
||||
|
||||
async getTitleText() {
|
||||
logger.info("getPageTitle ");
|
||||
await this.initTitles();
|
||||
return this.getTextForElement(this.titleElement);
|
||||
async isPresentAlert() {
|
||||
logger.info("isPresentAlert:")
|
||||
try {
|
||||
|
||||
}
|
||||
let result = await this.driver.switchTo().alert().getText();
|
||||
logger.info("alert text: " + result);
|
||||
return true;
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Error " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async waitUntilDisplayedTitle(Twaiting) {
|
||||
logger.info("waitUntilDisplayedTitle: ");
|
||||
async acceptAlert() {
|
||||
logger.info("acceptAlert:")
|
||||
try {
|
||||
this.driver.switchTo().alert().accept();
|
||||
return true;
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info("Error " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return (await this.initTitles() !== null)
|
||||
&& await this.waitUntilDisplayed(this.titleElement, Twaiting);
|
||||
}
|
||||
async waitUntilShowUpWarning(Twaiting) {
|
||||
logger.info("waitUntilShowUpWarning ");
|
||||
return await this.waitUntilDisplayed(buttonOk, Twaiting);
|
||||
}
|
||||
|
||||
async isPresentAlert() {
|
||||
logger.info("isPresentAlert:")
|
||||
try {
|
||||
async clickButtonOK() {
|
||||
logger.info("clickButtonOK ");
|
||||
return await this.clickWithWait(buttonOk);
|
||||
}
|
||||
|
||||
let result = await this.driver.switchTo().alert().getText();
|
||||
logger.info("alert text: " + result);
|
||||
return true;
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Error " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async acceptAlert() {
|
||||
|
||||
logger.info("acceptAlert:")
|
||||
try {
|
||||
this.driver.switchTo().alert().accept();
|
||||
return true;
|
||||
}
|
||||
catch (err) {
|
||||
logger.info("Error " + err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
async waitUntilHasValue(element, Twaiting) {
|
||||
logger.info("waitUntilHasValue ");
|
||||
try {
|
||||
let field = await this.getElement(element, 3);
|
||||
if ( field === null ) return false;
|
||||
if ( Twaiting === undefined ) Twaiting = 180;
|
||||
do {
|
||||
await this.driver.sleep(333);
|
||||
if ( await this.getAttribute(field, "value") !== '' ) return true;
|
||||
}
|
||||
while ( Twaiting-- > 0 )
|
||||
return false;
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info(err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@ const logger= require('../entity/Logger.js').logger;
|
|||
const Page=require('./Page.js').Page;
|
||||
const By = require('selenium-webdriver/lib/by').By;
|
||||
const buttonContinue= By.className("button button_fill");
|
||||
const checkboxWhitelistWithCap =By.id('white-list-with-cap');
|
||||
const checkboxDutchAuction = By.id('dutch-auction');
|
||||
|
||||
class WizardStep1 extends Page {
|
||||
|
||||
|
@ -27,6 +29,16 @@ class WizardStep1 extends Page {
|
|||
}
|
||||
}
|
||||
|
||||
async isSelectedCheckboxWhitelistWithCap() {
|
||||
logger.info(this.name + "isSelectedCheckboxWhitelistWithCap: ");
|
||||
return super.isElementSelected(checkboxWhitelistWithCap)
|
||||
}
|
||||
|
||||
async isSelectedCheckboxDutchAuction() {
|
||||
logger.info(this.name + "isSelectedCheckboxDutchAuction: ");
|
||||
return super.isElementSelected(checkboxDutchAuction)
|
||||
}
|
||||
|
||||
async isDisplayedButtonContinue() {
|
||||
logger.info(this.name+": isDisplayedButtonContinue: ");
|
||||
return await super.isElementDisplayed(buttonContinue);
|
||||
|
|
|
@ -118,10 +118,18 @@ class WizardStep2 extends Page {
|
|||
(await this.getTextForElement(this.warningSupply) !== "");
|
||||
}
|
||||
|
||||
async getFieldDecimals() {
|
||||
logger.info(this.name + "getFieldDecimals ");
|
||||
return super.getAttribute(fieldDecimals, "value");
|
||||
async getValueFieldDecimals() {
|
||||
logger.info(this.name + "getValueFieldDecimals ");
|
||||
return await super.getAttribute(fieldDecimals, "value");
|
||||
}
|
||||
async getValueFieldTicker() {
|
||||
logger.info(this.name + "getValueFieldTicker ");
|
||||
return await super.getAttribute(fieldTicker, "value");
|
||||
}
|
||||
async getValueFieldName() {
|
||||
logger.info(this.name + "getValueFieldName ");
|
||||
return await super.getAttribute(fieldName, "value");
|
||||
}
|
||||
|
||||
async isDisabledDecimals() {
|
||||
logger.info(this.name + "isDisabledDecimals ");
|
||||
|
@ -141,6 +149,16 @@ class WizardStep2 extends Page {
|
|||
return await super.isElementDisplayed(fieldSupply);
|
||||
}
|
||||
|
||||
async waitUntilDisplayedFieldName(Twaiting) {
|
||||
logger.info(this.name + "waitUntilDisplayedFieldName: ");
|
||||
return await super.waitUntilDisplayed(fieldName,Twaiting);
|
||||
}
|
||||
|
||||
async waitUntilHasValueFieldName(Twaiting) {
|
||||
logger.info(this.name + "waitUntilHasValueFieldName: ");
|
||||
return await super.waitUntilHasValue(fieldName,Twaiting);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports.WizardStep2 = WizardStep2;
|
|
@ -132,6 +132,13 @@ test.describe(`e2e test for TokenWizard2.0/DutchAuctionCrowdsale. v ${testVersio
|
|||
return await assert.equal(result, true, "Test FAILED. User is not able to to click DutchAuction checkbox");
|
||||
});
|
||||
|
||||
test.it('Wizard step#1: user is able to click DutchAuction checkbox ',
|
||||
async function () {
|
||||
let result = await wizardStep1.waitUntilDisplayedCheckboxDutchAuction()
|
||||
&& await wizardStep1.clickCheckboxDutchAuction();
|
||||
return await assert.equal(result, true, "Test FAILED. User is not able to to click DutchAuction checkbox");
|
||||
});
|
||||
|
||||
test.it('Wizard step#1: user is able to open Step2 by clicking button Continue ',
|
||||
async function () {
|
||||
let count = 10;
|
||||
|
|
|
@ -23,9 +23,10 @@ test.describe(`e2e test for TokenWizard2.0/MintedCappedCrowdsale. v ${testVersio
|
|||
this.slow(1800000);
|
||||
|
||||
const user8545_56B2File = './users/user8545_56B2.json';//Owner
|
||||
const user77_F16AFile = './users/user77_F16A.json';//Investor1
|
||||
let driver;
|
||||
let Owner;
|
||||
|
||||
let Investor1;
|
||||
|
||||
let wallet;
|
||||
let welcomePage;
|
||||
|
@ -45,9 +46,14 @@ test.describe(`e2e test for TokenWizard2.0/MintedCappedCrowdsale. v ${testVersio
|
|||
let balanceEthOwnerBefore;
|
||||
let crowdsaleMintedSimple;
|
||||
|
||||
const nameText = 'Name'
|
||||
const tickerText = 'Tick'
|
||||
const decimalsText = '13'
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
test.before(async function () {
|
||||
|
||||
await Utils.copyEnvFromWizard();
|
||||
|
||||
const scenarioForUItests = './scenarios/scenarioUItests.json';
|
||||
|
@ -59,6 +65,7 @@ test.describe(`e2e test for TokenWizard2.0/MintedCappedCrowdsale. v ${testVersio
|
|||
|
||||
Owner = new User(driver, user8545_56B2File);
|
||||
await Utils.receiveEth(Owner, 20);
|
||||
Investor1 = new User(driver, user77_F16AFile);
|
||||
|
||||
logger.info("Roles:");
|
||||
logger.info("Owner = " + Owner.account);
|
||||
|
@ -66,8 +73,8 @@ test.describe(`e2e test for TokenWizard2.0/MintedCappedCrowdsale. v ${testVersio
|
|||
logger.info("Owner's balance = :" + balanceEthOwnerBefore / 1e18);
|
||||
|
||||
wallet = await Utils.getWalletInstance(driver);
|
||||
await wallet.activate();//return activated Wallet and empty page
|
||||
await Owner.setWalletAccount();
|
||||
//await wallet.activate();//return activated Wallet and empty page
|
||||
// await Owner.setWalletAccount();
|
||||
|
||||
welcomePage = new WizardWelcome(driver, startURL);
|
||||
wizardStep1 = new WizardStep1(driver);
|
||||
|
@ -90,29 +97,47 @@ test.describe(`e2e test for TokenWizard2.0/MintedCappedCrowdsale. v ${testVersio
|
|||
await fs.ensureDirSync(outputPath);
|
||||
await fs.copySync(tempOutputPath, outputPath);
|
||||
//await fs.remove(tempOutputPath);
|
||||
await driver.quit();
|
||||
// await driver.quit();
|
||||
});
|
||||
///////////////////////// UI TESTS /////////////////////////////////////
|
||||
|
||||
test.it('User is able to open wizard welcome page',
|
||||
test.it('Welcome page: User is able to open wizard welcome page',
|
||||
async function () {
|
||||
await welcomePage.open();
|
||||
let result = await welcomePage.waitUntilDisplayedButtonNewCrowdsale(180);
|
||||
return await assert.equal(result, true, "Test FAILED. Wizard's page is not available ");
|
||||
});
|
||||
|
||||
test.it('Welcome page: Warning present if user logged out from wallet',
|
||||
async function () {
|
||||
let result = await welcomePage.waitUntilShowUpWarning(180)
|
||||
return await assert.equal(result, true, "Test FAILED. No warning present if user logged out from wallet ");
|
||||
});
|
||||
|
||||
test.it('Welcome page: user can confirm warning',
|
||||
async function () {
|
||||
let result = await welcomePage.clickButtonOK()
|
||||
return await assert.equal(result, true, "Test FAILED. Button Ok doesn\'t present");
|
||||
});
|
||||
|
||||
test.it('Welcome page: No warning present if user logged into wallet',
|
||||
async function () {
|
||||
await wallet.activate();//return activated Wallet and empty page
|
||||
await Owner.setWalletAccount();
|
||||
let result = await welcomePage.waitUntilShowUpWarning(10)
|
||||
return await assert.equal(result, false, "Test FAILED. No warning present if user logged out from wallet ");
|
||||
});
|
||||
|
||||
test.it('Welcome page: button NewCrowdsale present ',
|
||||
async function () {
|
||||
let result = await welcomePage.isDisplayedButtonNewCrowdsale();
|
||||
return await assert.equal(result, true, "Test FAILED. Button NewCrowdsale not present ");
|
||||
|
||||
});
|
||||
|
||||
test.it('Welcome page: button ChooseContract present ',
|
||||
async function () {
|
||||
let result = await welcomePage.isDisplayedButtonChooseContract();
|
||||
return await assert.equal(result, true, "Test FAILED. button ChooseContract not present ");
|
||||
|
||||
});
|
||||
|
||||
test.it('Welcome page: user is able to open Step1 by clicking button NewCrowdsale ',
|
||||
|
@ -120,7 +145,38 @@ test.describe(`e2e test for TokenWizard2.0/MintedCappedCrowdsale. v ${testVersio
|
|||
let result = await welcomePage.clickButtonNewCrowdsale()
|
||||
&& await wizardStep1.waitUntilDisplayedCheckboxWhitelistWithCap();
|
||||
return await assert.equal(result, true, "Test FAILED. User is not able to activate Step1 by clicking button NewCrowdsale");
|
||||
});
|
||||
|
||||
test.it('Step#1: Go back - page keep state of checkbox \'Whitelist with mincap\' ',
|
||||
async function () {
|
||||
const result = await wizardStep1.clickCheckboxWhitelistWithCap()
|
||||
&& await wizardStep1.goBack()
|
||||
&& await welcomePage.isDisplayedButtonChooseContract()
|
||||
&& await wizardStep1.goForward()
|
||||
&& await wizardStep1.waitUntilLoaderGone()
|
||||
&& await wizardStep1.waitUntilDisplayedCheckboxWhitelistWithCap()
|
||||
&& await wizardStep1.isSelectedCheckboxWhitelistWithCap()
|
||||
return await assert.equal(result, true, "Test FAILED. Checkbox changed");
|
||||
});
|
||||
|
||||
test.it('Step#1: Refresh - page keep state of checkbox \'Whitelist with mincap\' ',
|
||||
async function () {
|
||||
const result = await wizardStep1.clickCheckboxWhitelistWithCap()
|
||||
&& await wizardStep1.refresh()
|
||||
&& await wizardStep1.isSelectedCheckboxWhitelistWithCap()
|
||||
return await assert.equal(result, true, "Test FAILED. Checkbox changed");
|
||||
});
|
||||
|
||||
test.it('Step#1: Change network - page keep state of checkbox \'Whitelist with mincap\' ',
|
||||
async function () {
|
||||
const result = await wizardStep1.clickCheckboxWhitelistWithCap()
|
||||
&& await Investor1.setWalletAccount()
|
||||
&& await wizardStep1.waitUntilLoaderGone()
|
||||
&& await wizardStep1.waitUntilDisplayedCheckboxWhitelistWithCap()
|
||||
&& await wizardStep1.isSelectedCheckboxWhitelistWithCap()
|
||||
&& await Owner.setWalletAccount()
|
||||
&& await wizardStep1.waitUntilLoaderGone()
|
||||
return await assert.equal(result, true, "Test FAILED. Checkbox changed");
|
||||
});
|
||||
|
||||
test.it('Wizard step#1: user is able to open Step2 by clicking button Continue ',
|
||||
|
@ -137,32 +193,70 @@ test.describe(`e2e test for TokenWizard2.0/MintedCappedCrowdsale. v ${testVersio
|
|||
while ( count-- > 0 );
|
||||
let result = await wizardStep2.isDisplayedFieldName();
|
||||
return await assert.equal(result, true, "Test FAILED. User is not able to open Step2 by clicking button Continue");
|
||||
|
||||
});
|
||||
|
||||
test.it('Wizard step#2: user able to fill out Name field with valid data',
|
||||
test.it('Step#2: field \'Decimals\' has placeholder 18',
|
||||
async function () {
|
||||
await wizardStep2.fillName("name");
|
||||
let result = await wizardStep2.isDisplayedWarningName();
|
||||
return await assert.equal(result, false, "Test FAILED. Wizard step#2: user able to fill Name field with valid data ");
|
||||
return await assert.equal(await wizardStep2.getValueFieldDecimals(), '18', "Test FAILED. Step#2:incorrect placeholder for field 'Decimals'");
|
||||
});
|
||||
|
||||
test.it('Wizard step#2: user able to fill out field \'Name\' with valid data',
|
||||
async function () {
|
||||
let result = await wizardStep2.fillName(nameText)
|
||||
&& await wizardStep2.isDisplayedWarningName();
|
||||
return await assert.equal(result, false, "Test FAILED. Wizard step#2: field name changed");
|
||||
});
|
||||
|
||||
test.it('Step#2: Go back - page keep state of field \'Name\' ',
|
||||
async function () {
|
||||
const result = await wizardStep2.goBack()
|
||||
&& await wizardStep1.waitUntilDisplayedCheckboxWhitelistWithCap()
|
||||
&& await wizardStep1.goForward()
|
||||
&& await wizardStep2.waitUntilLoaderGone()
|
||||
&& await wizardStep2.waitUntilDisplayedFieldName()
|
||||
&& await wizardStep2.waitUntilHasValueFieldName();
|
||||
await assert.equal(result, true, "Test FAILED. Wizard step#2: field name changed");
|
||||
return await assert.equal(await wizardStep2.getValueFieldName(), nameText, "Test FAILED.Field name changed");
|
||||
});
|
||||
|
||||
test.it('Step#2: Refresh - page keep state of field \'Name\'',
|
||||
async function () {
|
||||
const result = await wizardStep2.refresh()
|
||||
&& await wizardStep2.waitUntilLoaderGone()
|
||||
&& await wizardStep2.waitUntilDisplayedFieldName()
|
||||
&& await wizardStep2.waitUntilHasValueFieldName();
|
||||
await assert.equal(result, true, "Test FAILED. Wizard step#2: field name changed");
|
||||
return await assert.equal(await wizardStep2.getValueFieldName(), nameText, "Test FAILED.Wizard step#2: field name changed");
|
||||
});
|
||||
|
||||
test.it('Step#2: Change network - page keep state of field \'Name\'',
|
||||
async function () {
|
||||
const result = await Investor1.setWalletAccount()
|
||||
&& await wizardStep2.waitUntilLoaderGone()
|
||||
&& await wizardStep2.waitUntilHasValueFieldName()
|
||||
&& (await wizardStep2.getValueFieldName() === nameText)
|
||||
&& await Owner.setWalletAccount()
|
||||
&& await wizardStep2.waitUntilLoaderGone()
|
||||
&& await wizardStep2.waitUntilHasValueFieldName()
|
||||
&& (await wizardStep2.getValueFieldName() === nameText)
|
||||
return await assert.equal(result, true, "Test FAILED. Wizard step#2: field name changed");
|
||||
});
|
||||
|
||||
test.it('Wizard step#2: user able to fill out field Ticker with valid data',
|
||||
async function () {
|
||||
await wizardStep2.fillTicker("test");
|
||||
await wizardStep2.fillTicker(tickerText);
|
||||
let result = await wizardStep2.isDisplayedWarningTicker();
|
||||
return await assert.equal(result, false, "Test FAILED. Wizard step#2: user is not able to fill out field Ticker with valid data ");
|
||||
|
||||
});
|
||||
|
||||
test.it('Wizard step#2: user able to fill out Decimals field with valid data',
|
||||
async function () {
|
||||
await wizardStep2.fillDecimals("18");
|
||||
await wizardStep2.fillDecimals(decimalsText);
|
||||
let result = await wizardStep2.isDisplayedWarningDecimals();
|
||||
return await assert.equal(result, false, "Test FAILED. Wizard step#2: user is not able to fill Decimals field with valid data ");
|
||||
|
||||
});
|
||||
|
||||
|
||||
test.it('Wizard step#2: User is able to download CSV file with reserved tokens',
|
||||
async function () {
|
||||
let fileName = './public/reservedAddresses21.csv';
|
||||
|
@ -235,13 +329,61 @@ test.describe(`e2e test for TokenWizard2.0/MintedCappedCrowdsale. v ${testVersio
|
|||
|
||||
test.it('Wizard step#2: user is able to remove one of reserved tokens ',
|
||||
async function () {
|
||||
|
||||
let amountBefore = await reservedTokensPage.amountAddedReservedTokens();
|
||||
await reservedTokensPage.removeReservedTokens(1);
|
||||
let amountAfter = await reservedTokensPage.amountAddedReservedTokens();
|
||||
return await assert.equal(amountBefore, amountAfter + 1, "Test FAILED. Wizard step#2: user is NOT able to add reserved tokens");
|
||||
});
|
||||
|
||||
test.it('Step#2: Go back - page keep state of each field',
|
||||
async function () {
|
||||
const result = await wizardStep2.goBack()
|
||||
&& await wizardStep1.waitUntilDisplayedCheckboxWhitelistWithCap()
|
||||
&& await wizardStep1.goForward()
|
||||
&& await wizardStep2.waitUntilLoaderGone()
|
||||
&& await wizardStep2.waitUntilHasValueFieldName();
|
||||
await assert.equal(result, true, "Test FAILED. Wizard step#2: page isn\'t loaded");
|
||||
await assert.equal(await wizardStep2.getValueFieldName(), nameText, "Test FAILED.Field name changed");
|
||||
await assert.equal(await wizardStep2.getValueFieldDecimals(), decimalsText, "Test FAILED.Field decimals changed");
|
||||
await assert.equal(await wizardStep2.getValueFieldTicker(), tickerText, "Test FAILED.Field ticker changed");
|
||||
await assert.equal(await reservedTokensPage.amountAddedReservedTokens(), crowdsaleForUItests.reservedTokens.length-1, "Test FAILED. Wizard step#2: user is NOT able to add reserved tokens");
|
||||
});
|
||||
|
||||
test.it('Step#2: Refresh - page keep state of each field',
|
||||
async function () {
|
||||
const result = await wizardStep2.refresh()
|
||||
&& await wizardStep2.waitUntilLoaderGone()
|
||||
&& await wizardStep2.waitUntilDisplayedFieldName()
|
||||
&& await wizardStep2.waitUntilHasValueFieldName();
|
||||
await assert.equal(result, true, "Test FAILED. Wizard step#2: page isn\'t loaded");
|
||||
await assert.equal(await wizardStep2.getValueFieldName(), nameText, "Test FAILED.Field name changed");
|
||||
await assert.equal(await wizardStep2.getValueFieldDecimals(), decimalsText, "Test FAILED.Field decimals changed");
|
||||
await assert.equal(await wizardStep2.getValueFieldTicker(), tickerText, "Test FAILED.Field ticker changed");
|
||||
await assert.equal(await reservedTokensPage.amountAddedReservedTokens(), crowdsaleForUItests.reservedTokens.length-1, "Test FAILED. Wizard step#2: user is NOT able to add reserved tokens");
|
||||
});
|
||||
|
||||
test.it('Step#2: Change network - page keep state of each field',
|
||||
async function () {
|
||||
let result = await Investor1.setWalletAccount()
|
||||
&& await wizardStep2.waitUntilLoaderGone()
|
||||
&& await wizardStep2.waitUntilHasValueFieldName()
|
||||
await assert.equal(result, true, "Test FAILED. Wizard step#2: page isn\'t loaded");
|
||||
await assert.equal(await wizardStep2.getValueFieldName(), nameText, "Test FAILED.Field name changed");
|
||||
await assert.equal(await wizardStep2.getValueFieldDecimals(), decimalsText, "Test FAILED.Field decimals changed");
|
||||
await assert.equal(await wizardStep2.getValueFieldTicker(), tickerText, "Test FAILED.Field ticker changed");
|
||||
await assert.equal(await reservedTokensPage.amountAddedReservedTokens(), crowdsaleForUItests.reservedTokens.length-1, "Test FAILED. Wizard step#2: user is NOT able to add reserved tokens");
|
||||
|
||||
result = await Owner.setWalletAccount()
|
||||
&& await wizardStep2.waitUntilLoaderGone()
|
||||
&& await wizardStep2.waitUntilHasValueFieldName()
|
||||
await assert.equal(result, true, "Test FAILED. Wizard step#2: page isn\'t loaded");
|
||||
await assert.equal(await wizardStep2.getValueFieldName(), nameText, "Test FAILED.Field name changed");
|
||||
await assert.equal(await wizardStep2.getValueFieldDecimals(), decimalsText, "Test FAILED.Field decimals changed");
|
||||
await assert.equal(await wizardStep2.getValueFieldTicker(), tickerText, "Test FAILED.Field ticker changed");
|
||||
await assert.equal(await reservedTokensPage.amountAddedReservedTokens(), crowdsaleForUItests.reservedTokens.length-1, "Test FAILED. Wizard step#2: user is NOT able to add reserved tokens");
|
||||
|
||||
});
|
||||
|
||||
test.it('Wizard step#2: button Continue is displayed ',
|
||||
async function () {
|
||||
let result = await wizardStep2.isDisplayedButtonContinue();
|
||||
|
|
|
@ -22,6 +22,16 @@ const MetaMask = require('../pages/MetaMask.js').MetaMask;
|
|||
const Nifty = require('../pages/Nifty.js').Nifty;
|
||||
|
||||
class Utils {
|
||||
static async delay(ms) {
|
||||
try {
|
||||
await new Promise(resolve => setTimeout(resolve, ms))
|
||||
return true
|
||||
}
|
||||
catch ( err ) {
|
||||
logger.info(err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static async getWalletInstance(driver) {
|
||||
logger.info("Utils: getWallet");
|
||||
|
|
Loading…
Reference in New Issue