如何使用cypress键入具有相同名称的多个输入实例

时间:2018-01-20 22:30:51

标签: angularjs cypress

我必须使用cypress结束对angularjs应用程序的测试。

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

作为下面的示例,有两个具有相同名称的输入元素,但我需要在输入元素上显示相同的文本。当我使用以下命令时,cypress抱怨两个同名的实例。如何输入相同的文字' Hello world'在两个具有相同名称的输入元素上?

/// <reference path="../typings.d.ts" />

2 个答案:

答案 0 :(得分:3)

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

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]将赛普拉斯阵列转换为普通数组,因此您可以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');

答案 1 :(得分:0)

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