量角器结果不一致-失败:脚本超时:未收到结果

时间:2018-10-01 00:05:06

标签: angular typescript protractor e2e-testing

我的角度应用程序中有一个e2e量角器测试。我刚刚连续运行了几次完全相同的测试,它通过了大约5%的时间,但由于以下屏幕截图中的错误而失败。

测试:

it('should open the cart with the cart button in the header', () => {
    page.navigateTo('/calendar/day/(dmy:27-9-2018)');

    page.cartButton().click();

    expect(element(by.css('h2.cart-header')).isPresent()).toBe(true);
});

量角器暂停启动的chrome实例表明单击了按钮并且存在h2元素(请参见底部的图像)。

我尝试过的

  1. 我已用模拟数据替换了此组件中的数据,以消除异步操作
  2. 我禁用了动画
  3. 我尝试将其设为异步功能:... header', async () => { ...
  4. 我尝试过等待元素:expect(await element(by.css('h2.cart...
  5. 我试图browser.sleep(1000)
  6. 我尝试了各种断言,例如.toBe(true).toEqual(true).toBeTruthy()

是什么原因导致此错误,我该如何解决?

错误消息: enter image description here

该元素存在于由量角器启动的浏览器中 enter image description here

3 个答案:

答案 0 :(得分:0)

您可以使用 Jasmine 回调来断言异步行为。 Jasmine 测试提供了额外的参数作为回调参数。完成断言后,您可以调用回调 API。

示例:

it('should have a button element present', function(done) {
browser.get('http://juliemr.github.io/protractor-demo/');

var gobtn = element(by.id('gobutton'));

gobtn.isPresent().then( (result) => {
 expect(result).toBe(true);    
 done();
 });    
});    

答案 1 :(得分:-1)

请使用browser.ignoreSynchronization = true;

答案 2 :(得分:-1)

isPresent()返回您需要解决的承诺。 是的,请使用async()函数+等待以轻松解决它 更多的是,像这样使用ExpectedConditions模块:

let cart = await element(by.css('h2.cart-header'))
await browser.wait(ExpectedConditions.visibilityOf(cart), 5000, "Cart is not visible even in 5 seconds!")