当我ng e2e我的应用程序时,我收到以下错误:
失败:超时等待异步角任务在11秒后完成。
下面是app.component.ts。请注意它是如何在订阅15秒后发布“app”的。
我意识到量角器等待,直到在您的角应用程序中没有挂起的异步任务。。请继续阅读。
import { Component } from '@angular/core';
import * as Rxjs from 'rxjs';
import * as Operators from 'rxjs/operators';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title: Rxjs.Observable<string>;
constructor() {
this.title = Rxjs.of('app').pipe(
Operators.delay(15000)
);
}
}以下是app.component.html中相应的更改
Welcome to {{ title | async }}!其他一切都是骨储备(这是我在ng new之后所做的唯一改变)。
当然,这是一个愚蠢的例子。我的现实生活代码做了一些有用的事情。我需要有可观察的,在很长一段时间内不发布任何东西的(在我的例子中是几个月)。
有没有办法在我的应用程序中使用rxjs的delay操作符,这样我的端到端测试就不会超时?
或者有什么我可以做的,向量角器发出信号,它不需要等待一个特定的可观测的?
我尝试过的事情:
browser.waitForAngularEnabled(false)
这确实会导致量角器停止等待,但这不是一个好的解决方案,因为这是一个角度应用程序,它使一切变得更加困难。
ngZone.runOutsideAngular(() => {...})
这于事无补,因为长时间运行的操作是通过视图绑定( {{ title | async }})进行的。那不是我可以给ngZone.runOutsideAngular打电话的地方。
发布于 2018-05-16 13:09:00
量角器试图与角同步,例如,从$http调用中考虑AUT足够稳定以进行测试。
您可以在测试开始时使用browser.ignoreSynchronisation = true (无论是在confg.js文件中还是在describe块中)来阻止Protractor这样做。
发布于 2019-11-30 16:17:52
对于这个问题,我使用的是rxjs 6,它的角度为8,但可能会遇到同样的问题。
对我来说,从延迟切换到计时器很有帮助,例如:
of(true).pipe(delay(1000)); 遇到量角器超时,但如果我将其更改为
of(true).pipe(switchMap(() => timer(1000))它是工作的,不知道为什么,但我不需要告诉量角器,他不应该等待角的一个简单的理由,他应该这么做,因为我运行多个http请求。如果我们不关心被正确传递的值,它也会做同样的事情。
browser.waitForAngularEnabled(false)那就不需要了。好吧,这更像是一项工作,我更喜欢使用延迟,而不是为这种行为重写所有的e2e测试。
发布于 2020-05-31 17:54:41
我的rxjs计时器也有类似的问题,我的量角器测试总是抛出"ScriptTimeoutError: script timeout“异常。对我有用的解决方案是,我在带有计时器的页面上使用了本机。例如:
而不是:
await element(by.id('question-12' )).click();我使用了selenium:
import {By} from "selenium-webdriver";
//...
await browser.driver.findElement(By.id('question-12' )).click();https://stackoverflow.com/questions/50371152
复制相似问题