在量角器的文档中,我看到以下示例:
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');
这会找到一个元素,但同时也会警告我有多个与“名称”匹配的元素。不幸的是,它选择的不是正确的。
因此,有两个问题:
- 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或一个对象),并且期望失败,并给出以下消息:
Expected '' to equal 'A risk name'.
我的理解是,量角器已经对期望值进行了修补,因此我感到根本的问题是getText在通过模型标识的字段上不起作用(我可以在标签和其他小部件上成功地获取Text)。
我还可以使用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可能存在缺陷吗?