量角器在预期条件错误后未失败当前规格

Protractor not failing current spec after expected condition error

在量角器上执行规范时,我注意到我的一些条件在失败时,规范被标记为通过但它应该失败。我的 async/await 方法可能有问题,需要有人向我指出为什么我没有将规范视为失败以及如何修复它。

static async SelectDocument(){
try{
  let docXpath = 'this is an error on purpose. it is not showing as fail in the specs. Why?';
  let docElement = element(by.xpath(docXpath));
  await browser.wait(.EC.vidibilityOf(docElement),3000);//code stops here but spec is not mark as fail.
  await browser.sleep(1000);
  docElement.click();
 }catch(e){
  await logger.log().error(e)}
 }
}

输出:

@维克多 在任何时候,'TRY' 块中的任何步骤都失败,执行进入 'CATCH' 块并从中执行步骤。

try-catch 的目的是,如果 try 中有任何失败,执行将进入 catch 块并且不会终止代码。

您需要将您的代码从 try 块中取出然后执行,您将看到它在哪里失败以及什么是失败,您还将看到失败计数。

https://www.w3schools.com/python/python_try_except.asp

我看到的另一个错误是 xpath:

let docElement = element(by.xpath("//locatorTag[contains(text(), docXpath)]")

这里 'locatorTag' 将是您的 html 标签,其中包含特定文本

还有一点: 脚本报告任何断言失败而不是语句失败。 在这里(在您的屏幕截图中突出显示),您目前遇到的是语句失败。

感谢@Gaurav Lad,我能够找到解决方案。

我不知道他上面提到的:“脚本报告任何断言失败而不是语句失败。”

多亏了这条评论,我才能够包装预期的可见性条件,然后做出一个成功地不符合规范的断言。我的测试中没有更多的静默错误!

    static async ExpectVisibilityByElement(Elem: ElementFinder, waitTime?: number) {
  {
    let wait = 3000
    if (waitTime != undefined) {
      wait = waitTime;
    }
    let output;
    let errorObject;
    try {
        await browser.wait(EC.visibilityOf(Elem), wait);
        await logger.Log().info("Element " + Elem.locator() + " is visible.");
        output = true;
    } catch (error) {
        output = false;
        errorObject = error;
        await logger.Log().error(error);
    }
    expect(output).toBe(true,Elem.locator()+ 'is not visible.')
    if(!output) {
      await logger.Log().error('SPEC FAILED. The rest of the spec will not be excecuted.');
      throw errorObject.name +': '+ errorObject.message;
    }
  }
};