在关于量角器的文档中,我看到了以下示例:
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”的元素。不幸的是,它选择的不是正确的。
有两个问题:
编辑:
我也尝试了 vdrulerz 建议的解决方案,我修改了代码如下:
element(by.model('risk.name')).getText().then(function(text) {
console.log(text);
expect(text).toEqual('A risk name');
});
Log 返回一个空值(不是承诺或对象) ,并且期望值不能给出消息:
Expected '' to equal 'A risk name'.
我的理解是,量角器已经补丁了处理承诺的期望,所以我觉得根本问题是 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 有潜在的缺陷?