量角器-尝试单击一个元素并忽略所有错误

时间:2018-09-07 13:01:41

标签: typescript exception-handling protractor

我想尝试单击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 :(得分:2)

您的try-catch无法正常工作,因为错误发生在promise之内。

可以通过以下三种方式来兑现承诺拒绝:

  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-catchasync-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) {}
        }
    }