【问题标题】:Cypress conditional statement not working as expected赛普拉斯条件语句未按预期工作
【发布时间】:2020-11-04 07:45:30
【问题描述】:

代码:

<ul> <li> <h1>source</h1> <label>completed</label> </li> <li> <h1>source</h1> <label>Failed</label> </li> <li> <h1>new test</h1> <label>completed</label> </li> </ul>

上下文:我在 ul 中有这样的代码我有几个 li 元素。我需要使用 Cypress 编写 if else 语句。如果 li 元素在 h1 中有文本源并且标签有文本 Completed 我需要单击该元素否则跳过。

【问题讨论】:

  • 请发布您尝试的代码 sn-p 以及您遇到的错误。
    • source

    • source

    • 新测试

标签: html automated-tests cypress cypress-cucumber-preprocessor


【解决方案1】:

我会尝试将 li 元素的内容转换为字符串,并据此做条件语句:

cy.get('li')
    .each($element => {
        if($element.innerHtml().includes("source") && $element.innerHtml().includes("completed")) {
            $element.click()
        }
    })

编辑 2:如果有多个元素有效并且您陷入循环 - 递归更好

cy.get('li')
.then(elements => {
        let i = 0

        function checkElementsAdnClick(arrayOfElements) {
            if (i >= arrayOfElements.length) {
                return
            }
            cy.get(arrayOfElements[i])
                .then($element => {
                    if ($element.html().includes("source") &&
                        $element.html().includes("source") &&
                        i < arrayOfElements.length
                    ) {
                        return arrayOfElements[i].click()
                    } else {
                        i++
                        return checkElementsAdnClick(arrayOfElements)
                    }
                })
        }

        checkElementsAdnClick(elements)
    }
)

【讨论】:

  • 如果有多个元素匹配上述情况下的条件如何在找到第一个匹配后打破循环
  • 我用最终的工作版本再次编辑了第 2 部分
  • 感谢 Rosen。您提供的逻辑运行良好。我已经测试了所有可能的情况,并且运行良好。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 2017-01-10
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
相关资源
最近更新 更多