token-wizard-test-automation/pages/Page.js

377 lines
9.9 KiB
JavaScript

const Logger= require('../entity/Logger.js');
const logger=Logger.logger;
const utils=require('../utils/Utils.js');
const Utils=utils.Utils;
const key = require('selenium-webdriver').Key;
const webdriver = require('selenium-webdriver'),
by = require('selenium-webdriver/lib/by');
//const Alert = require('selenium-webdriver');
//const Alert=webdriver.Alert;
const By=by.By;
const loader=By.className("loading-container");
const titles=By.className("title");
const Twait=20000;
Twaittransaction=5000;
class Page {
constructor(driver) {
this.driver=driver;
this.pageTitle;
}
async initTitles() {
try {
logger.info("init titles:");
let array = await this.findWithWait(titles);
this.pageTitle = array[0];
return array;
}
catch(err) {
logger.info("Page has no title");
return null;
}
}
async getPageTitle(element){
logger.info("get title: ");
let array = await this.initTitles();
let result;
if (array!=null) result = await this.getTextByElement(this.pageTitle);
logger.info("result ");
return result;
}
async isElementDisabled(element) {
logger.info("isElementDisabled :")
try {
let field;
if (element.constructor.name!=="WebElement") {
field = await this.driver.wait(webdriver.until.elementLocated(element), Twait);
}
else field = element;
await this.driver.wait(webdriver.until.elementIsDisabled(field), 100);
logger.info("element disabled ");
return true;
}
catch(err) {
logger.info("Element enabled or does not present");
return false;
}
}
async findElementInArray(locator,className) {
try {
await this.driver.wait(webdriver.until.elementsLocated(locator), 10000, 'Element NOT present.Time out.\n');
let arr = await this.driver.findElements(locator);
for (let i = 0; i < arr.length; i++) {
let result = await arr[i].getAttribute("className");
if (result.includes(className)) return arr[i];
}
}
catch(err) {
logger.info("Can't find "+ locator+ "in array of "+ className+".\n"+err);
return null;
}
}
async isElementPresentWithWait(element) {
logger.info("is element present with waiting :");
try {
await this.driver.wait(webdriver.until.elementLocated(element), Twaittransaction,'Element NOT present.Time out.\n');
logger.info(" element present");
return true;
}
catch(err) {
logger.info(" element NOT present, "+ err);
return false;
}
}
async isElementPresent(element) {
logger.info("is element present :");
try {
let field;
if (element.constructor.name!=="WebElement") {
field = await this.driver.findElement(element);
}
else field=element;
await field.isDisplayed();
logger.info(" element present");
return true;
}
catch (err) {
logger.info(" element NOT present");
return false;
}
}
async getTextByElement(element) {
logger.info("get text for element : ");
let result=await element.getText();
if(result.length<100) logger.info("text received: "+result);
return result;
}
async getAttribute(element,attr) {
logger.info("get attribute = "+attr+ "for element = "+element);
let field;
if (element.constructor.name!="WebElement") {
field = await this.driver.wait(webdriver.until.elementLocated(element), Twait);
}
else field = element;
let result=await field.getAttribute(attr);
logger.info("received value= "+result);
return result;
}
async getTextByLocatorFast(locator) {
logger.info("get text for locator fast:");
try {
await this.driver.wait(webdriver.until.elementLocated(locator), 500, 'Element ' + locator + 'NOT present.Time out.\n');
let result=await this.driver.findElement(locator).getText();
logger.info("received text: "+result);
return result;
}
catch(err) {
return "";
}
}
async getTextByLocator(locator) {
logger.info("get text for locator ");
try {
await this.driver.wait(webdriver.until.elementLocated(locator), Twait, 'Element ' + locator + 'NOT present.Time out.\n');
let result=await this.driver.findElement(locator).getText();
logger.info("received text: "+result);
return result;
}
catch(err) {
return "";
}
}
async getURL() {
logger.info("get current page URL ");
return await this.driver.getCurrentUrl();
}
async open (url) {
logger.info("open "+url);
await this.driver.get(url);
logger.info("Current URL: "+await this.driver.getCurrentUrl());
logger.info("Current HANDLE: "+await this.driver.getWindowHandle());
await this.driver.sleep(5000);
}
async clearField(element) {
logger.info("clear field :");
let field;
if (element.constructor.name!=="WebElement") {
field = await this.driver.wait(webdriver.until.elementLocated(element), Twait);
}
else field = element;
let s="";
let counter=3;
do {
await field.click();
await this.driver.sleep(500);
for (let i=0;i<40;i++) {
await field.sendKeys(key.BACK_SPACE);
}
await this.driver.sleep(500);
s=await field.getAttribute('value');
} while ((s!="")&&(counter-->0));
}
async clickWithWait(element) {
logger.info("click with wait" +element);
try {
let field;
if (element.constructor.name!=="WebElement") {
field = await this.driver.wait(webdriver.until.elementLocated(element), Twait);
}
else field = element;
await field.click();
// await field.sendKeys(key.TAB);
return true;
}
catch(err) {
logger.info("Can not click element"+ element);
return false;
}
}
async waitUntilLocated(element) {
logger.info("wait until located");
try {
await this.driver.wait(webdriver.until.elementLocated(element), Twait);
}
catch(err) {
logger.info("Element "+ element+" has not appeared in"+ Twait+" sec.");
}
}
async fillWithWait(element,k) {
logger.info("fill with wait :");
try {
logger.info("fill:field: "+element +" with value = " + k);
let field;
if (element.constructor.name!="WebElement") {
field = await this.driver.wait(webdriver.until.elementLocated(element), Twait);
}
else field = element;
await field.sendKeys(k);
return true;
}
catch(err) {
logger.info("Element "+ element+" has not appeared in"+ Twait+" sec.");
return false;
}
}
async refresh() {
logger.info("refresh :");
await this.driver.navigate().refresh();
}
async findWithoutWait(element) {
logger.info("find with wait ");
try {
await this.driver.wait(webdriver.until.elementLocated(element), 1000);
return await this.driver.findElements(element);
}
catch(err) {
logger.info("Element "+ element+" have not appeared in"+ 1000+" sec.");
return null;
}
}
async findWithWait(element) {
logger.info("find with wait ");
try {
await this.driver.wait(webdriver.until.elementLocated(element), Twait);
return await this.driver.findElements(element);
}
catch(err) {
logger.info("Element "+ element+" have not appeared in"+ Twait+" sec.");
return null;
}
}
async isDisplayedLoader() {
logger.info("is loader displayed :");
try {
let s = await this.driver.findElement(loader).getAttribute("className");
if (s == "loading-container notdisplayed") {
logger.info("NOT displayed"+", s="+s);
return false;
}
else {
logger.info("displayed"+", s="+s);
return true;
}
}
catch (err) {
logger.info("can't find loader. "+err);
return false;
}
}
async waitUntilLoaderGone() {
logger.info("wait until loader gone :");
try {
let counter = 0;
let limit=40;
do {
this.driver.sleep(1000);
await this.isDisplayedLoader();
if (counter++ > limit) throw ("Loading container displayed more than "+limit+" sec");
} while ((await this.isDisplayedLoader()));
}
catch(err) {
logger.info(err);
await this.refresh();
await this.driver.sleep(5000);
}
}
async goBack() {
logger.info("go back :")
this.driver.navigate().back();
}
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) {
logger.info("Browser has more than 2 windows"+". \n"+ "Amount of window is "+ allHandles.length);
let arr=[];
arr[0]=allHandles[0];
arr[1]=allHandles[1];
allHandles=arr;
logger.info("New allHandles.length="+allHandles.length);
}
let handle;
for (let i = 0; i < allHandles.length; i++) {
if (curHandle != allHandles[i]) {
handle = allHandles[i];
break;
}
}
logger.info("Current handle = "+ curHandle);
logger.info("Switch to handle = "+ handle);
await this.driver.switchTo().window(handle);
}
catch (err){
logger.info("can't switch to next tab "+err+". \n"+ "amount of window is "+ allHandles.length);
logger.info("current handle: "+curHandle);
}
}
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(err);
return false;
}
}
async acceptAlert() {
logger.info("acceptAlert:")
try {
this.driver.switchTo().alert().accept();
return true;
}
catch (err) {
logger.info(err);
return false;
}
}
}
module.exports.Page=Page;