Cypress: проверить, существует ли элемент - PullRequest
0 голосов
/ 27 февраля 2020

Я новичок в Cypress, я знаю, что этот вопрос уже задавался, но я все еще застрял здесь! Это то, что я написал:

 it("User can set certification for multiple users at once",()=>{
       cy.get(':nth-child(4) > .RadioButton__StyledRadioButton-sc-1j2qp2u-1').click(); //clicking Non-certified button
       const $el=Cypress.$('[class="Typography__StyledTypography-sc-153d8g4-0.jhYDmS.TrainingQueueListstyles__EmptyListMessage-sc-19yfim3-1.ihRiqU"]');
       cy.get("body").then($body =>{
        if ($body.find($el.length>0)) {
         cy.log('in if loop');
         cy.log($el.length);
         cy.get('.hZDZBR').should('not.exist');
         cy.get('input[id="selectAll"]').should('not.exist');
        } else {
        cy.log('in else loop');
        cy.log($el.length);
        cy.get('input[id="selectAll"]').click();
        cy.get('.hZDZBR').click();
      }
     })
    })

Но когда элемент $el не найден (и он записывает $el.length=0, что правильно), он все равно пытается выполнить if l oop в то время как это должно быть в другом случае l oop ... есть идеи, как решить эту проблему? Спасибо!

Поэтому я снова обновил свой код, потому что это условие ($body.find($el.length>0)) всегда оценивается как true, как правильно указано Ричард Матсен. Что происходит сейчас, так это то, что он вычисляет длину, равную 0, и, следовательно, вводит еще l oop, но я могу видеть элемент на веб-странице, и все же он получает длину как 0 ... в чем причина и что я могу поделать?

it("User can set certification for multiple users at once",()=>{
       cy.get(':nth-child(4) > .RadioButton__StyledRadioButton-sc-1j2qp2u-1').click(); //clicking Non-certified button
       const $el=Cypress.$('[class="Typography__StyledTypography-sc-153d8g4-0.jhYDmS.TrainingQueueListstyles__EmptyListMessage-sc-19yfim3-1.ihRiqU"]');
       cy.get("body").then($body =>{
        if ($body.find($el).length>0) {
         cy.log('in if loop');
         cy.log($body.find($el).length);
         cy.get('.hZDZBR').should('not.exist');
         cy.get('input[id="selectAll"]').should('not.exist');
        } else if($body.find($el).length==0){
        cy.log('in else loop');
        cy.log($body.find($el).length);
        cy.get('input[id="selectAll"]').click();
        cy.get('.hZDZBR').click();
      }
   })
 })

1 Ответ

0 голосов
/ 27 февраля 2020

Как насчет использования этого:

it("User can set certification for multiple users at once",()=>{
    cy.get(':nth-child(4) > .RadioButton__StyledRadioButton-sc-1j2qp2u-1').click(); //clicking Non-certified button
    const selector=".Typography__StyledTypography-sc-153d8g4-0.jhYDmS.TrainingQueueListstyles__EmptyListMessage-sc-19yfim3-1.ihRiqU";
    cy.get("body").then($body =>{
        const $el = $body.find(selector);
        if ($el) {
            cy.log('in if loop');
            cy.get('.hZDZBR').should('not.exist');
            cy.get('input[id="selectAll"]').should('not.exist');
        } else {
            cy.log('in else loop');
            cy.get('input[id="selectAll"]').click();
            cy.get('.hZDZBR').click();
        }
    })
})

Несколько изменений, которые я сделал:

  • Используйте селектор вместо запроса исходного элемента
  • Запрос фактического элемента в вашем обратном вызове
  • If / Else на основе этого результата
...