【问题标题】:Protractor Expected Condition Wrapper to return a boolean promise量角器预期条件包装器返回一个布尔承诺
【发布时间】: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


    【解决方案1】:

    试试看:

    expect(await myPage.waitUntilElementVisible ...
    

    自 Protractor 5.2.1 以来发生了变化:

    之前

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

    之后

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

    【讨论】:

      【解决方案2】:

      我看到你使用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;
      }
      

      【讨论】:

        猜你喜欢
        • 2015-10-25
        • 2020-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-27
        • 1970-01-01
        • 2015-02-28
        相关资源
        最近更新 更多