量角器:你可以选择一个绑定而不将它包装在一个元素中吗?

时间:2014-07-15 21:35:53

标签: javascript angularjs testing protractor

根据文档,有一个叫.exactBinding()的方法,可以非常准确地选择一个元素ProtractorBy.prototype.exactBinding

所以在

的情况下
<span>{{ person.name }}</span>

您可以成功测试:

expect(element(by.exactBinding('person.name')).isPresent()).toBe(true);
expect(element(by.exactBinding('person')).isPresent()).toBe(false);

然而,但是你有这样的绑定的情况怎么样:

<div>Showing {{foo.foo}} of {{foo.bar}}</div>

在这种情况下,即使你使用了exactBinding()选择器,模型也是1和2:

expect(element(by.exactBinding('foo.foo')).getText()).toEqual('1');

该测试总是会失败,因为此选择器的getText()值为:

element(by.exactBinding('foo.foo'))

实际上是“显示1中的2”,而不仅仅是“1”,就像我想要的那样。

快速而肮脏的解决方法是将每个绑定包装在这样的元素中:

<div>Showing <span>{{foo.foo}}</span> of <span>{{foo.bar}}</span></div>

哪个工作正常,但这是额外无用的标记!我找不到任何其他方式来选择。使用ng-bind将绑定转换为元素也可以,但是修复也是如此。所以问题是,有没有办法只选择绑定?没有为我的页面添加无用的标记?这真的很有用......

1 个答案:

答案 0 :(得分:1)

我认为你不能,这个想法被用作寻找元素的定位器,所以如果它不是你无法使用的元素,你可以使用.toMatch()来解决这个问题。尝试找到至少一个结果,否则你必须说它将等于所有预期的文本“显示1的2”。