失败:无法读取未定义量角器的属性'bind'

时间:2018-01-05 09:18:54

标签: javascript angularjs binding protractor

失败:无法读取未定义的属性'bind'

页面对象类:

this.popupToastIP = function(){
element.all(by.className('toast-success toast ng-trigger ng-trigger-
flyInOut')).then(function(){
element(by.className('toast-success toast ng-trigger ng-trigger-flyInOut')).getText(); 
});

测试规范:

browser.wait(EC.visibilityOf(publisher_whitelist_page.popupToastIP),5000);
expect(publisher_whitelist_page.popupToastIP.toEqual('Ip address removed'));  

尝试删除“全部”但无效 - 仍然出现相同错误(按照帖子undefined property 'bind' when using expected conditions的建议

非常感谢任何帮助!

谢谢!

科斯蒂

修改

尝试添加绑定但又无效。

this.popupToastIP = function(){
element.all(by.className('toast-success toast ng-trigger ng-trigger-
flyInOut')).then(function(){
element(by.className('toast-success toast ng-trigger ng-trigger-
flyInOut')).getText();
}).bind(this);
};

2 个答案:

答案 0 :(得分:1)

你的代码是错误的,无论是量角器还是其他东西,都是无关紧要的。另一件事你可以将代码缩进其他易于阅读的内容。

1)这个函数的最终目的是从元素中获取文本或者 找一个元素?

this.popupToastIP = function(){
    element.all(by.className('toast-success toast ng-trigger ng-trigger-flyInOut'))
    .then(function(){
        element(by.className('toast-success toast ng-trigger ng-trigger-flyInOut'))
        .getText(); 
    });
}

第1期
为什么你通过两次相同的类名找到元素,element.all(xxx)是多余的,因为你没有在下面的()中使用它的结果。

第2期
你没有为函数返回值,但是你在Test Spec中的代码要求它有返回值。

2)您在Test Spec中的代码如下所示,要求popupToastIP返回元素和元素文本,它们已经发生冲突。

browser.wait(EC.visibilityOf(publisher_whitelist_page.popupToastIP),5000); // require return an element
expect(publisher_whitelist_page.popupToastIP.toEqual('Ip address removed')); // require return text of element

第1期
你将popupToastIP视为一个函数,你错过了()。它不可能在页面上显示功能,并且等于删除了IP地址'

尝试以下代码

// Page Object
this.popupToastIP = element(by.className('toast-success toast ng-trigger ng-trigger-flyInOut'));

// Test Spec
browser.wait(EC.visibilityOf(publisher_whitelist_page.popupToastIP),5000);
expect(publisher_whitelist_page.popupToastIP.getText()).toEqual('Ip address removed'));

答案 1 :(得分:0)

所以问题可能是因为bind文件下没有Protractor.js。 在将测试用例写入此类文件之前,您必须提供bind的定义。

if (!Function.prototype.bind) {
  Function.prototype.bind = function(oThis) {
    if (typeof this !== 'function') {
    // closest thing possible to the ECMAScript 5
    // internal IsCallable function
    throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');
}

var aArgs   = Array.prototype.slice.call(arguments, 1),
    fToBind = this,
    fNOP    = function() {},
    fBound  = function() {
      return fToBind.apply(this instanceof fNOP
             ? this
             : oThis,
             aArgs.concat(Array.prototype.slice.call(arguments)));
    };

if (this.prototype) {
  // Function.prototype doesn't have a prototype property
  fNOP.prototype = this.prototype; 
}
fBound.prototype = new fNOP();

return fBound;

}; }