Skip to content

Commit af9648a

Browse files
author
Vladislav
committed
Fix - tests made completely asynchronous
Tests are independent from selenium promise manager and completely rely on async/await
1 parent 1264db6 commit af9648a

25 files changed

+517
-619
lines changed

eform-client/e2e/Helper methods/go-to-pages.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,23 @@ import data from '../data';
88
const loginPage = new LoginPage();
99
const navbar = new Navbar();
1010

11-
export function goToSettingsPage() {
12-
browser.get(data.startPageUrl);
11+
export async function goToSettingsPage() {
12+
await browser.get(data.startPageUrl);
1313
loginPage.login();
14-
waitTillVisibleAndClick(navbar.advancedButton);
15-
waitTillVisibleAndClick(navbar.settingsButton);
14+
await waitTillVisibleAndClick(navbar.advancedButton);
15+
await waitTillVisibleAndClick(navbar.settingsButton);
1616
}
1717

18-
export function goToDeviceUsersPage() {
19-
browser.get(data.startPageUrl);
20-
loginPage.login();
21-
waitTillVisibleAndClick(navbar.deviceUsersButton);
18+
export async function goToDeviceUsersPage() {
19+
await browser.get(data.startPageUrl);
20+
await loginPage.login();
21+
await waitTillVisibleAndClick(navbar.deviceUsersButton);
2222
}
2323

24-
export function goToMainPage() {
25-
browser.get(data.startPageUrl);
26-
loginPage.login();
27-
browser.waitForAngular();
24+
export async function goToMainPage() {
25+
await browser.get(data.startPageUrl);
26+
await loginPage.login();
27+
await browser.waitForAngular();
2828
// waitTillVisibleAndClick(navbar.mainPageButton);
2929
}
3030

eform-client/e2e/Helper methods/other-helper-methods.ts

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,24 @@ import {LoginPage} from '../Page objects/LoginPage';
33
import {Navbar} from '../Page objects/Navbar';
44

55

6-
export function waitTillVisibleAndClick(element: ElementFinder): void {
7-
browser.waitForAngular();
8-
browser.wait(ExpectedConditions.visibilityOf(element));
9-
element.click();
6+
export async function waitTillVisibleAndClick(element: ElementFinder): Promise<void> {
7+
await browser.waitForAngular();
8+
await browser.wait(ExpectedConditions.visibilityOf(element));
9+
await element.click();
1010
}
1111

12-
export function signOut() {
12+
export async function signOut() {
1313
const loginPage = new LoginPage();
1414
const navbar = new Navbar();
15-
// browser.waitForAngular();
16-
// browser.wait(ExpectedConditions.elementToBeClickable(navbar.signOutButton));
17-
// browser.wait(ExpectedConditions.elementToBeClickable(navbar.signOutButton));
18-
// navbar.signOutDropdown.click();
19-
// browser.waitForAngular();
20-
// navbar.signOutButton.click();
21-
// browser.wait(ExpectedConditions.elementToBeClickable(loginPage.loginButton));
22-
browser.waitForAngular();
23-
waitTillVisibleAndClick(navbar.signOutDropdown);
24-
browser.waitForAngular();
25-
waitTillVisibleAndClick(navbar.signOutButton);
26-
waitTillVisibleAndClick(loginPage.loginButton);
15+
await browser.waitForAngular();
16+
await waitTillVisibleAndClick(navbar.signOutDropdown);
17+
await browser.waitForAngular();
18+
await waitTillVisibleAndClick(navbar.signOutButton);
19+
await waitFor(loginPage.loginButton);
2720
}
2821

29-
export function waitFor(element) {
30-
browser.wait(ExpectedConditions.elementToBeClickable(element));
22+
export async function waitFor(element) {
23+
await browser.wait(ExpectedConditions.elementToBeClickable(element));
3124
}
3225

3326
export async function getStringsFromXpath(xpath, arr) {

eform-client/e2e/Page objects/DatabasePage.ts

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,27 +19,27 @@ export class DatabasePage {
1919
public defaultLanguageSelector: ElementFinder;
2020
public englishLanguageOption: ElementFinder;
2121

22-
selectLanguage(languageName) {
22+
public async selectLanguage(languageName) : Promise<void> {
2323
this.englishLanguageOption = element(by.cssContainingText('.dropdown-item', languageName));
24-
this.englishLanguageOption.click();
24+
await this.englishLanguageOption.click();
2525
}
26-
public saveDatabase(): void {
26+
public async saveDatabase(): Promise<void> {
2727
// just fill in all inputs for database connection with appropriate values
28-
this.username.sendKeys(dbData.username);
29-
this.password.sendKeys(dbData.password);
30-
this.email.sendKeys(dbData.email);
31-
this.firstName.sendKeys(dbData.firstName);
32-
this.lastName.sendKeys(dbData.lastNAme);
33-
this.dataSourceSDK.sendKeys(dbData.dataSourceSDK);
34-
this.initialCatalogSDK.sendKeys(dbData.initialCatalogueSDK);
35-
this.authenticationTypeSDK.sendKeys(dbData.authenticationTypeSDK);
36-
this.token.sendKeys(dbData.token);
37-
this.dataSourceMain.sendKeys(dbData.dataSourceMain);
38-
this.initialCatalogMain.sendKeys(dbData.initialCatalogueMain);
39-
this.authenticationTypeMain.sendKeys(dbData.authenticationTypeMain);
40-
this.defaultLanguageSelector.click();
41-
this.selectLanguage(dbData.languageOptions.english);
42-
this.saveButton.click(); // click "Save" button and submit all inputs
28+
await this.username.sendKeys(dbData.username);
29+
await this.password.sendKeys(dbData.password);
30+
await this.email.sendKeys(dbData.email);
31+
await this.firstName.sendKeys(dbData.firstName);
32+
await this.lastName.sendKeys(dbData.lastNAme);
33+
await this.dataSourceSDK.sendKeys(dbData.dataSourceSDK);
34+
await this.initialCatalogSDK.sendKeys(dbData.initialCatalogueSDK);
35+
await this.authenticationTypeSDK.sendKeys(dbData.authenticationTypeSDK);
36+
await this.token.sendKeys(dbData.token);
37+
await this.dataSourceMain.sendKeys(dbData.dataSourceMain);
38+
await this.initialCatalogMain.sendKeys(dbData.initialCatalogueMain);
39+
await this.authenticationTypeMain.sendKeys(dbData.authenticationTypeMain);
40+
await this.defaultLanguageSelector.click();
41+
await this.selectLanguage(dbData.languageOptions.english);
42+
await this.saveButton.click(); // click "Save" button and submit all inputs
4343
}
4444

4545
constructor() {

eform-client/e2e/Page objects/Device users/DeviceUsersPage.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {AddNewUserModal} from './add-new-user.modal';
44
import data from '../../data';
55
import {getRowObject, RowObject} from './row-object';
66
import {DeleteModal} from './delete.modal';
7+
import {waitTillVisibleAndClick} from '../../Helper methods/other-helper-methods';
78

89

910
export class DeviceUsersPage {
@@ -18,16 +19,16 @@ export class DeviceUsersPage {
1819
lastUser: RowObject;
1920

2021
// actions
21-
async getRowsNumber() {
22-
return $$(data.DeviceUsersPage.rowCountSelector).count();
22+
async getRowsNumber(): Promise<number> {
23+
return await $$(data.DeviceUsersPage.rowCountSelector).count();
2324
}
2425

25-
async usersCleanup() {
26+
async usersCleanup(): Promise<void> {
2627
let startNum = await this.getRowsNumber();
27-
for (let i = 0; i < startNum - 2; i++) {
28+
for (let i = 0; i < startNum - 2; i++) {
2829
// while (startNum > 2) {
29-
this.deleteUserButton.click();
30-
this.deleteModal.okButton.click();
30+
await waitTillVisibleAndClick(this.deleteUserButton);
31+
await waitTillVisibleAndClick(this.deleteModal.okButton);
3132
startNum = await this.getRowsNumber();
3233
}
3334
// return;

eform-client/e2e/Page objects/Device users/EditUserPage.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ export class EditUserPage {
88
public saveButton: ElementFinder;
99

1010
// actions
11-
save(): void {
12-
this.saveButton.click();
11+
async save(): Promise<void> {
12+
await this.saveButton.click();
1313
}
1414

15-
fillInputs() {
16-
this.firstNameInput.clear();
17-
this.firstNameInput.sendKeys(data.DeviceUsersPage.sampleEditFistName);
18-
this.lastNameInput.clear();
19-
this.lastNameInput.sendKeys(data.DeviceUsersPage.sampleEditLastName);
15+
async fillInputs(): Promise<void> {
16+
await this.firstNameInput.clear();
17+
await this.firstNameInput.sendKeys(data.DeviceUsersPage.sampleEditFistName);
18+
await this.lastNameInput.clear();
19+
await this.lastNameInput.sendKeys(data.DeviceUsersPage.sampleEditLastName);
2020
}
2121

2222
constructor() {

eform-client/e2e/Page objects/Device users/add-new-user.modal.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,21 @@ export class AddNewUserModal {
1010
public cancelButton: ElementFinder;
1111

1212
// actions
13-
fillFirstNameInput(): void {
14-
this.firstNameInput.sendKeys(data.DeviceUsersPage.sampleFirstName);
13+
async fillFirstNameInput(): Promise<void> {
14+
await this.firstNameInput.sendKeys(data.DeviceUsersPage.sampleFirstName);
1515

1616
}
1717

18-
fillLastNameInput(): void {
19-
this.lastNameInput.sendKeys(data.DeviceUsersPage.sampleLastName);
18+
async fillLastNameInput(): Promise<void>{
19+
await this.lastNameInput.sendKeys(data.DeviceUsersPage.sampleLastName);
2020
}
2121

22-
save(): void {
23-
this.saveButton.click();
22+
async save(): Promise<void> {
23+
await this.saveButton.click();
2424
}
2525

26-
cancel(): void {
27-
this.cancelButton.click();
26+
async cancel(): Promise<void> {
27+
await this.cancelButton.click();
2828
}
2929

3030
constructor() {

eform-client/e2e/Page objects/Device users/row-object.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import {by, element} from 'protractor';
22

33
// returning row with some number like an object.
4-
export function getRowObject(rowNumber: number): RowObject {
4+
export async function getRowObject(rowNumber: number): Promise<RowObject> {
55
const rowObject = new RowObject();
66
// cells of the row
7-
rowObject.siteID = element(by.xpath(`//*[@id="simple_sites"]/tbody/tr[${rowNumber}]/td[1]`)).getText();
8-
rowObject.firstName = element(by.css(`#tableBody > tr:nth-child(${rowNumber}) > td:nth-child(2) > span:nth-last-child(1)`)).getText();
9-
rowObject.lastName = element(by.css(`#tableBody > tr:nth-child(${rowNumber}) > td:nth-child(3) > span:nth-last-child(1)`)).getText();
10-
rowObject.deviceId = element(by.xpath(`//*[@id="simple_sites"]/tbody/tr[${rowNumber}]/td[4]/div`)).getText();
11-
rowObject.otpCode = element(by.xpath(`//*[@id="simple_sites"]/tbody/tr[${rowNumber}]/td[5]/div`)).getText();
7+
rowObject.siteID = await element(by.xpath(`//*[@id="simple_sites"]/tbody/tr[${rowNumber}]/td[1]`)).getText();
8+
rowObject.firstName = await element(by.css(`#tableBody > tr:nth-child(${rowNumber}) > td:nth-child(2) > span:nth-last-child(1)`)).getText();
9+
rowObject.lastName = await element(by.css(`#tableBody > tr:nth-child(${rowNumber}) > td:nth-child(3) > span:nth-last-child(1)`)).getText();
10+
rowObject.deviceId = await element(by.xpath(`//*[@id="simple_sites"]/tbody/tr[${rowNumber}]/td[4]/div`)).getText();
11+
rowObject.otpCode = await element(by.xpath(`//*[@id="simple_sites"]/tbody/tr[${rowNumber}]/td[5]/div`)).getText();
1212
rowObject.retrieveOtpCodeButton = rowNumber < 3 ? element(by
1313
.xpath(`//*[@id="simple_sites"]/tbody/tr[${rowNumber}]/td[5]/button`)) : null;
1414

eform-client/e2e/Page objects/LoginPage.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ export class LoginPage {
1515
public loginPageImageMatcher: By;
1616

1717
// login method, used on Login Page
18-
public login(): void {
19-
// browser.wait(ExpectedConditions.elementToBeClickable(this.usernameInput));
20-
this.usernameInput.clear();
21-
// browser.wait(ExpectedConditions.elementToBeClickable(this.passwordInput));
22-
this.passwordInput.clear();
23-
this.usernameInput.sendKeys(data.login);
24-
this.passwordInput.sendKeys(data.password);
25-
this.loginButton.click();
18+
public async login(): Promise<void> {
19+
await browser.wait(ExpectedConditions.elementToBeClickable(this.usernameInput));
20+
await this.usernameInput.clear();
21+
await browser.wait(ExpectedConditions.elementToBeClickable(this.passwordInput));
22+
await this.passwordInput.clear();
23+
await this.usernameInput.sendKeys(data.login);
24+
await this.passwordInput.sendKeys(data.password);
25+
await this.loginButton.click();
2626
}
2727

2828

eform-client/e2e/Page objects/Main Page/MainPage.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ export class MainPage {
4040
}
4141

4242
getTagsForFilter(): ElementArrayFinder {
43-
browser.waitForAngular();
4443
return element.all(by.xpath('//*[@id="tagSelector"]/div/ul/li/a'));
4544
}
4645

eform-client/e2e/Page objects/Main Page/create-eform.modal.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,18 @@ export class CreateEformModal {
1414
closeTagInputBtn: ElementFinder;
1515

1616
// actions
17-
selectTag(tagName) {
17+
async selectTag(tagName) {
1818
const tag = element(by.xpath(`//*[@id="createEFormMultiSelector"]//span[text()="${tagName}"]`));
19-
tag.click();
19+
await tag.click();
2020
};
2121

22-
enterXML(name) {
22+
async enterXML(name) {
2323
let text = xmlData.xmlTest1.text;
2424
text = text.replace(data.MainPage.wordToReplaceInXML,
2525
name + Math.floor(Math.random() * data.MainPage.auxiliaryNumberForReplacing) + 1);
26-
this.xmlTextArea.clear();
27-
browser.executeScript(`document.querySelector('#eFormXml').value = arguments[0];`, text);
28-
this.xmlTextArea.sendKeys(' ');
26+
await this.xmlTextArea.clear();
27+
await browser.executeScript(`document.querySelector('#eFormXml').value = arguments[0];`, text);
28+
await this.xmlTextArea.sendKeys(' ');
2929
}
3030

3131
constructor() {

0 commit comments

Comments
 (0)