4

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

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

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

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

2 回答 2

5

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

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');
于 2018-01-21T10:25:31.973 回答
-2

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

于 2019-10-26T07:54:07.257 回答