我不熟悉angularjs的量角器测试。 基本上我想检查一个复选框,如果它未选中。使用以下代码,我得到错误,如标题“TypeError:无法读取属性'单击'未定义”
var PageObject = function () {
this.hidePanelHeaderCb = element(by.id("hidePanelHeader"));
this.checkHidePanelHeaderCb = function() {
this.hidePanelHeaderCb.isSelected().then(function (selected) {
if(selected !== true) {
(this.hidePanelHeaderCb).click();
}
});
};
};
module.exports = PageObject;
右键单击我获得的网页代码段 - >检查是:
<span id="hidePanelHeader" ng-class="{'icon-CheckBoxSelected': panelProperties.hidePanelHeader, 'icon-CheckBoxUnselected': !panelProperties.hidePanelHeader}" ng-click="switchHidePanelHeader()" role="button" tabindex="0" class="icon-CheckBoxSelected" style=""></span>
我尝试使用isChecked(),它会产生不同的错误。
我使用panelPropertiesPageObject.checkHidePanelHeaderCb()调用;
使用这种代码方式的所有其他功能都正常工作。我添加的复选框代码无效。所以使用“文档”而不是“这个”可能不是原因。
答案 0 :(得分:3)
小心JavaScript 范围。在函数中,this
指的是函数对象。因此,对于函数中的每个this.hidePanelHeaderCb
语句,都可以向此对象添加属性。
相反,您可以将元素promise存储在变量中并使用它。
请试试这个:
var PageObject = function () {
this.checkHidePanelHeaderCb = function() {
var hidePanelHeader = element(by.id("hidePanelHeader"));
hidePanelHeader.isSelected().then(function (selected) {
if(selected !== true) {
hidePanelHeader.click();
}
});
};
};
module.exports = PageObject;
这就是我能告诉你的语法。没有HTML和更多JS上下文,很难添加更多。
修改:上面的示例在不同的对象上使用了三个hidePanelHeaderCb
属性:
var PageObject = function () {
// #1 PageObject.hidePanelHeaderCb (defined here)
this.hidePanelHeaderCb = element(by.id("hidePanelHeader"));
// PageObject.checkHidePanelHeaderCb (defined here)
this.checkHidePanelHeaderCb = function() {
// #2 PageObject.checkHidePanelHeaderCb.hidePanelHeaderCb (undefined)
this.hidePanelHeaderCb.isSelected().then(function (selected) {
if(selected !== true) {
// #3 anonymousThenCallback.hidePanelHeaderCb (also undefined)
(this.hidePanelHeaderCb).click();
}
});
};
};
module.exports = PageObject;
答案 1 :(得分:0)
以下工作使用闭包来消除由承诺引起的问题:
this.checkHidePanelHeaderCb = function() {
var that = this;
this.hidePanelHeaderCb.isSelected().then(function(selected) {
if(selected !== true) {
that.hidePanelHeaderCb.click();
}
});
};
答案 2 :(得分:0)
使用ES2015(ES6):
如果您使用的是ES2015(ES6),可以通过以下方式修复:
var PageObject = function () {
this.hidePanelHeaderCb = element(by.id("hidePanelHeader"));
this.checkHidePanelHeaderCb = () => {
this.hidePanelHeaderCb.isSelected().then(selected => {
if(!selected) {
this.hidePanelHeaderCb.click();
}
});
};
};
module.exports = PageObject;