angularjs – 如何getText在量角器上的输入

前端之家收集整理的这篇文章主要介绍了angularjs – 如何getText在量角器上的输入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在量角器的文档中,我看到以下示例:
describe('by model',function() {
  it('should find an element by text input model',function() {
    var username = element(by.model('username'));
    username.clear();
    username.sendKeys('Jane Doe');

    var name = element(by.binding('username'));

    expect(name.getText()).toEqual('Jane Doe');
  });

这里很清楚的是,你可以使用“by.model”在输入框中设置值,但是如果你想看一个输入框,看看里面有什么,你需要使用“by.binding”。

我有一套代码,其中(总之)我做:

element(by.model('risk.name')).sendKeys('A value');
expect(element(by.model('risk.name')).getText()).toEqual('A value');

(在我的实际代码中,我保存实体,然后回到它在编辑模式,我检查我的价值实际上保存了,但它仍然归结为同样的事情,这个示例代码给出了同样的问题。

这给我一个错误

Error: Expected '' to equal 'A value'.

理论上,从文档的例子,我可以改为:

element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('risk.name)).getText()).toEqual('A value');

但是by.binding似乎不像完全限定的模型,我得到一个错误

Error: No element found using locator: by.binding("risk.name")

它做工作(一个时尚)如果我做:

element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('name')).getText()).toEqual('A value');

这找到一个元素,但也给出一个警告,我有多个元素匹配’name’。不幸的是,它挑选的不是一个正确的。

所以,两个问题:

>如果by.model能够返回一个getText(),或者有一个设计决定,它不这样做,我们需要使用by.binding?
>我应该能够在by.binding中使用一个完全限定的实体,还是有一个设计决定by.binding不喜欢完整的模型名称?如果是这样,我可以使用什么其他限定符在我的不同绑定之间进行选择?

编辑:

我也试过vdrulerz建议的解决方案,我修改代码如下:

element(by.model('risk.name')).getText().then(function(text) {
  console.log(text);
  expect(text).toEqual('A risk name');  
});

console.log返回一个空值(不是一个promise或一个对象),并且expect不会给出消息:

Expected '' to equal 'A risk name'.

我的理解是,量角器已经补丁的期望处理承诺,所以我觉得底层的问题是getText不工作在一个字段标识通过一个模型(我可以成功getText标签和其他小部件)。

我也可以运行下面的代码,使用getAttribute而不是getText():

expect(element(by.model('risk.name')).getAttribute('autofocus')).toEqual('true');
element(by.model('risk.name')).getAttribute('autofocus').then(function(text) {
  console.log(text);
  expect(text).toEqual('true');  
});

第一部分通过 – 期望工作。第二部分也工作,建议vdrulerz的语法也是有效的,它记录’true’到控制台。我认为getText可能有缺陷?

这在量角器常见问题解答: https://github.com/angular/protractor/blob/master/docs/faq.md#the-result-of-gettext-from-an-input-element-is-always-empty

来自输入元素的getText的结果始终为空

这是一个webdriver怪癖。元素总是具有空getText值。相反,请尝试:

element.getAttribute('value')

至于问题2,是的,你应该能够使用一个完全限定名的by.binding。我怀疑你的模板实际上没有绑定到risk.name通过{{}}或ng绑定的元素。

猜你在找的Angularjs相关文章