在量角器的文档中,我看到了下面的例子:
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');
});
console.log返回空值(不是promise或对象), expect无法给出消息:
Expected '' to equal 'A risk name'.
我的理解是,量角器已经修补了处理promise的预期,所以我觉得潜在的问题是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”记录到控制台。我认为获取文本可能存在缺陷?
我有这个问题,我尝试了Jmr的解决方案,但它对我不起作用。由于所有输入字段都具有 ng-model 属性,因此我可以提取该属性并对其进行评估并获取值。
超文本标记语言
<input ng-model="qty" type="number">
量角器
var qty = element( by.model('qty') );
qty.sendKeys('10');
qty.evaluate(qty.getAttribute('ng-model')) //-> 10
getText()
函数不会像以前那样工作,为了让它为量角器工作,你需要把它包装在一个函数中,并返回文本,就像我们对我们的量角器框架所做的那样,我们把它保存在一个通用函数中,比如 -
getText : function(element, callback) {
element.getText().then (function(text){
callback(text);
});
},
通过此操作,您可以获得元素的文本。
如果仍然不清楚,请告诉我。
这在量角器常见问题解答中得到了解答:https://github.com/angular/protractor/blob/master/docs/faq.md#the-result-of-gettext-from-an-input-element-is-always-empty
输入元素的getText结果始终为空
这是网络驱动程序的怪癖。和元素总是有空的getText值。相反,请尝试:
element.getAttribute('value')
至于问题2,是的,您应该能够为by.binding使用完全限定的名称。我怀疑您的模板实际上没有通过{{}}或ng-bind绑定到risk.name的元素。
问题内容: 在量角器的文档中,我看到以下示例: 此处显而易见的是,您可以使用“ by.model”在输入框中设置值,但是如果您要查看输入框并查看其中的内容,则需要使用“ by.binding”。 我有一组代码(摘要)在其中执行: (在我的真实代码中,我保存了实体,然后在编辑模式下返回了该实体,并且我正在检查我的值是否已保存。但是它仍然归结为同一件事,并且此示例代码也存在相同的问题)。 这给我一个错
我尝试了很多事情,我尝试了等待浏览器和不等待浏览器。但每次它就是不想看到警报。 SO的这篇文章似乎正是我的问题:量角器:测试引导警告,但也没有解决我的问题。 这是弹出的html代码: 我使用async/await来确保程序等待,因此下面代码中的所有函数都是异步函数。所以我尝试这样做(也没有catch,并且有一个额外的函数用于超时)。这是页面对象内的一个方法,因此它返回值: (脚本1) 像这样,这个
我可以得到旧值。但是我没有获得新输入值的解决方案。 事实上,我想把旧值和新值分开。例如:如果并且新输入的EditText值等于(or ),我希望 。 谢谢你的帮助。
换句话说,我刚刚成功地选择了一个下拉选项;然而,我现在想断言,选项< code>text是预期的值。 注意,我用< code > element switcher . element(by . linktext(option))选择了下拉选项值。单击下面的(): 并且呈现的 HTML 看起来像这样: 问题是,我无法访问我期望的文本,我的告诉我: 同样,我想单击下拉元素(标签),然后获取单击的同一标
问题内容: 我是Protractor的新手。尽管缺少文档,但我仍然了解基本原理,但找不到解决此问题的方法。 给出以下代码: 我可以看到输入获取了要插入的文本,并且模型以相同的值更新,但是测试失败,原因是description.getText()返回’‘(空字符串)。 有没有其他方法可以在输入中捕获值? 提前致谢。 问题答案: 显然,Selenium WebDriver有一个怪癖。看这里 尝试: 注
问题内容: 我正在尝试创建一个基本菜单,以检查输入的变量是否与定义的变量匹配。如果定义了变量,则获取已定义变量的数据。 例。 我输入 应该相等 问题答案: 这似乎是您要找的东西: 但是,这可能不是最好的策略,因为错字或恶意用户很容易使您的代码崩溃,系统过载或执行他们喜欢的任何其他讨厌的事情。对于这种特殊情况,更好的方法可能是