-
Notifications
You must be signed in to change notification settings - Fork 93
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Integrate playwright UI tests #996
Closed
Closed
Changes from all commits
Commits
Show all changes
10 commits
Select commit
Hold shift + click to select a range
f300623
Added playwright e2e tests
kachar 89d61ce
Run playwright tests in github actions
kachar 1300296
Added staging e2e test for homepage
kachar 30746f4
Added staging anonymous donation e2e test
kachar 9ffe9c1
Make sure we can donate on staging
kachar 17c014e
Added staging donation test with custom amount
kachar ef9ff49
Skip local e2e tests
kachar 36df3f0
Update wait for navigation in e2e tests
kachar 360c626
Replace waitForNavigation with waitForURL
kachar 227d28e
Update wait for url method
kachar File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
name: Playwright Tests | ||
on: | ||
push: | ||
branches: [master] | ||
pull_request: | ||
branches: [master] | ||
jobs: | ||
test: | ||
timeout-minutes: 60 | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v2 | ||
- uses: actions/setup-node@v2 | ||
with: | ||
node-version: '14.x' | ||
- name: Install dependencies | ||
run: yarn | ||
- name: Install Playwright Browsers | ||
run: npx playwright install --with-deps | ||
- name: Run Playwright tests | ||
run: yarn playwright test | ||
- uses: actions/upload-artifact@v2 | ||
if: always() | ||
with: | ||
name: playwright-report | ||
path: playwright-report/ | ||
retention-days: 30 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -47,3 +47,6 @@ build/ | |
bld/ | ||
[Bb]in/ | ||
[Oo]bj/ | ||
/test-results/ | ||
/playwright-report/ | ||
/playwright/.cache/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
import { test, expect } from '@playwright/test' | ||
|
||
test.beforeEach(async ({ page }) => { | ||
await page.goto('http://localhost:3040/') | ||
}) | ||
|
||
test.skip('test homepage', async ({ page }) => { | ||
// Go to http://localhost:3040/ | ||
|
||
// Click text=Текущи кампании | ||
await page.locator('text=Текущи кампании').click() | ||
|
||
// Click text=Това е бета версията на платформата на Подкрепи.бг преди предстоящия наесен офиц | ||
await page | ||
.locator( | ||
'text=Това е бета версията на платформата на Подкрепи.бг преди предстоящия наесен офиц', | ||
) | ||
.click() | ||
|
||
// Check input[type="checkbox"] | ||
await page.locator('input[type="checkbox"]').check() | ||
|
||
// Click text=Затвори | ||
await page.locator('text=Затвори').click() | ||
|
||
// Click text=Как работи Подкрепи.бг? | ||
await page.locator('text=Как работи Подкрепи.бг?').click() | ||
|
||
// Click text=Кой стои зад Подкрепи.бг? | ||
await page.locator('text=Кой стои зад Подкрепи.бг?').click() | ||
|
||
// Click text=Какво ни обединява? | ||
await page.locator('text=Какво ни обединява?').click() | ||
|
||
// Click text=Искам да помогна на Подкрепи.бг | ||
await page.locator('text=Искам да помогна на Подкрепи.бг').click() | ||
|
||
// Click h2:has-text("Често задавани въпроси") | ||
await page.locator('h2:has-text("Често задавани въпроси")').click() | ||
|
||
// Click text=Какво представлява Подкрепи.бг?Подкрепи.бг е платформа за среща между хора, коит >> [data-testid="ExpandMoreIcon"] | ||
await page | ||
.locator( | ||
'text=Какво представлява Подкрепи.бг?Подкрепи.бг е платформа за среща между хора, коит >> [data-testid="ExpandMoreIcon"]', | ||
) | ||
.click() | ||
|
||
// Click text=Подкрепи.бг е платформа за среща между хора, които искат да съберат средства за | ||
await page | ||
.locator( | ||
'text=Подкрепи.бг е платформа за среща между хора, които искат да съберат средства за ', | ||
) | ||
.click() | ||
|
||
// Click text=Защо направихте нова платформа, когато вече има и други? | ||
await page.locator('text=Защо направихте нова платформа, когато вече има и други?').click() | ||
|
||
// Click text=Накратко - целта ни е да увеличим доверието на обществото в дарителските организ | ||
await page | ||
.locator( | ||
'text=Накратко - целта ни е да увеличим доверието на обществото в дарителските организ', | ||
) | ||
.click() | ||
|
||
// Click text=Как гарантирате прозрачност и какво значи “софтуер с отворен код”? | ||
await page | ||
.locator('text=Как гарантирате прозрачност и какво значи “софтуер с отворен код”?') | ||
.click() | ||
|
||
// Click text=Софтуер с отворен код е установена практика, при която всеки, без ограничение, м | ||
await page | ||
.locator( | ||
'text=Софтуер с отворен код е установена практика, при която всеки, без ограничение, м', | ||
) | ||
.click() | ||
|
||
// Click text=Виж всички >> nth=1 | ||
await page.locator('text=Виж всички').nth(1).click() | ||
await expect(page).toHaveURL('http://localhost:3040/faq') | ||
|
||
// Click text=Моделът ни на работа се основава на Принципите, които ни обединяват | ||
await page | ||
.locator('text=Моделът ни на работа се основава на Принципите, които ни обединяват') | ||
.click() | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,134 @@ | ||
import { test } from '@playwright/test' | ||
|
||
test.beforeEach(async ({ page }) => { | ||
await page.goto('http://localhost:3040/') | ||
}) | ||
|
||
test.skip('test support page', async ({ page }) => { | ||
// Click text=Станете доброволец >> nth=0 | ||
await page.locator('text=Станете доброволец').first().click() | ||
|
||
// Go to http://localhost:3040/support | ||
await page.goto('http://localhost:3040/support') | ||
|
||
// Click h1:has-text("Станете доброволец") | ||
await page.locator('h1:has-text("Станете доброволец")').click() | ||
|
||
// Click text=Как искате да ни подкрепите? | ||
await page.locator('text=Как искате да ни подкрепите?').click() | ||
|
||
// Click text=Включете се в организацията като: | ||
await page.locator('text=Включете се в организацията като:').click() | ||
|
||
// Check input[name="roles\.benefactor"] | ||
await page.locator('input[name="roles\\.benefactor"]').check() | ||
|
||
// Check input[name="roles\.associationMember"] | ||
await page.locator('input[name="roles\\.associationMember"]').check() | ||
|
||
// Click text=Напред | ||
await page.locator('text=Напред').click() | ||
|
||
// Click text=В каква роля искате да ни подкрепите? | ||
await page.locator('text=В каква роля искате да ни подкрепите?').click() | ||
|
||
// Click text=Назад | ||
await page.locator('text=Назад').click() | ||
|
||
// Click text=Как искате да ни подкрепите? | ||
await page.locator('text=Как искате да ни подкрепите?').click() | ||
|
||
// Click text=Напред | ||
await page.locator('text=Напред').click() | ||
|
||
// Check input[name="benefactor\.campaignBenefactor"] | ||
await page.locator('input[name="benefactor\\.campaignBenefactor"]').check() | ||
|
||
// Click text=Дарител в бъдещи кампании | ||
await page.locator('text=Дарител в бъдещи кампании').click() | ||
|
||
// Click text=Моля, изберете си роля | ||
await page.locator('text=Моля, изберете си роля').click() | ||
|
||
// Click text=Дарител в бъдещи кампании | ||
await page.locator('text=Дарител в бъдещи кампании').click() | ||
|
||
// Click text=Напред | ||
await page.locator('text=Напред').click() | ||
|
||
// Click text=Изпратете | ||
await page.locator('text=Изпратете').click() | ||
|
||
// Click text=Задължително поле | ||
await page.locator('text=Задължително поле').click() | ||
|
||
// Click text=Изпратете | ||
await page.locator('text=Изпратете').click() | ||
|
||
// Click #mui-3-helper-text | ||
await page.locator('#mui-3-helper-text').click() | ||
|
||
// Click #mui-4-helper-text | ||
await page.locator('#mui-4-helper-text').click() | ||
|
||
// Click #mui-5-helper-text | ||
await page.locator('#mui-5-helper-text').click() | ||
|
||
// Click text=Моля, приемете oбщите условия | ||
await page.locator('text=Моля, приемете oбщите условия').click() | ||
|
||
// Click text=Моля, приемете политиката за защита на личните данни | ||
await page.locator('text=Моля, приемете политиката за защита на личните данни').click() | ||
|
||
// Click input[name="person\.firstName"] | ||
await page.locator('input[name="person\\.firstName"]').click() | ||
|
||
// Fill input[name="person\.firstName"] | ||
await page.locator('input[name="person\\.firstName"]').fill('test') | ||
|
||
// Click input[name="person\.lastName"] | ||
await page.locator('input[name="person\\.lastName"]').click() | ||
|
||
// Fill input[name="person\.lastName"] | ||
await page.locator('input[name="person\\.lastName"]').fill('test') | ||
|
||
// Click input[name="person\.email"] | ||
await page.locator('input[name="person\\.email"]').click() | ||
|
||
// Fill input[name="person\.email"] | ||
await page.locator('input[name="person\\.email"]').fill('[email protected]') | ||
|
||
// Click input[name="person\.phone"] | ||
await page.locator('input[name="person\\.phone"]').click() | ||
|
||
// Fill input[name="person\.phone"] | ||
await page.locator('input[name="person\\.phone"]').fill('0987654321') | ||
|
||
// Click textarea[name="person\.comment"] | ||
await page.locator('textarea[name="person\\.comment"]').click() | ||
|
||
// Fill textarea[name="person\.comment"] | ||
await page.locator('textarea[name="person\\.comment"]').fill('test test test') | ||
|
||
// Check input[name="person\.terms"] | ||
await page.locator('input[name="person\\.terms"]').check() | ||
|
||
// Check input[name="person\.gdpr"] | ||
await page.locator('input[name="person\\.gdpr"]').check() | ||
|
||
// Check input[name="person\.newsletter"] | ||
await page.locator('input[name="person\\.newsletter"]').check() | ||
|
||
// Click text=Изпратете | ||
await page.locator('text=Изпратете').click() | ||
|
||
// Click text=Благодарим Ви, че ни подкрепихте! | ||
await page.locator('text=Благодарим Ви, че ни подкрепихте!').click() | ||
|
||
// Click text=Очаквайте представител на Подкрепи.бг да се свърже с Вас на посочения имейл адре | ||
await page | ||
.locator( | ||
'text=Очаквайте представител на Подкрепи.бг да се свърже с Вас на посочения имейл адре', | ||
) | ||
.click() | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
import { test, expect } from '@playwright/test' | ||
|
||
test('test anonymous donation on staging - custom amount', async ({ page }) => { | ||
// Go to https://dev.podkrepi.bg/ | ||
await page.goto('https://dev.podkrepi.bg/') | ||
|
||
// Click text=Училище за деца с нарушено зрение гр. Варна - стая за ерготерапия | ||
await page | ||
.locator('text=Училище за деца с нарушено зрение гр. Варна - стая за ерготерапия') | ||
.click() | ||
await expect(page).toHaveURL( | ||
'https://dev.podkrepi.bg/campaigns/uchilishe-za-deca-s-narusheno-zrenie-gr-varna-staya-za-ergoterapiya', | ||
) | ||
|
||
// Click button:has-text("Подкрепи") | ||
await page.locator('button:has-text("Подкрепи")').click() | ||
|
||
await expect(page).toHaveURL( | ||
'https://dev.podkrepi.bg/campaigns/donation/uchilishe-za-deca-s-narusheno-zrenie-gr-varna-staya-za-ergoterapiya', | ||
) | ||
|
||
// Click label:has-text("Друга сума") | ||
await page.locator('label:has-text("Друга сума")').click() | ||
|
||
// Click input[name="otherAmount"] | ||
await page.locator('input[name="otherAmount"]').click() | ||
|
||
// Fill input[name="otherAmount"] | ||
await page.locator('input[name="otherAmount"]').fill('7.50') | ||
|
||
// Check input[name="cardIncludeFees"] | ||
await page.locator('input[name="cardIncludeFees"]').check() | ||
|
||
// Click text=8,11 лв. | ||
await page.locator('text=8,11 лв.').click() | ||
|
||
// Click text=0,61 лв. | ||
await page.locator('text=0,61 лв.').click() | ||
|
||
// Click text=7,50 лв. | ||
await page.locator('text=7,50 лв.').click() | ||
|
||
// Click text=Напред | ||
await page.locator('text=Напред').click() | ||
|
||
// Click text=Дарете анонимно | ||
await page.locator('text=Дарете анонимно').click() | ||
|
||
// Click input[name="personsEmail"] | ||
await page.locator('input[name="personsEmail"]').click() | ||
|
||
// Fill input[name="personsEmail"] | ||
await page.locator('input[name="personsEmail"]').fill('[email protected]') | ||
|
||
// Click text=Напред | ||
await page.locator('text=Напред').click() | ||
|
||
// Click textarea[name="message"] | ||
await page.locator('textarea[name="message"]').click() | ||
|
||
// Fill textarea[name="message"] | ||
await page.locator('textarea[name="message"]').fill('e2e tester 2') | ||
|
||
// Click text=Премини към плащане | ||
await page.locator('text=Премини към плащане').click() | ||
|
||
await page.waitForURL((url) => | ||
url.toString().startsWith('https://checkout.stripe.com/pay/cs_test_'), | ||
) | ||
|
||
await expect(page.url()).toContain('https://checkout.stripe.com/pay/cs_test_') | ||
|
||
// Click [placeholder="\31 234 1234 1234 1234"] | ||
await page.locator('[placeholder="\\31 234 1234 1234 1234"]').click() | ||
|
||
// Fill [placeholder="\31 234 1234 1234 1234"] | ||
await page.locator('[placeholder="\\31 234 1234 1234 1234"]').fill('4242 4242 4242 4242') | ||
|
||
// Click [placeholder="MM \/ YY"] | ||
await page.locator('[placeholder="MM \\/ YY"]').click() | ||
|
||
// Fill [placeholder="MM \/ YY"] | ||
await page.locator('[placeholder="MM \\/ YY"]').fill('04 / 242') | ||
|
||
// Click [placeholder="CVC"] | ||
await page.locator('[placeholder="CVC"]').click() | ||
|
||
// Fill [placeholder="CVC"] | ||
await page.locator('[placeholder="CVC"]').fill('424') | ||
|
||
// Click input[name="billingName"] | ||
await page.locator('input[name="billingName"]').click() | ||
|
||
// Fill input[name="billingName"] | ||
await page.locator('input[name="billingName"]').fill('tester') | ||
|
||
// Click [data-testid="hosted-payment-submit-button"] | ||
await page.locator('[data-testid="hosted-payment-submit-button"]').click() | ||
|
||
await page.waitForURL( | ||
'https://dev.podkrepi.bg/campaigns/donation/uchilishe-za-deca-s-narusheno-zrenie-gr-varna-staya-za-ergoterapiya?success=true', | ||
) | ||
|
||
// Click text=Благодарим за доверието и подкрепата! | ||
await page.locator('text=Благодарим за доверието и подкрепата!').click() | ||
}) |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it would be nice if local and staging are actually exactly the same tests with the only difference being the base URL.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've tested against staging until we setup the local environment. Still not convinced we actually need to test against staging in real conditions, but if we do the tests should be the same with only difference the URL as you suggested.