当前位置: 首页 > 面试题库 >

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

齐俊贤
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');

这会找到一个元素,但同时也会警告我有多个与“名称”匹配的元素。不幸的是,它选择的不是正确的。

因此,有两个问题:

  1. by.model是否应该能够返回getText(),或者是否存在不这样做的设计决策,而我们需要使用by.binding?
  2. 我应该能够在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在通过模型标识的字段上不起作用(我可以在标签和其他小部件上成功地获得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可能存在缺陷吗?


问题答案:

在量角器常见问题解答中对此进行了回答:https :
//github.com/angular/protractor/blob/master/docs/faq.md#the-result-of-
gettext-from-an-input-element-is-always-
空的


输入元素的getText结果始终为空

这是一个Webdriver怪癖。和元素始终具有空的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有一个怪癖。看这里 尝试: 注

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