Skip to content

Commit 7b3f0ab

Browse files
committed
wip
1 parent 90fb1bd commit 7b3f0ab

File tree

3 files changed

+97
-78
lines changed

3 files changed

+97
-78
lines changed

infra/po/login.ts

Lines changed: 0 additions & 51 deletions
This file was deleted.

infra/po/pages.ts

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import { Locator, Page } from "@playwright/test";
2+
3+
export abstract class AbstractPage {
4+
protected page: Page;
5+
6+
constructor(page: Page) {
7+
this.page = page;
8+
}
9+
10+
}
11+
12+
export class OverviewPage extends AbstractPage {
13+
14+
}
15+
16+
export class OpenProjectPage extends AbstractPage {
17+
18+
private readonly selectAProjectToggle: Locator;
19+
20+
constructor(page: Page) {
21+
super(page);
22+
this.selectAProjectToggle = page.locator("#projects-menu i");
23+
}
24+
25+
async clickOnSelectAProjectToggle(): Promise<OpenProjectPage> {
26+
await this.selectAProjectToggle.click();
27+
return this
28+
}
29+
30+
async clickOnProjectName(projectName: string): Promise<OverviewPage> {
31+
await this.page.locator(`#ui-id-5 >> text=${projectName}`).click()
32+
return new OverviewPage(this.page);
33+
}
34+
35+
async doSelectProject(projectName: string): Promise<OverviewPage> {
36+
await this.clickOnSelectAProjectToggle();
37+
await this.clickOnProjectName(projectName);
38+
return new OverviewPage(this.page);
39+
}
40+
41+
}
42+
43+
export class LoginPage extends AbstractPage {
44+
/**
45+
* @param {import('playwright').Page} page
46+
*/
47+
48+
private readonly usernameTb: Locator;
49+
private readonly passwordTb: Locator;
50+
private readonly signInBtn: Locator;
51+
private readonly siginInToggle: Locator;
52+
53+
constructor(page: Page) {
54+
super(page);
55+
this.siginInToggle = page.locator("span:has-text('Sign in')");
56+
this.usernameTb = page.locator('input[name="username"]');
57+
this.passwordTb = page.locator('input[name="password"]');
58+
this.signInBtn = page.locator('input:has-text("Sign in")');
59+
}
60+
async navigate(): Promise<LoginPage> {
61+
await this.page.goto('http://localhost:8080');
62+
return this;
63+
}
64+
65+
async clickOnSignInToggle(): Promise<LoginPage> {
66+
await this.siginInToggle.click();
67+
return this;
68+
}
69+
async fillUsername(username: string): Promise<LoginPage> {
70+
await this.usernameTb.fill(username);
71+
return this;
72+
}
73+
async fillPassword(password: string): Promise<LoginPage> {
74+
await this.passwordTb.fill(password);
75+
return this;
76+
}
77+
async clickOnSignInBtn(): Promise<OpenProjectPage> {
78+
await this.signInBtn.click();
79+
return new OpenProjectPage(this.page);
80+
}
81+
}

tests/test-openproject-po.spec.ts

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,33 @@
11
import { test, expect, type Page } from '@playwright/test';
2-
import {LoginPage} from '../infra/po/login';
2+
import {LoginPage, OpenProjectPage} from '../infra/po/pages';
33

4-
async function performLogin(page: Page) {
5-
const loginPage = new LoginPage(page);
6-
await loginPage.navigate();
7-
await loginPage.clickOnSignInToggle();
8-
await loginPage.fillUsername("admin");
9-
await loginPage.fillPassword("adminadmin");
10-
await loginPage.clickOnSignInBtn();
11-
// await page.goto('http://localhost:8080/');
12-
13-
// await page.locator("span:has-text('Sign in')").click()
14-
// // Fill input[name="username"]
15-
// await page.locator('input[name="username"]').fill('admin');
164

17-
// // Fill input[name="password"]
18-
// await page.locator('input[name="password"]').fill('adminadmin');
195

20-
// // Click input:has-text("Sign in")
21-
// await Promise.all([
22-
// page.locator('input:has-text("Sign in")').click(),
23-
// page.waitForNavigation(),
24-
// ]);
25-
6+
async function performLogin(page: Page) {
7+
const loginPage = new LoginPage(page);
8+
await test.step('Performing login', async () => {
9+
await (await (await (await (await loginPage
10+
.navigate())
11+
.clickOnSignInToggle())
12+
.fillUsername("admin"))
13+
.fillPassword("adminadmin"))
14+
.clickOnSignInBtn();
15+
await expect(page).toHaveURL('http://localhost:8080/');
2616

27-
await expect(page).toHaveURL('http://localhost:8080/');
28-
17+
});
2918
}
3019

3120

3221
test.describe('Task', () => {
3322
test.beforeEach(async ({ page }) => {
3423
await performLogin(page);
35-
36-
3724
});
25+
3826
test('create task', async ({ page }) => {
39-
await page.locator("#projects-menu i").click();
27+
const openProjectPage = new OpenProjectPage(page);
28+
await openProjectPage.clickOnSelectAProjectToggle();
29+
await openProjectPage.clickOnProjectName("Selenium project");
4030

41-
await page.locator("#ui-id-5 >> text=Selenium project").click();
4231
await page.locator("#main-menu-work-packages >> text=Work packages").click();
4332

4433
await page.locator("text=Create Include projects >> [aria-label='Create new work package']").click();

0 commit comments

Comments
 (0)