mirror of
https://github.com/mempool/mempool.git
synced 2024-12-30 18:24:25 +01:00
64 lines
1.9 KiB
TypeScript
64 lines
1.9 KiB
TypeScript
|
// source: chrisp_68 @ https://stackoverflow.com/questions/50525143/how-do-you-reliably-wait-for-page-idle-in-cypress-io-test
|
||
|
export class PageIdleDetector
|
||
|
{
|
||
|
defaultOptions: Object = { timeout: 60000 };
|
||
|
|
||
|
public WaitForPageToBeIdle(): void
|
||
|
{
|
||
|
this.WaitForPageToLoad();
|
||
|
this.WaitForAngularRequestsToComplete();
|
||
|
this.WaitForAngularDigestCycleToComplete();
|
||
|
this.WaitForAnimationsToStop();
|
||
|
}
|
||
|
|
||
|
public WaitForPageToLoad(options: Object = this.defaultOptions): void
|
||
|
{
|
||
|
cy.document(options).should((myDocument: any) =>
|
||
|
{
|
||
|
expect(myDocument.readyState, "WaitForPageToLoad").to.be.oneOf(["interactive", "complete"]);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
public WaitForAngularRequestsToComplete(options: Object = this.defaultOptions): void
|
||
|
{
|
||
|
cy.window(options).should((myWindow: any) =>
|
||
|
{
|
||
|
if (!!myWindow.angular)
|
||
|
{
|
||
|
expect(this.NumberOfPendingAngularRequests(myWindow), "WaitForAngularRequestsToComplete").to.have.length(0);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
public WaitForAngularDigestCycleToComplete(options: Object = this.defaultOptions): void
|
||
|
{
|
||
|
cy.window(options).should((myWindow: any) =>
|
||
|
{
|
||
|
if (!!myWindow.angular)
|
||
|
{
|
||
|
expect(this.AngularRootScopePhase(myWindow), "WaitForAngularDigestCycleToComplete").to.be.null;
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
public WaitForAnimationsToStop(options: Object = this.defaultOptions): void
|
||
|
{
|
||
|
cy.get(":animated", options).should("not.exist");
|
||
|
}
|
||
|
|
||
|
private getInjector(myWindow: any)
|
||
|
{
|
||
|
return myWindow.angular.element(myWindow.document.body).injector();
|
||
|
}
|
||
|
|
||
|
private NumberOfPendingAngularRequests(myWindow: any)
|
||
|
{
|
||
|
return this.getInjector(myWindow).get('$http').pendingRequests;
|
||
|
}
|
||
|
|
||
|
private AngularRootScopePhase(myWindow: any)
|
||
|
{
|
||
|
return this.getInjector(myWindow).get("$rootScope").$$phase;
|
||
|
}
|
||
|
}
|