Я пытаюсь использовать 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
?