-
Notifications
You must be signed in to change notification settings - Fork 96
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(roll): roll to ToT Playwright (01-09-23)
- Loading branch information
1 parent
c0e30c7
commit 242afce
Showing
22 changed files
with
1,134 additions
and
677 deletions.
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,212 @@ | ||
--- | ||
id: ci-intro | ||
title: "CI GitHub Actions" | ||
--- | ||
import Tabs from '@theme/Tabs'; | ||
import TabItem from '@theme/TabItem'; | ||
import HTMLCard from '@site/src/components/HTMLCard'; | ||
|
||
## Introduction | ||
|
||
Playwright tests can be ran on any CI provider. In this section we will cover running tests on GitHub using GitHub actions. If you would like to see how to configure other CI providers check out our detailed doc on Continuous Integration. | ||
|
||
To add a [GitHub Actions](https://docs.github.com/en/actions) file first create `.github/workflows` folder and inside it add a `playwright.yml` file containing the example code below so that your tests will run on each push and pull request for the main/master branch. | ||
|
||
#### You will learn | ||
- [How to run tests on push/pull_request](/ci.mdx#on-pushpull_request) | ||
- [How to view test logs](/ci-intro.mdx#viewing-test-logs) | ||
- [How to view the trace](/ci-intro.mdx#viewing-the-trace) | ||
|
||
## Setting up GitHub Actions | ||
|
||
### On push/pull_request | ||
|
||
Tests will run on push or pull request on branches main/master. The [workflow](https://docs.github.com/en/actions/using-workflows/about-workflows) will install all dependencies, install Playwright and then run the tests. | ||
|
||
```yml title=".github/workflows/playwright.yml" | ||
name: Playwright Tests | ||
on: | ||
push: | ||
branches: [ main, master ] | ||
pull_request: | ||
branches: [ main, master ] | ||
jobs: | ||
test: | ||
timeout-minutes: 60 | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- name: Setup dotnet | ||
uses: actions/setup-dotnet@v3 | ||
with: | ||
dotnet-version: 6.0.x | ||
- run: dotnet build | ||
- name: Ensure browsers are installed | ||
run: pwsh bin/Debug/net6.0/playwright.ps1 install --with-deps | ||
- name: Run your tests | ||
run: dotnet test | ||
``` | ||
### Via Containers | ||
GitHub Actions support [running jobs in a container](https://docs.github.com/en/actions/using-jobs/running-jobs-in-a-container) by using the [`jobs.<job_id>.container`](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idcontainer) option. This is useful to not pollute the host environment with dependencies and to have a consistent environment for e.g. screenshots/visual regression testing across different operating systems. | ||
|
||
```yml title=".github/workflows/playwright.yml" | ||
name: Playwright Tests | ||
on: | ||
push: | ||
branches: [ main, master ] | ||
pull_request: | ||
branches: [ main, master ] | ||
jobs: | ||
playwright: | ||
name: 'Playwright Tests' | ||
runs-on: ubuntu-latest | ||
container: | ||
image: mcr.microsoft.com/playwright/dotnet:v1.37.1-jammy | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- name: Setup dotnet | ||
uses: actions/setup-dotnet@v3 | ||
with: | ||
dotnet-version: 6.0.x | ||
- run: dotnet build | ||
- name: Run your tests | ||
run: dotnet test | ||
``` | ||
|
||
### On deployment | ||
|
||
This will start the tests after a [GitHub Deployment](https://developer.github.com/v3/repos/deployments/) went into the `success` state. Services like Vercel use this pattern so you can run your end-to-end tests on their deployed environment. | ||
|
||
```yml title=".github/workflows/playwright.yml" | ||
name: Playwright Tests | ||
on: | ||
deployment_status: | ||
jobs: | ||
test: | ||
timeout-minutes: 60 | ||
runs-on: ubuntu-latest | ||
if: github.event.deployment_status.state == 'success' | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- name: Setup dotnet | ||
uses: actions/setup-dotnet@v3 | ||
with: | ||
dotnet-version: 6.0.x | ||
- run: dotnet build | ||
- name: Ensure browsers are installed | ||
run: pwsh bin/Debug/net6.0/playwright.ps1 install --with-deps | ||
- name: Run tests | ||
run: dotnet test | ||
env: | ||
# This might depend on your test-runner | ||
PLAYWRIGHT_TEST_BASE_URL: ${{ github.event.deployment_status.target_url }} | ||
``` | ||
|
||
## Create a Repo and Push to GitHub | ||
|
||
Once you have your [GitHub actions workflow](#setting-up-github-actions) setup then all you need to do is [Create a repo on GitHub](https://docs.github.com/en/get-started/quickstart/create-a-repo) or push your code to an existing repository. Follow the instructions on GitHub and don't forget to [initialize a git repository](https://github.com/git-guides/git-init) using the `git init` command so you can [add](https://github.com/git-guides/git-add), [commit](https://github.com/git-guides/git-commit) and [push](https://github.com/git-guides/git-push) your code. | ||
|
||
<img width="861" alt="Create a Repo and Push to GitHub" src="https://user-images.githubusercontent.com/13063165/183423254-d2735278-a2ab-4d63-bb99-48d8e5e447bc.png"/> | ||
|
||
## Opening the Workflows | ||
|
||
Click on the **Actions** tab to see the workflows. Here you will see if your tests have passed or failed. | ||
|
||
<img width="847" alt="Opening the Workflows" src="https://user-images.githubusercontent.com/13063165/183423584-2ea18038-cd49-4daa-a20c-2205352f0933.png"/> | ||
|
||
On Pull Requests you can also click on the **Details** link in the [PR status check](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/about-status-checks). | ||
|
||
<img width="645" alt="pr status checked" src="https://user-images.githubusercontent.com/13063165/183722462-17a985db-0e10-4205-b16c-8aaac36117b9.png" /> | ||
|
||
## Viewing Test Logs | ||
|
||
Clicking on the workflow run will show you the all the actions that GitHub performed and clicking on **Run Playwright tests** will show the error messages, what was expected and what was received as well as the call log. | ||
|
||
<img width="839" alt="Viewing Test Logs" src="https://user-images.githubusercontent.com/13063165/183423783-58bf2008-514e-4f96-9c12-c9a55703960c.png"/> | ||
|
||
## Viewing the Trace | ||
|
||
[trace.playwright.dev](https://trace.playwright.dev) is a statically hosted variant of the Trace Viewer. You can upload trace files using drag and drop. | ||
|
||
<img width="1119" alt="Drop Playwright Trace to load" src="https://user-images.githubusercontent.com/13063165/194577918-b4d45726-2692-4093-8a28-9e73552617ef.png" /> | ||
|
||
## What's Next | ||
- [Learn how to use Locators](./locators.mdx) | ||
- [Learn how to perform Actions](./input.mdx) | ||
- [Learn how to write Assertions](./test-assertions.mdx) | ||
- [Learn more about the Trace Viewer](/trace-viewer.mdx) | ||
- [Learn more about running tests on other CI providers](/ci.mdx) | ||
|
||
|
||
[Accessibility]: /api/class-accessibility.mdx "Accessibility" | ||
[APIRequest]: /api/class-apirequest.mdx "APIRequest" | ||
[APIRequestContext]: /api/class-apirequestcontext.mdx "APIRequestContext" | ||
[APIResponse]: /api/class-apiresponse.mdx "APIResponse" | ||
[APIResponseAssertions]: /api/class-apiresponseassertions.mdx "APIResponseAssertions" | ||
[Browser]: /api/class-browser.mdx "Browser" | ||
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext" | ||
[BrowserType]: /api/class-browsertype.mdx "BrowserType" | ||
[CDPSession]: /api/class-cdpsession.mdx "CDPSession" | ||
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent" | ||
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage" | ||
[Dialog]: /api/class-dialog.mdx "Dialog" | ||
[Download]: /api/class-download.mdx "Download" | ||
[ElementHandle]: /api/class-elementhandle.mdx "ElementHandle" | ||
[FileChooser]: /api/class-filechooser.mdx "FileChooser" | ||
[FormData]: /api/class-formdata.mdx "FormData" | ||
[Frame]: /api/class-frame.mdx "Frame" | ||
[FrameLocator]: /api/class-framelocator.mdx "FrameLocator" | ||
[JSHandle]: /api/class-jshandle.mdx "JSHandle" | ||
[Keyboard]: /api/class-keyboard.mdx "Keyboard" | ||
[Locator]: /api/class-locator.mdx "Locator" | ||
[LocatorAssertions]: /api/class-locatorassertions.mdx "LocatorAssertions" | ||
[Mouse]: /api/class-mouse.mdx "Mouse" | ||
[Page]: /api/class-page.mdx "Page" | ||
[PageAssertions]: /api/class-pageassertions.mdx "PageAssertions" | ||
[PageError]: /api/class-pageerror.mdx "PageError" | ||
[Playwright]: /api/class-playwright.mdx "Playwright" | ||
[PlaywrightAssertions]: /api/class-playwrightassertions.mdx "PlaywrightAssertions" | ||
[Request]: /api/class-request.mdx "Request" | ||
[Response]: /api/class-response.mdx "Response" | ||
[Route]: /api/class-route.mdx "Route" | ||
[Selectors]: /api/class-selectors.mdx "Selectors" | ||
[TimeoutError]: /api/class-timeouterror.mdx "TimeoutError" | ||
[Touchscreen]: /api/class-touchscreen.mdx "Touchscreen" | ||
[Tracing]: /api/class-tracing.mdx "Tracing" | ||
[Video]: /api/class-video.mdx "Video" | ||
[WebSocket]: /api/class-websocket.mdx "WebSocket" | ||
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame" | ||
[Worker]: /api/class-worker.mdx "Worker" | ||
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element" | ||
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument" | ||
[Promise]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise "Promise" | ||
[iterator]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols "Iterator" | ||
[origin]: https://developer.mozilla.org/en-US/docs/Glossary/Origin "Origin" | ||
[selector]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors "selector" | ||
[Serializable]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Description "Serializable" | ||
[UIEvent.detail]: https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail "UIEvent.detail" | ||
[UnixTime]: https://en.wikipedia.org/wiki/Unix_time "Unix Time" | ||
[xpath]: https://developer.mozilla.org/en-US/docs/Web/XPath "xpath" | ||
|
||
[bool]: https://docs.microsoft.com/en-us/dotnet/api/system.boolean "bool" | ||
[double]: https://docs.microsoft.com/en-us/dotnet/api/system.double "double" | ||
[byte]: https://docs.microsoft.com/en-us/dotnet/api/system.byte "byte" | ||
[int]: https://docs.microsoft.com/en-us/dotnet/api/system.int32 "int" | ||
[void]: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/void "void" | ||
[string]: https://docs.microsoft.com/en-us/dotnet/api/system.string "string" | ||
[URL]: https://nodejs.org/api/url.html "URL" | ||
[Regex]: https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.regex "Regex" | ||
|
||
[Action]: https://docs.microsoft.com/en-us/dotnet/api/system.action-1 "Action" | ||
[Func]: https://docs.microsoft.com/en-us/dotnet/api/system.func-2 "Func" | ||
[IEnumerable]: https://docs.microsoft.com/en-us/dotnet/api/system.collections.ienumerable "IEnumerable" | ||
[IDictionary]: https://docs.microsoft.com/en-us/dotnet/api/system.collections.idictionary "IDictionary" | ||
[Task]: https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task?view=net-5.0 "Task" | ||
[IReadOnlyDictionary]: https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlydictionary-2 "IReadOnlyDictionary" | ||
[JsonElement]: https://docs.microsoft.com/en-us/dotnet/api/system.text.json.jsonelement "JsonElement" | ||
|
||
[all available image tags]: https://mcr.microsoft.com/en-us/product/playwright/dotnet/about "all available image tags" | ||
[Microsoft Artifact Registry]: https://mcr.microsoft.com/en-us/product/playwright/dotnet/about "Microsoft Artifact Registry" | ||
[Dockerfile.jammy]: https://github.com/microsoft/playwright-dotnet/blob/main/utils/docker/Dockerfile.jammy "Dockerfile.jammy" |
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
Oops, something went wrong.