我试图在我的页面对象中使用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');