Как проверить, существует ли элемент с помощью Cypress.io - PullRequest
4 голосов
/ 15 мая 2019

Как проверить, присутствует ли элемент или нет, чтобы можно было выполнить определенные шаги, если элемент присутствует.В противном случае некоторые другие шаги могут быть выполнены, если элемент отсутствует.

Я пробовал что-то вроде ниже, но это не сработало:

        Cypress.Commands.add('deleteSometheingFunction', () => {
 cy.get('body').then($body => {
   if ($body.find(selectors.ruleCard).length) {
     let count = 0;
     cy.get(selectors.ruleCard)
       .each(() => count++)
       .then(() => {
         while (count-- > 0) {
           cy.get('body')
             ...
             ....
         }
       });
   }
 });
});

Я ищу простое решение, которое можетбыть объединенным с простым javascript if else block или then () разделом обещания

Что-то похожее на следующие реализации протокола Webdriver:

1)driver.findElements(By.yourLocator).size() > 0 2) Или проверьте наличие элемента в ожидании

Пожалуйста, сообщите.Спасибо

Ответы [ 2 ]

2 голосов
/ 15 мая 2019

Я просто добавлю, что если вы решите выполнить условие if, проверив свойство .length команды cy.find, вам необходимо соблюдать асинхронный характер кипариса.

Пример: Следующее условие оценивается как ложное, несмотря на существование кнопки appDrawerOpener

    if (cy.find("button[data-cy=appDrawerOpener]").length > 0)    //evaluates as false

Но это оценивается как истинное, потому что переменная $body уже разрешена, поскольку вы находитесь в .then() части обещания:

    cy.get("body").then($body => {
        if ($body.find("button[data-cy=appDrawerOpener]").length > 0) {   //evaluates as true
            cy.get("button[data-cy=appDrawerOpener]")
            .click();
        }
    });

Подробнее в Кипарисовая документация по условному тестированию

2 голосов
/ 15 мая 2019

было опрошено ранее: Условное выражение в кипарисе

Таким образом, вы можете в основном попробовать это:

cy.get('header').then(($a) => { 
        if ($a.text().includes('Account')) {
            cy.contains('Account')
            .click({force:true})
        } else if ($a.text().includes('Sign')) { 
            cy.contains('Sign In')
            .click({force:true})  
        } else {
            cy.get('.navUser-item--account .navUser-action').click({force:true})
        }
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...