【问题标题】:Cypress: Get an array of webelements赛普拉斯:获取 web 元素数组
【发布时间】:2021-03-20 20:06:01
【问题描述】:

这可能是一个简单的问题,也可能是无法完成的事情。但与 Selenium 资源相比,我发现网络上的 Cypress 帮助有点“落后”。此外,作为一名 Java 程序员,我很难接受我在 TypeScript 中能做什么和不能做什么(以及 Cypress 与 Selenium 相比)。

在 Cypress(和 TypeScript)中是否有可能从这样的代码中获取 WebElement 数组?

<div id="row-123">
   <span id="comment">
   <button id="purge>
   <input id="comment">
</div>
<div id="row-456">
   <span id="comment">
   <button id="purge>
   <input id="comment">
</div>
<div id="row-789">
   <span id="comment">
   <button id="purge>
   <input id="comment">
</div>

我正在尝试这个:

var rows = Array(cy.get('*[id^="row"]'));

但是当我尝试断言 rows[] 数组的长度时,它声称是 1 而不是 3。所以它不像我想象的那样工作。

在 Java 和 Selenium 中,我会这样做:

List<WebElement> rows = driver.findElements(By.id("^row"));

然后我可以使用例如 Stream() 将每个元素解析为一个类,然后访问其中的(子)元素。等等。但我觉得在 Cypress 中很难做到这一点?

【问题讨论】:

    标签: typescript cypress


    【解决方案1】:

    您可以使用each() 遍历类似数组的结构(具有长度属性的数组或对象)。

    let idArray = []
    cy.get('*[id^="row"]').each(($el, index, $lis) => {
        //Find element based on InnerText
        if ($el.text() == 'text') {
            //Do something  
        }
        //Find element based on index position
        if (index == 1) {
            //Do something
        }
        //Save the id in the idArray
        cy.wrap($el).invoke('attr', 'id').then((val) => {
            idArray.push(val);
        })
    }).then(($lis) => {
        expect($lis).to.have.length(3)
    })
    

    根据讨论,一种迭代多个 tr 和 td 并基于 innerText 找到所需元素然后采取一些操作的方法:

    cy.get('tr').each(($el, index, $lis) => {
        cy.get('td').each(($el) => {
            if ($el.text() == 'text') {
                cy.log('Element found')
                return
            }
        })
    })
    

    【讨论】:

    • 谢谢。这样可行。但是是不是可以先创建一个数组,然后访问数组中的某个元素呢?
    • 你想在数组中保存什么值。是身份证吗?
    • 好吧,在 Java/Selenium 中,我将创建一个类来表示数组中的每一行。这些行将包含按钮、文本字段等元素,并且该类将具有访问这些元素的方法。例如,这将使使用 Stream() 访问具有特定标题的行中的元素变得容易。例如,如果这些行代表人,我可以过滤掉“Adam Brown”的行,然后检查他的出生日期。
    • 当然,每一行不必解析成一个类。它可能只是行和其中的元素,然后我可以找到特定行的特定元素。
    • 我已经更新了代码。在每个元素中,您可以根据位置或内部文本查找元素,或者如果您想将一些值保存在数组中并稍后使用,您也可以这样做。
    猜你喜欢
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2019-06-28
    • 2022-01-07
    • 1970-01-01
    相关资源
    最近更新 更多