WebdriverJS wait()返回一个web元素吗?



我试图在我的页面对象中使用WebdriverJS的wait()方法,以确保任何时候我访问一个元素,Webdriver将等待,直到它存在。目前,我的代码"看起来"是正确的,但是一旦它从wait()返回,它就不允许我单击元素。根据我所做的研究,似乎已经有其他人能够成功地做到这一点,但到目前为止,我还没能弄清楚。

我得到错误:TypeError: undefined不是一个函数- on element.click()

方法在我的页面对象:

    FacilityPage.prototype.selectFacility = function (facilityName) {
    var self = this;
    this.driver.wait(function () {
        return self.driver.isElementPresent(by.linkText(facilityName)).then(function (elm) {
            console.log('This is elm: ', elm);
            return elm;
        });
    }, 10000).then(function (element) {
        element.click();
    });
};

如何从我的测试文件调用:

facilityPage.selectFacility('Facility 1');

Protractor在2.0中有一个重大的变化,终止了这种测试可用性的方法。新热点是ExpectedConditions。我可能会这样处理你的情况……

如果您有一个基础页(如果不只是页面),设置您期望的条件(我重命名它们是为了更有用):

var EC = protractor.ExpectedConditions;
this.isClickable = function(locator) {
    return EC.elementToBeClickable(locator);
};

我也使用通用的waitAndClick er,这是我们在这里讨论的核心。

this.waitAndClick = function(element) {
    browser.wait(this.isClickable(element), 5000).then(function() {
        element.click();
    });
};

然后在page对象中,处理您的具体情况。

FacilityPage.prototype.selectFacility = function (facilityName) {
    this.waitAndClick(element(by.linkText(facilityName)));
};

用同样的方法…

facilityPage.selectFacility('Facility 1');

最新更新