当前位置: 首页 > 知识库问答 >
问题:

记录和断言以前未知的DOM元素的数量

帅煌
2023-03-14

这是我第一次使用赛普拉斯,我几乎完成了我的第一次测试。但是要做到这一点,我需要断言一个未知的数字。让我解释一下:

当测试开始时,会生成随机数量的元素,我不应该控制这样的数量(这是一个要求)。所以,我试图以这种方式得到这样的数字:

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

我不确定是否获得了正确的数据,因为我无法记录它(打印时,“cypress控制台”会显示“[Object]”)。但假设这一行返回(5)来举例说明。

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

所以,在测试的最后,我需要检查具有相同类的元素的数量是否等于(5 2-1) = (6)元素。我是这样做的:

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

但我得到了以下信息:

CypressError:重试超时:预期10等于“[object]1”

那么,我如何记录并断言这一点呢?提前感谢,,

PD:我也试过:

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

但它总是返回一个固定的数字(2),即使我在之前等待以确保所有项目都已完全加载。

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

共有1个答案

相野
2023-03-14

您的问题源于这样一个事实,即Cypress测试代码在测试开始之前一次运行。命令将排队等待稍后运行,因此像您的示例中那样存储变量将不起作用。这就是为什么你总是得到对象而不是数字;获取的对象称为链接器,用于将命令与其他命令链接起来,如:cy.get(“#someSelector”)。应该(“…”)

柏树有办法绕过这个问题;如果需要直接对某些数据进行操作,可以使用提供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);
});

如果你还没有,我强烈建议阅读文档中关于柏树的精彩介绍。这个关于变量和别名的页面在这种情况下也应该很有用。

 类似资料:
  • 我试图计算select元素中的选项数,以及DOM中某个类的元素数。 我需要比较这两个总数来得出赛普拉斯的断言。 我可以选择所需的选项,并使用each()对它们进行迭代,然后以这种方式递增一个计数器。然而,它是异步的,也是一个笨拙的解决方案。我确信我的cy.get()生成的对象有一个length属性,我就是看不懂它。 这是我期望的事情之一。它将未定义的日志记录到控制台。 我知道我的别名很好,并且我的

  • 假设我有一个直接转换db表的case类,在创建新行时将随机生成id。 现在查看这些测试,我需要从测试中检索一行,并将其与 但是我没有第一个参数,因为它是随机创建的,我想以某种方式忽略它... 我试过了 但这是无效的。 有什么方法可以在Scala中忽略case类参数吗? 谢谢

  • 问题内容: 我想知道是否存在针对此类问题的简单解决方案。 我有一个对象注释,该对象注释又可以包含注释,并且这些注释也可以包含注释…并且此操作可以进行未知数量的循环。 这是数据结构的示例: 可以说我会写2级评论: 我该如何使div的嵌套注释达到“ n”级? 问题答案: 最简单的方法是创建通用部分,以便您可以使用递归调用和呈现它。 这是局部的: 数据模型应为列表。 我为您创建了一个演示,希望对您有所帮

  • 当我在EclipseSWT中使用TableViewer创建组合框时,特别是只有第三列。 到目前为止,我认为我做的一切都很好,但是当我编译代码时,我发现错误: 代码: 问题:如何仅在一列中显示组合框?

  • 我有问题,因为我想在内部包围一些,所以我需要知道。 哪些DOM元素可以是tr的子元素?(我知道div不能。)

  • 我正在使用硒网络驱动程序,其中我正在尝试拖放表格的一列。但是一旦我拖放该列,我就得到一个错误“元素不再附加到DOM”。下面是我用于拖放元素的代码