【问题标题】:toEqual by binding is not working通过绑定的 toEqual 不起作用
【发布时间】:2016-03-30 07:34:17
【问题描述】:
我必须通过以下方式断言文本:
expect(accessPolicyPage.accessPolicyName).toEqual(element.all(by.binding("pol.name")).get(0).getText());
它给了我一些很长的错误,如下所示。
预期“访问策略名称 01”等于 ({ ptor_: ({ controlFlow:
函数、调度:函数、setFileDetector:函数、getSession:
函数,getCapabilities:函数,退出:函数,动作:
函数,touchActions:函数,executeScript:函数,
executeAsyncScript:函数,调用:函数,等待:函数,睡眠:
函数,getWindowHandle:函数,getAllWindowHandles:函数,
getPageSource:函数,关闭:函数,getCurrentUrl:函数,
getTitle:函数,findElementInternal_:函数,
findElementsInternal_:函数,截图:函数,管理:
功能、开关
【问题讨论】:
标签:
javascript
jasmine
protractor
【解决方案1】:
您在控制台上看到的是一个“可怕的”promise 对象表示。如果你需要一个真正的价值,明确地解决承诺then():
element.all(by.binding("pol.name")).get(0).getText().then(function (text) {
expect(accessPolicyPage.accessPolicyName).toEqual(text);
});
或者,由于accessPolicyPage.accessPolicyName 是一个预先定义的实际文本,您可以只交换匹配器中的内容并让expect() 隐式解析promise:
expect(element.all(by.binding("pol.name")).get(0).getText()).toEqual(accessPolicyPage.accessPolicyName);
这个选项比较简单,一般推荐。
【解决方案2】:
事实上,Protractor 支持对 Promise 的期望。但它只处理案例,当期望的第一个参数是承诺时。所以以下应该工作:
expect(somePromise).toEqual(someString);
expect(somePromise).toEqual(anotherPromise);
但这个不会:
expect(notPromise).toEqual(somePromise);