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不喜欢完整的模型名称?如果是这样,我可以使用什么其他限定符在我的不同绑定之间进行选择?
编辑:
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可能有缺陷?
来自输入元素的getText的结果始终为空
这是一个webdriver怪癖。元素总是具有空getText值。相反,请尝试:
element.getAttribute('value')
至于问题2,是的,你应该能够使用一个完全限定名的by.binding。我怀疑你的模板实际上没有绑定到risk.name通过{{}}或ng绑定的元素。