【发布时间】:2018-03-01 16:28:09
【问题描述】:
我正在尝试将预期条件包装在基类中以启用尽可能多的干代码,但是我遇到了返回承诺的问题。我已经寻找了很多解决方案,但还没有找到满足我需求的解决方案。
基类 (POM)
import { browser, by, element, ElementArrayFinder, ElementFinder, Locator, ExpectedConditions, protractor } from 'protractor';
export class BasePage {
//#region Page Properties
...
//#endregion Page Properties
//#region Contructor
...
//#endregion Contructor
//#region Getters
...
//#endregion Getters
//#region Page Methods
...
public async waitUntilElementPresent(item: ElementFinder, timeToWait: number = 5000): Promise<Boolean> {
const until = ExpectedConditions;
return browser.wait(until.presenceOf(item), timeToWait, `Element ${item.locator} is taking too long to become present in the DOM. Waiting Time : ${timeToWait}`).then(() => {
return true;
}, () => {
return false;
});
}
public async waitUntilElementClickable(item: ElementFinder, timeToWait: number = 5000): Promise<Boolean> {
const until = ExpectedConditions;
return browser.wait(until.elementToBeClickable(item), timeToWait, `Element ${item.locator} is taking too long to become clickable. Waiting Time : ${timeToWait}`).then(() => {
return true;
}, () => {
return false;
});
}
public async waitUntilElementVisible(item: ElementFinder, timeToWait: number = 5000): Promise<Boolean> {
const until = ExpectedConditions;
return browser.wait(until.visibilityOf(item), timeToWait, `Element ${item.locator} is taking too long to become visible. Waiting Time : ${timeToWait}`).then(() => {
return true;
}, () => {
return false;
});
}
//#endregion Page Methods
}
我的页面类 (POM)
import { by, element, ElementFinder, Locator } from 'protractor';
import { BasePage } from '../../common/basePageObjects/basePage';
export class MyPage extends BasePage {
//#region Page Properties
private closeButton: Locator;
//#endregion Page Properties
//#region Contructor
constructor() {
super();
this.closeButton = by.css('closeBtn');
}
//#endregion Contructor
//#region Getters
public get CloseButton(): ElementFinder {
return element(this.closeButton);
}
//#endregion Getters
//#region Page Methods
public async clickOnCloseButton() {
await this.CloseButton.click();
}
//#endregion Page Methods
}
步骤
const myPage: MyPage = new MyPage(); // Extends base class
Then(/^I close my Page popup$/, async () => {
await expect(myPage.waitUntilElementVisible(myPage.CloseButton, 5000)).to.be.true;
});
当我调试代码时,我遇到了一个断言错误:“expected {} to be true”。现在这确实有道理,因为 browser.wait 返回 promise.Promise。我尝试了不同的方法,但更喜欢一种方法,让我等待规定的时间,如果元素确实符合 EC,则返回 true,如果不返回 false,或者在这种情况下返回布尔诺言。
任何建议将不胜感激。
【问题讨论】:
标签: protractor