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

时间:2015-08-19 13:04:48

标签: javascript selenium-webdriver protractor

我正在尝试在页面对象中使用WebdriverJS wait()方法,以确保每次访问元素时,Webdriver都会等到它出现。目前,我的代码“看起来”是正确的,但是一旦从wait()返回,它就不会让我点击该元素。根据我所做的研究,看起来已经有其他人能够成功地做到这一点,但到目前为止我还没有弄明白。

我收到错误:TypeError:undefined不是函数 - 在element.click()

我的Page Object中的方法:

    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');

1 个答案:

答案 0 :(得分:2)

量角器在2.0中发生了重大变化,导致这种可用性测试方法失败。新的热点是ExpectedConditions。以下是我处理你案件的方法......

如果您有一个basePage(如果不只是页面),请设置您的预期条件(我将它们重命名为更有用):

\x{2}

我还使用了通用var EC = protractor.ExpectedConditions; this.isClickable = function(locator) { return EC.elementToBeClickable(locator); }; 呃,这是我们在这里讨论的内容。

waitAndClick

然后在页面对象中处理您的具体案例。

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

以同样的方式调用它......

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