【问题标题】:How to click x number of times in Cypress如何在赛普拉斯点击 x 次
【发布时间】:2019-07-03 08:30:23
【问题描述】:

我的网站上有一个对象列表,它们旁边都有“添加”按钮。单击第一个“添加”按钮时,将添加该对象,该行消失并被下一个替换。对象名称相同。在保存之前,我想 .click() 三次添加列表中的前三个对象。我该怎么做?

我知道 .click() 可以单击单个对象。我也知道 .click ({ multiple: true}) 单击页面上的所有对象。但是,我希望它在第三次之后停止点击。

目前设置为点击多次添加列表中的所有对象(不正确):

    cy.get('#FieldListDialog > div > table > tr > td > button.button.add-button')
       .should('exist')
       .click({ multiple: true });

【问题讨论】:

    标签: testing click cypress


    【解决方案1】:

    要锤击一个按钮,你可以使用这个:

    for(let n = 0; n < 10; n ++){
      cy.get('#FieldListDialog > div > table > tr > td > button.button.add-button')
        .click()
    }
    

    multiple: true 用于单击多个元素,例如单击页面上的所有按钮。

    【讨论】:

    • 谢谢。是的,基本上我只想“锤击”三次,因为第一个对象会消失,而第二个对象会在每次点击时取而代之。我不确定要搜索的词是否正确。
    • Cypress 包含开箱即用的 lodash。所以你可以写_.times(10, () =&gt; cy.get("#btn").click())
    • 谢谢@KamranEyyubov。有两种方法可以访问 loadash。一种。没有 import Cypress._.times([your logic goes here]) 和 b 本地引用 lodash const { _, $ } = Cypress 并使用 _
    【解决方案2】:

    问题在于您的选择器。如果您有 n 个按钮,并且想要单击所有按钮,那么您需要匹配所有按钮,而不仅仅是单个按钮。因此,寻找与所有这些匹配的选择器(例如,添加按钮独有的类)。 然后,您可以使用 .each() 遍历它们并在达到某个索引时跳出循环:

    cy.get('#your_selector_to_your_add_buttons')
                    .each(($el, $index) => {
                        if($index == 3){
                            return false;
                        }
                        cy.wrap($el).click()
                    } )
    

    【讨论】:

      【解决方案3】:

      你只需要在点击之后移动你的断言并说点击直到不存在

             .click({ multiple: true })
             .should('not.exist');```
      

      【讨论】:

        【解决方案4】:

        你可以使用 lodash https://lodash.com/docs/4.17.15#times

        import { times } from 'lodash'
        
          times(2, () => {
            cy.get('#FieldListDialog > div > table > tr > td > button.button.add-button')
              .click()
          })
        

        【讨论】:

          【解决方案5】:

          你也可以这样做:

          Cypress._.times(10, () => {
              cy.get('#FieldListDialog > div > table > tr > td > button.button.add-button').click()
          })
          

          【讨论】:

            【解决方案6】:

            我能找到的最佳方法是使用 Wait 几毫秒或等待别名资源解析后再继续执行下一个命令。

            cy.get('#FieldListDialog > div > table > tr > td > button.button.add-button')
                   .should('exist')
                   .click();
            cy.wait(500)
            
            cy.get('#FieldListDialog > div > table > tr > td > button.button.add-button')
                   .should('exist')
                   .click();
            cy.wait(500)
            
            cy.get('#FieldListDialog > div > table > tr > td > button.button.add-button')
                   .should('exist')
                   .click();
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-08-22
              • 2022-01-19
              相关资源
              最近更新 更多