Транспортир - попробуйте щелкнуть элемент и игнорировать все ошибки - PullRequest
0 голосов
/ 07 сентября 2018

Я хочу попробовать щелкнуть ElementFinder, чтобы в случае ошибки во время щелчка тесты не были помечены как неудачные и на консоли не было ошибок.

К сожалению, мой метод:

static tryToClick(elem: ElementFinder) {
    // I want to ignore all errors, just try to click and if not proceed
    if (elem.isPresent() && elem.isDisplayed() && elem.isEnabled()) {
        try {
          browser.wait(protractor.ExpectedConditions.elementToBeClickable(elem), 999).then(function() {
            elem.click().then(function() {try {} catch (error) {} } );
          });
        } catch (error) {}
    }
  }

по-прежнему выдает ошибку на консоли:

  • Ошибка: ссылка на устаревший элемент: элемент не прикреплен к документу страницы

поэтому я не понимаю, почему это не обрабатывается в блоке try-catch.

1 Ответ

0 голосов
/ 07 сентября 2018

Ваш try-catch не работает, потому что ошибка происходит внутри обещания.

Есть три способа поймать отказ от обещания:

  1. Используйте функцию обещания .catch(...)

    elem.click().catch((err) => { // Do some error handling stuff in here });
    
  2. Используйте функцию отклонения .then(...)

    elem.click().then(() => {
        // Do something
    }, (err) => {
        //Do some error handling stuff in here
    });
    
  3. Используйте try-catch в сочетании с async-await

    static async tryToClick(elem: ElementFinder) {
        // I want to ignore all errors, just try to click and if not proceed
        if (elem.isPresent() && elem.isDisplayed() && elem.isEnabled()) {
            try { 
                await browser.wait(protractor.ExpectedConditions.elementToBeClickable(elem), 999);
                await elem.click();
            } catch (error) {}
        }
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...