Правильный переход между объектами страницы в Protractor с помощью TypeScript - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь получить набор тестов транспортира с помощью TypeScript, и у меня возникла проблема с цепочкой объектов pageObjects, которую я не уверен, как решить или сделать лучше. Любой пример, который я видел, никогда не имеет дело с несколькими страницами.

Я упросту файлы примеров для простоты помощи, проблема, кажется, концентрируется, когда я создаю экземпляр нового объекта страницы, но я не уверен, как это сделать. это лучше. Может ли кто-нибудь указать мне правильное направление?

basePageObject.ts

import { browser, by, element, ExpectedConditions } from 'protractor';
import {NextPageObject} from './nextPageObject';

export class BasePage {

async navigateTo() {
 await browser.get('http://localhost:8080');
}

async launchThing() {
 await element(by.css('#launchThing')).click();
}

async clickNavToNextPage(): Promise<NextPageObject> {
 await element(by.css('#nextPageNav')).click();
 return new NextPageObject();
}
}

nextPageObject.ts

import { browser, by, element, ExpectedConditions } from 'protractor';

export class NextPageObject {

private firstNameField = element(by.css('.testFirstName'));

async getFirstName(): Promise<string> {
 return await this.firstNameField.getAttribute("value");
}

async enterFirstName(firstName: string): Promise<NextPageObject> {
 await this.firstNameField.clear();
 await this.firstNameField.sendKeys(firstName);
}

}

testSpec.ts

import { browser, by, element } from 'protractor';
import { BasePage } from 'basePageObject';

const expectedName = "Peter";

fdescribe('Navigation with custom URL', function() {
let page: BasePage;

beforeEach(async () => {
 page = new BasePage();
 await page.navigateTo();
});

fit('page nav', async function() {
 await page.navigateTo(url);

 const next1 = await page.clickNavToNextPage();
 expect(element(by.css('body > next-page- 
 header')).isPresent()).toBe(true);

 await next1.enterFirstName("Peter");

 // this fails as an empty string is returned but is close to the way 
 //I want to do things
 const firstNameFieldValue = await next1.getFirstName();
 expect(await firstNameFieldValue).toEqual(expectedName);


 // this works but is not how I want to do it
 const elementval = element(by.css('.testFirstName'));
 expect(elementval.getAttribute('value')).toEqual(expectedName);

}
}

1 Ответ

0 голосов
/ 06 ноября 2019

Попробуйте изменить эту строку:

private firstNameField = element(by.css('.testFirstName'));

Кому:

private get firstNameField() { return element(by.css('.testFirstName')); }

В первой версии element() вызывается перед отправкой ключей. Во второй версии он вызывается после отправки ключей.

...