【问题标题】:Break For Each Loop in a Custom Cypress Command在自定义 Cypress 命令中为每个循环中断
【发布时间】:2021-02-25 02:16:31
【问题描述】:

我有一个自定义 Cypress 命令来滚动列表,直到您到达传递给命令的项目。在我的命令中,我有$.each,因此我可以将项目名称与传递给函数的项目名称进行比较。如果它们匹配,那么我会在我的环境中发送一个单击命令,即“ENTER”。 我能够成功滚动列表并找到我要查找的项目并单击它,但循环继续执行。我添加了return false,这就是赛普拉斯所说的应该打破循环,但它现在对我有用。任何想法为什么会这样?

listItems.getChildren('OneLineTextElement', 'type').each(($elm) => {
    let labelAndValue = cy.wrap($elm).getChildren('LabelAndValue')
    let label = labelAndValue.getChild('Label')
    label.getProperty('texture-text').then(val => {
        if (val == subject) {
            cy.action('ENTER')
            return false
        }
        else {
            cy.action('DOWN')
        }
    })
})

【问题讨论】:

  • 你的意思是return false 没有打破循环?
  • 是的,这就是赛普拉斯所说的应该打破循环。这是文档链接:docs.cypress.io/api/commands/each.html#Return-early
  • 您确定要进入 If 块吗?如果没有,则在 if 块中放置两个 cy.log('if'),在 else 块中放置 cy.log('else') 以进行调试。
  • 是的,我进入了 if 块,因为 enter 命令被执行,但 .each 循环继续在下一页上运行
  • 我的理解是return false 应该在each 的级别才能工作。由于它在label.getProperty('texture-text').then(val 内部,因此无法按预期工作。

标签: javascript cypress


【解决方案1】:

您可以尝试在.each() 命令的范围内添加控制变量。

listItems.getChildren('OneLineTextElement', 'type').each(($elm) => {

  let done = false;

  let labelAndValue = cy.wrap($elm).getChildren('LabelAndValue')
  let label = labelAndValue.getChild('Label')
  label.getProperty('texture-text').then(val => {
    if (val == subject) {

      cy.action('ENTER').then(() => {  // is cy.action a custom command? 
                                       // Likely you may need to wait
        done = true;
      })
    } else {
      cy.action('DOWN')
    }
  })

  if (done) {
    return false;
  }  
})

但是,.each() 内部有一些方法调用看起来像自定义命令,因此您可能无法获得预期的执行流程(Cypress 命令和测试 javascript 可以异步运行)。

看起来代码可能会被重构以避免“滚动列表”。唯一不会做的就是在非主题列表项上cy.action('DOWN')

listItems.getChildren('OneLineTextElement', 'type')
  .getChildren('LabelAndValue')
  .getChild('Label')
  .getProperty('texture-text')
  .should(val => {
    expect(val).to.equal(subject); 
    cy.action('ENTER');
  })

【讨论】:

    猜你喜欢
    • 2021-05-10
    • 1970-01-01
    • 2019-08-12
    • 2021-01-29
    • 1970-01-01
    • 2022-07-27
    • 2020-08-04
    • 1970-01-01
    • 2018-01-31
    相关资源
    最近更新 更多