【问题标题】:how to type in multiple input instances with same name using cypress如何使用赛普拉斯输入多个具有相同名称的输入实例
【发布时间】:2018-01-20 22:30:51
【问题描述】:

我必须使用 cypress 对 angularjs 应用程序进行端到端测试。

我有两个相同输入元素的实例。它们具有相同的 ng-model、类和名称。我们得到了由应用程序动态生成的唯一 id,它在每次页面加载或在不同机器上测试时都不相同。

作为下面的示例,有两个具有相同名称的输入元素,但我需要相同的文本出现在两个输入元素上。当我使用以下命令时,赛普拉斯抱怨两个同名实例。如何在两个具有相同名称的输入元素上键入相同的文本“Hello world”?

cy.get('input[name=description]').type('Hello World')

【问题讨论】:

    标签: angularjs cypress


    【解决方案1】:

    一种尝试(可能不是最佳的)方法是

    cy.get('input[name=description]').then(els => {
      [...els].forEach(el => cy.wrap(el).type('Hello World'));
    });
    

    一些笔记,

    • 赛普拉斯有一个first() 命令,所以你可以这样做
      cy.get('input[name=description]').first().type('Hello World');
      但我没有命令second()。

    • [...els] 将 Cypress 数组转换为普通数组,因此您可以forEach()。


    更新 - 使用eq() 命令

    如果这看起来太笨拙,请将以下自定义命令添加到\cypress\support\command.js

    Cypress.Commands.add('nth', { prevSubject: 'element' },  (els, index) => {
      return cy.wrap([...els][index]) 
    })
    

    来自 Jennifer Shehane 的评论,可以更简单地做到这一点

    cy.get('input[name=description]').eq(0).type('Hello World');
    cy.get('input[name=description]').eq(1).type('Hello World');
    

    【讨论】:

    • 您正在寻找的是.eq() command。这相当于您使用 .nth() 创建的内容。
    • 干杯,感谢您提供的信息。现在还要注意last() 在文档页面上引用了first()。 (也可以使用指向eq() 的链接)。
    【解决方案2】:

    您可以选择输入的任何唯一标识符。它可以是 id、占位符等。

    【讨论】:

    • 欢迎来到 SO!当您回答问题时,请检查您是否正在回答... :-)
    • 提问:How can I type the same text'Hello world' on both the input elements with same name?,回答You can pick any unique identifier of your input. It could be id, placeholder etc.你怎么看?
    • 好的。所以这是我认为的场景 1. 2.
    猜你喜欢
    • 1970-01-01
    • 2017-08-03
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多