Erklären, über async/ await in Winkelmesser
Ich bin neu Winkelmesser. Wie funktioniert async/await in dieser Funktion arbeiten? Kann jemand es mir erklären?
it('TC_01 - Verify Home page title', async () => {
await headerPage.waitForTitleContain('Homepage', 30000);
await expect(headerPage.getTitle()).toEqual('Homepage');
});
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist alles um die asynchrone Natur von JavaScript.
Derzeit Winkelmesser schlägt vor, über verschiedene Möglichkeiten zum Umgang mit asynchronen Aktionen (die ich nicht beschreiben direkte Versprechen der Verkettung und Generatoren hier):
1) Versprechen-Manager/Control Flow
https://github.com/SeleniumHQ/selenium/wiki/WebDriverJs#control-flows
Dies ist die Abstraktion macht alle Ihre Handlungen genannt zu werden, eins nach dem anderen, wie eine Warteschlange. Jede Aktion wird ein spezielles Objekt, ein Versprechen. Es stellt das Ergebnis der asynchronen operation, die erhalten werden in Zukunft.
2) Zweite Möglichkeit - async/await
https://ponyfoo.com/articles/understanding-javascript-async-await#using-async-await
Ist es, neue Abstraktion, die um verspricht Objekte und ermöglicht das einfache Kette von Aktionen eine nach der anderen. Vorteil ist, das ist in Muttersprache, Bau, statt Versprechen-Manager, und macht den code schauen, wie das synchronisiert mit try/catch und anderen bekannten Konstruktionen.
Können Sie denken, erwarten, wie "suspend-code-Ausführung bis Versprechen, dass wieder Aktion ist gelöst"
Aber async/await funktioniert immer noch mit dem Versprechen innerhalb.
Paar Tipps bei der Verwendung von async/await mit protractorJS:
1) Stellen Sie sicher, dass Sie deaktiviert Ablaufsteuerung /Versprechen-manager: https://github.com/angular/protractor/blob/master/lib/config.ts#L714
Mischen wartet mit aktiviert Ablaufsteuerung kann zu unvorhersehbaren Ergebnissen führen.
2) vergessen Sie nicht, stellen Sie ALLE Ihre asynchrone Aktionen mit warten (normalerweise ist dies alles Winkelmesser api-Methoden). Wenn Sie vergessen, dies zu tun - action ohne erwarten nicht in der Warteschlange mit anderen Aktionen, so Reihenfolge der Aktionen gebrochen werden
3) Stellen Sie sicher, dass Sie mit nodejs, dass dies unterstützt - zumindest nodejs 7.8.x (oder neuer). Wenn Typoskript verwendet wird, stellen Sie Kompilier-Ziel als "Ziel": "es2017"
Mehr zu Lesen:
https://github.com/angular/protractor/blob/master/docs/control-flow.md
https://github.com/SeleniumHQ/selenium/wiki/WebDriverJs#option-3-migrate-to-asyncawait
SELENIUM_PROMISE_MANAGER: false
: github.com/angular/protractor/blob/5.3.0/lib/config.ts#L692. Mehr info hier: github.com/angular/protractor/blob/master/docs/async-await.mdexpect();
ist nicht ein Winkelmesser Aktion, so dass es besser sein könnte, setzen die erwarten innerhalb der erwarten:expect(await headerPage.getTitle()).toEqual('Homepage');