1
+ import { test , expect , Page , Locator } 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
+ private readonly logoutLnkL : Locator ;
15
+ private readonly deleteBtnL : Locator ;
16
+
17
+ constructor ( page : Page ) {
18
+ super ( page ) ;
19
+ this . logoutLnkL = this . page . getByRole ( 'link' , { name : 'Logout' } ) ;
20
+ this . deleteBtnL = this . page . getByText ( 'Delete' ) ;
21
+ }
22
+
23
+ async clickOnLogoutLnk ( ) : Promise < LoginPage > {
24
+ await this . logoutLnkL . click ( ) ;
25
+ return new LoginPage ( this . page ) ;
26
+ }
27
+
28
+ async clickOnDeleteBtn ( ) : Promise < OverviewPage > {
29
+ await this . deleteBtnL . click ( ) ;
30
+ return this ;
31
+ }
32
+
33
+
34
+ }
35
+
36
+ export class RegisterPage extends AbstractPage {
37
+
38
+ private readonly usernameTbL : Locator ;
39
+ private readonly firstNameTbL : Locator ;
40
+ private readonly lastNameTbL : Locator ;
41
+ private readonly passwordTbL : Locator ;
42
+ private readonly registerBtnL : Locator ;
43
+
44
+
45
+ constructor ( page : Page ) {
46
+ super ( page ) ;
47
+ this . usernameTbL = this . page . locator ( '#Text1' ) ;
48
+ this . firstNameTbL = this . page . locator ( '#firstName' ) ;
49
+ this . lastNameTbL = this . page . getByLabel ( 'First name' ) ;
50
+ this . passwordTbL = this . page . getByLabel ( 'Password' ) ;
51
+ this . registerBtnL = this . page . getByRole ( 'button' , { name : 'Register' } ) ;
52
+
53
+ }
54
+
55
+ async typeToUsernameTb ( username : string ) : Promise < RegisterPage > {
56
+ await this . usernameTbL . fill ( username ) ;
57
+ return this ;
58
+ }
59
+
60
+ async typeToFirstNameTb ( firstName : string ) : Promise < RegisterPage > {
61
+ await this . firstNameTbL . fill ( firstName ) ;
62
+ return this ;
63
+ }
64
+
65
+ async typeToLastNameTb ( lastName : string ) : Promise < RegisterPage > {
66
+ await this . lastNameTbL . fill ( lastName ) ;
67
+ return this ;
68
+ }
69
+
70
+ async typeToPasswordTb ( password : string ) : Promise < RegisterPage > {
71
+ await this . passwordTbL . fill ( password ) ;
72
+ return this ;
73
+ }
74
+
75
+ async clickOnRegisterBtn ( ) : Promise < LoginPage > {
76
+ await this . registerBtnL . click ( ) ;
77
+ return new LoginPage ( this . page ) ;
78
+ }
79
+
80
+ }
81
+
82
+ export class LoginPage extends AbstractPage {
83
+
84
+ private readonly registerLnkL : Locator ;
85
+ private readonly alertL : Locator ;
86
+ private readonly usernameTbL : Locator ;
87
+ private readonly passwordTbL : Locator ;
88
+ private readonly loginBtnL : Locator ;
89
+
90
+ constructor ( page : Page ) {
91
+ super ( page ) ;
92
+ this . registerLnkL = page . getByRole ( 'link' , { name : 'Register' } ) ;
93
+ this . alertL = page . locator ( '.alert' ) ;
94
+ this . usernameTbL = page . getByLabel ( 'Username' ) ;
95
+ this . passwordTbL = page . getByLabel ( 'Password' ) ;
96
+ this . loginBtnL = page . getByRole ( 'button' , { name : 'Login' } ) ;
97
+ }
98
+
99
+ async getAlertText ( ) : Promise < null | string > {
100
+ return await this . alertL . textContent ( ) ;
101
+ }
102
+
103
+ async clickOnRegsiterLnk ( ) : Promise < RegisterPage > {
104
+ await this . registerLnkL . click ( ) ;
105
+ return new RegisterPage ( this . page ) ;
106
+ }
107
+
108
+ async typeToUsernameTb ( username : string ) : Promise < LoginPage > {
109
+ await this . usernameTbL . fill ( username ) ;
110
+ return this ;
111
+ }
112
+
113
+ async typeToPasswordTb ( password : string ) : Promise < LoginPage > {
114
+ await this . passwordTbL . fill ( password ) ;
115
+ return this ;
116
+ }
117
+
118
+ async clickOnLoginBtn ( ) : Promise < OverviewPage > {
119
+ await this . loginBtnL . click ( ) ;
120
+ return new OverviewPage ( this . page ) ;
121
+ }
122
+
123
+
124
+ }
0 commit comments