Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 3b935a7

Browse files
author
Jarosław Żołnowski
authored
feat(test): add playwright configuration and e2e tests (#6)
- add tests for status, chats, chat detail, and account pages - add postinstall script - add console.log error test
1 parent 0ce2edb commit 3b935a7

18 files changed

+431
-5
lines changed

‎.gitignore‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,7 @@ npm-debug.log*
2828
/node_modules
2929
/platforms
3030
/plugins
31+
32+
/test-results/
33+
/playwright-report/
34+
/playwright/.cache/

‎README.md‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ now.
4242

4343
`npm run start:ios`
4444

45+
### Start e2e tests on Desktop Chrome
46+
47+
`npm run e2e`
48+
4549
## Questions?
4650

4751
Check out our [GitHub Discussions](https://github.com/xlts-dev/angularjs-ionic-v1/discussions) section to

‎e2e/pages/account-page.js‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export class AccountPage {
2+
page;
3+
header;
4+
enableFriends;
5+
6+
constructor(page) {
7+
this.page = page;
8+
this.header = page.locator('ion-nav-bar').getByText('Account');
9+
this.enableFriends = page.getByRole('checkbox');
10+
}
11+
}

‎e2e/pages/chat-detail-page.js‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
export class ChatDetailPage {
2+
page;
3+
header;
4+
image;
5+
description
6+
7+
constructor(page) {
8+
this.page = page;
9+
this.header = page.locator('ion-nav-bar').getByText('Ben Sparrow');
10+
this.image = page.getByRole('img').first();
11+
this.description = page.getByRole('paragraph').first();
12+
}
13+
14+
async clickOnBackButton() {
15+
await this.page.getByRole('button').click();
16+
}
17+
}

‎e2e/pages/chats-page.js‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
export class ChatsPage {
2+
page;
3+
header;
4+
links;
5+
6+
constructor(page) {
7+
this.page = page;
8+
this.header = page.locator('ion-nav-bar').getByText('Chats');
9+
this.links = page.getByRole('link')
10+
}
11+
12+
async clickOnUser() {
13+
await this.links.first().click();
14+
}
15+
}

‎e2e/pages/dashboard-page.js‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
export class DashboardPage {
2+
page;
3+
header;
4+
5+
constructor(page) {
6+
this.page = page;
7+
this.header = page.getByText('Dashboard');
8+
}
9+
10+
async clickOnIonicMarketLink() {
11+
await this.page.getByTestId('ionic-market-link').click();
12+
}
13+
14+
async clickOnIonicForumLink() {
15+
await this.page.getByTestId('ionic-forum-link').click();
16+
}
17+
}

‎e2e/pages/tabs-page.js‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
export class TabsPage {
2+
page;
3+
4+
constructor(page) {
5+
this.page = page;
6+
}
7+
8+
async clickOnStatusTab() {
9+
await this.page.locator('a').filter({hasText: 'Status'}).click();
10+
}
11+
12+
async clickOnChatsTab() {
13+
await this.page.locator('a').filter({hasText: 'Chats'}).click();
14+
}
15+
16+
async clickOnAccountTab() {
17+
await this.page.locator('a').filter({hasText: 'Account'}).click();
18+
}
19+
}

‎e2e/tests/account.e2e.js‎

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import {expect, test} from '@playwright/test';
2+
import {AccountPage} from '../pages/account-page';
3+
import {TabsPage} from '../pages/tabs-page';
4+
import {PageErrorCollector} from '../utils/page-error-collector';
5+
6+
test.describe('account', () => {
7+
let pageErrorCollector;
8+
9+
test.beforeEach(async ({page}) => {
10+
pageErrorCollector = new PageErrorCollector(page)
11+
pageErrorCollector.listenForConsoleAndPageErrors(page);
12+
13+
await page.goto('');
14+
const tabsPage = new TabsPage(page);
15+
await tabsPage.clickOnAccountTab();
16+
});
17+
18+
test.afterEach(async ({ page }) => {
19+
expect(pageErrorCollector.errorLogs).toStrictEqual([]);
20+
});
21+
22+
test('TopNav', async ({page}) => {
23+
const accountPage = new AccountPage(page);
24+
25+
await expect(accountPage.header).toHaveText('Account');
26+
});
27+
28+
test('Enable Friends checkbox', async ({page}) => {
29+
const accountPage = new AccountPage(page);
30+
accountPage.enableFriends.check();
31+
await expect(accountPage.enableFriends.isChecked()).toBeTruthy();
32+
33+
await accountPage.enableFriends.click();
34+
await expect(accountPage.enableFriends).toHaveAttribute('aria-checked', 'false');
35+
36+
await accountPage.enableFriends.click();
37+
await expect(accountPage.enableFriends).toHaveAttribute('aria-checked', 'true');
38+
});
39+
})

‎e2e/tests/chat-details.e2e.js‎

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import {expect, test} from '@playwright/test';
2+
import {ChatDetailPage} from '../pages/chat-detail-page';
3+
import {ChatsPage} from '../pages/chats-page';
4+
import {TabsPage} from '../pages/tabs-page';
5+
import {PageErrorCollector} from '../utils/page-error-collector';
6+
7+
test.describe('chat detail', () => {
8+
let pageErrorCollector;
9+
10+
test.beforeEach(async ({page}) => {
11+
pageErrorCollector = new PageErrorCollector(page)
12+
pageErrorCollector.listenForConsoleAndPageErrors(page);
13+
14+
await page.goto('');
15+
const tabsPage = new TabsPage(page);
16+
await tabsPage.clickOnChatsTab();
17+
const chatsPage = new ChatsPage(page);
18+
await chatsPage.clickOnUser();
19+
});
20+
21+
test.afterEach(async ({ page }) => {
22+
expect(pageErrorCollector.errorLogs).toStrictEqual([]);
23+
});
24+
25+
test('details', async ({page}) => {
26+
const chatDetail = new ChatDetailPage(page);
27+
28+
await expect(chatDetail.header).toHaveText('Ben Sparrow');
29+
await expect(chatDetail.image).toHaveAttribute('src', 'img/ben.png');
30+
await expect(chatDetail.description).toHaveText('You on your way?');
31+
});
32+
33+
test('back to chats', async ({page}) => {
34+
const chatDetail = new ChatDetailPage(page);
35+
36+
await chatDetail.clickOnBackButton();
37+
await expect(page.url()).toContain('tab/chats');
38+
});
39+
})

‎e2e/tests/chats.e2e.js‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import {expect, test} from '@playwright/test';
2+
import {ChatsPage} from '../pages/chats-page';
3+
import {TabsPage} from '../pages/tabs-page';
4+
import {PageErrorCollector} from '../utils/page-error-collector';
5+
6+
test.describe('chats', () => {
7+
let pageErrorCollector;
8+
9+
test.beforeEach(async ({page}) => {
10+
pageErrorCollector = new PageErrorCollector(page)
11+
pageErrorCollector.listenForConsoleAndPageErrors(page);
12+
13+
await page.goto('');
14+
const tabsPage = new TabsPage(page);
15+
await tabsPage.clickOnChatsTab();
16+
});
17+
18+
test.afterEach(async ({ page }) => {
19+
expect(pageErrorCollector.errorLogs).toStrictEqual([]);
20+
});
21+
22+
test('topnav', async ({page}) => {
23+
const chatsPage = new ChatsPage(page);
24+
25+
await expect(chatsPage.header).toHaveText('Chats');
26+
});
27+
})

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /