量角剂期望的条件包装纸可以归还布尔的诺言



我试图将预期条件包裹在基类中,以启用尽可能多的干燥代码,但是我对退回的承诺有问题。我看了一个解决方案,但还没有找到满足我需求的东西。

基类(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
}

mypage类(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;
});

当我调试代码时,我会遇到一个断言错误:"期望{}为真"。现在,我猜这确实很有意义,因为browser.wait返回Promise.promise&lt; {}&gt;。我已经尝试了不同的方法,但希望一种方法可以让我等待规定的时间,如果该元素确实符合EC,请返回true,如果不返回false,或者在这种情况下是布尔值承诺。

任何建议都将不胜感激。

尝试:

expect(await myPage.waitUntilElementVisible ...

自protractor 5.2.1:

以来发生了变化

之前
await expect(getPromise()).toEqual(42);

之后
expect(await getPromise()).toEqual(42);

我看到您使用 async。您可以尝试相同但使用await

public async waitUntilElementClickable(item: ElementFinder, timeToWait: number = 5000): Promise<Boolean> {
    const until = ExpectedConditions;
    await browser.wait(until.elementToBeClickable(item), timeToWait, `Element ${item.locator} is taking too long to become clickable. Waiting Time : ${timeToWait}`);
    return true;
}

最新更新