当前位置: 首页 > 知识库问答 >
问题:

如何在量角器的输入上获取文本

汪跃
2023-03-14

在量角器的文档中,我看到了下面的例子:

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”匹配。不幸的是,它选择的不是正确的。

所以,有两个问题:

    < Li > by . model应该能够返回getText()吗,或者是否有一个设计决策不这样做,我们需要使用by.binding来代替? < li >我是否应该在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或对象), 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”记录到控制台。我认为获取文本可能存在缺陷?

共有3个答案

姜嘉良
2023-03-14

我有这个问题,我尝试了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
沈博达
2023-03-14

getText() 函数不会像以前那样工作,为了让它为量角器工作,你需要把它包装在一个函数中,并返回文本,就像我们对我们的量角器框架所做的那样,我们把它保存在一个通用函数中,比如 -

getText : function(element, callback) {
        element.getText().then (function(text){             
            callback(text);
         });        

    },

通过此操作,您可以获得元素的文本。

如果仍然不清楚,请告诉我。

宇文修筠
2023-03-14

这在量角器常见问题解答中得到了解答: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有一个怪癖。看这里 尝试: 注

  • 问题内容: 我正在尝试创建一个基本菜单,以检查输入的变量是否与定义的变量匹配。如果定义了变量,则获取已定义变量的数据。 例。 我输入 应该相等 问题答案: 这似乎是您要找的东西: 但是,这可能不是最好的策略,因为错字或恶意用户很容易使您的代码崩溃,系统过载或执行他们喜欢的任何其他讨厌的事情。对于这种特殊情况,更好的方法可能是