2017-07-14 28 views
0

我正在尝试通过可能会或可能不会出现的对话框继续。这里有一个函数:量角器.ts:如何使用.then(),.catch()函数进行故障诊断?

当我运行这个在茉莉/量角器IT块和捕捉获取运行...“FALSE” ......

茉莉花完成测试,然后失败“错误:超时 - 在由jasmine.DEFAULT_TIMEOUT_INTERVAL指定的超时时间内未调用异步回调“

我只能假设这是因为Jasmine /量角器有点太聪明。我正在寻找基本上与Java Webdriver相同的方法 - 尝试/赶上等待并在我的路上快乐地继续。

请注意,当按钮确实出现时,测试通过没有问题。 “TRUE”

let okButton: ElementFinder = element(by.buttonText("OK")); 
await browser.wait(EC.visibilityOf(okButton)).then(() => { 
    console.log("TRUE"); 
    okButton.click(); 
}).catch((error) => { 
    console.log("FALSE"); 
}) 

回答

0

它应该是这个样子

describe("async function", function() { 
 
    it("should not fail", async function(): Promise <any> { 
 
    const okButton: ElementFinder = element(by.buttonText("OK")); 
 

 
    try { 
 
     await browser.wait(EC.visibilityOf(okButton)); 
 
     console.log("TRUE"); 
 
     await okButton.click(); 
 
    } catch (e) { 
 
     console.log("FALSE"); 
 
    } 
 
    }); 
 
});

参见hereprotractor docs

+0

谢谢你的回应。我实际上尝试了这一切,然后在我仍然遇到Timeout错误后放弃了它。但是,再次尝试后,我想我发现这段代码可能不是Timeout错误的来源。也就是说,这是一个非常有效的解决方案。 – Hawkins

0

你需要使用一个done回调:

例如

it('handles a promise', done => { 
    promise 
     .then(result => expect(result).toEqual(expected)) 
     .catch(error => expect(error).toBeUndefined()) 
     .finally(done) 
}) 
+0

感谢您非常有用gitbook,@basarat。由于这是一个由beforeAll调用的函数,我应该计划在beforeAll中执行functionName()。finally(done)吗?我一直在做代码块底部的()... – Hawkins

相关问题