记录并断言先前未知的DOM元素的数量

时间:2018-11-12 18:10:09

标签: cypress

我不是使用Cypress的第一个测试工具,而我几乎完成了我的第一个测试。但是要做到这一点,我需要断言一个未知数。让我解释一下:

测试开始时,会生成随机数量的元素,我不应该控制这样的数量(这是必需的)。所以,我正试图以这种方式获得这样的数字:

var previousElems = cy.get('.list-group-item').its('length'); 

我不确定是否可以获取正确的数据,因为我无法记录数据(打印时,“ cypress console”向我显示“ [Object]”)。但是,假设这样的行返回(5)作为示例。

在测试期间,我模拟了一个用户创建额外的元素(2)并删除(1)元素的情况。假设用户只创建了一个额外的元素。

因此,在测试结束时,我需要检查是否具有相同类别的元素数量等于(5 + 2-1)=(6)个元素。我是这样做的:

cy.get('.list-group-item').its('length').should('eq', (previousTasks + 1));

但是我收到以下消息:

  

CypressError:超时重试:预期10等于'[object Object] 1'

那么,我该如何记录并断言呢? 预先感谢,

PD:我也尝试过:

var previousTasks = (Cypress.$("ul").children)? Cypress.$("ul").children.length : 0;

但是它总是返回一个固定的数字(2),即使我等待一段时间以确保所有物品都已满载。

我也尝试过使用childNodes,但是它总是返回0。

1 个答案:

答案 0 :(得分:0)

您的问题来自于赛普拉斯测试代码在测试开始之前立即全部运行的事实。命令已排队等待稍后运行,因此无法像示例中那样存储变量。这就是为什么您不断获取对象而不是数字的原因。您获取的对象称为 chainer ,用于允许您将命令与其他命令链接起来,例如:cy.get('#someSelector').should('...');

Cypress有办法解决这个问题;如果您需要直接处理某些数据,则可以使用.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。在这种情况下,This page on variables and aliases也应该有用。