记录和断言以前未知的 DOM 元素的数量
Logging and asserting the number of previously-unknown DOM elements
我是第一次使用 Cypress,我已经os完成了我的第一个测试。但要这样做,我需要针对一个未知数进行断言。让我解释一下:
测试开始时,会生成随机数量的元素,我不应该控制这样的数量(这是一项要求)。所以,我试图以这种方式获得这样的数字:
var previousElems = cy.get('.list-group-item').its('length');
我不确定我是否获得了正确的数据,因为我无法记录它("cypress console" 在我打印它时显示“[Object]”)。但是让我们说这样的行 returns (5) 来举例说明。
在测试期间,我模拟用户创建额外元素 (2) 并删除 (1) 元素。假设用户只是创建了一个额外的元素。
因此,在测试结束时 os,我需要检查具有相同 class 的元素的数量是否等于 (5+2-1) = (6) 个元素.我是这样做的:
cy.get('.list-group-item').its('length').should('eq', (previousTasks + 1));
但我收到以下消息:
CypressError: Timed out retrying: expected 10 to equal '[object Object]1'
那么,我该如何记录和断言呢?
提前致谢,
PD:我也试过了:
var previousTasks = (Cypress.$("ul").children)? Cypress.$("ul").children.length : 0;
但它总是 return 是一个固定数字 (2),即使我之前先等待以确保所有项目都已加载。
我也对 childNodes 进行了同样的尝试,但它总是 return 0.
您的问题源于 Cypress 测试代码在测试开始前一次性 运行。命令排队等待 运行 稍后,因此像您的示例中那样存储变量将不起作用。这就是为什么你总是得到对象而不是数字;您获得的对象称为 chainer,,用于允许您将命令与其他命令链接起来,如下所示:cy.get('#someSelector').should('...');
赛普拉斯有办法解决这个问题;如果您需要直接对某些数据进行操作,您可以使用 .then()
提供一个 lambda 函数,该函数将 运行 与您的其余命令按顺序排列。这是一个应该适用于您的场景的基本示例:
cy.get('.list-group-item').its('length').then(previousCount => {
// Add two elements and remove one...
cy.get('.list-group-item').its('.length').should('eq', previousCount + 1);
});
如果您还没有阅读过,我强烈建议您阅读精彩的 introduction to Cypress in the docs. This page on variables and aliases 在这种情况下应该也很有用。
我是第一次使用 Cypress,我已经os完成了我的第一个测试。但要这样做,我需要针对一个未知数进行断言。让我解释一下:
测试开始时,会生成随机数量的元素,我不应该控制这样的数量(这是一项要求)。所以,我试图以这种方式获得这样的数字:
var previousElems = cy.get('.list-group-item').its('length');
我不确定我是否获得了正确的数据,因为我无法记录它("cypress console" 在我打印它时显示“[Object]”)。但是让我们说这样的行 returns (5) 来举例说明。
在测试期间,我模拟用户创建额外元素 (2) 并删除 (1) 元素。假设用户只是创建了一个额外的元素。
因此,在测试结束时 os,我需要检查具有相同 class 的元素的数量是否等于 (5+2-1) = (6) 个元素.我是这样做的:
cy.get('.list-group-item').its('length').should('eq', (previousTasks + 1));
但我收到以下消息:
CypressError: Timed out retrying: expected 10 to equal '[object Object]1'
那么,我该如何记录和断言呢? 提前致谢,
PD:我也试过了:
var previousTasks = (Cypress.$("ul").children)? Cypress.$("ul").children.length : 0;
但它总是 return 是一个固定数字 (2),即使我之前先等待以确保所有项目都已加载。
我也对 childNodes 进行了同样的尝试,但它总是 return 0.
您的问题源于 Cypress 测试代码在测试开始前一次性 运行。命令排队等待 运行 稍后,因此像您的示例中那样存储变量将不起作用。这就是为什么你总是得到对象而不是数字;您获得的对象称为 chainer,,用于允许您将命令与其他命令链接起来,如下所示:cy.get('#someSelector').should('...');
赛普拉斯有办法解决这个问题;如果您需要直接对某些数据进行操作,您可以使用 .then()
提供一个 lambda 函数,该函数将 运行 与您的其余命令按顺序排列。这是一个应该适用于您的场景的基本示例:
cy.get('.list-group-item').its('length').then(previousCount => {
// Add two elements and remove one...
cy.get('.list-group-item').its('.length').should('eq', previousCount + 1);
});
如果您还没有阅读过,我强烈建议您阅读精彩的 introduction to Cypress in the docs. This page on variables and aliases 在这种情况下应该也很有用。