async
/await
과 protractor
을 TypeScript
으로 사용하려고합니다. 예제를 다음에 따라갑니다 : https://github.com/angular/protractor/tree/master/exampleTypescript/asyncAwait비동기/분지기의 상용구 대기
내 실험에서 잘 작동합니다. 그러나 브라우저 상호 작용과 관련된 모든 호출에 await
을 사용해야합니다. 예를 들어
:
login.ts :
import {browser, element, by, By, $, $$, ExpectedConditions} from "protractor";
import { DashboardPage } from "./dashboard";
export class LoginPage {
usernameInput = element(by.id("username"));
passwordInput = element(by.id("password"));
loginButton = element(by.id("login_button"));
async get() {
await browser.get(login_url);
return this;
}
async getTitle() {
let title = await browser.getTitle();
return title;
}
async typeUsername(username: string) {
await this.usernameInput.sendKeys(username);
}
async typePassword(password: string) {
await this.passwordInput.sendKeys(password);
}
async login() {
await this.loginButton.click();
return new DashboardPage();
}
}
LoginSpec.ts : 위에서
import {browser, element, by, By, $, $$, ExpectedConditions} from "protractor";
import { LoginPage } from "../pages/login";
describe("Login Page", function() {
beforeEach(() => {
// login page is not an angular page.
browser.ignoreSynchronization = true;
});
afterEach(() => {
browser.ignoreSynchronization = false;
});
it("should go to dashboard page after successfully login", async(): Promise<any> => {
let loginPage = new LoginPage();
await loginPage.get();
await loginPage.typeUsername(username);
await loginPage.typePassword(password);
let dashboard = await loginPage.login();
expect(await dashboard.getTitle()).toEqual(`Dashboard`);
});
});
나는 로그인 페이지에 대한 페이지 개체가 테스트 사양, 브라우저 상호 작용에 대한 모든 호출에 많은 await
을 사용해야합니다. 이는 await
에 대한 많은 상용구를 소개합니다.
질문은 상용구를 줄이려는 아이디어 나 방법이 있습니까? 또한 async
/await
과 protractor
을 사용하는 올바른 방법입니까?
두 번째로 좋은 옵션은 훨씬 많은 상용구를 제공하는 약속 체인을 사용하는 것입니다. 나는 이것이 깨끗하고 읽기 쉬운 코드라고 생각한다. 기다리고있는 것을 보게되면 거기에서 집행이 이루어 지므로 세계의 국가가 바뀔 수 있다고 말할 것입니다. –
순수 카르마를 사용하고자한다면 node-fibers를 사용할 수 있습니다. –
이것은 나에게 좋을 것 같습니다. Imo'await'는 어쨌든 정형화 된 코드가 아닙니다. 'loginPage' 메쏘드가 해결하는데 시간이 걸리면 메인 쓰레드가 블로킹하는 것을 막기 위해'await' 키워드가 필요합니다. 이렇게하면 테스트가 실제로 더 빨리 실행됩니다. – Randy