Compare commits

...

4287 commits

Author SHA1 Message Date
Pavel Feldman 31f4a05eb6
chore: make git diff different for CI and local (#34955) 2025-02-27 14:06:13 -08:00
Pavel Feldman 7a61aa25e6
chore: provide blob name for web and html reporter tests (#34940) 2025-02-27 13:22:07 -08:00
Adam Gastineau 67d6f7f603
chore: temporarily disable floating promise warning messages (#34957) 2025-02-27 12:45:30 -08:00
Adam Gastineau b0ceed51a5
docs: Improve toHaveURL doc clarity (#34935) 2025-02-27 11:00:50 -08:00
Dmitry Gozman 08ea36caa2
chore: default reportSlowTests to 5 minutes (#34950) 2025-02-27 16:31:32 +00:00
Dmitry Gozman 70cc2b14e2
chore: apply "injected" eslint rules to "isomorphic" (#34953) 2025-02-27 16:31:05 +00:00
Playwright Service ad64f8d859
feat(chromium): roll to r1161 (#34952)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-27 17:01:07 +01:00
Simon Knott a1146fd4a3
chore: copy as prompt in ui should have codeframe (#34943)
Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-02-27 15:50:46 +01:00
Dmitry Gozman 3ce9ae6a7d
chore: replace locator.visible with filter({ visible }) (#34947) 2025-02-27 13:44:53 +00:00
Simon Knott 837abfbc15
chore: document indexeddb type as "unknown" (#34944) 2025-02-27 14:29:22 +01:00
Simon Knott 10fc0ef221
chore: make indexeddb opt-in (#34942) 2025-02-27 14:27:54 +01:00
Pavel Feldman 58db3f7e3f
chore: restore pr title in html report (#34937) 2025-02-26 19:22:31 -08:00
Henrik Skupin a803e6053a
chore(bidi): use fractional coordinates for pointerAction (#34929) 2025-02-26 16:28:14 -08:00
Yury Semikhatsky b5fe029c1b
chore: remove failOnStatusCode from Browser.newContext, rename (#34936) 2025-02-26 15:03:21 -08:00
Pavel Feldman cd23a224f6
chore: another iteration on gitCommit/gitDiff props (#34926) 2025-02-26 08:40:30 -08:00
Simon Knott 17c4d8e5ec
chore: change generated filename for toMatchAriaSnapshot from .yml to .snapshot.yml (#34931)
Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2025-02-26 16:29:56 +01:00
Simon Knott a04a93c1fd
chore: change pageSnapshot extension to .snapshot.yml (#34930) 2025-02-26 14:27:17 +01:00
Dmitry Gozman 439427c14e
chore: remove stages from TestInfoImpl (#34919) 2025-02-26 10:55:02 +00:00
Yury Semikhatsky aaac9923fd
fix: disable global timeout when debugging (#34922) 2025-02-25 11:33:15 -08:00
Pavel Feldman 411f938296
chore: clean up git commit metadata props and UI (#34867) 2025-02-25 09:21:17 -08:00
Dmitry Gozman b148cbad76
fix: remove unicode soft hyphen in normalizeWhitespace (#34920) 2025-02-25 16:54:02 +00:00
Simon Knott a9bbf4b56d
docs: recommend localhost over 127.0.0.1 (#34918) 2025-02-25 15:40:38 +01:00
Simon Knott 9e38473309
fix(runner): hide APIResponse.* calls from results (#34909) 2025-02-25 14:26:54 +01:00
Dmitry Gozman 81855d11e4
chore: add playwright-client to the list of packages (#34916) 2025-02-25 13:23:38 +00:00
Dmitry Gozman ed0bf35435
feat: locator.visible (#34905) 2025-02-25 11:48:15 +00:00
Yury Semikhatsky 9b633ddd2f
docs: touch events guide improvements (#34903) 2025-02-24 14:13:27 -08:00
Vitaliy Potapov c4be54b45c
Docs: improve docs and tests for URL glob pattern (#34899) 2025-02-24 12:22:24 -08:00
Simon Knott 1a8f00c45f
fix: don't wrap button contents in two lines (#34887) 2025-02-24 12:15:21 -08:00
Yury Semikhatsky dbbdabfd1b
chore: pass JSHandles instead of ObjectId to/from context delegate (#34895) 2025-02-24 12:11:17 -08:00
Yury Semikhatsky 954457ba9e
chore: fix firefox tests after switching to context delegate (#34898) 2025-02-22 17:12:39 -08:00
Yury Semikhatsky e091baad79
chore: make execution context delegate public (#34894) 2025-02-21 18:27:24 -08:00
Yury Semikhatsky e38099ef13
chore: getProperties can use context stored in JSHandle (#34893) 2025-02-21 17:55:02 -08:00
Yury Semikhatsky 1af59ee523
chore(bidi): do not leak utility handles (#34892) 2025-02-21 17:44:33 -08:00
Yury Semikhatsky 962a752832
chore: contain remote objects to browser-specific code (#34890) 2025-02-21 16:52:39 -08:00
Yury Semikhatsky 6486ac006e
chore: initialize utility script privately (#34812) 2025-02-21 13:59:55 -08:00
Pavel Feldman 325fe71bb9
chore: minor html report polish (#34864) 2025-02-21 13:49:23 -08:00
Yury Semikhatsky 65910c4ac5
test: unskip "should preserve cookie order from Set-Cookie header" (#34888) 2025-02-21 10:04:01 -08:00
Max Schmitt 132d93151c
test: replace setTimeout with builtinSetTimeout in UI mode test (#34885) 2025-02-21 07:38:24 -08:00
Max Schmitt af61d659cb
chore: fix roll_browser script (#34886) 2025-02-21 07:37:52 -08:00
Playwright Service 0bb5925d0d
feat(chromium): roll to r1160 (#34884)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2025-02-21 15:40:18 +01:00
Max Schmitt 428f196036
test: have typed RunResult.results (#34883) 2025-02-21 14:22:59 +01:00
Simon Knott 48fb536e12
chore(screenshot): warn about visibility of masked elements (#34881) 2025-02-21 13:52:44 +01:00
Sang Nguyen e4ceac8e4c
docs: correct closing tags for option elements in HTML examples (#34874) 2025-02-21 09:38:47 +01:00
Adam Gastineau c64f0ffa1d
chore: manually add exception for esbuild vulnerability (#34875) 2025-02-20 14:47:44 -08:00
Adam Gastineau 33c0a1b0ca
chore: add floating promise warning to hooks (#34861) 2025-02-20 10:46:49 -08:00
Simon Knott bb8e914294
feat(ui): collapse repeating console lines (#34857) 2025-02-20 14:48:20 +01:00
Playwright Service e43d287d8d
feat(webkit): roll to r2140 (#34866)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-20 11:15:46 +01:00
Simon Knott aca3fb275b
fix(runner): validate config.tsconfig (#34849) 2025-02-20 09:11:50 +01:00
Pavel Feldman d5adeb3cf4
chore: build a client bundle (#34847) 2025-02-19 15:27:00 -08:00
Simon Knott 1f1e2acf9b
chore: rename prompt button (#34851) 2025-02-19 14:32:58 -08:00
Adam Gastineau f5b8cca1eb
feat: Warn on floating promises (#34845) 2025-02-19 10:11:04 -08:00
Max Schmitt 3584e72223
chore: remove 'as *' imports because of esModuleInterop: true (#34854) 2025-02-19 15:32:12 +01:00
Simon Knott a3e8788b9c
chore: hide llm chat (#34852) 2025-02-19 14:14:18 +01:00
Max Schmitt 7f7ab96893
chore: fix tsc linting error (#34853) 2025-02-19 12:18:42 +01:00
Playwright Service dcb9ed8d41
feat(webkit): roll to r2139 (#34850)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-19 11:11:40 +01:00
Playwright Service 0baadb513b
feat(chromium-tip-of-tree): roll to r1304 (#34842)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-18 16:24:09 +01:00
Bedřich Schindler 741a7079fe
docs(ct): add brief information about CSS modules into FAQ (#34677) 2025-02-18 06:44:09 -08:00
Max Schmitt 081031f50e
chore: bump vite to v6 (#34663) 2025-02-18 13:29:16 +01:00
Max Schmitt 1af4e367f4
fix(testServer): pass use options to listFiles command (#34832) 2025-02-18 00:33:45 +01:00
Playwright Service 715123afbe
feat(firefox-beta): roll to r1471 (#34796)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-17 10:04:32 +01:00
Playwright Service 060ef5562d
feat(webkit): roll to r2138 (#34814)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-17 09:34:16 +01:00
Max Schmitt 605eb0d657 Revert "devops: migrate away from merge.config.ts (#34802)"
This reverts commit df6e3f043a.
2025-02-17 09:33:20 +01:00
Pavel Feldman f70f92d5cd
chore: do not use process in client (#34816) 2025-02-15 19:49:30 -08:00
Pavel Feldman 3606a434fe
chore: pass validator into validator context (#34810) 2025-02-15 08:28:28 -08:00
Pavel Feldman 024a52821a
chore: init eventEmitter w/ platform (#34809) 2025-02-14 17:06:11 -08:00
Yury Semikhatsky 145b6bf4fe
chore: browser independent setInputFiles implementation (#34808) 2025-02-14 16:44:27 -08:00
Pavel Feldman 8b28e637c8
chrome: remove state from isomorphic utils (#34795) 2025-02-14 15:10:50 -08:00
Yury Semikhatsky be95a08c4d
feat(webkit): roll to r2137, update tests (#34806) 2025-02-14 11:25:35 -08:00
Simon Knott fe0b327770
feat(ui): llm conversation about error (#34750) 2025-02-14 16:59:26 +01:00
Max Schmitt df6e3f043a
devops: migrate away from merge.config.ts (#34802) 2025-02-14 11:58:37 +01:00
Dmitry Gozman e6b405c012
chore: show gha pull request title instead of a merge commit (#34781) 2025-02-14 09:32:06 +00:00
Playwright Service 32c299c89d
feat(chromium): roll to r1159 (#34780)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2025-02-14 09:33:55 +01:00
Playwright Service e276d92dd3
feat(chromium-tip-of-tree): roll to r1303 (#34783)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-14 09:33:27 +01:00
Pavel Feldman 7f742a04b0
chore: make client compile for web (#34792) 2025-02-13 18:33:17 -08:00
Pavel Feldman 4a9b336168
chore: for not use Node's events in client (#34791) 2025-02-13 16:46:24 -08:00
Yury Semikhatsky 6833b664e3
test: update modernizr expectations with actual mobile Safari 18.3 values (#34789) 2025-02-13 16:37:15 -08:00
Pavel Feldman 163aacf4b6
chore: allow client operation w/o local utils (#34790) 2025-02-13 16:15:11 -08:00
Pavel Feldman 90ec838318
chore: move zones into platform (#34786) 2025-02-13 13:06:03 -08:00
Pavel Feldman 9ecf2f69ba
chore: move pipe transport utils to server/ (#34787) 2025-02-13 12:30:53 -08:00
Yury Semikhatsky e03402f7a7
chore(bidi): implement setInputFile(FilePayload) (#34785) 2025-02-13 12:11:05 -08:00
Playwright Service 5028fb6270
chore(driver): roll driver to recent Node.js LTS version (#34776)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-13 12:09:18 +01:00
Playwright Service ea67eca5be
feat(webkit): roll to r2134 (#34754)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-13 10:05:41 +01:00
Pavel Feldman ded909c13f
chrome: restore colors enabled/levels logic (#34767) 2025-02-12 21:13:25 -08:00
Pavel Feldman 3d760b657b
chore: move debug, env and user agent from utils/ (#34766) 2025-02-12 19:27:24 -08:00
Yury Semikhatsky 6951e6ad9d
chore(bidi): move private handle conversion to execution context (#34765) 2025-02-12 18:14:39 -08:00
Yury Semikhatsky bab197b493
test: adjust bidi browser name in browsertype-connect.spec (#34758) 2025-02-12 18:04:42 -08:00
Pavel Feldman e697b1a663
chore: remove stackTrace => path dependency (#34763) 2025-02-12 18:03:23 -08:00
Pavel Feldman c31ce783b7
chore: move event utils to server (#34761) 2025-02-12 15:22:10 -08:00
Pavel Feldman 0eeba380f2
chore: move crypto to server/util/ (#34759) 2025-02-12 14:43:52 -08:00
Yury Semikhatsky c2c336b97d
chore(bidi): implement setInputFiles (#34757) 2025-02-12 12:49:05 -08:00
Yury Semikhatsky 0bd3a99f04
tests: put filechooser and setInputFiles tests into separate files (#34756) 2025-02-12 12:28:19 -08:00
Yury Semikhatsky 148af21540
chore(bidi): implement getOwnerFrame (#34755) 2025-02-12 10:53:03 -08:00
Pavel Feldman f54478a23e
chore: move utils that are user in server to server/utils (3) (#34739) 2025-02-12 09:34:01 -08:00
Yury Semikhatsky 703ca9f851
Revert "chore(bidi): use fractional coordinates for pointerAction (#3… (#34753) 2025-02-12 09:00:01 -08:00
Dmitry Gozman 8eb816b363
fix(trace): do not save trace on failure after success in test+hooks (#34724) 2025-02-12 15:41:16 +00:00
Simon Knott 1ad7aad5fb
fix: prompt should mention contents (#34746) 2025-02-12 15:44:45 +01:00
Adam Gastineau 0501f8c132
chore(html-report): make scrollbar gutter stable (#34732) 2025-02-12 05:55:36 -08:00
Simon Knott b7785e1662
feat(runner): enable gitCommitInfo by default on GH Actions (#34743) 2025-02-12 14:51:00 +01:00
Dmitry Gozman 3e976e9f10
chore(chromium): re-enable PlzDedicatedWorker feature (#34400) 2025-02-12 13:22:35 +00:00
Max Schmitt c052627138
fix: allow empty userDataDir (#34730) 2025-02-12 14:21:57 +01:00
Pavel Feldman bd74fc4964
chore: move utils that are user in server to server/utils (2) (#34736) 2025-02-11 17:19:27 -08:00
Pavel Feldman 25a168fae5
chore: move utils that are user in server to server/utils (1) (#34734) 2025-02-11 15:40:41 -08:00
Yury Semikhatsky 934600b24b
test: reenable 2 screenshot tests on wk mac (#34735) 2025-02-11 15:21:15 -08:00
Yury Semikhatsky 6004865ee5
chore(tests): respect BIDIPATH in browsertype-connect.spec.ts (#34733) 2025-02-11 14:03:16 -08:00
JacksonLei123 5a76b17c87
feat: add failOnStatusCode option to API request context (#34346) 2025-02-11 13:23:11 -08:00
Pavel Feldman 46b048f018
chore: vendor stack utils (#34719) 2025-02-11 12:53:08 -08:00
Yury Semikhatsky 8e51be9069
chore(bidi): use fractional coordinates for pointerAction (#34675) 2025-02-11 12:09:48 -08:00
Simon Knott 8ed2f4319e
chore: add pageSnapshot option (#34669) 2025-02-11 11:04:57 -08:00
Udaiveer Pradhan d2e7e8acdb
fix(ui-mode): Watch mode button doesn't show active when test selected (#34581) 2025-02-11 10:32:39 -08:00
Playwright Service 3ae39166c2
feat(chromium-tip-of-tree): roll to r1302 (#34726)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-11 17:40:52 +01:00
Max Schmitt 416c9b3368
fix: allow relative userDataDir (#34710) 2025-02-11 17:40:00 +01:00
Pavel Feldman 72cd6f06aa
chore: prework for web ws connection (#34718) 2025-02-11 08:28:28 -08:00
Adam Gastineau 91f46bb5d0
chore(html-report): clean up git metadata display (#34713) 2025-02-11 05:16:46 -08:00
dependabot[bot] 6704370c3f
chore(deps-dev): bump esbuild from 0.18.20 to 0.25.0 (#34721)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-11 12:27:59 +01:00
Simon Knott 2eb6cbe357
chore: improve fix test prompt (#34709) 2025-02-11 08:40:46 +01:00
Pavel Feldman 51f944d16a
chore: extract pipe->connection code (#34689) 2025-02-10 15:04:33 -08:00
Pavel Feldman 2718ce7cbf
chore: short-cut localUtils usage in JS client (#34690) 2025-02-10 14:19:58 -08:00
Adam Gastineau ad6444e14c
chore(test): perform action to guarantee URL updates (#34714) 2025-02-10 12:57:25 -08:00
Adam Gastineau aeed1f5909
fix(runner): display no projects error across all test modes (#34676) 2025-02-10 12:52:53 -08:00
Playwright Service 71c7f465a0
feat(webkit): roll to r2132 (#34697) 2025-02-10 11:36:45 -08:00
Pavel Feldman 5d500dde22
chore: introduce platform for client (1) (#34683) 2025-02-10 10:22:32 -08:00
Simon Knott 0672f1ce67
feat(ui): "fix with ai" button (#34708) 2025-02-10 17:47:27 +01:00
Simon Knott 2f8d448dbb
feat(html): "copy prompt" button (#34670) 2025-02-10 15:02:19 +01:00
Max Schmitt 703e077f4b
chore: fix recorder tsconfig linting (#34704) 2025-02-10 13:23:04 +01:00
Priyanshi Saxena 76b7b52c34
docs: source section doc updated (#34627)
Co-authored-by: ankursaxena17 <32309836+ankursaxena17@users.noreply.github.com>
2025-02-10 12:22:53 +00:00
Max Schmitt 967c4f5e3b
chore: fix Locator type issues (#34705) 2025-02-10 13:05:17 +01:00
Playwright Service 4c8af0128f
feat(chromium): roll to r1158 (#34702)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2025-02-10 12:33:37 +01:00
Playwright Service a95186a373
feat(firefox): roll to r1475 (#34695)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-10 09:12:50 +01:00
Playwright Service f11ed1beab
feat(chromium-tip-of-tree): roll to r1301 (#34696)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-10 09:12:07 +01:00
Pavel Feldman 88c01434c6
chore: fix locator type check (#34682) 2025-02-07 14:53:28 -08:00
Pavel Feldman d5d47f2b6e
chore: organize imports in packages (#34681) 2025-02-07 14:44:00 -08:00
Pavel Feldman 4a7f6a6ef0
chore: organize imports in playwright-core (#34680) 2025-02-07 13:54:01 -08:00
Adam Gastineau 4bc8cf0d47
feat(recorder): display primary page URL in recorder title (#34637) 2025-02-07 12:05:04 -08:00
Simon Knott 893e7bbf3b
chore: add _browserTypes helpers to playwright (#34611) 2025-02-07 15:43:08 +01:00
Max Schmitt 9e433060fe
test: keep testing React 18 (#34671) 2025-02-07 12:24:53 +01:00
Simon Knott bc8d6ce344
feat: provide commit diff to HTML reporter (#34653)
Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2025-02-07 10:39:08 +01:00
Simon Knott fd24521f2e
chore: add page snapshot on test end (#34573)
Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Yury Semikhatsky <yurys@chromium.org>
2025-02-07 09:02:20 +01:00
Pavel Feldman 7da3be4a1a
chrome: update eslint 9 (#34666) 2025-02-06 19:48:27 -08:00
Henrik Skupin 6fddefde81
chore(bidi): pointerMove action needs to floor fractional values for x and y position (#34191) 2025-02-06 16:17:50 -08:00
Max Schmitt 8accb0ad1b
test: change ct-vite projects to type: module (#34662) 2025-02-06 23:11:06 +01:00
Yury Semikhatsky 34d9d4fc33
chore(html-report): show run duration for each retry (#34647) 2025-02-06 13:30:25 -08:00
Yury Semikhatsky 3d3154de86
chore(tracing): look up snapshot resources only in the same context (#34645) 2025-02-06 12:38:51 -08:00
Max Schmitt 427d7a22ea
Revert "chore: tidy up headless-shell hacks (#33967)" (#34659) 2025-02-06 19:17:20 +01:00
Simon Knott 902e83fe87
fix: allow opt out from IndexedDB in storagestate (#34650) 2025-02-06 16:40:14 +01:00
Dmitry Gozman 8d751cfe50
fix(fetch): filter out undefined params (#34654) 2025-02-06 15:16:45 +00:00
Simon Knott 365f411548
test(storageState): IndexedDB with keyPath (#34648) 2025-02-06 12:39:19 +01:00
Simon Knott 2b5493219b
chore: document typed array limitation (#34649) 2025-02-06 12:39:07 +01:00
Simon Knott 1c7436ec2f
chore: remove dead code (#34651) 2025-02-06 11:39:10 +01:00
Simon Knott 7aac96d780
chore: add encoded versions of IndexedDB key/value (#34630) 2025-02-06 09:48:30 +01:00
Pavel Feldman 11e1b8f30a
chore: fallback to the original code after babel transform (#34635) 2025-02-05 14:03:31 -08:00
Yury Semikhatsky 7f09ba7fa4
feat: step.attach() (#34614) 2025-02-05 12:27:44 -08:00
Pavel Feldman 4b64c47a25
chore: use explicit matcher call context (#34620) 2025-02-05 10:57:33 -08:00
Playwright Service 25ef2f1344
feat(webkit): roll to r2130 (#34631) 2025-02-05 09:05:10 -08:00
Yury Semikhatsky f1a392f844
chore: do not store empty step.attachments[] in trace (#34579) 2025-02-05 08:30:03 -08:00
Adam Gastineau cb208836b5
fix: display error when project is not found (#34577) 2025-02-05 06:58:02 -08:00
Adam Gastineau 50f22f13a4
docs: document config executing multiple times (#34576) 2025-02-05 06:10:32 -08:00
Simon Knott 311625b891
feat: recreate IndexedDB in storagestate (#34591) 2025-02-05 15:01:53 +01:00
Yury Semikhatsky fb3e8ed114
fix: reset APIRequestContext network trace between chunks (#34616) 2025-02-05 08:00:04 +00:00
Playwright Service 11913e6f39
feat(webkit): roll to r2127 (#34599) 2025-02-04 17:03:14 -08:00
Atsushi Kawamura (atzz/a2c) dc14490f13
docs: remove unnecessary hyphens in CircleCI's sharding example (#34609) 2025-02-04 15:38:39 +00:00
Playwright Service 50e1a8b55b
feat(chromium-tip-of-tree): roll to r1300 (#34610)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-04 16:06:35 +01:00
Simon Knott 5d82567346
feat: emulate prefers-contrast (#34494) 2025-02-04 11:15:51 +01:00
Max Schmitt 96d4dc1eda
docs: add backlink from WebSocket to WebSockeRoute (#34600) 2025-02-03 19:42:38 +01:00
Yury Semikhatsky f11f4a8477
docs: breaking changes in java 1.50 (#34601) 2025-02-03 09:39:33 -08:00
Adam Gastineau 5996a0df0a
Revert "Revert "chore(docs): clarify connection method via BrowserType.connect (#34560)" (#34594)" (#34595) 2025-02-03 06:21:00 -08:00
Max Schmitt 340834195b
docs: v1.50 release notes for ports (#34592)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Simon Knott <info@simonknott.de>
2025-02-03 15:17:19 +01:00
Max Schmitt 3d5f85d7e4
Revert "chore(docs): clarify connection method via BrowserType.connect (#34560)" (#34594) 2025-02-03 14:24:33 +01:00
Simon Knott ebf82b0854
test: ensure that attachments are available in onStepEnd (#34590) 2025-02-03 13:54:28 +01:00
Max Schmitt 4e2d82e6c2
test: add test for color input click behavior (#34156) 2025-02-03 13:30:54 +01:00
Playwright Service 36478f250a
feat(firefox): roll to r1474 (#34587)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-03 12:04:12 +01:00
Playwright Service 162182b714
feat(firefox-beta): roll to r1470 (#34589)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-03 10:47:37 +01:00
Yury Semikhatsky cd7f3b6e65
devops: validate js code snippets in flint (#34580) 2025-01-31 16:52:55 -08:00
Yury Semikhatsky a1451c75f8
feat: conditional step.skip() (#34578) 2025-01-31 15:45:57 -08:00
Yury Semikhatsky da12af24c2
chore: harden trace file regex (#34563) 2025-01-31 15:34:53 -08:00
Playwright Service 399ba91150
feat(chromium-tip-of-tree): roll to r1299 (#34569)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-01-31 19:35:12 +01:00
Playwright Service 64f8689a81
feat(chromium): roll to r1157 (#34571)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-01-31 13:15:40 +01:00
GeneratorX16 4fa1d39c80
fix: Reverse Lumia 550 and Lumia 550 Landscape viewports (#34548) 2025-01-30 13:57:43 -08:00
Adam Gastineau 1936cfa6c3
chore(docs): clarify connection method via BrowserType.connect (#34560) 2025-01-30 12:31:59 -08:00
Debbie O'Brien d288fbcc41
docs: Improve aria snapshots documentation clarity and examples (#34509)
Signed-off-by: Debbie O'Brien <debs-obrien@users.noreply.github.com>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2025-01-30 20:07:48 +00:00
Dmitry Gozman ab62ef2dbb
fix(toMatchAriaSnapshot): fail test run when updating missing snapshot (#34556) 2025-01-30 19:18:07 +00:00
Adam Gastineau 5afb04b62e
fix(ui): add proper CORS header for loading traces in HMR mode (#34558) 2025-01-30 09:20:43 -08:00
Max Schmitt 833c729eb0
docs: roll follow-ups for .NET and Python (#34550) 2025-01-30 12:06:56 +01:00
Pavel Feldman eff5cd6dbb
fix(aria): disregard text area textContent (#34544) 2025-01-29 16:06:07 -08:00
Pavel Feldman 4b5b326478
chore: do not show steps in line reporter without tty (#34529) 2025-01-29 12:41:09 -08:00
Adam Gastineau f15171bcf0
fix(ui): don't display "Timed Out" when executing action (#34541) 2025-01-29 12:39:05 -08:00
Dmitry Gozman ba650161a8
feat: per-assertion snapshot path template in config (#34537) 2025-01-29 18:47:20 +00:00
Playwright Service b552637ee0
feat(chromium-tip-of-tree): roll to r1298 (#34540)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-01-29 18:29:23 +01:00
Dmitry Gozman 24f06ec1bf
feat(html report): show metadata (#34517) 2025-01-29 16:22:50 +00:00
Max Schmitt 6c2c90203e
devops(gha): allow workflow_dispatch in roll browser script (#34531)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2025-01-29 17:16:50 +01:00
Dmitry Gozman 7d8265e610
Revert "Reapply "fix(har timing): record connect timing for proxied connections" (#32855) (#33003)" (#34535) 2025-01-29 14:51:31 +00:00
Andrey Lushnikov b419527aab
fix(firefox): disable fetch keep-alive for now before a proper fix (#34530) 2025-01-29 09:50:32 +00:00
Pavel Feldman 931b9f28cd
fix(codegen): attribute navigation to press/fill (#34528) 2025-01-28 17:59:16 -08:00
Pavel Feldman 391e9c4de0
fix(recorder): do not reset inspect highlight on inactivity (#34526) 2025-01-28 16:00:28 -08:00
Pavel Feldman 7060cd1bf7
chore: allow repetative application of rebaselines in the same session (#34524) 2025-01-28 14:37:47 -08:00
Pavel Feldman 7fd0c3e254
fix: follow the pseudo attr value in firefox computed style (#34525) 2025-01-28 14:37:04 -08:00
Danilo Akamine b27945d045
docs: remove duplicate reference (#34513) 2025-01-28 22:33:04 +01:00
Dmitry Gozman 7fc252fffc
test: fetch request through socks proxy over ipv4 (#34522) 2025-01-28 17:05:12 +00:00
Adam Gastineau 63f96efbe0
feat(trace-viewer): display query string in network tab (#34505) 2025-01-28 05:19:30 -08:00
Vitaliy Potapov 61d595ae48
feat: add new config prop populateGitInfo (#34329)
Co-authored-by: Yury Semikhatsky <yurys@chromium.org>
2025-01-28 07:54:31 +00:00
Pavel Feldman cea5dad686
chore: remove eslint-plugin-internal-playwright (#34510) 2025-01-27 20:13:27 -08:00
Pavel Feldman ab01dccf9d
chore: clean up tool example (#34512) 2025-01-27 20:13:18 -08:00
Pavel Feldman 2c0576ea76
chore: mark tools package as private (#34511) 2025-01-27 15:32:45 -08:00
Pavel Feldman bd2fdd0f20
chore: land experimental tools (#34503) 2025-01-27 14:49:38 -08:00
ReaZzy eaaef29dbd
fix: add validations to --shard cli parameter (#34463) (#34479) 2025-01-27 14:31:14 -08:00
Henrik Skupin d63907fc5b
chore(bidi): Disable some external services for Firefox (#34492) 2025-01-27 13:17:03 -08:00
Max Schmitt bc1a8c2191
test: add test for fetch with keepalive: true on Firefox (#34498) 2025-01-27 15:39:59 +01:00
Max Schmitt 8d716b28a1
chore(bidi): use full test title in CSV expectations (#34496) 2025-01-27 14:17:47 +01:00
Max Schmitt 52580d640d
Revert "fix(ci): Prevent workflows from automatically running on forks (#34408)" (#34488) 2025-01-27 14:03:19 +01:00
Dmitry Gozman 640e6a8aa7
chore: remove unused headers (#34491) 2025-01-27 09:58:19 +00:00
Pavel Feldman 245f4b5b86
fix: allow changed to be passed in config (#34473) 2025-01-24 15:42:58 -08:00
Playwright Service 3d9a9d2405
feat(firefox): roll to r1472 (#34455) 2025-01-24 15:17:14 -08:00
Playwright Service c815d090bc
feat(firefox-beta): roll to r1468 (#34454) 2025-01-24 15:16:18 -08:00
Alexandra Borovova 2afe287a81
Add canonical screenshots for firefox with webdriver bidi for screenshot element tests (#34289) 2025-01-24 15:15:24 -08:00
Yury Semikhatsky fb145d5ebd
test: do not check deprecated KeyboardEvent.keyCode property (#34472) 2025-01-24 15:09:39 -08:00
Adam Gastineau fccb2b0784
chore: fix codegen SIGINT test (#34468) 2025-01-24 14:21:42 -08:00
Henrik Skupin 9d91d7a1e9
chore(firefox): Don't upgrade HTTP requests to HTTPS (#34465) 2025-01-24 13:36:23 -08:00
Adam Gastineau b39c29d096
docs: remove toMatchAriaSnapshot path feature (#34471) 2025-01-24 21:16:58 +01:00
Yury Semikhatsky dcff914040
chore(bidi): make browserType.connect work (#34461) 2025-01-24 09:09:57 -08:00
Adam Gastineau c44590aa5b
chore: disable popover test on Darwin 13.7 WebKit (#34466) 2025-01-24 08:27:06 -08:00
Playwright Service bbd55587e4
feat(chromium): roll to r1156 (#34464)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-01-24 15:40:46 +01:00
Adam Gastineau f65dc0cee4
feat: toHaveURL predicate matcher (#34413) 2025-01-24 06:00:17 -08:00
Yury Semikhatsky f11768436a
chore: revert inadvertent test change (#34459) 2025-01-23 12:12:53 -08:00
Pavel Feldman bfb79990da
docs: issue guide (#34457) 2025-01-23 12:12:13 -08:00
Pavel Feldman 039f513744
docs: auto generate evaluate usage docs (#34458) 2025-01-23 12:11:54 -08:00
Playwright Service 04c03b998a
feat(webkit): roll to r2125 (#34453)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-01-23 18:37:42 +01:00
Playwright Service 2cf6153d9f
feat(chromium-tip-of-tree): roll to r1297 (#34451)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-01-23 16:40:15 +01:00
Debbie O'Brien 900382540a
docs: add --update-source-method option for snapshot updates in test-cli-js (#34448) 2025-01-23 14:17:23 +00:00
Dmitry Gozman ab3b4b8cd0
fix(test runner): respect updateSourceMethod from the config (#34442) 2025-01-23 12:11:26 +00:00
Playwright Service a9609ed6f2
chore(driver): roll driver to recent Node.js LTS version (#34440) 2025-01-23 11:30:12 +01:00
Henrik Skupin 34cb35859a
chore(bidi): simplify launcher tests for Firefox (#34405) 2025-01-22 13:06:24 -08:00
Adam Gastineau a06600aee9
chore: roll stable-test-runner to: 1.50.0-beta-1737557690000 (#34433) 2025-01-22 12:46:25 -08:00
Adam Gastineau a121f85ce9
chore: update browser patches to 2e93a0b95 (#34426) 2025-01-22 09:56:34 -08:00
Adam Gastineau 256dc47833
docs: switch gracefulShutdown to primarily mention SIGTERM and add Docker comment (#34430) 2025-01-22 09:49:34 -08:00
Max Schmitt 85e41f5b65
docs: update README for flakiness dashboard function update (#34424) 2025-01-22 16:33:19 +01:00
Adam Gastineau b75fc4c547
fix(ci): Prevent workflows from automatically running on forks (#34408) 2025-01-22 07:05:34 -08:00
Adam Gastineau 7e97e01505
docs: release notes for v1.50 js (#34380) 2025-01-22 06:20:24 -08:00
Adam Gastineau 49b3bbb920
docs: release notes for v1.50 js (#34380) 2025-01-22 06:17:54 -08:00
dependabot[bot] a689e534ac
chore(deps): bump vite from 5.4.6 to 5.4.14 (#34420)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-22 14:23:05 +01:00
dependabot[bot] 214b103b46
chore(deps-dev): bump undici from 5.28.4 to 5.28.5 (#34419)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-22 15:52:00 +03:00
Dmitry Gozman cf90c0f122
fix(aria snapshot): make rebase work when options are specified (#34409) 2025-01-22 07:53:53 +00:00
Playwright Service cf3bcd7d4a
feat(chromium-tip-of-tree): roll to r1296 (#34414)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-01-22 08:21:47 +03:00
Tasawar Hussain 6234c3b15e
docs: update test-fixtures-js.md (#34399) 2025-01-21 13:50:33 -08:00
Dmitry Gozman 888feb06be
fix(list reporter): do not break after output without trailing eol (#34410) 2025-01-21 18:30:09 +00:00
Dmitry Gozman 333e994e7d
fix(step.skip): show a skipped indicator in UI mode (#34407) 2025-01-21 18:28:41 +00:00
Dmitry Gozman e20b6d1617
feat(chromium-tip-of-tree): roll to r1295 (#34372) 2025-01-20 16:28:41 +00:00
Simon Knott 99fb188cb4
chore: move attachment link back to tree item, make it flash yellow (#34353) 2025-01-20 09:06:01 +01:00
Max Schmitt 86768b9ebc
test: add test for consistent hyphen rendering in headless/headed (#34159) 2025-01-18 19:04:56 +03:00
Yury Semikhatsky 372d4196d7
chore: step timeout improvements (#34386) 2025-01-17 21:15:47 -08:00
Pavel Feldman 9970446f51
chore: remove toMatchAriaSnapshot.path (#34379) 2025-01-17 14:35:15 -08:00
Henrik Skupin d082805ea9
chore(bidi): disable thottling of background tabs in Firefox (#34381) 2025-01-17 14:29:26 -08:00
Adam Gastineau 3c160df06a
chore: mark v1.51.0-next (#34382) 2025-01-17 12:34:59 -08:00
Pavel Feldman 1b21ec9cd8
chore: remove --save-trace codegen option (#34362) 2025-01-17 10:17:49 -08:00
Pavel Feldman b339d457e3
chore: dogfood jest-style aria snapshots (#34365) 2025-01-17 10:17:26 -08:00
Dmitry Gozman 07bcbcd1b4
feat(chromium): roll to r1155 (#34371) 2025-01-17 10:45:58 +00:00
Yury Semikhatsky 40b92eaf2a
docs: remove toMatchAriaSnapshot({path}) from language ports (#34363) 2025-01-16 16:56:13 -08:00
Yury Semikhatsky 5438814975
chore: do not fall back to previous LTS release deps for new Ubuntu LTS (#34360) 2025-01-16 15:20:40 -08:00
Yury Semikhatsky 587e778a5a
Revert "feat(aria): extend toHaveAccessibleName() to accept an array … (#34361) 2025-01-16 15:04:56 -08:00
Pavel Feldman 3cf0461a1a
chore: fix the scrollable locator tab (#34358) 2025-01-16 13:20:20 -08:00
Adam Gastineau 84bbc5fd35
feat(trace-viewer): Render context string for most actions (#34292) 2025-01-16 11:48:34 -08:00
Dmitry Gozman be6caed8df
chore: remove expectZone (#34312) 2025-01-16 18:53:32 +00:00
Pavel Feldman 08af3a2f06
chore: do not cache highlight agressively (#34349) 2025-01-16 08:27:48 -08:00
Yury Semikhatsky 00bb17751b
chore: delete recorder in traceviewer experiment (#34347) 2025-01-15 17:37:33 -08:00
Yury Semikhatsky 8d39c44b69
docs: improve toHaveClass paramter description (#34345) 2025-01-15 14:38:34 -08:00
Yury Semikhatsky 07f425434d
chore(bidi): support ControlOrMeta key (#34341) 2025-01-15 13:23:44 -08:00
Yury Semikhatsky 224d7bf847
fix(docker): install gpg on slim images (#34340) 2025-01-15 12:03:19 -08:00
Dmitry Gozman 4d55d3039a
chore: better error message when CSS selector fails to parse (#34331) 2025-01-15 11:34:51 -08:00
Dmitry Gozman aeec0c0e36
fix(test runner): esm loader in old Node versions (#34330) 2025-01-15 14:45:10 +00:00
Yury Semikhatsky 275f334b58
chore(step): remove step.fail and step.fixme, add step.skip (#34326) 2025-01-14 17:43:47 -08:00
Julian Descottes 0869195ba4
chore(bidi): Stop dividing BiDi network event timings by 1000 (#34324) 2025-01-14 15:27:49 -08:00
Yury Semikhatsky 8699d3b9c5
test(bidi): create inspected page before initializing recorder (#34323) 2025-01-14 14:57:42 -08:00
Pavel Feldman b0f0a2951a
docs: improve aria overload docs (#34319) 2025-01-13 18:25:57 -08:00
Pavel Feldman ad365c3bc3
chore: include child nodes when parsing snapshot (#34318) 2025-01-13 18:25:41 -08:00
Pavel Feldman fe96104ce2
docs: clarify updateSourceMethod (#34314) 2025-01-13 18:25:32 -08:00
Rui Figueira 9a9d22af44
feat(codegen): include framePath in jsonl format (#34310) 2025-01-13 17:32:26 -08:00
Playwright Service dfe80bb888
feat(firefox): roll to r1471 (#34309) 2025-01-13 17:26:26 -08:00
Yury Semikhatsky 2b2e84971f
chore(bidi): use original key name when computing bidi value (#34317) 2025-01-13 17:22:00 -08:00
Playwright Service d2e7ad38d5
feat(firefox-beta): roll to r1467 (#34303) 2025-01-13 13:58:34 -08:00
Julian Descottes 454b6f938d
test(bidi): Update browserName used for har file tests when using bidi (#34313) 2025-01-13 13:56:00 -08:00
Playwright Service 6b73ec6092
feat(webkit): roll to r2123 (#34260) 2025-01-13 13:53:18 -08:00
Zachary Blackwood f74a4d55cd
Fix typo "fore" -> "for" (#34315) 2025-01-13 12:30:19 -08:00
Simon Knott a33659f2a8
chore: move attachments link to step body (#34196) 2025-01-13 10:07:54 +01:00
Playwright Service 19c935cde7
feat(firefox): roll to r1470 (#34304) 2025-01-13 09:05:33 +03:00
Pavel Feldman 6179b5b1d7
chore: allow matching aria snapshot in trace viewer (#34302) 2025-01-11 10:14:21 -08:00
Pavel Feldman 0c8a6b80fb
chore: consolidate aria parser in isomorphic bundle (#34298) 2025-01-10 15:32:35 -08:00
Andrey Lushnikov 4bb464197f
test: unflake a few trace-viewer tests (#34299) 2025-01-10 14:57:50 -08:00
Andrey Lushnikov 2cd5003062
test: fix "should capture navigation" flakiness on firefox-headed (#34291) 2025-01-10 13:51:28 -08:00
Yury Semikhatsky 423005a7ab
chore(bidi): create parent dir for report.csv (#34294) 2025-01-10 13:43:43 -08:00
Dmitry Gozman f0a3a15e93
chore: explicitly reset apiZone instead of everything (#34265) 2025-01-10 20:15:05 +00:00
Dmitry Gozman 1f2eb499d2
fix(aria snapshots): normalize whitespace (#34285) 2025-01-10 19:31:47 +00:00
Julian Descottes 4f3a5e2133
chore(bidi): Fix handling of cookie headers in network.continueRequest (#34277) 2025-01-10 11:06:26 -08:00
Julian Descottes ca94291ab7
chore(bidi): Handle headers properly in BiDi network.continueRequest (#34268) 2025-01-10 10:15:38 -08:00
Henrik Skupin 89172175d6
Improve WebDriver BiDi key codes (#34286) 2025-01-10 09:19:28 -08:00
Adam Gastineau a2e2dfd446
feat: Enable snapshots for most remaining public commands (#34072) 2025-01-10 05:04:44 -08:00
Dmitry Gozman b32d546159
test: attempt to unflake vscode highlight tests (#34267) 2025-01-10 09:52:39 +00:00
Simon Knott 75d2661497
docs: fix android launchBrowser.pkg option (#34262) 2025-01-10 10:51:29 +01:00
Pavel Feldman 13bdd3c92f
feat(toBeChecked): allow indeterminate expectation (#34269) 2025-01-09 18:18:15 -08:00
Yury Semikhatsky 37c2569eb2
fix(inspector): do not start recording by default (#34276) 2025-01-09 14:58:41 -08:00
Yury Semikhatsky cd9d02faf9
chore: remove setAutoCloseAllowed (#34273) 2025-01-09 14:16:01 -08:00
Yury Semikhatsky 201fc48cf0
chore(bidi): write custom expectations only for timing out tests (#34270) 2025-01-09 11:10:14 -08:00
Alexandra Borovova c465e21161
chore(bidi): add missing canonical screenshots for tests running with Firefox and WebDriver BiDi (#34257) 2025-01-09 10:36:59 -08:00
Adam Gastineau 01ba528904
fix: Prepare CI to properly run Electron on ubuntu-latest (24.04) (#34238) 2025-01-09 06:34:59 -08:00
Playwright Service 9b58e4a93a
chore(driver): roll driver to recent Node.js LTS version (#34261) 2025-01-09 13:53:41 +03:00
Ben Hovinga 9f32c858e0
Fix typo (#34225) 2025-01-08 11:22:41 -08:00
Yury Semikhatsky edfbab2a79
fix: dispatch touch events in webkit (#34250) 2025-01-08 11:06:30 -08:00
Dmitry Gozman 7ee7e018fa
chore: update chrome extensions doc and tests (#34236) 2025-01-08 17:24:29 +00:00
JustasM d6d5944797
fix(ui): fix washed out dropdown colors in dark mode (#34186) 2025-01-08 06:14:22 -08:00
Adam Gastineau ada68cd6f0
feat(trace-viewer): Add setting for display canvas content in snapshots (#34010) 2025-01-08 05:08:00 -08:00
Yury Semikhatsky ff9242104b
docs: touch events emulation guide (#34201) 2025-01-07 16:47:00 -08:00
Yury Semikhatsky 6fb6282a9d
chore(bidi): propertly dispatch ControlRight key event (#34246) 2025-01-07 16:46:44 -08:00
Yury Semikhatsky 809225503c
docs: remove note about DataTrander limited availability (#34243) 2025-01-07 15:42:10 -08:00
Pavel Feldman 0d34369fc0
chore: include actual value in the elementState (#34245) 2025-01-07 15:31:18 -08:00
Yury Semikhatsky 0008816ee3
test: reenable "return empty content there is no iframe src" in cr and ff (#34241) 2025-01-07 11:49:14 -08:00
Pavel Feldman 7923d35e32
fix(retarget): do not unconditionally retarget to enclosing label (#34229) 2025-01-07 11:15:00 -08:00
Pavel Feldman 9514f0fb9d
fix(aria): escape leading dash in property values (#34227) 2025-01-07 11:14:45 -08:00
Playwright Service d2af88c1fe
feat(chromium-tip-of-tree): roll to r1293 (#34234)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-01-07 21:43:05 +03:00
Dmitry Gozman 63329a3471
chore: remove dependency from library on expectZone, straighten csi handling (#34211) 2025-01-07 13:30:04 +00:00
Simon Knott 527505e67b
docs: be more precise in what versions of Node.js are supported (#34231)
Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2025-01-07 14:23:27 +01:00
Yury Semikhatsky ec79f28ffe
chore(bidi): keep custom expectations only for timing out tests (#34228) 2025-01-06 17:36:49 -08:00
Yury Semikhatsky a9e6b51108
chore(bidi): implement query selector all ($$) method (#34226) 2025-01-06 16:37:11 -08:00
Pavel Feldman 4e8c83055f
chore: split output clients by capabilities and base dir (#34135) 2025-01-06 11:03:35 -08:00
Dmitry Gozman eeca68ba97
test: unflake some cookie tests in msedge (#34217) 2025-01-05 18:19:28 +00:00
Yury Semikhatsky 5a22475ea8
chore(bidi): fix signals tests (#34209) 2025-01-03 12:37:28 -08:00
Yury Semikhatsky 8b45ea6f2f
chore: properly initialize Touch arguments in TouchEvent (#34200) 2025-01-03 12:16:01 -08:00
Yury Semikhatsky dca95ba609
fix(bidi): set initial frame url from creation event (#34198) 2025-01-03 10:39:32 -08:00
Simon Knott 6bdd2694ee
feat(webserver): customize shutdown with new gracefulShutdown option (#34130)
Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2025-01-03 11:34:34 +01:00
Simon Knott 04a3574f80
feat(reporter): report TestStep#attachments (#34037) 2025-01-02 17:48:59 +01:00
Max Schmitt 175f05cafc
test: increase page-event-crash timeout (#34178) 2025-01-02 16:04:51 +01:00
David Gahnassia acdd666d95
docs(test-fixtures): removed redundancy (#34185) 2025-01-02 06:17:22 +01:00
Playwright Service 546b7b702c
feat(webkit): roll to r2122 (#34180)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-01-02 06:16:46 +01:00
Playwright Service da52befea0
feat(chromium-tip-of-tree): roll to r1291 (#34182)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-01-02 06:16:04 +01:00
Yury Semikhatsky 7769010e6e
chore(bidi): mark test expected to timeout as fixme (#34176) 2024-12-31 13:18:25 -08:00
Max Schmitt b2cbe7f2ec
chore(roll): roll WebKit to r2121 (#34179) 2024-12-31 11:22:10 +01:00
Henrik Skupin 940230d43a
Use csvReporter as well when running BiDi tests locally (#34167) 2024-12-30 14:48:22 -08:00
Dmitry Gozman cd32d1b08c
fix(test runner): apply --last-failed after sharding (#34166) 2024-12-30 18:45:49 +00:00
Henrik Skupin cab2bc4e2a
Combine file name and test name to a single identifier for CSV export of BiDi results (#34172) 2024-12-30 10:06:00 -08:00
Dmitry Gozman 9dbe63636d
fix(routeWebSocket): should work after context reuse (#34165) 2024-12-30 10:00:10 -08:00
Max Schmitt 4819747c85
chore: keep linting generated files (#34150) 2024-12-27 10:00:59 +00:00
Pengoose 7f141b2c42
feat: expect(locator).toHaveAccessibleErrorMessage (#33904) 2024-12-27 09:54:16 +00:00
Playwright Service 3ec8ee7a9b
feat(chromium): roll to r1153 (#34118)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-12-27 08:51:06 +01:00
Playwright Service 08644003d2
feat(chromium-tip-of-tree): roll to r1290 (#34144)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-12-26 22:27:56 +01:00
Gautier Ben Aïm 1c8e6f0921
docs: fixed typo (#34129) 2024-12-21 18:59:50 +01:00
Yury Semikhatsky 03cf7429a4
chore(bidi): upload report.csv to azure (#34122) 2024-12-20 18:04:21 -08:00
Yury Semikhatsky cce8e8e0e5
chore(html): use api prefix to qualify public types (#34121) 2024-12-20 14:03:38 -08:00
Evan Cahill c89e213eff
docs: Use locator.first() in locator.or examples (#34106) 2024-12-20 13:23:01 -08:00
Yury Semikhatsky a74c488b25
docs: document --no-shell option (#34120) 2024-12-20 10:24:10 -08:00
Adam Gastineau 875436855e
chore(lint): Ensure EOL newlines (#34117) 2024-12-20 09:17:09 -08:00
Yury Semikhatsky 3bc72eb841
chore(bidi): disambiguate report.csv artifact name (#34110) 2024-12-20 08:58:15 -08:00
Adam Gastineau a8dfdc8ac5
chore(ui): Dialog UI for upcoming settings menu (#34058) 2024-12-20 08:43:12 -08:00
Adam Gastineau 05472f5ef6
feat: Add time information to Call and Network tabs in Trace Viewer (#33935) 2024-12-20 05:01:16 -08:00
Yury Semikhatsky cc98166aaa
chore(bidi): add csv report (#34107) 2024-12-19 22:59:24 -08:00
Pavel Feldman a94952b87f
chore: make ts happy with zip import (#34108) 2024-12-19 22:59:05 -08:00
Pavel Feldman 04e670c909
fix(locator): do not explode locators (#34104) 2024-12-19 15:34:54 -08:00
Max Schmitt b7a1cfd786
chore: move winldd to CDN (#34078) 2024-12-19 23:29:21 +01:00
Yury Semikhatsky d7a52347e5
chore(bidi): skip tooling tests (#34105) 2024-12-19 14:04:05 -08:00
Max Schmitt 61ce37cd53
test: use checkInstalledSoftwareOnDisk for itest (#34103) 2024-12-19 22:09:49 +01:00
Pavel Feldman 6505a3e34c
fix(yaml): escape to disambiguate yaml arrays (#34096) 2024-12-19 12:46:54 -08:00
Pavel Feldman ec1d3313c3
Revert "feat(fetch/network): add generic to json method" (#34098) 2024-12-19 12:46:39 -08:00
Henrik Skupin edd789780a
WebDriver BiDi: "browsingContext.captureScreenshot" accepts quality from 0 to 1 (#34097) 2024-12-19 12:26:01 -08:00
Adam Gastineau 7d3a188530
chore(ui): Clean up settings component for shared uses (#34090) 2024-12-19 12:14:58 -08:00
Max Schmitt 613f6c5f95
devops: run bidi tests for bidi changes (#34099) 2024-12-19 21:03:33 +01:00
Yury Semikhatsky 8e721fac85
chore(bidi): no retries on CI (#34080) 2024-12-19 11:55:10 -08:00
Volodymyr Momot 94ffbcb9c5
feat(fetch/network): add generic to json method (#34091) 2024-12-19 10:36:02 -08:00
Playwright Service 9c14cccc24
feat(chromium-tip-of-tree): roll to r1288 (#34092) 2024-12-19 17:17:29 +01:00
Playwright Service a239ab3048
feat(ffmpeg): roll to r1011 (#34079)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-12-19 10:17:42 +01:00
Max Schmitt 4c9a116aff
chore: move protocol to d.ts types only files (#34077) 2024-12-19 00:23:35 +01:00
Playwright Service bddbf8950e
feat(webkit): roll to r2120 (#34069) 2024-12-19 00:08:27 +01:00
Rui Figueira c2d057ba23
chore: add url option to routeFromHAR call if codegen launched with --save-har-glob (#34048) 2024-12-18 13:34:06 -08:00
Dmitry Gozman d9e5ca06bf
fix(remote server): allow local paths in extension mode (#34051) 2024-12-18 13:32:16 -08:00
Max Schmitt f7c99ee6e3
chore: update CDN endpoints (#34061) 2024-12-18 22:26:01 +01:00
Andrew Goldis c57155e30c
docs: explain globalSetup caveats for reporters (#34063) 2024-12-18 13:16:03 -08:00
Simon Knott 67bc484d8b
chore(ui): test that UI works behind proxy, take 2 (#33771) 2024-12-18 12:39:08 +01:00
Simon Knott 443b2a2bbc
fix: don't rely on requestAnimationFrame (#34065) 2024-12-18 11:41:48 +01:00
Playwright Service c9ae644e5f
feat(chromium-tip-of-tree): roll to r1287 (#34057) 2024-12-17 22:31:01 +01:00
Max Schmitt 52b2548612
chore: no @web imports from @web package (#34055) 2024-12-17 20:27:21 +01:00
Max Schmitt 43e46d63dd
chore: use recorder/html types for exported shared types (#34056) 2024-12-17 20:26:56 +01:00
Yury Semikhatsky 7ed60ccf7f
feat(test): step.fail and step.fixme modifiers (#34042) 2024-12-17 11:17:22 -08:00
Adam Gastineau aabbcbf41d
fix(trace-viewer): Fix network log flicker #33929 (#34036) 2024-12-17 05:24:22 -08:00
Yury Semikhatsky 7ce1a540bc
chore(bidi): skip only timeouts on CI (#34041) 2024-12-16 15:28:21 -08:00
Pavel Feldman 94d0fc780d
chore: make visible=false work (#34040) 2024-12-16 14:14:51 -08:00
Yury Semikhatsky b58a4762f4
docs: improve note on browser.close() behavior (#34039) 2024-12-16 13:52:17 -08:00
Yury Semikhatsky 76bb01d77c
chore: rephrase suggestion for slow test files (#34012) 2024-12-16 13:35:19 -08:00
Dmitry Gozman d4b2c966cf
fix(codegen): fallback to iframe[name/src] when failed to generate selector (#34030) 2024-12-16 17:37:53 +00:00
Simon Knott 512cb36c9b
feat(html): link from attachment step to attachment (#33267) 2024-12-16 15:25:32 +01:00
Adam Gastineau 6270918f67
docs: Moved Trace Viewer running instructions to the top of the page (#33956) 2024-12-16 05:18:54 -08:00
Dmitry Gozman aa1fe61cc9
fix(list reporter): do not print step location instead of test location (#34022) 2024-12-16 10:15:52 +00:00
Dmitry Gozman f713d3adaf
chore: simplify page initialization logic across browser types (#34002) 2024-12-14 20:15:58 +00:00
Pavel Feldman 1e4239f48d
chore: allow selecting update source type via test server (#34014) 2024-12-14 10:58:16 -08:00
Pavel Feldman 3a10c32d8a
chore: report highlight parse error to debug controller (#33984) 2024-12-13 16:10:59 -08:00
Pavel Feldman cbc809edc7
chore: recorder toolbar polish (#33983) 2024-12-13 16:10:45 -08:00
Yury Semikhatsky 369f4b76b3
fix: throw an error when object reference chain is to long to serialize (#34008) 2024-12-13 13:38:26 -08:00
Max Schmitt 91d4b82dfb
fix(pwt): custom fixture titles in UI Mode / HTML Reporter (#34009) 2024-12-13 12:31:38 -08:00
Max Schmitt e995ecd9b8
chore: add docs for experimental 'watch mode' (#33988) 2024-12-13 10:38:27 -08:00
Dmitry Gozman 258881bea1
test: fix should not transform external for newer Node versions (#34006) 2024-12-13 17:17:49 +00:00
Rui Figueira c700a8405c
feat(trace-viewer): render iframe canvas in trace viewer (#33809) 2024-12-13 16:28:06 +01:00
Max Schmitt 65688d623e
chore: update TypeScript to v5.7 (#33994) 2024-12-13 04:52:04 -08:00
Simon Knott dd36de7809
fix(html): encode all stdio attachments (#33950) 2024-12-13 12:01:20 +01:00
Playwright Service b0cec5b351
feat(chromium-tip-of-tree): roll to r1286 (#33991)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-12-12 19:22:48 -08:00
Playwright Service dd41930e72
feat(webkit): roll to r2119 (#33992)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-12-12 19:22:27 -08:00
Yury Semikhatsky 0034c6b984
fix: parse locator with empty options (#33990) 2024-12-12 17:49:48 -08:00
Yury Semikhatsky 76d46d478f
fix: text-is() should ignore comments (#33980) 2024-12-12 17:49:31 -08:00
Max Schmitt e4413f2089
docs: add docs for 'run-server' (#33989) 2024-12-12 16:23:13 -08:00
Max Schmitt 21c456b2c1
chore: remove vite default scripts in package.json's (#33986) 2024-12-12 15:37:53 -08:00
Max Schmitt 16a1552e74
chore: remove 'npx playwright debug' (#33987) 2024-12-12 15:25:13 -08:00
Max Schmitt 38758c0596
chore: tidy up headless-shell hacks (#33967) 2024-12-12 12:23:03 -08:00
Jozef Izso a4add6ebaf
Fix typo in AndroidServerLauncherImpl class when on device was found (#33973) 2024-12-12 11:12:58 -08:00
Max Schmitt aca00a4ab0
chore: update README/device descriptors after roll (#33982) 2024-12-12 11:06:14 -08:00
Playwright Service fc9f5a6f28
feat(chromium): roll to r1152 (#33977) 2024-12-12 09:04:17 -08:00
Pavel Feldman 29fd2df124
chore: send aria snapshot to the debug controller (#33969) 2024-12-12 08:21:53 -08:00
Pavel Feldman 0e2b984287
chore: prioritize role over label and placeholder (#33970) 2024-12-12 08:21:00 -08:00
Max Schmitt e3629dc1df
fix: validate ffmpeg on context creation (#33903) 2024-12-11 23:07:03 -08:00
Max Schmitt 081f455ee9
fix: headless-shell follow-up (#33968) 2024-12-11 19:28:39 -08:00
Max Schmitt 8d57b7543e
chore: introduce chromium-tip-of-tree-headless-shell (#33964) 2024-12-11 18:11:33 -08:00
Max Schmitt 217a0e9003
chore: bump https/socks proxy-agent (#33965) 2024-12-11 17:52:52 -08:00
Max Schmitt b12ede48fc
test: fix html-reporter tests after #33754 (#33966) 2024-12-11 17:49:16 -08:00
Bill Collins e4e562cac5
fix(types): Global JSX namespace is deprecated (#33949) 2024-12-11 17:09:19 -08:00
Yury Semikhatsky 22e58aa084
docs: clarify --only-shell option (#33961) 2024-12-11 13:06:48 -08:00
Yury Semikhatsky 9e683d798f
docs: clarify setDefaultTimeout with 0 value (#33959) 2024-12-11 13:06:37 -08:00
Yury Semikhatsky 856704a176
chore: run server with headless shell for connect tests (#33957) 2024-12-11 10:35:14 -08:00
Playwright Service 5a1bae0f19
feat(chromium-tip-of-tree): roll to r1285 (#33945)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-12-11 10:30:17 -08:00
Simon Knott 6d424875e3
fix(html): remove filter clear button (#33754) 2024-12-11 15:16:21 +01:00
Simon Knott ed2be67e47
chore(trace viewer): support HMR (#33609) 2024-12-11 13:25:52 +01:00
Adam Gastineau a14d9750b3
docs: #33837 Clarify that clock.install must precede clock operations (#33901) 2024-12-10 16:18:41 -08:00
Pavel Feldman 4bcf505e19
chore: prefer generating role with text to css with text (#33942) 2024-12-10 16:03:33 -08:00
Playwright Service 4745f64bc0
feat(webkit): roll to r2118 (#33938) 2024-12-10 14:29:30 -08:00
Pavel Feldman acf1107220
chore: ignore checkbox/radio value in aria (#33941) 2024-12-10 14:04:18 -08:00
Yury Semikhatsky 599b09c1c0
docs: sharding per file with multiple projects (#33939) 2024-12-10 14:02:13 -08:00
Yury Semikhatsky 54c595c7ed
docs: add examples for clock.install() followed by pauseAt() (#33937) 2024-12-10 11:50:51 -08:00
Pavel Feldman a25bda6950
chore: allow storing aria snapshots in files (#33919) 2024-12-10 11:45:16 -08:00
Max Schmitt 200e868b63
chore: bump nanoid to 3.3.8 (#33936) 2024-12-10 11:19:36 -08:00
jinohkang-theori 27060a0f65
fix(connect): disable context takeover in websocket transport (#33811) 2024-12-09 18:07:00 -08:00
yangsisi d029b03d9f
fix(defineConfig): fix type issue passing custom property in the seco… (#33774)
Signed-off-by: yangsisi <13655750+yangsisi0422@users.noreply.github.com>
2024-12-09 09:20:47 -08:00
Dmitry Gozman 0937d2f7b9
fix(types): update types for test.extend (#33784) 2024-12-09 08:59:01 -08:00
Playwright Service dfa24462db
feat(webkit): roll to r2117 (#33902) 2024-12-06 16:43:25 -08:00
Playwright Service 2a1a9c9452
feat(webkit): roll to r2116 (#33897)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-12-06 15:38:51 -08:00
Simon Knott 4914f34a83
fix(recorder): allow clearing when recording is disabled (#33821) 2024-12-06 10:17:06 -08:00
Adam Gastineau a56a5cabbd
docs: clarify use of comments in contributions (#33896) 2024-12-06 10:09:35 -08:00
Yury Semikhatsky 733f9a2926
chore: pdf generation now works in headed mode too (#33879) 2024-12-05 17:53:31 -08:00
Simon Knott 993546c1bc
chore: r1284 fixup (#33883) 2024-12-05 16:22:52 -08:00
Simon Knott f6f6a6225c
docs: locale defaults to en-us (#33840) 2024-12-05 15:44:41 -08:00
Playwright Service ee8208beda
feat(chromium-tip-of-tree): roll to r1284 (#33876)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-12-05 09:34:30 -08:00
Playwright Service b86725bb98
feat(chromium): roll to r1151 (#33873)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-12-05 09:34:16 -08:00
Playwright Service b941359fce
chore(driver): roll driver to recent Node.js LTS version (#33870) 2024-12-05 06:08:44 -08:00
Dmitry Gozman be78e9e11f
fix: do not stall waiting for pending navigations after beforeunload dismiss (#33834) 2024-12-03 15:55:45 -08:00
Playwright Service abf6916909
feat(webkit): roll to r2113 (#33807) 2024-12-03 10:05:51 -08:00
Dmitry Gozman a7f2868594
fix(codegen): do not reset current tool upon clearing highlight (#33822) 2024-12-03 09:25:14 -08:00
Playwright Service e4211ee3ac
feat(chromium-tip-of-tree): roll to r1283 (#33845)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-12-03 07:14:05 -08:00
Max Schmitt 9b5f7f77b2
docs(network): add proxy back-ref to api docs (#33839) 2024-12-02 16:20:44 -08:00
Dmitry Gozman 4e33ade287
docs: fix codegen --viewport option examples (#33816) 2024-11-29 06:13:53 -08:00
Tasawar Hussain b456ac5f8c
docs: update ci.md (#33815)
Signed-off-by: Tasawar Hussain <31658686+tasawar-hussain@users.noreply.github.com>
2024-11-29 03:36:50 -08:00
Dmitry Gozman b5bd543cc6
test: skip 'should not auto play audio' with frozen time (#33799) 2024-11-28 06:36:49 -08:00
Playwright Service fd25f3ab85
feat(chromium-tip-of-tree): roll to r1282 (#33798)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-28 14:43:45 +01:00
Simon Knott 4fb6c4ed4c
fix(trace): in indexTree check isVisible before adding to result (#33797) 2024-11-28 14:04:34 +01:00
Dmitry Gozman a84488edaa
fix(aria): escape even more yaml (#33793) 2024-11-28 03:21:52 -08:00
Playwright Service ff6c283af5
feat(webkit): roll to r2112 (#33778)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-27 16:53:22 +01:00
Segev Finer f3ae940684
fix(ct-vue): Upgrade plugin-vue to be compatible with Vite 5 (#33758) 2024-11-26 17:42:36 +01:00
Max Schmitt 84df6e3297
docs(python): add note about async fixtures (#33760) 2024-11-26 16:23:19 +01:00
Playwright Service b9c923f87c
feat(chromium-tip-of-tree): roll to r1281 (#33769)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-26 14:26:35 +01:00
Playwright Service 3fd5174b9f
feat(webkit): roll to r2111 (#33759)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-25 22:35:34 +01:00
Dmitry Gozman 39285c4667
docs: update extensions doc for new headless (#33753) 2024-11-25 01:13:20 -08:00
Max Schmitt 9d92b0d3ec
docs(dotnet): add docs for xUnit (#33742) 2024-11-25 10:09:35 +01:00
Max Schmitt e0e4da8ead
docs(cli): fix docs rendering (#33751) 2024-11-24 14:50:12 +01:00
Pavel Feldman 0d9bcd45d5
chore: pin typescript while vue-tsc is broken (#33746) 2024-11-23 11:48:34 -08:00
Pavel Feldman 35dd3dd104
chore: use diff for snapshot delta (#33739) 2024-11-23 11:39:04 -08:00
Pavel Feldman 971b5da741
chore: introduce update-source-method (#33738) 2024-11-22 18:30:35 -08:00
Pavel Feldman 66d9f3acbe
chore: introduce update-snapshots=changed (#33735) 2024-11-22 17:41:31 -08:00
Yury Semikhatsky 66f709663e
fix(webkit): do not auto play audio without user gesture (#33734) 2024-11-22 14:53:29 -08:00
Dmitry Gozman 4696dd8682
fix(chromium): race between oopif attach and context clear (#33729) 2024-11-22 09:35:35 -08:00
Dmitry Gozman 7e09aa07de
feat(trace): preserve the open state of popovers (#33728) 2024-11-22 09:35:19 -08:00
Pavel Feldman 5f85a4a419
chore: add config markers / overwrite mode (#33723) 2024-11-22 09:12:58 -08:00
Dmitry Gozman f123f7ac69
fix: isEditable/toBeEditable throw for elements that cannot be editable/readonly (#33713) 2024-11-22 03:40:43 -08:00
Max Schmitt b7e47dc0bd
docs(test-runners): restructure .NET test-runners doc (#33727) 2024-11-22 12:35:14 +01:00
Playwright Service b32fdade16
feat(chromium): roll to r1150 (#33718)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-22 12:05:16 +01:00
Pavel Feldman e0f0996bbd
chore: climb file tree to git root for patches (#33722) 2024-11-21 17:32:07 -08:00
Pavel Feldman 605df0be8f
chore: add more info about snapshot testing (#33721) 2024-11-21 16:11:01 -08:00
Max Schmitt 5da0b94357
feat(webkit): roll to r2108 (#33710)
Co-authored-by: Yury Semikhatsky <yurys@chromium.org>
2024-11-21 14:42:21 -08:00
Playwright Service c2a8375ef2
feat(chromium-tip-of-tree): roll to r1280 (#33719)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-21 22:36:39 +01:00
Max Schmitt 92436518ff
docs(python): add LocatorAssertions.NotToMatchAriaSnapshot (#33712) 2024-11-21 15:53:37 +01:00
Max Schmitt 77d82b8b07
chore: remove dead code in urlMatches (#33714) 2024-11-21 15:53:28 +01:00
Dmitry Gozman d3ffdefd50
docs: release notes for languages v1.49 (#33706) 2024-11-21 05:45:00 -08:00
Max Schmitt f43b86fea4
devops: delete .devcontainer/devcontainer.json (#33709)
Signed-off-by: Max Schmitt <max@schmitt.mx>
2024-11-21 12:22:45 +01:00
Simon Knott fc19e6e7b4
fix(test): export TestDetailsAnnotation (#33698) 2024-11-20 17:28:56 +01:00
Max Schmitt 6a32589330
test: update 'should work for canvas' test expectation (#33685) 2024-11-20 17:13:07 +01:00
Simon Knott 89f4d4ce4f
chore(html): hmr report should survive reload (#33696) 2024-11-20 16:35:39 +01:00
Simon Knott 81e28a8854
docs(aria): add demo video (#33668) 2024-11-20 15:36:51 +01:00
Simon Knott bfd64ac11b
docs: add video for 1.49 (#33693) 2024-11-20 15:36:38 +01:00
Dmitry Gozman 94776ad18a
docs: note that permissions list may change (#33690) 2024-11-20 06:08:34 -08:00
Josh Kelley 1afb56ee1b
docs: add docs for 1.49.0's new "chromium" option (#33680) 2024-11-20 01:19:39 -08:00
Simon Knott 1d3605d1fc
feat(trace viewer): add "Copy as Playwright Request" button (#33298) 2024-11-20 10:16:43 +01:00
Simon Knott f1ddd379f3
fix(html): don't conflate file names (#33600) 2024-11-20 10:16:33 +01:00
Dmitry Gozman 50c8fbf750
fix(ui mode): do not render anonymous describe (#33675) 2024-11-20 00:51:31 -08:00
Simon Knott ae10d56836
docs(fixtures): add rules of thumb for fixture usage (#33472) 2024-11-20 09:06:54 +01:00
Max Schmitt 402bb4ccf8
devops: update GitHub Actions via dependabot (#33683) 2024-11-20 08:13:35 +01:00
Pavel Feldman b40889d1a8
chore: escape more yaml values (#33686) 2024-11-19 17:09:49 -08:00
Max Schmitt 7f7b440c72
devops: deduplicate redudant information in client side changes issue (#33666) 2024-11-19 19:06:20 +01:00
Playwright Service aa0ac04d06
feat(webkit): roll to r2105 (#33679)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-19 17:56:50 +01:00
Playwright Service 4d4fa69a0a
feat(chromium-tip-of-tree): roll to r1279 (#33676)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-19 16:49:59 +01:00
Simon Knott 4979ce2b5d
chore(html): Reveal elements with Anchor abstraction (#33537) 2024-11-19 16:40:02 +01:00
Simon Knott 8c1002a98b
fix(sw): fix UI mode on codespaces by not passing server (#33664) 2024-11-19 16:39:47 +01:00
Dmitry Gozman 6e19bc341f
fix(role): ignore invalid aria-labelledby attributes (#33667) 2024-11-19 03:56:16 -08:00
Max Schmitt ecf6f27159
fix: dark-mode in UI Mode (#33662) 2024-11-19 10:29:05 +01:00
Simon Knott e047f6bc07
chore(build): typo in trace-viewer output dir (#33661) 2024-11-19 10:02:41 +01:00
Yury Semikhatsky dc91bab6cc
chore: fix npm audit (#33659) 2024-11-18 16:24:54 -08:00
Yury Semikhatsky 6d71805f4a
fix: do not send favicon request to network when interception is on (#33639) 2024-11-18 11:01:39 -08:00
Max Schmitt 150092438f
chore(recorder): support HMR (#33637) 2024-11-18 18:23:29 +01:00
Simon Knott acd862c6c9
chore(trace): remove embedded trace viewer (#33651) 2024-11-18 16:57:53 +01:00
Max Schmitt 0b312248cd
test: add test for crash on label with input file (#33654) 2024-11-18 16:56:59 +01:00
Max Schmitt 72c532846f
chore(roll): roll Firefox Beta to r1466 (#33653) 2024-11-18 16:56:49 +01:00
aairiian 7f054ef8c6
feat(aria): extend toHaveAccessibleName() to accept an array of expected accessible names (#33277) 2024-11-18 07:46:47 -08:00
Simon Knott 3fa33ca81f
chore(build): fix bug where sw changes aren't copied in watch mode (#33579) 2024-11-18 16:04:12 +01:00
Simon Knott 5e8b469c1c
fix(test): hide response.* calls from reports (#33620) 2024-11-18 13:59:40 +01:00
Max Schmitt d7d8ab62a2
chore: roll stable-test-runner to 1.49.0-beta-1731772650000 (#33648) 2024-11-18 10:21:48 +01:00
Max Schmitt 6fce5620e0
fix(ui-mode): use onChange instead of onClick for <input type='checkbox' (#33636) 2024-11-18 10:21:28 +01:00
Rui Figueira 82c77a5e9e
fix(ui-mode): prevent websocket connection leaks on reload (#33643) 2024-11-18 01:03:21 -08:00
Pavel Feldman 46321e5bf2
chore: clear highlight when performing action (#33638) 2024-11-16 07:56:33 -08:00
Pavel Feldman a98021499f
chore: add cm placeholder text (#33635) 2024-11-15 16:19:35 -08:00
Jean-François Greffier 508021362d
fix minor typos in "Getting Started" (#33613) 2024-11-15 14:45:54 -08:00
Max Schmitt 37ce53945e
fix(ui-mode): fix issue when updating state while rendering (#33634) 2024-11-15 23:45:25 +01:00
Rui Figueira c36b5a6059
fix: ensure toMatchAriaSnapshot is properly commented in javascript c… (#33593) 2024-11-15 14:44:27 -08:00
Pavel Feldman d127255881
chore: add AriaSnapshot internal type (#33631) 2024-11-15 13:48:43 -08:00
Pavel Feldman 44cd1d03cc
chore: highlight edited locator while recording (#33632) 2024-11-15 13:43:00 -08:00
Max Schmitt b91f609b14
chore: fix react attribute casing in TestErrorView (#33633) 2024-11-15 22:25:26 +01:00
Yury Semikhatsky e24780f825
chore: unshift shortest whitespace prefix only (#33618) 2024-11-15 12:47:25 -08:00
Dmitry Gozman 77dee44984
fix(rebase): do not apply multiple rebaselines to the same assertion (#33629) 2024-11-15 09:08:31 -08:00
Max Schmitt c81504c5d6
fix(codegen): document.documentElement is null on early navigation (#33627) 2024-11-15 17:14:49 +01:00
Amaechi Hope e61cea597a
docs(dotnet): fix assertion snippets (#33622) 2024-11-15 15:02:40 +01:00
Dmitry Gozman 2aa9e11a7f
fix(aria): normalize whitespace in toMatchAccessible{Name,Description} (#33619) 2024-11-15 02:49:03 -08:00
Dmitry Gozman eaf3536014
fix(trace): afterAll hook should not break tracing with reused context (#33616) 2024-11-14 13:24:02 -08:00
Yury Semikhatsky f5477d9051
docs: add ariaSnapshot.timeout for language ports (#33614) 2024-11-14 12:23:42 -08:00
Max Schmitt b3e5daff2b
cherry-pick(#33606): feat(chromium): roll to r1149 (#33612) 2024-11-14 19:40:46 +01:00
Playwright Service b61b3a5a13
feat(chromium): roll to r1149 (#33606) 2024-11-14 16:39:24 +01:00
Playwright Service 5e579cc29c
feat(chromium-tip-of-tree): roll to r1278 (#33608)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-14 16:38:56 +01:00
Max Schmitt 358fad45cd
chore: add ESRP CDN for browser downloads (#33585) 2024-11-14 16:19:42 +01:00
Max Schmitt b8f824ca6b
chore: throw if protocol can't get generated when rolling (#33607) 2024-11-14 16:12:07 +01:00
Simon Knott 445ff73c6e
chore(trace viewer): decouple test server from web server (#33542) 2024-11-14 15:27:33 +01:00
Simon Knott 25c039401d
fix(canvas snapshots): position mismatch in headless mode (#33575) 2024-11-14 15:27:09 +01:00
Dmitry Gozman 80ce205d81
docs: update docs about headless shell (#33604) 2024-11-14 05:38:16 -08:00
Dmitry Gozman 31a2b7bbdc
chore: update headless shell treatment (#33603) 2024-11-14 04:20:44 -08:00
Dmitry Gozman 9f59dbdc57
fix(merge): update error.cause location (#33583) 2024-11-14 01:15:21 -08:00
Simon Knott dc93c8a05b
chore(release): alternative headless mode release notes (#33578)
Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Yury Semikhatsky <yurys@chromium.org>
2024-11-14 08:40:51 +01:00
Pavel Feldman 4817483ff2
chore: allow highlighting aria template from extension (#33594) 2024-11-13 21:33:38 -08:00
Yury Semikhatsky a8af7cc435
chore: remove macOS <=12 checks (#33591) 2024-11-13 17:21:21 -08:00
Yury Semikhatsky 5203c780ae
feat: step timeout option (#33560) 2024-11-13 11:17:54 -08:00
Max Schmitt eab6447ad9
test: add 'should show errors with causes in the error tab' (#33577) 2024-11-13 17:32:32 +01:00
Simon Knott da7639b737
chore(build): empty out dir (#33576) 2024-11-13 13:08:50 +01:00
Max Schmitt cd41404b05
chore: mark v1.50.0-next (#33572) 2024-11-13 12:51:54 +01:00
Max Schmitt d1ae5f6ac4
chore: update browser patches to bb81b1c60 (#33573) 2024-11-13 12:34:49 +01:00
Max Schmitt 382d98760c
chore: update WebKit version to 18.2 (#33570) 2024-11-13 12:33:45 +01:00
Max Schmitt e535b3aa5f
docs(best-practises): add note about saving browser downloads (#33568) 2024-11-13 12:11:12 +01:00
Dmitry Gozman 099dd80806
fix(recorder): align apiName with the real one (#33567) 2024-11-13 03:06:34 -08:00
Dmitry Gozman 88082b417a
chore: release notes for v1.49 js (#33565) 2024-11-13 03:04:43 -08:00
Dmitry Gozman f54d3f44c2
chore: download and launch chromium-headless-shell for headless chromium (#33454) 2024-11-13 02:52:28 -08:00
Pavel Feldman d685763c49
chore: use diff instead of diffmatchpatch (#33550) 2024-11-12 14:46:29 -08:00
Max Schmitt 0aa8da8035
test: fix csharp har tests on Windows (#33556) 2024-11-12 14:42:07 +01:00
Playwright Service 55b81a83e8
feat(chromium-tip-of-tree): roll to r1277 (#33555)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-12 13:55:12 +01:00
Dmitry Gozman 33f9c8279c
chore: more aria snapshot fixes (#33534) 2024-11-12 02:26:54 -08:00
Simon Knott 114884335d
chore(html): support HMR for local dev (#33511) 2024-11-12 11:11:50 +01:00
Pavel Feldman 1b65f26f02
chore: apply rebaselines in a task (#33549) 2024-11-11 21:15:05 -08:00
Pengoose a501232bf0
fix(expect): adjust normalization for regex values in toHaveText matcher (#33533) 2024-11-11 17:19:04 -08:00
Pavel Feldman e534fba60f
chore: render recorder placeholders (#33548) 2024-11-11 16:38:02 -08:00
Max Schmitt d8a98a2bf5
test: fix flaky page.pause() tests end up stalling (#33544) 2024-11-11 22:19:58 +01:00
Yury Semikhatsky e691ca7fbf
fix(codegen): generate routeFromHAR for --save-har option (#33480) 2024-11-11 11:59:20 -08:00
Yury Semikhatsky e3ed9fa7c3
chore: drop support for solid component testing (#33523) 2024-11-11 10:26:50 -08:00
Pavel Feldman 649e0e0235
chore: nicer cm widgets for aria (#33524) 2024-11-11 09:40:50 -08:00
Max Schmitt 5a8b49910a
fix(ct): msw interception after msw v2.6.4 release (#33536) 2024-11-11 11:37:29 +01:00
Max Schmitt d5ebe285c1
fix(transform): allow import attributes always (#33527) 2024-11-11 10:26:13 +01:00
Pavel Feldman 503f74da90
chore: allow editing aria template in recorder (tests) (#33522) 2024-11-08 17:18:51 -08:00
Dmitry Gozman c29f573243
fix(aria snapshot): assorted fixes (#33512) 2024-11-08 10:25:05 -08:00
Yury Semikhatsky 9c6c58f8ce
docs: note about screenshot environment (#33501) 2024-11-08 08:33:04 -08:00
Pavel Feldman b021b58379
chore: allow editing aria template in recorder (#33482) 2024-11-08 07:43:01 -08:00
Dmitry Gozman d561ba7b86
fix(chromium-headless-shell): fallback to chromium when running headed (#33490) 2024-11-08 07:04:41 -08:00
Simon Knott f7a388dcb4
chore: HMR for Trace Viewer build script changes (#33291) 2024-11-08 15:08:58 +01:00
Playwright Service 93b7b6e279
feat(webkit): roll to r2104 (#33500)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-08 13:23:20 +01:00
Playwright Service 7073f80879
feat(chromium-tip-of-tree): roll to r1276 (#33494)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-07 16:43:58 +01:00
Playwright Service 910ecdf556
feat(chromium): roll to r1148 (#33491)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-07 14:51:33 +01:00
Dmitry Gozman 67e8defbe9
docs: update tracing.group docs (#33487) 2024-11-07 03:57:18 -08:00
Dmitry Gozman 43e4ba9f2f
fix(click): better compensate for integer click coordinates in firefox (#33467) 2024-11-07 00:01:00 -08:00
Yury Semikhatsky 50775698ae
fix: parent step for API calls inside waitForEvent callback (#33409) 2024-11-06 17:35:16 -08:00
Yury Semikhatsky 523e50088a
test: do not rely on http://localhost2 dns resolution failure (#33479) 2024-11-06 14:20:38 -08:00
Pavel Feldman 3f8bd36a3a
fix(html): align prev/next with the group title (#33462) 2024-11-06 08:31:55 -08:00
Pavel Feldman 2f8a14c6e2
test: cover more aria escaping edge cases (#33463) 2024-11-06 08:31:32 -08:00
Simon Knott 8c4738ab1a
Revert "chore(trace viewer): always format trace location as URL, not file path" (#33476) 2024-11-06 17:17:59 +01:00
Simon Knott 0d92737a07
chore(web): replace static ID with React.useId (#33474) 2024-11-06 14:42:48 +01:00
Simon Knott f554f42b82
feat(trace viewer): link from attach action to attachment tab (#33265) 2024-11-06 10:22:15 +01:00
Pavel Feldman d4ad520a9b
chore: fix more aria escaping edge cases (#33460) 2024-11-05 16:22:02 -08:00
Pavel Feldman 9d94ad152e
chore: dedupe tags in base reporter title (#33461) 2024-11-05 16:18:10 -08:00
Pavel Feldman a655b0bfb3
chrome: aria api review (#33458) 2024-11-05 15:23:38 -08:00
Dmitry Gozman 697d7a40b1
fix(routeWebSocket): make it work with http(s) baseURL (#33457) 2024-11-05 11:46:05 -08:00
Max Schmitt 1003f3429c
chore: roll chromium-headless-shell to r1147 (#33455) 2024-11-05 15:19:39 +01:00
Max Schmitt c96245dde7
docs(aria-snapshot): fix markdown rendering / langs (#33453) 2024-11-05 15:04:26 +01:00
Dmitry Gozman 9b2ca93a50
chore: followup to tracing.group (#33450) 2024-11-05 04:45:54 -08:00
Playwright Service 96a7f49b72
feat(chromium-tip-of-tree): roll to r1275 (#33451)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-05 13:30:24 +01:00
René fa10bcd5a3
feat(tracing) Adding groups to trace via pw-api (#33081)
Signed-off-by: René <snooz@posteo.de>
Signed-off-by: René <41592183+Snooz82@users.noreply.github.com>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-11-05 03:45:37 -08:00
Playwright Service da4614ea7c
feat(firefox): roll to r1466 (#33448)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-05 11:56:03 +01:00
Max Schmitt 9a668aeab3
fix(websocket): pass through underlying WebSocket protocol (#33446) 2024-11-05 11:13:33 +01:00
Simon Knott 8e140a4873
fix(global setup): simplify ordering (#33444) 2024-11-05 10:36:29 +01:00
Max Schmitt ba6386e0ae
fix(download): fix second browser download of channels (#33429) 2024-11-05 10:34:00 +01:00
Simon Knott 26a7dd4dd4
chore(reporter): add another surrogate pair test case (#33428) 2024-11-05 07:55:17 +01:00
Pavel Feldman 58b1f322ab
docs: iterate over aria docs (2) (#33440) 2024-11-04 19:24:54 -08:00
Pavel Feldman ec8161cb0a
docs: iterate over aria docs (#33439) 2024-11-04 17:52:53 -08:00
Yury Semikhatsky 513c57536a
chore: relax checks when installing channels on unsupported platforms (#33436) 2024-11-04 16:53:13 -08:00
Pavel Feldman f138c30915
chore: improve aria template error reporting (#33438) 2024-11-04 15:33:09 -08:00
Yury Semikhatsky 36a975c30b
chore: override host platform with env variable (#33434) 2024-11-04 14:14:24 -08:00
Playwright Service ab22f81922
feat(chromium): roll to r1147 (#33430)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-04 21:38:43 +01:00
Pavel Feldman 8b49d568de
docs: start adding the aria snapshot documentation (#33407) 2024-11-04 10:53:46 -08:00
Playwright Service cf137845df
feat(webkit): roll to r2103 (#33431)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-04 19:39:18 +01:00
Simon Knott cb0171e571
chore(expect): clarify message() for custom matchers (#33321) 2024-11-04 16:58:20 +01:00
Simon Knott edf1eb154d
chore(trace viewer): always format trace location as URL, not file path (#33344) 2024-11-04 16:25:44 +01:00
Max Schmitt 4560686427
test: re-add headless-new fixme's (#33426) 2024-11-04 16:18:36 +01:00
Simon Knott b148ce1ad1
fix(debug controller): highlight selectors in iframe (#33273) 2024-11-04 14:41:06 +01:00
Max Schmitt 96a29b69eb
feat(chromium-tip-of-tree): roll to r1274 (#33423) 2024-11-04 14:23:17 +01:00
Dmitry Gozman 82f6c15e6a
feat(chromium): switch to headless=new by default (#33262)
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-11-04 12:56:00 +01:00
Max Schmitt 76ffc2374c
devops: increase heap size to 8 GB for merge report workflow (#33422)
Signed-off-by: Max Schmitt <max@schmitt.mx>
2024-11-04 11:42:50 +01:00
Playwright Service abcd1ff201
feat(webkit): roll to r2102 (#33408)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-02 01:10:15 +01:00
Pavel Feldman 1d4650cea2
chore(snapshot): support aria-owns (#33404) 2024-11-01 15:25:38 -07:00
Playwright Service 3cd753f6bb
feat(webkit): roll to r2101 (#33401)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-01 21:43:33 +01:00
Pavel Feldman 80bd246543
chore: use React.useId for a11y (#33402) 2024-11-01 13:38:16 -07:00
Pavel Feldman c76f004ec3
chore: move compress call log to server (#33399) 2024-11-01 13:38:01 -07:00
Pavel Feldman fc0ce7046b
chore: perform e2e rebase test (#33390) 2024-11-01 12:25:05 -07:00
Max Schmitt 3b4b8f9e49
docs(python): add snippet for new_context fixture (#33392) 2024-11-01 17:50:34 +01:00
Playwright Service 18453f3889
feat(webkit): roll to r2100 (#33395) 2024-11-01 17:45:58 +01:00
Max Schmitt 33593c5f06
docs(browsers): add note for Python about channels in launch() (#33396) 2024-11-01 17:45:07 +01:00
Yury Semikhatsky c95feccce4
chore: support reverse in ansi2html, drop ansi-to-html (#33389) 2024-10-31 21:42:06 -07:00
Pavel Feldman 26c2049d5a
chore: treat input value as text in templates (#33388) 2024-10-31 20:41:52 -07:00
Pavel Feldman 135ed28740
chore: more yaml escaping tests (#33387) 2024-10-31 17:14:11 -07:00
Playwright Service dcf85edcb7
feat(chromium): roll to r1146 (#33380)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-11-01 00:50:09 +01:00
Pavel Feldman c462e29e73
chore(aria): generate single patch for all baselines (#33384) 2024-10-31 15:34:17 -07:00
Playwright Service 69404561f9
feat(webkit): roll to r2099 (#33385)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-31 21:34:01 +01:00
Pavel Feldman a2e901e080
chore: generate aria name regex when possible (#33373) 2024-10-31 11:25:38 -07:00
Pavel Feldman 676f014b5f
chore: use objects for string aria template notes (#33371) 2024-10-30 17:25:51 -07:00
Pavel Feldman a43b99368e
chore: support aria snapshots in tsx (#33369) 2024-10-30 17:25:30 -07:00
Playwright Service 81e7d9fa25
feat(webkit): roll to r2098 (#33366) 2024-10-30 21:55:44 +01:00
Max Schmitt 1342e7f6b6
Revert "chore: add Devuan OS fallback to Debian (#32990)" (#33365) 2024-10-30 21:28:16 +01:00
Max Schmitt 512645463e
test: rebase headless-shell/--headless=new/Edge tests (#33350) 2024-10-30 15:12:05 +01:00
Simon Knott 64802fc284
fix(line reporter): wrap chinese characters correctly (#33322) 2024-10-30 13:29:31 +01:00
Pavel Feldman 6f5c7b4358
feat(html): render prev/next test buttons (#33356) 2024-10-29 18:29:07 -07:00
Pavel Feldman 9ce401d44a
chore: suggest aria snapshots w/ regex (#33334) 2024-10-29 16:19:08 -07:00
Max Schmitt 3b1883444d
chore: bump Docker Node.js to 22 (#33348) 2024-10-29 21:04:13 +01:00
Denis LE 7a1739792f
docs(best-practices): improve wording (#33342) 2024-10-29 16:27:14 +01:00
Playwright Service 53ff35cbc4
chore(driver): roll driver to recent Node.js LTS version (#33349)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-29 16:14:22 +01:00
Simon Knott 0221f15f4f
chore(control-or-meta): mention in docs (#33338) 2024-10-29 10:07:59 +01:00
Playwright Service 0df801d632
feat(webkit): roll to r2097 (#33336)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-29 06:59:12 +01:00
Max Schmitt 9eb4fe5546
feat(pwt): serialize and expose Error.cause from Worker process (#32833) 2024-10-29 00:01:59 +01:00
Max Schmitt 5c0fdfed50
chore: throw when using headless-shell with headed mode (#33292) 2024-10-28 22:33:21 +01:00
Max Schmitt 19e863191c
test: use 'chrome' for UI mode tests (#33329) 2024-10-28 21:56:46 +01:00
Max Schmitt c9a93486a1
test: update macOS-15 WebKit cookie tests expectations (#33332) 2024-10-28 20:34:08 +01:00
Pavel Feldman 4b7c8d8a20
chore: use stable library along with the test runner in ttest (#33312) 2024-10-25 23:15:10 -07:00
Yury Semikhatsky 88c42f7887
chore: delete unused source-map-support code (#33306) 2024-10-25 16:20:33 -07:00
Yury Semikhatsky 0ace47e7cf
chore: revert exposed expect error details on TestError (#33310) 2024-10-25 16:20:18 -07:00
Pavel Feldman 74e5e5560f
chore: update missing snapshots by default (#33311) 2024-10-25 16:13:38 -07:00
Yury Semikhatsky c66af9c525
chore: make expect timeout field required in the protocol (#33309) 2024-10-25 15:26:41 -07:00
Yury Semikhatsky 4facda8685
chore: fix source-map type import error (#33308) 2024-10-25 13:51:08 -07:00
Yury Semikhatsky 87b896e597
chore: remove playwright-ct-vue2 (#33302) 2024-10-25 13:31:55 -07:00
Yury Semikhatsky 1e8884621a
chore: unify toHaveScreenshot error formatting (#33300) 2024-10-25 12:36:39 -07:00
Yury Semikhatsky f98531baee
chore: remove check for node < 16 (#33301) 2024-10-25 10:33:43 -07:00
DetachHead 7e00112fec
docs(python): improve the typing example with the pytest plugin (#33296) 2024-10-25 15:27:14 +02:00
Pavel Feldman 9707e97867
chore: revert #33228 - it needs a proper review (#33284) 2024-10-25 09:36:03 +02:00
Pavel Feldman ff5f1628dc
chore: allow aria snapshot rebaselines (#33256) 2024-10-24 16:49:10 -07:00
Max Schmitt a2dec8da63
fix(codegen): SIGINT handling was leading to zombie processes (#33269) 2024-10-24 19:23:19 +02:00
Playwright Service 0509eca9b6
feat(chromium): roll to r1145 (#33274)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-24 17:47:34 +02:00
Max Schmitt adc38cfd8b
test: rebaseline test expectations (#33270) 2024-10-24 16:49:35 +02:00
Dmitry Gozman 67471cb3c5
test: make a few tests headed/headless agnostic (#33268) 2024-10-24 06:03:36 -07:00
Simon Knott 3641e5984f
chore: HMR for Trace Viewer (#33228) 2024-10-24 14:34:59 +02:00
Dmitry Gozman 2e01154bb5
feat: screenshot:on-first-failure (#33266) 2024-10-24 04:41:35 -07:00
Dmitry Gozman 1950bbdc6e
test: unflake "should not leak recorders" (#33264) 2024-10-24 02:47:34 -07:00
Max Schmitt 487134fbaf
devops: add chromium-headless-shell bots (#33242) 2024-10-24 11:34:41 +02:00
Simon Knott 69f56b9f63
fix(locator generator): handle frameLocator() and locator().contentFrame() (#33208) 2024-10-24 10:52:54 +02:00
Pavel Feldman 6ae6b4865c
chore: always use TestInfoErrorImpl (impl) in @playwright/test (#33255) 2024-10-23 17:36:05 -07:00
Pavel Feldman 9a0a6cec10
chore: remove the leaf node notion (#33249) 2024-10-23 17:34:21 -07:00
Pavel Feldman 24cafbc8cb
chore: use diff_match_patch with types (#33254) 2024-10-23 16:04:37 -07:00
Pavel Feldman 8da065a2ea
Revert "chore: remove unused @babel/parser (#32654)" (#33252) 2024-10-23 12:57:15 -07:00
Dmitry Gozman 9a6e1b71a4
fix(trace viewer): make LRUCache per-trace (#33245) 2024-10-23 10:25:16 -07:00
Dmitry Gozman ec9c11f1cd
fix(trace viewer): limit the number of contexts loaded in sw (#33244) 2024-10-23 10:25:04 -07:00
Dmitry Gozman 993a6b2a2a
fix(recorder): do not leak when instantiated in snapshots (#33240) 2024-10-23 10:24:53 -07:00
Max Schmitt f1f2a7b33a
chore: warn when browser with revision override is getting installed (#33226) 2024-10-23 18:14:55 +02:00
Max Schmitt 0d12fbe002
fix: have more friendly playwright-report error when opening TV via file:// (#33239) 2024-10-23 12:19:29 +02:00
Simon Knott 3322a7f3bb
chore(trace): remove screenshot instead of snapshot code (#33225) 2024-10-23 12:17:02 +02:00
Pavel Feldman 6bfdad068c
chore: introduce accessibility tab in recorder (#33235) 2024-10-22 16:36:03 -07:00
Max Schmitt 6800fd45a2
feat(webkit): roll to r2095 (#33229) 2024-10-22 22:30:54 +02:00
Yury Semikhatsky 8ec981c394
chore: move github reporter formatting out of base (#33213) 2024-10-22 11:45:12 -07:00
Max Schmitt 29ca54eb38
chore: add headless shell builds (#33222) 2024-10-22 15:47:50 +02:00
Playwright Service c8431ca122
feat(chromium-tip-of-tree): roll to r1271 (#33224)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-22 15:47:17 +02:00
Max Schmitt 131f8b39c3
docs(vscode): outline more that global teardown needs to be executed manually (#33221) 2024-10-22 14:25:23 +02:00
Simon Knott ef84051c91
feat(tracing): clip canvas contents from screenshots (#33119) 2024-10-22 14:12:25 +02:00
Rui Figueira b194d6a1e9
fix(recorder): fix recorder injected icons (#33198) 2024-10-22 12:44:18 +02:00
Max Schmitt b275c19612
chore: update eslintignore to lint files in utils/ folders (#33218) 2024-10-22 11:52:20 +02:00
Pavel Feldman 2a3d67195d
chore: use aria snapshots in some ui mode tests (#33212) 2024-10-21 21:54:06 -07:00
Max Schmitt 0351fd9401
docs: use WebSocketFrame abstraction for Java & .NET (#33211) 2024-10-21 21:21:30 +02:00
Yury Semikhatsky aebceb345e
chore: expose expect error details on TestError (#33183) 2024-10-21 11:15:55 -07:00
Max Schmitt 36d3a6764e
docs: set minimal Ubuntu version to 22 and Debian to 12 (#33207) 2024-10-21 18:41:27 +02:00
Max Schmitt e866e3306e
devops: stop publishing Ubuntu 20.04 (#33203) 2024-10-21 17:00:10 +02:00
Playwright Service 014577d345
feat(webkit): roll to r2094 (#33188) 2024-10-21 11:33:16 +02:00
Simon Knott 40d5a1cb4a
fix(ff): resource type for image sets should be image (#33195) 2024-10-21 11:14:48 +02:00
Meir Blachman 4b187107ee
devops: fix 'client side changes bot' PR links in PRs (#33189) 2024-10-20 18:44:48 +02:00
Pavel Feldman 97d26e8166
chore: add aria attribute tests (#33184) 2024-10-19 14:23:08 -07:00
Pavel Feldman 64bf1bc107
chore: support basic aria attributes (#33182) 2024-10-18 20:18:18 -07:00
Max Schmitt b1fb4f16a7
chore: hide 'markdown' reporter (#33140) 2024-10-18 23:00:05 +02:00
Pavel Feldman 2e8e7a66cd
chore: implement tree w/o list (#33169) 2024-10-18 13:50:43 -07:00
Max Schmitt 6ea17a5d82
chore: move non-test utility workflows to ubuntu-24.04 (#33176) 2024-10-18 16:38:55 +02:00
Playwright Service 02f8acce02
feat(chromium): roll to r1143 (#33163)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-18 11:34:39 +02:00
Playwright Service 58ef9e2e5f
feat(firefox-beta): roll to r1465 (#33170)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-18 11:34:28 +02:00
Simon Knott 0d63df4875
feat(test runner): allow multiple global setups (#32955)
Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-10-18 11:03:00 +02:00
Pavel Feldman 29c84a33c3
chore: compute aria text consistently with the role accumulated text (#33157) 2024-10-17 17:06:18 -07:00
Pavel Feldman 623a8916f9
chore: implement tree w/o list (#33167) 2024-10-17 16:57:45 -07:00
Dmitry Gozman aa952c1b03
fix(html report): generate test snippets when test dir is non-root (#33162) 2024-10-17 08:33:15 -07:00
Dmitry Gozman a2a5b102ab
chore: update CONTRIBUTING.md (#33138) 2024-10-17 06:13:17 -07:00
LeoTM edb041f9e3
chore(docs): fix documentation url (#33161)
Signed-off-by: LeoTM <1881059+leotm@users.noreply.github.com>
2024-10-17 06:12:19 -07:00
LeoTM 65983b4bf8
chore(docs): remove dead link to install config (#33160)
Signed-off-by: LeoTM <1881059+leotm@users.noreply.github.com>
2024-10-17 06:08:14 -07:00
Dmitry Gozman 2d150eec25
fix: correct types for things like test.describe.only (#33142) 2024-10-17 03:34:05 -07:00
Amaechi Hope 7af9e93304
docs(api): fix code snippets for locator ele (#33153) 2024-10-17 09:11:53 +02:00
Debbie O'Brien 9848ebec5a
docs: add video to release notes (#33147) 2024-10-16 18:36:46 +02:00
Pengoose d10a5e5693
feat(testType): add support for test.fail.only method (#33001) 2024-10-16 06:47:23 -07:00
Lars Hanisch 183720b56a
fix(docker): correct Ubuntu Noble name in name template (#33133) 2024-10-16 10:15:40 +02:00
Pavel Feldman 94321fef1c
chore: implement locator.ariaSnapshot (#33125) 2024-10-15 18:47:26 -07:00
Pavel Feldman b92b855638
test: unflake ff debugger test (#33124) 2024-10-15 16:21:55 -07:00
Pavel Feldman b421bd8b0d
chore: add a basic snapshot generator test (#33123) 2024-10-15 15:21:45 -07:00
Pavel Feldman 4b1fbde2ad
chore: generate match snapshot (#33105) 2024-10-15 13:38:55 -07:00
Pavel Feldman 23b1012c70
chore: fix ff test for codegen (#33122) 2024-10-15 13:34:08 -07:00
Anand M Cherian d40425ea58
docs: update to "Matching one of the two alternative locators" section (#33079)
Signed-off-by: Anand M Cherian <63868951+Anand-M-Cherian@users.noreply.github.com>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-10-15 12:45:03 -07:00
Playwright Service 615f1dbd63
feat(chromium-tip-of-tree): roll to r1269 (#33117)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-15 17:51:57 +02:00
Dmitry Gozman 59a50cf596
fix(chromium): disable PlzDedicatedWorker again (#33110) 2024-10-15 02:13:19 -07:00
Dmitry Gozman 17837e564d
fix(routeWebSocket): make sure ws url without trailing slash is supported (#33095) 2024-10-15 02:08:27 -07:00
Dmitry Gozman 8a275e5a5b
docs: improve docs for WebSocketRoute (#33097) 2024-10-15 02:07:03 -07:00
Pavel Feldman 2c05d294a8
chore: fix webkit visibility check in aria matcher (#33102) 2024-10-14 15:55:21 -07:00
Pavel Feldman a38ff6e0d8
chore: experimental toMatchAriaSnapshot (#33014) 2024-10-14 14:07:19 -07:00
Pavel Feldman 6cfcbe0d6d
chore: fix codegen selector while debugging (#33099)
Fixes #33052
2024-10-14 14:04:24 -07:00
Dmitry Gozman ecd147ce43
fix(test runner): when sharding with beforeAll, use shards total instead of workers (#33083)
Otherwise, we might split the `beforeAll`-grouped test group into
`workers` parts instead of `shard.total` parts as the user would expect.

Fixes #33077.
2024-10-14 13:46:06 -07:00
Yury Semikhatsky f8806d253d
chore(bidi): remove assertion from response dispatch (#33100)
After the context has been disposed we can't route any callbacks to it
because
it is not in the map, so the assertion doesn't make sense as it always
ends up in
the top level session.

Fixes the following error:
```
  pw:browser <closing ws> Closing websocket due to failed onmessage callback. eventData={"type":"success","id":32,"result":{}} e=Assertion error Error: Assertion error
  pw:browser     at assert (/home/yurys/playwright/packages/playwright-core/src/utils/debug.ts:21:11)
  pw:browser     at BidiSession.dispatchMessage (/home/yurys/playwright/packages/playwright-core/src/server/bidi/bidiConnection.ts:229:13)
  pw:browser     at BidiConnection.call [as _dispatchMessage] (/home/yurys/playwright/packages/playwright-core/src/server/bidi/bidiConnection.ts:93:25)
```
2024-10-14 13:25:30 -07:00
Playwright Service c7fbeddaf4
feat(webkit): roll to r2092 (#33078) 2024-10-14 22:21:49 +02:00
Simon Knott a8df750a48
fix(har): account for reused sockets (#33087)
Closes https://github.com/microsoft/playwright/issues/32960

If the socket is reused, the connect and DNS timings are set to -1,
because that timing doesn't apply to the current request. The time
between request start and the socket being free is counted as `blocked`.
2024-10-14 17:22:29 +02:00
Max Schmitt 9fcf60464d
chore: various v1.48.0 roll fixes for .NET (#33096) 2024-10-14 16:32:11 +02:00
Remigiusz Dudek 4c2d62a881
feat(html-reporter): recognize video attachment by the contentType (#33074)
Closes https://github.com/microsoft/playwright/issues/33073.

---------

Signed-off-by: Remigiusz Dudek <remigiusz_dudek@tlen.pl>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-10-14 05:16:19 -07:00
Fumiaki MATSUSHIMA 0a63427c77
fix(codegen): fix unselect issue (#33076) 2024-10-13 13:16:01 +02:00
Playwright Service 699f51b227
feat(webkit): roll to r2091 (#33070) 2024-10-11 17:18:06 -07:00
Playwright Service e4b0d5e6dd
feat(chromium): roll to r1142 (#33062)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-11 16:33:59 +02:00
Max Schmitt 87624c5434
Revert "fix(codegen): fix unselect issue (#32127)" (#33065)
This reverts commit 5121b19ac6.

The tree is red and fixing seems non-trivial.

Closes https://github.com/microsoft/playwright/issues/33064
Closes https://github.com/microsoft/playwright/pull/33060
2024-10-11 16:33:17 +02:00
Yury Semikhatsky b9cce598dd
fix(screenshot): show image diff inline in errors list (#32997)
The diff is now shown inline in the errors list.

There are 2 possible failures of toHaveScreenshot
* Previous and actual snapshot mismatch. In this case html report will
show diff between Actual/Previous and have Expected as a separate
screenshot.
* Actual/Previous are equal but they differ from the expected. In this
case html report only contains Actual/Expected images and the diff.

Reference: https://github.com/microsoft/playwright/issues/32341

<img width="1039" alt="image"
src="https://github.com/user-attachments/assets/b458f986-cc25-4721-862c-0cc2c1b01a42">
2024-10-10 16:49:17 -07:00
Playwright Service 10a9e1c730
feat(webkit): roll to r2090 (#33050) 2024-10-11 00:08:03 +02:00
Yury Semikhatsky 82fe882004
fix(webkit): scroll mobile page with background-attachment: fixed (#33048)
Fixes #31551
Fixes #23573
2024-10-10 14:32:27 -07:00
Playwright Service 7de084b6dc
feat(chromium-tip-of-tree): roll to r1268 (#33042)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-10 16:32:00 +02:00
Playwright Service 217b57df4c
feat(webkit): roll to r2089 (#33039)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-10 13:10:54 +02:00
Dmitry Gozman 25dd9b5cd4
feat: config.build.tsconfig (#33026)
Allows to specify `tsconfig` in the configuration file, which applies to
test files but not the config file itself.

Fixes #32808.
2024-10-10 01:37:46 -07:00
Pavel Feldman 8f3353865d
fix(ui): bring back the headed param (#33030)
Fixes https://github.com/microsoft/playwright/issues/33023
2024-10-09 17:46:54 -07:00
Playwright Service bc30cc795e
feat(chromium): roll to r1141 (#33027)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-09 14:55:37 +02:00
Dmitry Gozman c2cbf26497
docs: refresh timeouts doc (#33025)
After changes a few releases ago, specify that `afterEach` hooks are
included in a separate timeout.

Fixes #32851.
2024-10-09 05:10:10 -07:00
Max Schmitt 6210fef681
test: fix android tests (#33021) 2024-10-09 11:22:27 +02:00
Yury Semikhatsky bcf4ff1e47
chore(bidi): update setContent expectations for ff (#32992) 2024-10-08 11:58:01 -07:00
Simon Knott 892d67ffef
feat(test runner): allow stopping testrun with escape (#32584)
Closes https://github.com/microsoft/playwright/issues/32579
2024-10-08 11:39:54 -07:00
Fumiaki MATSUSHIMA 5121b19ac6
fix(codegen): fix unselect issue (#32127)
Fixes https://github.com/microsoft/playwright/issues/31290
2024-10-08 11:38:52 -07:00
Pavel Feldman dbe881cfdc
docs: add a section on balancing shards (#33011)
Closes https://github.com/microsoft/playwright/issues/32922
2024-10-08 08:35:02 -07:00
Pavel Feldman 6c9823eeaf
chore: allow minimal height for trace attachments (#32996) 2024-10-08 08:33:45 -07:00
Max Schmitt d0f2170e21
Revert "fix(test): do not allow mixing tests from different types (#29284)" (#33002)
This reverts commit 4784139bb0.

Closes https://github.com/microsoft/playwright/issues/29734
2024-10-08 16:00:40 +02:00
Simon Knott 042161e1ce
Reapply "fix(har timing): record connect timing for proxied connections" (#32855) (#33003)
This reapplies what we reverted in
https://github.com/microsoft/playwright/pull/32989.

Max and me debugged this, and found that the test failures come from
SOCKS proxy now preferring IPv6 over IPv4. We've updated the tests and
made sure that this doesn't mask any breaking change.

I'm enabling CQ1 to make sure we don't oversee any other CI failures.
2024-10-08 14:17:50 +02:00
Playwright Service 992994f036
feat(chromium-tip-of-tree): roll to r1267 (#33007)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-08 14:13:45 +02:00
Max Schmitt 47a889ac48
chore: roll stable-test-runner to 1.48.0-beta-1728384960000 (#33008) 2024-10-08 14:01:45 +02:00
Dmitry Gozman 814f7eb556
test: fix/fixme/update a few tests (#33006) 2024-10-08 03:59:35 -07:00
Playwright Service 5b29ead6f0
chore(driver): roll driver to recent Node.js LTS version (#33005)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-08 12:53:38 +02:00
Dmitry Gozman 0f2cbdedac
fix(routeWebSocket): do not show in the trace (#32991) 2024-10-08 02:47:24 -07:00
Simon Knott 1b589c4bd3
Revert "fix(har timing): record connect timing for proxied connections" (#32989)
Reverts microsoft/playwright#32855. This broke two tests on main, and we
don't yet know how to fix it other than downgrading.
2024-10-08 10:13:21 +02:00
Mark 04bf425268
feat(base-reporter): Add tags to test output (#32930) 2024-10-07 17:14:46 -07:00
Pavel Feldman 7047c3a6c6
fix(codegen): do not codegen non-existing fixtures (#32993)
Closes https://github.com/microsoft/playwright/issues/32981
2024-10-07 17:12:36 -07:00
Yury Semikhatsky 6ba5ee3a83
chore(ui-mode): expand all button (#32994)
<img width="230" alt="image"
src="https://github.com/user-attachments/assets/dd7fa3a1-39ec-4b88-9279-d664c9c4e5cd">


Reference https://github.com/microsoft/playwright/issues/32825
2024-10-07 15:42:12 -07:00
Aaron Sherwood 4d13677ebd
chore: add Devuan OS fallback to Debian (#32990) 2024-10-07 23:24:18 +02:00
Yury Semikhatsky 4ab857ce8e
test: fetch header propagation on redirect (#32970)
Documenting current behavior with and without interception.

Reference https://github.com/microsoft/playwright/issues/32939
2024-10-07 14:06:28 -07:00
Yury Semikhatsky 4fe33db392
docs(route): header override propagation (#32971)
Fix https://github.com/microsoft/playwright/issues/32939
2024-10-07 13:52:55 -07:00
Simon Knott 9a6f03eb87
fix(fetch): listener leaks on Socket (#32956)
Closes https://github.com/microsoft/playwright/issues/32951

`node:http` reuses TCP Sockets under the hood. We weren't cleaning up
our listeners, leading to the `MaxListenersExceededWarning`.

This PR adds cleanup logic. It also raises the warning threshhold, so
that it doesn't trigger until there's 100 concurrent requests over the
same socket.
2024-10-07 18:43:25 +02:00
Simon Knott d3fbf1aaeb
fix(clock): amend setSystemTime docs (#32901)
As discussed yesterday over
https://github.com/microsoft/playwright/issues/32807. Adds some words to
differentiate `setSystemTime` from `setFixedTime`.

---------

Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-10-07 12:12:12 +02:00
Dmitry Gozman e6afb650be
test: mark a few tests as fixme (#32985) 2024-10-07 02:58:03 -07:00
Max Schmitt 001ba37706
test: update webview2 skipme's (#32984)
This leaves only reasonable skipmes for WebView2 in the code base.
2024-10-07 11:08:07 +02:00
Bruno 317ddd4117
docs(best practices): tabs with yarn and pnpm commands added (#32980) 2024-10-07 10:48:30 +02:00
Simon Knott de4a4d1ce1
fix(har timing): record connect timing for proxied connections (#32855)
Fixes a bug discovered in
https://github.com/microsoft/playwright/pull/32647. When using http
proxy, the `connect` event isn't emitted so we don't populate
`tcpConnectionAt`. The updated version of `https-proxy-agent` emits a
`proxyConnect` as a replacement, so this PR updates and listens to that
event.
For socks proxies, the `on("socket")` event is emitted once the SOCKS
connection is established, which is the equivalent of having a TCP
connection available.

---------

Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-10-07 09:59:13 +02:00
Max Schmitt ddeabdf770
devops: speculative fix for flakiness dashboard data loss (#32963) 2024-10-04 18:47:35 +02:00
Dmitry Gozman b284df984b
test: enable test after chromium roll to 1140 (#32965)
Fixes #32355. Fixed after the last roll #32949.
2024-10-04 09:23:11 -07:00
Dmitry Gozman 9f842da8b3
fix: throw when element handle is detached while waiting for selector (#32961) 2024-10-04 08:23:25 -07:00
Dmitry Gozman eaeaa0b158
test: remove tests that we are not going to ever fix (#32962) 2024-10-04 08:22:36 -07:00
Dmitry Gozman 34ad67659f
test: remove some fixmes (#32953) 2024-10-04 08:22:27 -07:00
Simon Knott 40670e6ffd
fix(emulate media): document "no-preference" as deprecated (#32881)
Closes https://github.com/microsoft/playwright/issues/32862.

`prefers-color-scheme: no-preference` was removed from browsers. This PR
marks it as deprecated in our docs and removes all mentions.

---------

Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-10-04 16:49:32 +02:00
Simon Knott 80ff7c396a
chore(docs): fix code highlighting (#32927)
Closes https://github.com/microsoft/playwright/issues/32921

This is the diff when rolling to `playwright.dev` locally:
<img width="1262" alt="Screenshot 2024-10-02 at 14 54 42"
src="https://github.com/user-attachments/assets/aade7ad4-420c-48c4-a2c9-03fe815a3959">

---------

Signed-off-by: Simon Knott <info@simonknott.de>
2024-10-04 16:38:13 +02:00
Simon Knott 6be97f34dd
docs(test-reporters): replace reporter showcase with list of interesting OSS implementations (#32896)
As discussed yesterday, this PR replaces the "reporter showcase" with a
list of interesting implementations for folks who are writing their own
custom reporters.

---------

Signed-off-by: Simon Knott <info@simonknott.de>
2024-10-04 16:29:13 +02:00
Dmitry Gozman 84b4fd4e40
feat: wait for pending navigation to resolve before many actions (#32899)
This includes all actions that perform locator handler check.
    
Note this makes it impossible to interact with the page while a main
frame navigation is ongoing. This was already the case for Chromium, but
now WebKit and Firefox align with it.

Setting `PLAYWRIGHT_SKIP_NAVIGATION_CHECK` environment variable disables
this behavior.
2024-10-04 07:25:18 -07:00
Simon Knott 1b457b1ff8
fix(html reporter): render annotation newlines (#32948)
Closes https://github.com/microsoft/playwright/issues/32925. Before this
change, newlines in annotation descriptions weren't respected. This
change makes them shown. Here's how it looks for this annotation:

```ts
test.info().annotations.push({
  type: 'user story',
  description: '\n- user goes to the page\n- user clicks the button\n- user sees the result',
});
```

Before:

<img width="1071" alt="Screenshot 2024-10-04 at 09 55 15"
src="https://github.com/user-attachments/assets/89e74ff5-ea83-48da-a33b-833423916d95">

After:

<img width="1031" alt="Screenshot 2024-10-04 at 09 51 08"
src="https://github.com/user-attachments/assets/0f2914e8-bd88-4970-aa68-6a5a9828295c">
2024-10-04 14:18:38 +02:00
Simon Knott ff0c498904
fix(ct-vue): update default slot should work (#32952)
Closes https://github.com/microsoft/playwright/issues/32809

We were writing onto the wrong object.
2024-10-04 14:18:21 +02:00
Dmitry Gozman 10d6812058
chore: clear pendingDocument() for the same-document navigation (#32954)
WebKit notifies about a pending same-document navigation through
`Page.frameScheduledNavigation`, and committing it should clear the
`pendingDocument()`.

Extracted from #32899.
2024-10-04 04:54:56 -07:00
Max Schmitt 895be9f8de
chore: lint java docs snippets (#32945) 2024-10-04 11:34:04 +02:00
Playwright Service 0a45549533
feat(chromium): roll to r1140 (#32949)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-04 11:14:08 +02:00
Max Schmitt dfa4ab8726
test: speed up only-changed CT test (#32947) 2024-10-04 10:06:56 +02:00
Yury Semikhatsky d7020cba63
test: scroll mobile page with background-attachment: fixed (#31992)
Reference: https://github.com/microsoft/playwright/issues/31551
Reference: https://github.com/microsoft/playwright/issues/23573
2024-10-03 18:16:49 -07:00
Dmitry Gozman 6b1d0361cd
fix(chromium): reset mouse position upon page reuse (#32944)
Similarly to Firefox, move the mouse to (-1, -1) upon page reuse. This
fixes the corresponding test on all platforms.
2024-10-03 08:09:00 -07:00
Dmitry Gozman d98fa5da2f
test: update some expectations for headed chromium, unskip tests (#32943) 2024-10-03 07:59:48 -07:00
Playwright Service 076a6e84a1
feat(chromium-tip-of-tree): roll to r1266 (#32942)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-03 16:03:30 +02:00
Dmitry Gozman 0ffac886e8
test: fix android tests (#32932)
One test is removed, since it's impossible to fix. Hopefully, the rest
will pass.
2024-10-03 03:37:43 -07:00
Dmitry Gozman 3c5967d4f5
fix(trace viewer): clear old highlighted elements upon change (#32917)
When the list of highlighted elements changes over time, we should
update the elements marked as `__playwright_target__` in the snapshot.

A good example is an `expect(locator).toHaveText([...])` where the list
of elements changes from 4 items to 3 after clicking a "Delete" button.
2024-10-02 23:48:26 -07:00
Playwright Service 616425a0fb
feat(firefox): roll to r1465 (#32938) 2024-10-03 08:25:44 +02:00
Max Schmitt 8715652a0d
devops: don't run codegen tests in trace-events mode (#32810) 2024-10-02 23:22:00 +02:00
Yury Semikhatsky d7651b8f56
chore(bidi): disable firefox tracing on CI (#32935)
Disabling as it produces [too much
output](https://github.com/microsoft/playwright/pull/32908#issuecomment-2387914821).
2024-10-02 11:16:56 -07:00
Simon Knott 29ffcdfc4e
test(html reporter): filtering by type works (#32931)
The folks who opened
https://github.com/microsoft/playwright/issues/32925 would benefit from
filtering by annotation existence. Turns out we already have it! This PR
adds a test to ensure it stays that way.
2024-10-02 16:29:27 +02:00
Dmitry Gozman face24dc66
test: unflake/skip a few tests (#32929) 2024-10-02 06:58:21 -07:00
Max Schmitt 31a4a74598
chore: do not create a GitHub Status Check for merge results (#32928) 2024-10-02 15:23:42 +02:00
Simon Knott 3a5bf1cc1d
fix(trace viewer): reveal stack for highlighted action (#32919)
Closes https://github.com/microsoft/playwright/issues/32915.

In the `Call` and `Logs` tabs, we update the contents based on the
hovered action. We document that this is also the case for the `Source`
tab:


78054a7652/docs/src/test-ui-mode-js.md?plain=1#L61-L65

But it isn't. Not sure if it's a regression or not, but this PR fixes
it.
2024-10-02 13:30:44 +02:00
Max Schmitt 6373fe703d
docs: fix Java/.NET types for docs rolling (#32924) 2024-10-02 13:27:56 +02:00
Max Schmitt 67c37cf813
docs(ci): recommend noble instead of jammy (#32923) 2024-10-02 13:12:11 +02:00
Viet Nguyen Duc dbf7976dd8
docs(selenium): update docker image tag in feat Playwright connect Selenium Grid (#32777) 2024-10-02 11:34:05 +02:00
Simon Knott 6ccaad3a1b
chore: call out that that the vscode extension is for Node.js (#32882)
In https://github.com/microsoft/playwright/issues/32861, an interested
.NET user wanted to try Playwright and found the VS Code Getting Started
guide. It didn't work for them because the VS Code Extension is for
usage with Node.js, and they don't have NPM installed. We can reduce
confusion by mentioning that VS Code Getting started is for Node.js.

---------

Signed-off-by: Simon Knott <info@simonknott.de>
2024-10-02 11:19:51 +02:00
Simon Knott 208a54529d
fix(ct-react): support shorthand fragment notation (#32900)
Closes https://github.com/microsoft/playwright/issues/32853

Vite turns the shorthand fragment notation `<></>` into `import {
Fragment } from "react"; <Fragment></Fragment>`. On the Node.js side of
things, this `react` import resolves to our mock version of React, which
currently mocks `Fragment` as `{}`. Currently, we pass that straight to
`React.createElement`, which throws an error.

The fix is to make our `Fragment` mock detectable with a tag, and when
we render it replace it with the real `__pwReact.Fragment`.
2024-10-02 11:19:09 +02:00
Playwright Service 0fd9452127
feat(webkit): roll to r2084 (#32912)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-02 09:02:32 +02:00
Dmitry Gozman 773202867d
feat(trace): highlight strict mode violation elements in the snapshot (#32893)
This is fixing a case where the test failed with strict mode violation,
but all the matched elements are not highlighted in the trace.

For example, all the buttons will be highlighted when the following line
fails due to strict mode violation:
```ts
await page.locator('button').click();
```

To achieve this, we mark elements during `querySelector` phase instead
of inside `onBeforeInputAction`. This allows us to only mark from inside
the `InjectedScript` and remove the other way of marking from inside the
`Snapshotter`.
2024-10-02 00:00:45 -07:00
Max Schmitt daac0ddd24
fix(fetch): fallback to given URL if baseURL is invalid (#32911) 2024-10-01 22:43:32 +02:00
Max Schmitt c84305ed73
test: retry installation tests up to 3 times (#32910)
Installation tests can fail due to e.g. network issues. Lets align with
library tests and retry up to 3 times.
2024-10-01 13:12:38 -07:00
Yury Semikhatsky 228eb141db
chore(bidi): enable logs in Firefox on CI (#32908) 2024-10-01 11:15:27 -07:00
Max Schmitt 78054a7652
chore: remove 'screenshot instead of snapshot' usages (#32905)
Fixes https://github.com/microsoft/playwright/issues/32904
2024-10-01 18:38:10 +02:00
Playwright Service 00e1a99d65
feat(chromium): roll to r1139 (#32906)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-01 18:18:45 +02:00
Playwright Service 8688af0580
feat(chromium-tip-of-tree): roll to r1265 (#32894)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-01 16:02:21 +02:00
Playwright Service 60db16bad3
feat(chromium): roll to r1138 (#32898)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-01 15:15:00 +02:00
Simon Knott 4bcfa56a13
chore(test runner): mention different timeout (#32883)
In https://github.com/microsoft/playwright/issues/32872, a user notes
that we document `.focus()` to not timeout by default, but in practice
when used without the test runner, it defaults to a 30s timeout.

I've discussed this with Dima, and he noted that our JS documentation
focuses on usage with the Playwright test runner, not with the library.
The test runner disables timeouts for operations in favour of timeouts
for test cases. In the library, we default to a 30s timeouts. This PR
adds this to the "key differences" table.
2024-10-01 11:46:42 +02:00
Max Schmitt 6f16b6cc08
chore: unflake 'should record' (#32880) 2024-09-30 20:32:04 +02:00
Dmitry Gozman 6f99d48a12
test: unflake two tests (#32879)
- the test that closes a context must not be a "page test";
- account for stray browser requests in the proxy test.
2024-09-30 07:49:18 -07:00
Simon Knott c67a7335ab
chore(ui): ensure that --ignore-snapshots is respected (#32875)
Closes https://github.com/microsoft/playwright/issues/32868.

The actual fix was already delivered in
https://github.com/microsoft/playwright/pull/32798/files#diff-98ff2ff92b08ca7e8b274abb3ba6b2eec9bab332e340d062cc18ad1dfe505bf2R299,
this PR adds a test to ensure we don't regress.
2024-09-30 15:12:37 +02:00
Max Schmitt b78103ba50
devops: simplify 'headed' testing matrix (#32878) 2024-09-30 14:40:56 +02:00
Max Schmitt dde8090916
devops: unite channel tests into single GHA matrix workflows (#32876) 2024-09-30 14:24:05 +02:00
Dmitry Gozman 011034050b
chore: update browser patches to 09195c9 (#32877) 2024-09-30 05:14:45 -07:00
Dmitry Gozman 541ce9f0bb
chore: mark 1.49.0-next (#32873) 2024-09-30 04:24:57 -07:00
Max Schmitt d3e38c32af
devops: align macOS versions in workflows (#32871) 2024-09-30 12:42:47 +02:00
Simon Knott aa3146785f
fix(ui): turn "copy as fetch" into text button (#32858)
Turns the "copy as fetch" text with a copy button into a text button, as
discussed in the meeting.


https://github.com/user-attachments/assets/01f72f0b-e3f2-440e-a75d-33385aabeec4
2024-09-30 03:01:56 -07:00
Max Schmitt 412073253f
test: unflake microphone/video tests on macOS 15 (#32870) 2024-09-30 10:31:15 +02:00
Max Schmitt df16f6efb4
test: skip avif test on linux/webkit (#32869) 2024-09-30 10:30:45 +02:00
Adam Patridge 2f7b06736f
chore(contributing.md): markdown list item adjustments (#32859) 2024-09-30 09:48:01 +02:00
Pavel Feldman 11014145ce
chore: update trace event on action merge (#32860) 2024-09-27 21:18:30 -07:00
Pavel Feldman 908b0de5d4
chore: style action list in tv mode (#32845) 2024-09-27 17:52:03 -07:00
Max Schmitt 6721cc1746
chore: disable LensOverlay in Chromium (#32790) 2024-09-27 20:06:27 +02:00
Dmitry Gozman 6bc5c9ca84
docs: release notes for 1.48 (#32857) 2024-09-27 11:06:11 -07:00
Max Schmitt ded567d8f8
test: add test for avif image format (#32815)
Fixes https://github.com/microsoft/playwright/issues/32673
2024-09-27 10:02:54 -07:00
Dmitry Gozman 5947c21dc7
test: brush up fixtures, unflake some tests (#32854) 2024-09-27 07:06:37 -07:00
Dmitry Gozman a395fb22c4
feat(routeWebSocket): address api review feedback (#32850) 2024-09-27 04:01:31 -07:00
Playwright Service d6f584c2d4
feat(chromium-tip-of-tree): roll to r1264 (#32840)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-27 10:06:45 +02:00
Pavel Feldman bcb6860ef5
chore: fix cross browser leak tests (#32843) 2024-09-26 19:33:07 -07:00
Yury Semikhatsky 728b4814b4
test: fix recently added junit tests (#32844) 2024-09-26 19:32:54 -07:00
Pavel Feldman 1a3d3f699b
chore: render recorded action list in tv mode (#32841) 2024-09-26 16:46:27 -07:00
Yury Semikhatsky 5b85c71722
fix(junit): env variable should take precedence over config (#32842)
Fixes https://github.com/microsoft/playwright/issues/32826
2024-09-26 15:29:09 -07:00
Pavel Feldman c105de4436
chore: move actions types to recorder (#32839) 2024-09-26 14:50:09 -07:00
Max Schmitt 0d79291604
chore: hide screenshot instead of snapshot Trace Viewer feature (#32832) 2024-09-26 22:30:41 +02:00
Playwright Service 463bd55cf0
feat(webkit): roll to r2083 (#32813) 2024-09-26 21:49:02 +02:00
Pavel Feldman 9bff4d7eab
chore: move sw files into the sw/ folder (#32837) 2024-09-26 11:22:20 -07:00
Yury Semikhatsky e8d08e8d1e
docs: more prominent note on tags being read-only (#32836)
Reference https://github.com/microsoft/playwright/issues/32828
2024-09-26 09:41:38 -07:00
Dmitry Gozman d07f6cfc5c
docs: check that description has an empty line before it (#32830) 2024-09-26 06:31:42 -07:00
Dmitry Gozman 6465f0b1bd
test: make sure custom asymmetric matchers work (#32829)
This adds a test for a regression introduced by #32366 and fixed by
#32795.
2024-09-26 06:27:37 -07:00
Max Schmitt 3b86a9c0e4
docs(markdown): parse :::note's text as children (#32510) 2024-09-26 15:16:26 +02:00
Dmitry Gozman a2bdb2fd79
docs: linkify params and options (#32823)
References https://github.com/microsoft/playwright/issues/32590.
2024-09-26 05:13:00 -07:00
Dmitry Gozman a9d5c39d40
chore: address api review for page.forceGarbageCollection (#32824)
- Renamed to `page.requestGC`.
- Added a useful snippet to the docs.

References #32278.

---------

Signed-off-by: Dmitry Gozman <dgozman@gmail.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-09-26 05:08:33 -07:00
Playwright Service 6c20318e5c
feat(chromium): roll to r1137 (#32827)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-26 13:58:55 +02:00
Dmitry Gozman ff954b58eb
fix(test runner): cleanup DEBUG_COLORS usage (#32764)
`DEBUG_COLORS` we default to `1`, but we should not do that when it is
already defined to some value supplied by the user.

Closes #32543.
2024-09-26 03:15:46 -07:00
Dmitry Gozman e5433d0576
chore(docs): validate params/options links (#32820)
Also supports fully-qualified links like this:
```
[`option: BrowserType.launch.headless`]
```

References https://github.com/microsoft/playwright/issues/32590.
2024-09-26 01:08:16 -07:00
Yury Semikhatsky 597642d269
chore: pass cli config overrides straight to test server (#32818) 2024-09-25 19:45:59 -07:00
Pavel Feldman 61801aa1ee
chore: more codegen fixes (#32816) 2024-09-25 18:18:36 -07:00
Yury Semikhatsky 0480bd0cac
chore(bidi): launch firefox with user prefs tailored for testing (#32817)
Various settings that make Firefox behave when testing over Bidi. The
settings are copied from
ea36b7b1f0/packages/browsers/src/browser-data/firefox.ts (L190-L402).

Unlike Playwright bundled version, we write the settings into `user.js`
in the profile folder before launching the browser.
2024-09-25 18:17:07 -07:00
Yury Semikhatsky b6783bb18b
fix(ui-mode): respect --tsconfig option (#32798)
Fixes https://github.com/microsoft/playwright/issues/32797
2024-09-24 19:59:15 -07:00
Pavel Feldman 35158feec0
chore: fix codegen flakiness (#32799) 2024-09-24 19:56:31 -07:00
Pavel Feldman 755edfba5b
chore: fallback expect.extend to legacy (#32795) 2024-09-24 14:00:13 -07:00
Playwright Service a4cea0c208
feat(webkit): roll to r2082 (#32793) 2024-09-24 19:46:12 +02:00
Max Schmitt dd91afa736
test: retry page-leak object count checks (#32794) 2024-09-24 18:48:54 +02:00
Playwright Service 0b69b1370a
feat(chromium-tip-of-tree): roll to r1263 (#32791)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-24 14:44:27 +02:00
Max Schmitt 5e7d7f356b
test: skip codegen tracing tests in PWTEST_TRACE mode (#32788) 2024-09-24 12:35:05 +02:00
Max Schmitt 137f192d55
test: add different expectation for macOS/headed 'should work for canvas' (#32774) 2024-09-24 12:27:36 +02:00
Max Schmitt b01dd55697
docs: use node-version: lts/* in GHA examples (#32789) 2024-09-24 12:23:47 +02:00
Max Schmitt 057a3187fc
devops: add logging for report name when uploading to flakiness dashboard (#32786) 2024-09-24 12:20:39 +02:00
Max Schmitt 76c3077a69
test: retry oopif boundingBox assertions (#32787) 2024-09-24 12:02:40 +02:00
Max Schmitt 995c73e9d9
test: skip WebKit WebGL tests on Intel macOS (#32784) 2024-09-24 11:55:17 +02:00
Dmitry Gozman 59700aa9f1
chore: brush up documentation scripts (#32782)
References #32590.
2024-09-24 02:51:09 -07:00
Pavel Feldman 22c76aacad
chore: roll rollup to fix audit (#32778) 2024-09-23 20:01:08 -07:00
Pavel Feldman 8649b13f25
chore: start putting tv-recorder ui together (#32776) 2024-09-23 19:13:45 -07:00
Playwright Service 7c3dd70bf6
feat(webkit): roll to r2081 (#32738) 2024-09-23 19:08:01 -07:00
Yury Semikhatsky eda0e01167
chore(bidi): bring to front, pdf (#32698) 2024-09-23 19:05:55 -07:00
Yury Semikhatsky fbeba6619a
devops(bidi): increase global timeout to 60m (#32775)
Firefox tests are running out of time on CI.
2024-09-23 17:55:30 -07:00
Max Schmitt 8557b98aee
test: fix CR/LF warning on only-changed tests (#32772) 2024-09-24 01:32:36 +02:00
Pavel Feldman c7a5278fb3
fix: do not start tracing in default recorder (#32770) 2024-09-23 15:51:27 -07:00
Pavel Feldman 0c8b2a7c32
chore: take snapshot tab apart (#32756) 2024-09-23 15:51:15 -07:00
Yury Semikhatsky 11320d34c6
Revert chore: ignore third-party execution contexts (#32437) (#32771)
Partially revert #32437 and add a test that console.log() messages from
content scripts are properly reported

Fixes https://github.com/microsoft/playwright/issues/32762
2024-09-23 15:48:11 -07:00
Max Schmitt 0ee9a82926
test: skip 'should work with error after successful open' on WebKit Windows (#32769) 2024-09-23 23:31:04 +02:00
Yury Semikhatsky c9a26e60f5
fix(webkit): 204 response is not a failure (#32768)
The login being changed was added in
https://github.com/microsoft/playwright/pull/1260 and is supposed to
only work for navigation requests.

Reference: https://github.com/microsoft/playwright/issues/32752
2024-09-23 14:30:40 -07:00
Max Schmitt 26dc8955d3
docs: explain glob patterns (#32728) 2024-09-23 22:22:57 +02:00
Mathias Leppich 281eff1209
docs(trial): note that modifier keys are pressed regardless of trial option (#32734) 2024-09-23 22:17:47 +02:00
Pavel Feldman 0cdc7ee1a3
chore: extract polling recorder (#32749)
We are reusing recorder in a snapshot tab, no need for the polling
harness to be there.
2024-09-23 08:42:18 -07:00
Playwright Service 99895005e2
feat(chromium-tip-of-tree): roll to r1262 (#32760)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-23 14:47:44 +02:00
Max Schmitt 12ecd476dd
fix(watch): cancel waitForCommand when files change (#32761)
Fixes https://github.com/microsoft/playwright/issues/32758
2024-09-23 14:43:28 +02:00
Dmitry Gozman b3a82bef46
feat: do not record route calls in the trace (#32723)
These are represented in the network pane instead.
2024-09-21 10:17:59 -07:00
Pavel Feldman 17ed944a84
chore: iterate towards recording into trace (4) (#32743) 2024-09-20 16:56:05 -07:00
Pavel Feldman 418d1c0c55
chore: allow starting recorder in traceviewer (#32741) 2024-09-20 15:25:49 -07:00
Pavel Feldman dfb3fdf217
chore: iterate towards recording into trace (3) (#32718) 2024-09-20 13:08:33 -07:00
Yury Semikhatsky bef1e990ac
chore(bidi): run firefox tests against nightly build (#32737) 2024-09-20 12:57:10 -07:00
Yury Semikhatsky 5c20f0c534
test: pressing tab should trigger blur event (#32719)
Reference: https://github.com/microsoft/playwright/issues/32339
2024-09-20 12:03:25 -07:00
Max Schmitt 7cd69beed2
test: unflake 'should properly synchronize local and remote time' test (#32733) 2024-09-20 20:21:57 +02:00
Playwright Service 33890eb6c5
feat(webkit): roll to r2080 (#32721)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-09-20 08:28:46 -07:00
Dmitry Gozman cdcaa7fab6
feat: routeWebSocket (#32675)
This introduces `WebSocketRoute` class and
`page/context.routeWebSocket()` methods.
2024-09-20 03:20:06 -07:00
Dmitry Gozman ace8cb2427
fix(test runner): page.pause() should enable debug mode (#32714)
Fixes #32706.
2024-09-20 00:41:16 -07:00
Playwright Service 935aa6b020
feat(webkit): roll to r2079 (#32720)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-20 09:34:31 +02:00
Pavel Feldman 01b44ba077
chore: remove PWTEST_RECORDER_PORT as it was ignored (#32717) 2024-09-19 13:35:52 -07:00
Pavel Feldman a00e1c9c4b
chore: make recorder tests match order of codegen calls (#32716) 2024-09-19 10:31:44 -07:00
Max Schmitt 2b2a57abad
chore: enable @babel/plugin-syntax-import-attributes all the time (#32713) 2024-09-19 16:51:35 +02:00
Dmitry Gozman cc302fa515
fix(chromium): allow PlzDedicatedWorker (#32711)
With the recent Chromium fixes in v129, it is now safe to enable this
feature.

Fixes #31747.
2024-09-19 06:38:58 -07:00
Playwright Service ea284f2986
feat(chromium-tip-of-tree): roll to r1261 (#32709)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-19 14:47:03 +02:00
Playwright Service e8e72deac2
feat(chromium): roll to r1136 (#32707)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-19 14:35:48 +02:00
Dmitry Gozman 5089d9f293
fix(chromium): disable ThirdPartyStoragePartitioning (#32701)
See
https://developers.google.com/privacy-sandbox/cookies/storage-partitioning
for more details.

References #32230.
2024-09-19 03:12:21 -07:00
Max Schmitt 61cbca6695
test: fix client-certificate tests (#32691) 2024-09-19 12:03:05 +02:00
Max Schmitt 48030a4eff
test: fix test expecations after Node.js 22.9.0 (#32695) 2024-09-19 10:52:29 +02:00
Pavel Feldman 2f4acbb001
chore: use contentFrame() as a canonical locator representation (#32697) 2024-09-18 20:15:01 -07:00
Pavel Feldman 790dbfd78f
fix(codegen): use content_frame property in python (#32699) 2024-09-18 19:11:14 -07:00
Yury Semikhatsky 3d306da767
chore: roll chromium-bidi (#32696)
It implements network.setCacheBehavior which should unblock some
interception tests
2024-09-18 17:23:26 -07:00
Yury Semikhatsky 48d3d5554d
chore(bidi): suppress crash reporter in firefox (#32694)
Same settings as geckodriver uses upstream:
https://searchfox.org/mozilla-central/rev/c414b4538dd3c7e1dc674f7b66176e7c309afa95/testing/geckodriver/src/browser.rs#130-132
2024-09-18 16:02:10 -07:00
Pavel Feldman 427eca6f7e
chore: iterate towards recording into trace (2) (#32693) 2024-09-18 14:39:07 -07:00
Dmitry Gozman f9d9ad25de
feat(locator handler): perform checkpoit during locator.waitFor (#32683)
Fixes #32255.
2024-09-18 09:34:06 -07:00
Max Schmitt d4eecafa8a
test: listen always on 127.0.0.1 for client certificate tests (#32677) 2024-09-18 17:09:08 +02:00
Max Schmitt 523ec83cad
chore: move Location type from testReporter.d.ts to test.d.ts (#32687) 2024-09-18 16:57:11 +02:00
Playwright Service ddd43d0f20
feat(webkit): roll to r2078 (#32685)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-18 15:50:43 +02:00
Max Schmitt ec3db20743
test: fix toolbar hydration test under frozen suite (#32684) 2024-09-18 15:35:33 +02:00
Simon Knott 825df6c074
feat(har): record serverIPAddress for API requests (#32660)
Discovered working on
https://github.com/microsoft/playwright/pull/32658. We're recording the
remote server address for browser requests, but not for API requests.
This PR adds that for API requests.
2024-09-18 14:51:42 +02:00
Playwright Service 7d4aa0aa8e
feat(chromium-tip-of-tree): roll to r1260 (#32651)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-18 14:37:19 +02:00
Max Schmitt 4c31a8289f
feat(trace-viewer): add network requests 'copy as cURL' button (#32627) 2024-09-18 14:35:11 +02:00
Max Schmitt 9fc195bff5
test: update cookie expectations for macOS 15 (#32674) 2024-09-18 11:08:17 +02:00
Simon Knott 4460c98710
fix(har tracing): record response.bodySize for API requests (#32656)
A small drive-by that came out of working on
https://github.com/microsoft/playwright/issues/32653.
2024-09-18 08:21:10 +02:00
Simon Knott 8a97050822
feat(har): record securityDetails for API Requests (#32664)
While working on https://github.com/microsoft/playwright/pull/32658 I
discovered that we're recording `securityDetails` for browser requests,
but not for API requests. This PR fixes that.
2024-09-18 08:18:47 +02:00
Simon Knott 443f72dcbe
feat(watch): hide show-report prompt (#32666)
Closes https://github.com/microsoft/playwright/issues/32665
2024-09-18 08:17:13 +02:00
Pavel Feldman 355c88f48f
chore: iterate towards recording into trace (#32646) 2024-09-17 18:26:44 -07:00
Yury Semikhatsky 623b2e6bc8
chore: bump vite dependency 5.0.13->5.4.6 (#32672)
Fixes the following:

```
npm audit report

vite  5.0.0 - 5.2.13
Severity: moderate
Vite DOM Clobbering gadget found in vite bundled scripts that leads to XSS - https://github.com/advisories/GHSA-64vr-g452-qvp3
```
2024-09-17 17:01:38 -07:00
Yury Semikhatsky 4c4d74ca5b
chore: page.screenshot() in bidi (#32671)
The results are copied from the existing chromium expectations.
2024-09-17 16:51:56 -07:00
Yury Semikhatsky 8b84b20dd0
chore: back-forward in bidi (#32670) 2024-09-17 16:02:13 -07:00
Yury Semikhatsky 375a1c4982
chore: exposeBinding/exposeFunction in bidi (#32669) 2024-09-17 15:37:42 -07:00
Yury Semikhatsky ad70e7a783
fix(trace-viewer): time delta between local and remote actions (#32661) 2024-09-17 11:14:15 -07:00
Simon Knott f1390cc269
chore(har recorder): ensure we respect minimal mode (#32658)
Closes https://github.com/microsoft/playwright/issues/32653.

Adds some test coverage to ensure we respect minimal mode for API
Requests in HAR tracing.

| omit setting | result |
| - | - |
| `omitCookies` |  added test for it |
| `omitTiming` | already covered |
| `omitSecurityDetails` | not recorded yet |
| `omitServerIP` | we don't record it yet, so no action here. gonna open
a separate issue |
| `omitPages` | not relevant to API requests |
| `omitSizes` | added test for it |
| `omitScripts` | not relevant to API requests |
2024-09-17 19:59:44 +02:00
오소현 8761dafc73
feat(test runner): allow to pass arbitrary location to test.step (#32504)
Fixes https://github.com/microsoft/playwright/issues/30160

### Description:
This pull request introduces the ability to specify custom locations for
test steps in Playwright. By enabling the provision of arbitrary
locations to the test.step method, it resolves the limitation where
helper methods obfuscate the original call site, providing more accurate
and meaningful location data in test reports.

### Motivation:
To enhance the utility and clarity of test reports in Playwright.
Specifically, it addresses the need to trace test steps back to their
precise location in the code, which is especially important when steps
are abstracted in helper functions. This feature is crucial for
maintaining accurate documentation and facilitating debugging processes.

### Changes:
Added functionality to pass a custom location object to test.step.

### Expected Outcome:
This PR is expected to significantly improve the precision and
usefulness of diagnostic data in test reports by allowing specific
locations within helper functions to be accurately documented. It
facilitates better tracking of test executions and simplifies the
debugging process, making it easier for developers to understand and
address issues within complex tests.

### References:
Closes https://github.com/microsoft/playwright/issues/30160 -
"[Feature]: allow to pass arbitrary location to test.step"

**Code Check**
I conducted tests on this new feature by integrating it into some
existing test codes, and it worked well. I will attach the code used for
testing and a screenshot showing the successful outcome.

<details>
<summary>toggle dropdown</summary>
<div markdown="1">

```
import type { Location } from '../../../packages/playwright/types/testReporter'
...
test('should respect the back button', async ({ page }) => {
    await page.locator('.todo-list li .toggle').nth(1).check();
    await checkNumberOfCompletedTodosInLocalStorage(page, 1);
...
    await test.step('Showing active items', async () => {
      await page.getByRole('link', { name: 'Active' }).click();
    }, {location});
```

<img width="1109" alt="image"
src="https://github.com/user-attachments/assets/359feafa-0949-4c71-9426-46debef21bdd">
</div>
</details>
2024-09-17 08:11:21 -07:00
Max Schmitt 507e515cb2
chore: remove unused @babel/parser (#32654) 2024-09-17 16:14:24 +02:00
Simon Knott 751b939d3a
feat(fetch): record timings (#32613)
Related to https://github.com/microsoft/playwright/issues/19621

Adds some instrumentation to collect timings for `APIRequestContext`
requests and adds them to the HAR trace. Doesn't yet expose them via an
API, but makes our `Duration` field in the trace viewer show a nice
duration:

<img width="1392" alt="Screenshot 2024-09-14 at 11 46 04"
src="https://github.com/user-attachments/assets/8020382d-9494-4634-9cfd-22b6f4a1d770">


I'm gonna add it to our API in a separate PR.

---------

Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-09-17 16:11:21 +02:00
Max Schmitt c216c25a1d
feat(html-reporter): add file name copy button (#32652) 2024-09-17 15:54:22 +02:00
Simon Knott f6219e6e79
Revert "feat(tracing): add .pwtrace to trace file extension" (#32648)
Reverts microsoft/playwright#32581
Relates
https://github.com/microsoft/playwright/issues/32226#issuecomment-2351164727
2024-09-17 15:32:30 +02:00
Ana Margarida Silva b23edf5137
fix(docs): remove todo in ci intro docs (#32643) 2024-09-17 10:36:43 +02:00
Simon Knott ec2ae1ed2d
feat(watch mode): buffer mode (#32631)
Closes https://github.com/microsoft/playwright/issues/32578.

Adds a buffer mode that can be toggled by pressing <kbd>b</kbd>. When
engaged, changed test files are collected and shown on screen. The test
run is then kicked off by pressing <kbd>Enter</kbd>.

This changes the signal to start a test run from <kbd>Cmd+s</kbd> to a
<kbd>Enter</kbd> press in the test terminal. It should help users with
auto-save and make it easier to run on long-running tests. It feels very
similar to running `npx playwright test`, but without having to write a
filter.



https://github.com/user-attachments/assets/71e16139-9427-4e90-b523-8d218f09ed9d
2024-09-17 08:45:44 +02:00
Simon Knott b0f15b320f
fix(recorder): reattach toolbar if it was unmounted by framework hydration (#32637)
Closes https://github.com/microsoft/playwright/issues/32632. A side
effect of Remix's hydration implementation is that it throws away the
entire DOM. This is broadly discussed in
https://github.com/remix-run/remix/issues/4822 - there might be a fix in
coming React versions, but who knows.
Besides breaking browser extensions, this also deletes our toolbar!
This PR fixes it by periodically checking in on `x-pw-glass`, and
remounting it if it was unmounted. Hacky but effective!
2024-09-17 08:37:49 +02:00
Pavel Feldman 47713e8a66
chore: make recorder tests pass in frozen mode (#32645) 2024-09-16 22:47:54 -07:00
Pavel Feldman 3bff7b6ab1
chore: preserve selected trace action in live trace (#32630) 2024-09-16 17:33:52 -07:00
Yury Semikhatsky 2a347b5494
chore: support launchPersistentContext with bidi (#32641) 2024-09-16 17:31:26 -07:00
Pavel Feldman 6dbde62a6b
chore: simplify signal handling while recording (#32624) 2024-09-16 14:39:36 -07:00
Pavel Feldman 92c6408b94
fix(recorder): address the react race condition (#32628) 2024-09-16 13:47:13 -07:00
Dmitry Gozman ce06a81aa6
feat: make npx playwright clear-cache public (#32638) 2024-09-16 12:54:20 -07:00
Max Schmitt 21d162c945
feat(client-certificates): add support for proxies (#32611)
Fixes https://github.com/microsoft/playwright/issues/32370
2024-09-16 17:57:33 +02:00
Max Schmitt b335b00a86
docs: add reference to locator strictness if or resolves to multiple elements (#32633) 2024-09-16 17:30:14 +02:00
Playwright Service feac957475
feat(webkit): roll to r2077 (#32636)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-16 17:18:01 +02:00
Anthony Roberts 71c43693ac
feat(reporter): add copy button for annotations (#31790)
Adds a copy-to-clipboard button for each annotation so that text can be
copied easily.
This re-uses the existing `CopyToClipboard` component and adds a `small`
variant that can be used inline. The icon size and colour have been
chosen to avoid being overwhelming when used inline.

Related to #30141 
I opted not to introduce the hover behaviour from #30749 as it's less
discoverable, but can understand why that might be favourable. Certainly
open to suggestions 😄

<img width="379" alt="Screenshot 2024-07-22 at 3 23 53 PM"
src="https://github.com/user-attachments/assets/3b9998cf-2e8d-40c9-9c8a-64eab3a9ed2e">
2024-09-16 07:57:11 -07:00
Max Schmitt 762e954599
devops: update GitHub Actions (#32634)
Fixes: 
<img width="2205" alt="image"
src="https://github.com/user-attachments/assets/0cd09784-6f0b-4331-9e08-315cf8614031">

For future reference: `pip install github-actions-cli &&
github-actions-cli update-actions --update`
2024-09-16 15:43:42 +02:00
Dmitry Gozman 268357238a
fix(expect): respect custom message in expect.poll (#32603)
Fixes #32582.
2024-09-16 00:10:06 -07:00
Max Schmitt c24ad36f86
docs(docker): fix Docker container permissions (#32621) 2024-09-16 07:39:36 +02:00
Simon Knott aeb4d182f7
feat(tracing): add .pwtrace to trace file extension (#32581)
Closes https://github.com/microsoft/playwright/issues/32226

I've updated every mention of `.trace.zip` except for the release notes.
2024-09-14 10:17:07 +02:00
Yury Semikhatsky 34876e9291
chore: cookies in intercepted bidi requests (#32623) 2024-09-13 18:29:35 -07:00
Matthew Jee f2a974b045
feat(api): add method to force garbage collection (#32383) 2024-09-13 23:09:36 +02:00
Playwright Service 5b28d2a84c
feat(firefox): roll to r1464 (#32614)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-13 18:12:43 +02:00
Playwright Service b82100adf5
feat(firefox-beta): roll to r1464 (#32615)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-13 18:12:35 +02:00
Max Schmitt 79cba7d704
chore: introduce option overrides on context/browser (#32606) 2024-09-13 17:34:34 +02:00
Simon Knott 9bb1c86f93
feat(test runner): don't run tests on --watch start (#32583)
Closes https://github.com/microsoft/playwright/issues/32580.
2024-09-13 17:24:38 +02:00
Max Schmitt 9e99c86f00
chore: unhide merge-reports command (#32605) 2024-09-13 16:13:23 +02:00
Playwright Service e3370c9eb0
feat(webkit): roll to r2075 (#32610)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-13 15:13:11 +02:00
Simon Knott 48c7fb6b06
feat(library): accept FormData in fetch (#32602)
Closes https://github.com/microsoft/playwright/issues/26520 by accepting
`FormData`, which became stable in Node.js in v21.
2024-09-13 13:21:02 +02:00
Pavel Feldman cd4dabef8b
chore: remove stray codegen signal handling (#32599) 2024-09-12 14:38:23 -07:00
Pavel Feldman 7e3348eb0e
chore: recorder is trace viewer experiment (#32598) 2024-09-12 13:39:44 -07:00
Pavel Feldman de08e729ae
chore: move recorder trace to action collector (#32597) 2024-09-12 12:42:28 -07:00
Pavel Feldman d051495c7a
chore: perform double click while recording (#32576) 2024-09-12 11:40:44 -07:00
Max Schmitt 5e086be36b
chore: freeze ffmpeg on macOS-12 (#32596) 2024-09-12 20:32:34 +02:00
Max Schmitt 8e82f53ceb
test: unskip various proxy tests (#32595)
Unskipping of various tests and revert the rest of
https://github.com/microsoft/playwright/pull/6350 since the upstream bug
has been fixed.
2024-09-12 20:31:22 +02:00
Simon Knott ef4be6afff
feat(test runner): make expect.extend immutable (#32366)
Changes `expect.extend` behaviour so that it doesn't mutate the global
instance and behaves closer to what users expect. This is formally a
breaking change, and I had to remove a test that asserts the breaking
behaviour.

TODO:
- [x] decide wether this is a separate method or a flag for
`expect.extend`
- [x] figure out if we need to change docs
2024-09-12 19:56:38 +02:00
Simon Knott c9f3eb158e
feat(ui): highlight output toggle button if terminal contains error (#32392)
Closes https://github.com/microsoft/playwright/issues/32368

<img width="412" alt="Screenshot 2024-08-30 at 13 22 39"
src="https://github.com/user-attachments/assets/76cadcd9-e92a-44d9-80fc-b4e04702e71e">
2024-09-12 19:40:40 +02:00
Playwright Service 470b1b4922
feat(chromium-tip-of-tree): roll to r1259 (#32588)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-12 13:46:33 +02:00
Playwright Service b1b33efebb
feat(chromium): roll to r1135 (#32591)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-12 13:46:15 +02:00
Max Schmitt 491678ada6
docs: release note fixes for 1.47 (#32589) 2024-09-12 12:51:30 +02:00
Teng Yang 6a0009f9ed
fix(trace-viewer): fix ui issue on network request details (#32553) 2024-09-12 12:26:51 +02:00
Max Schmitt dc5bbbf295
devops: remove macos-12 bots (#32587)
We stopped supporting macos-12 in 1.45, see the release notes and
https://github.com/microsoft/playwright/pull/31283.
2024-09-12 11:27:47 +02:00
Max Schmitt a838e74c61
devops: move macos runners to public infra (#32586) 2024-09-12 10:50:05 +02:00
Yury Semikhatsky d1926e2f9b
chore: do not store project name in expectations (#32575) 2024-09-11 15:15:10 -07:00
Yury Semikhatsky 678c454fea
test: update bidi expectations from recent run (#32574) 2024-09-11 14:59:28 -07:00
Yury Semikhatsky fd1f32556b
chore: run all tests with bidi by default (#32572)
Only use expectation files on CI to save resources
2024-09-11 14:24:32 -07:00
Dmitry Gozman 1981989aef
docs: mention variability of media codecs between platforms (#32569)
References #32558.
2024-09-11 13:35:17 -07:00
Yury Semikhatsky a8103abee6
chore: incremental bidi expectation update, ff expectations (#32570)
* Do not override expectations for the tests that didn't run or already
had expectations
* Sort expectations alphabetically
* Add firefox expectations
2024-09-11 13:33:25 -07:00
Dmitry Gozman 29a0f49e9b
chore(test runner): simplify code around running tasks (#32557)
This avoids complex boilerplate around `onConfigure`/`onEnd`/`onExit`
and managing the resulting status.
2024-09-11 13:09:00 -07:00
Playwright Service 6f52834f74
feat(webkit): roll to r2073 (#32563)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-11 20:39:01 +02:00
Max Schmitt 7458c3292c
fix(test-runner): do not consider retries for maxFailures (#32533)
Fixes https://github.com/microsoft/playwright/issues/26350
2024-09-11 20:35:26 +02:00
Yury Semikhatsky 1f0514536e
chore: add bidi test expectations in separate file (#32549)
Based on the expectations the tests that are expected to timeout or fail
will be skipped to save resources. The expectations can be manually
updated when corresponding feature is fixed.
2024-09-11 08:28:29 -07:00
Playwright Service aaac57b948
feat(webkit): roll to r2072 (#32550)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-11 13:02:03 +02:00
Dmitry Gozman 7335fa602c
fix(trace viewer): do not show multiple action points in iframes (#32537)
When action has an input target, we assume there is a target element in
one of the frames and show action point in its center.

Fixes #32453.
2024-09-11 03:04:03 -07:00
Yury Semikhatsky a4bd551597
docs: TestInfo.titlePath does not include project (#32548) 2024-09-10 16:52:12 -07:00
Dmitry Gozman 356517cddb
chore(test runner): extract LastRunReporter (#32540) 2024-09-10 12:14:44 -07:00
Dmitry Gozman b5d968fa0e
chore: make ReporterV2 a partial interface (#32532)
This makes it easier to write reporters by avoding empty methods.
2024-09-10 06:08:54 -07:00
Simon Knott ec40890fd8
fix(tracing): use page swap timestamp to find closest screenshot (#32512)
Follow-up to https://github.com/microsoft/playwright/pull/32248. When we
have it, we should use the page swap timestamp we get from Chromium to
find the closest screenshot.
2024-09-10 14:32:33 +02:00
Rui Figueira f8562e4ca7
chore: improve error message when Array.toJSON misbehaves (#32508)
Fixes: #32507
2024-09-10 04:14:24 -07:00
Max Schmitt 9fa06be49e
fix(ct): throw error if inline component is getting mounted (#32531)
What was happening?
- When we use CT, we go over the test files, look at the imports using
`tsxTransform.ts` and store them inside a map, these we feed into the
import registry which we build using Vite and have access inside the
browser
- In case of an inline component in the same file as where the test file
is, this is not happening.
- jsx-runtime via babel kicks in, transforms every JSX component in
something like that:

```
{
  __pw_type: 'jsx',
  type: [Function: MyInlineComponent],
  props: { value: 'Max' },
  key: undefined
}
```

this then gets passed into `wrapObject` which maps any function from the
Node.js side into expose function calls so they work inside the browser.
The assumption for `wrapObject` was to do it mostly for callbacks. So it
does for `type` - which is actually our component. We then pass this to
the React render function, which calls back the exposed function but we
never return anything, so it mounts `undefined`.

---

While there have been experiments from certain vendors to get the
'client only' code inside a server side file, we should throw for now to
not confuse users. We might revisit this in the future since Babel / TSX
doesn't support it outside of the box.

Fixes https://github.com/microsoft/playwright/issues/32167
2024-09-10 11:15:20 +02:00
Playwright Service 8995ace825
feat(firefox-beta): roll to r1463 (#32529) 2024-09-10 08:57:40 +02:00
Yury Semikhatsky c8a72d63ad
chore: run bidi firefox tests on ci (#32527) 2024-09-09 17:22:19 -07:00
Pavel Feldman 6d5889a52c
chore: revert the matcherResult in API (#32524) 2024-09-09 16:44:32 -07:00
Dmitry Gozman ae118674b8
fix(test runner): allow directory imports with path mapping (#32491)
We now hopefully align with `moduleResolution: bundler` tsconfig option,
allowing directory imports in every scenario, and allowing proper module
imports when not going through the type mapping.

This regressed in #32078. Fixes #32480, fixes #31811.
2024-09-09 14:01:20 -07:00
Dmitry Gozman 6bb005db85
fix(test runner): improve error message when not able to parse tsconfig (#32526) 2024-09-09 14:01:02 -07:00
Dmitry Gozman e6c5b6054d
test: fix project filter test (#32525)
It was erroneously passing projects separate by comma, which never
worked.
2024-09-09 14:00:51 -07:00
Max Schmitt e5d6ee5bd8
chore: merge fetch params on server side (#32518)
https://github.com/microsoft/playwright-python/pull/2546#discussion_r1750090592
2024-09-09 22:28:08 +02:00
Pavel Feldman 9a313eecc9
chore: roll expect and move it to third party (#32458) 2024-09-09 13:12:20 -07:00
Max Schmitt 4b5422a3c7
fix(ui-mode): use server side path separator (#32523)
Fixes https://github.com/microsoft/playwright/issues/32323
2024-09-09 22:07:28 +02:00
Playwright Service 363e79ee87
feat(webkit): roll to r2071 (#32521)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-09 20:07:37 +02:00
Yury Semikhatsky d030965688
chore: addInitScript and auth (unsuccessful) in bidi (#32500) 2024-09-09 10:13:26 -07:00
Max Schmitt 728083b435
chore: allow query as string in Python/.NET (#32516)
https://github.com/microsoft/playwright-python/issues/2497
2024-09-09 15:49:59 +02:00
Sander 4a53973fd0
docs(ct): vue + jsx and general improvements (#32212)
partial fix for:
https://github.com/microsoft/playwright/issues/31927#issuecomment-2267065378

---------

Signed-off-by: Sander <info@mesander.com>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-09-09 05:09:18 -07:00
Simon Knott cc9c4cdd9a
chore: fix flaky screenshot test (#32517)
In this test, the trace recording goes super fast. Sometimes, this means
that the recording is finished before the screen recorder got a chance
to take a screenshot. If that happens, the tests fail because we never
show a screenshot.
This PR fixes the flakiness by delaying the trace recording so that
there's always a screenshot taken.
2024-09-09 14:00:38 +02:00
Simon Knott 31e269ad06
feat(trace-viewer): show screenshot pointer (#32514)
Follow-up to https://github.com/microsoft/playwright/pull/32248. Adds a
glowing red circle that shows the click position. I made it glowing to
show that its position is inaccurate.
<img width="964" alt="Screenshot 2024-09-09 at 11 33 45"
src="https://github.com/user-attachments/assets/1903071d-6dc0-46c7-9951-844e49a51f35">
2024-09-09 14:00:22 +02:00
Max Schmitt ae02331d00
test: fix stress tests bots (#32513) 2024-09-09 12:52:40 +02:00
Max Schmitt 718bd9b35f
devops: run BiDi tests (#32493) 2024-09-07 09:16:42 +02:00
Yury Semikhatsky f3ada9c654
chore: wheel input in bidi (#32499) 2024-09-06 17:10:14 -07:00
Yury Semikhatsky 37bc485827
chore: remove browser-specific bidi hacks (#32498)
Those were just workarounds for browser-specific bugs, they should be
fixed upstream.
* individual mouse down/up/down/up events don't trigger dblclick event
in Firefox
* setContent throws when document.open/write is called in the utility
context in Firefox
2024-09-06 16:40:24 -07:00
Yury Semikhatsky a113553f14
test: allow running oopif test without newBrowserCDPSession (#32496) 2024-09-06 13:49:37 -07:00
Yury Semikhatsky df2bc2d0dc
test: worker interception for existing workers (#32494)
Failing test for https://github.com/microsoft/playwright/issues/32355
2024-09-06 13:17:49 -07:00
Yury Semikhatsky 11441c0fe1
fix: add missing await in adoptIfNeeded (#32497)
Otherwise it throws in Bidi.
2024-09-06 13:17:32 -07:00
Yury Semikhatsky d85527e9f6
test: some tests for expected API behavior (#32495)
Adding some tests discussed in
https://github.com/microsoft/playwright/pull/32434
2024-09-06 13:13:44 -07:00
Dmitry Gozman 1402dee9e6
Revert "fix(test runner): align with typescript behaviour for resolving index.js and package.json through path mapping (#32078)" (#32492)
This reverts commit effb1ae234.

This broke path mapping into directories in ESM mode. References #32480.
2024-09-06 12:08:10 -07:00
Simon Knott 3fe1263643
feat(trace viewer): show Screenshot instead of Snapshot (#32248)
Closes https://github.com/microsoft/playwright/issues/23964.

Trace snapshots are a best-effort snapshots of the browser DOM, but we
can't guarantee them to be exactly what the browser showed. One example
of this is `canvas` elements, where you just can't see their contents.
That makes snapshots useful, but not perfect.

For those cases where the snapshot doesn't show everything, this PR
introduces a new setting to show a screenshot instead. You won't be able
to scroll or inspect the DOM or select a locator anymore. But if the
snapshot was missing something, or displaying something wrong, you can
now check the screenshot instead.
2024-09-06 16:24:33 +02:00
Max Schmitt ed303208b3
test: update to android-35 SDK (Android 15) (#32430) 2024-09-06 14:27:56 +02:00
Simon Knott 0e3f4736cc
fix(test runner): always show all projects in selection (#32450)
Follow-up to
https://github.com/microsoft/playwright/pull/32156#discussion_r1741628770,
alternative solution to
https://github.com/microsoft/playwright/pull/32425.

Ensures we always show all projects in the watch mode project selector
by performing the initial `listTests` without any filters, and using its
result for the project selector.
2024-09-06 11:35:20 +02:00
Max Schmitt a8f67a42b8
docs(dotnet): fix wrong snippets (#32484)
Fixes https://github.com/microsoft/playwright-dotnet/issues/2994
2024-09-06 11:27:35 +02:00
Simon Knott 5d4a65b318
docs: update release notes for 1.47 to our changes from yesterday (#32482)
I'll also cherry-pick this into the release branch and update
playwright.dev.
2024-09-06 10:28:17 +02:00
Pavel Feldman a52eb0c9a0
chore: expose matcherResult on TestError (#32455) 2024-09-05 21:36:51 -07:00
Pavel Feldman 16cef9901d
chrome: cache tsconfig for folder (#32477)
Fixes https://github.com/microsoft/playwright/issues/32459
2024-09-05 21:36:13 -07:00
Yury Semikhatsky f0e13164d7
chore: split firefox and chromium bidi implementations (#32478) 2024-09-05 18:31:56 -07:00
Yury Semikhatsky 752b171a13
chore: support bidi connection to chromium (#32474) 2024-09-05 14:56:07 -07:00
Yury Semikhatsky 1989589edd
docs: update browsers version in release notes (#32475) 2024-09-05 13:59:54 -07:00
Dmitry Gozman 1ba3db6864
chore: implement clear-cache through plugins (#32471)
Also switches it to task runner.
2024-09-05 13:50:16 -07:00
Dmitry Gozman d4c77ce260
chore: make find-related-test-files work through plugins (#32465)
Also switches it to the task runner.
2024-09-05 06:52:11 -07:00
Playwright Service 5127efdc2a
feat(chromium): roll to r1134 (#32470)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-05 14:57:20 +02:00
Simon Knott 895d017fb8
chore: update browser patches as of July, 25th, 2024 (#32468) 2024-09-05 13:44:58 +02:00
Simon Knott 29f1541b14
chore: roll stable test runner to 1.47 beta (#32469) 2024-09-05 13:44:22 +02:00
Simon Knott 0f636116e2
chore: mark 1.48.0-next (#32466) 2024-09-05 12:57:16 +02:00
Simon Knott 0a49c05e2d
chore(test runner): document that --only-changed on CI needs history (#32461)
Closes https://github.com/microsoft/playwright/issues/32452

`--only-changed=$GITHUB_BASE_REF` needs the base ref available locally
to work properly. `fetch-depth: 0` does that, see
https://github.com/actions/checkout?tab=readme-ov-file#fetch-all-history-for-all-tags-and-branches.

---------

Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-09-05 12:13:09 +02:00
Simon Knott a8139b5d77
docs: add release notes for 1.47 (#32463) 2024-09-05 11:57:14 +02:00
Dmitry Gozman 91012833c6
chore: move 'dev-server' extensibility point to plugin (#32448)
Instead of plumbing it through a custom unspecified config field, make
it a part of plugin interface.

Additionally, use task runner for starting/stopping dev server.
2024-09-05 02:22:27 -07:00
Playwright Service 255143e201
feat(webkit): roll to r2070 (#32451)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-04 20:41:06 +02:00
Yury Semikhatsky 9a2c60a77c
chore: identify largest gaps in Bidi API (#32434)
This pull request introduces initial support for the WebDriver BiDi
protocol in Playwright. The primary goal of this PR is not to fully
implement BiDi but to experiment with the current state of the
specification and its implementation. We aim to identify the biggest
gaps and challenges that need to be addressed before considering BiDi as
the main protocol for Playwright.
2024-09-04 11:36:52 -07:00
Pavel Feldman a87426ee0d
Update bug.yml
Signed-off-by: Pavel Feldman <pavel.feldman@gmail.com>
2024-09-04 09:17:43 -07:00
Kuba Janik ee91bdc585
feat(ui-mode): display list of query params in request tab (#32443) 2024-09-04 07:54:44 -07:00
dependabot[bot] b43915f4cc
chore(deps): bump actions/download-artifact from 3 to 4.1.7 in /.github/workflows (#32436) 2024-09-04 13:05:51 +02:00
Dmitry Gozman 60631409d6
chore: make dev server only use public config (#32441)
In preparation to make it a part of a plugin.
2024-09-04 01:29:55 -07:00
Dmitry Gozman d7393f998e
chore: simplify settings management in UI mode (#32440) 2024-09-04 01:05:07 -07:00
Simon Knott b3d767fa14
fix(trace viewer): fix memory leak (#32379)
In the `visit` method, we currently cache the rendered HTML for every
walked node. This re-use works well for traces that consist mostly of
references to earlier snapshots.
But for traces that don't share much, this is a large memory overhead
and leads to the memory crash documented in
https://github.com/microsoft/playwright/issues/32336. For the algocracks
amongst you, the current memory usage for an html tree $h$ is
$\mathcal{O}(|h| * \text{height}(h))$.

This PR removes that cache from the nodes and replaces it with a
snapshot-level cache, fixing the memory crash.
Traces *without* reference should not see a performance impact from
this.
Traces *with* references will have slower initial rendering, but
re-rendering maintains speed because of the snapshot-level cache.

Closes https://github.com/microsoft/playwright/issues/32336

---------

Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-09-04 09:57:15 +02:00
Playwright Service 2fabd15fef
feat(firefox): roll to r1463 (#32439)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-04 08:49:10 +02:00
Yury Semikhatsky d7b9cf21db
chore: ignore third-party execution contexts (#32437)
* Only track main and utility world contexts
* Properly update click metadata
2024-09-03 23:00:59 -07:00
Dmitry Gozman cfae7f755c
chore(test runner): always go through internal reporter (#32426)
This way we guarantee the API contract and do not miss errors because we
forgot to call `onBegin()`.
2024-09-03 22:38:02 -07:00
Pavel Feldman 446ed72878
docs: revert typo (#32433) 2024-09-03 10:18:40 -07:00
Yury Semikhatsky b75483bbb4
Revert "docs: deprecate: Request.serviceWorker() (#32136)" (#32432)
This reverts commit b7ed4d7b9e.
2024-09-03 10:18:20 -07:00
Yury Semikhatsky 565aed6c39
Revert "chore: enforce tags format via typescript types (#32384)" (#32431)
After API review we decided to revert it:
* VSCode extension and UI mode users already get the (runtime) error if
the tag is not prefixed
* The typescript error message is not very nice
* The type change would break those clients that generate tests with
tags passed as string

This reverts commit 90e7b9ebac.
2024-09-03 10:07:08 -07:00
Playwright Service 9f466a1ead
feat(chromium-tip-of-tree): roll to r1256 (#32423)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-03 17:12:54 +02:00
Simon Knott 201bad75d3
chore(test runner): rebase watch mode onto TestServerConnection (#32156)
Closes https://github.com/microsoft/playwright/issues/32076.

This PR rewrites `watchMode.ts` to use `TestServer` under the hood. It's
essentially a complete rewrite, so don't pay too much attention on the
old implementation. Note that there's no changes to tests, so all
behaviour we have specced out there still works.

To make this work without a superfluous WebSocket connection, I had to
refactor `TestServerConnection` a little. Originally, I pulled this into
a [separate PR](https://github.com/microsoft/playwright/pull/32132), but
then realised how small the refactoring is. So it's in this PR now. Let
me know if you'd like to land it separately.
2024-09-03 15:15:44 +02:00
dependabot[bot] 53bf9534ec
chore(deps): bump micromatch from 4.0.5 to 4.0.8 in /packages/playwright/bundles/expect (#32399) 2024-09-03 14:52:52 +02:00
Playwright Service 847d29dd86
feat(webkit): roll to r2069 (#32422)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-03 13:28:15 +02:00
Playwright Service 221b77309c
feat(webkit): roll to r2068 (#32417)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-03 09:54:14 +02:00
Przemyslaw Malolepszy b8c4a477ff
chore(docs): fix APIResponse.headersArray() desc (#32375) 2024-09-03 09:01:01 +02:00
Kevin Jagodic 787da9b5a5
docs(mock): fix routeFromHAR() arguments for Java (#32409) 2024-09-03 08:57:57 +02:00
Playwright Service d145c4c91c
feat(webkit): roll to r2067 (#32415) 2024-09-03 06:59:54 +02:00
dependabot[bot] 7318293355
chore(deps-dev): bump svelte from 4.2.9 to 4.2.19 (#32398) 2024-09-02 15:16:46 +02:00
Simon Knott f62f85ba51
fix(test runner): fix types to allow calling custom matchers on expect.poll (#32407)
The `'should support custom matchers'` test asserts that the
functionality works, but it was a type error. This PR updates the types
so that it's allowed.

Closes https://github.com/microsoft/playwright/issues/32408

---------

Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-09-02 13:42:15 +02:00
Playwright Service 5c2e9962b4
feat(chromium-tip-of-tree): roll to r1255 (#32376)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-02 09:54:58 +02:00
Playwright Service d9016e506e
feat(chromium): roll to r1133 (#32391)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-02 09:49:38 +02:00
Simon Knott 3f09d10601
fix(test runner): perform shallow clone check in config directory (#32299)
Our CI operates on shallow clones. In vcs.ts, we perform a check for
shallow clones in `process.cwd()` instead of the test directory. This
makes the test in
3c208aeeff/tests/playwright-test/only-changed.spec.ts (L201)
failing in CI, but only for PRs. The fix is to perform the check on. the
test directory.
2024-09-02 09:11:04 +02:00
Simon Knott cf8c14f884
feat(html reporter): open html attachments in new tab (#32389)
Closes https://github.com/microsoft/playwright/issues/32281.

HTML attachments get a linkified name that opens the attachment in a new
tab.
2024-09-02 08:35:53 +02:00
Kuba Janik a6b320e362
fix(ui-mode): format request body when headers are lower case (#32395)
Resolves https://github.com/microsoft/playwright/issues/32396

Currently, the request body is not formatted when content type header is
lower case (`content-type`). Even though the value is
`application/json`.

It happens because we are looking only for `Content-Type` header
ignoring headers that are lower case.

<img width="674" alt="363197933-5178ec23-b9cf-46b5-8284-e8d4d730b036"
src="https://github.com/user-attachments/assets/0ef01b52-7dd8-4f33-b836-9adb86f94cc9">
2024-08-30 16:21:51 +02:00
Simon Knott ed5c21b827
fix(ui): respect --output param (#32351)
Closes https://github.com/microsoft/playwright/issues/32331

We're already passing the `outputDir` param to the UI, but the UI isn't
passing it back to the TestServer. This PR fixes that. I've added it to
`listTests`, which is requires to that
`TestServerDispatcher#_ignoredProjectOutputs` is populated with the
correct output dir. And i've added it to `runGlobalSetup`, which is what
the bug report was about.
2024-08-30 08:29:49 +02:00
Yury Semikhatsky 90e7b9ebac
chore: enforce tags format via typescript types (#32384)
Leverage [template literal
types](https://www.typescriptlang.org/docs/handbook/2/template-literal-types.html).

Fixes https://github.com/microsoft/playwright/issues/32382
2024-08-29 14:16:49 -07:00
Simon Knott 0a40862bc8
chore(docs): fix typo (#32372) 2024-08-29 14:16:29 -07:00
Pavel Feldman 74a8e59096
chore: allow recorder rewrite annotations (#32381) 2024-08-29 14:16:01 -07:00
Playwright Service 6763d5ab6b
feat(chromium-tip-of-tree): roll to r1254 (#32337) 2024-08-28 15:59:31 -07:00
Yury Semikhatsky 896190edbb
Revert feat(addInitScript): support cjs modules (#32364)
Reverting https://github.com/microsoft/playwright/pull/32282 and
https://github.com/microsoft/playwright/pull/32240.
2024-08-28 15:39:48 -07:00
Yury Semikhatsky d8137f228f
docs: update snippets to fix typescript errors (#32363)
Reference: https://github.com/microsoft/playwright/issues/9468
2024-08-28 14:24:01 -07:00
Yury Semikhatsky 22fe985c54
docs: add SUPPORT.md (#32362) 2024-08-28 11:01:34 -07:00
Yury Semikhatsky 5271fe1f26
chore: remove unused request param from route.continue (#32307) 2024-08-28 08:24:44 -07:00
Playwright Service d61b207ce3
feat(webkit): roll to r2066 (#32343)
Fixes https://github.com/microsoft/playwright/issues/30305

---------

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yury Semikhatsky <yurys@chromium.org>
2024-08-28 08:23:39 -07:00
Pavel Feldman ec681ca78c
chore: pass explicit recorder app factory (#32349) 2024-08-27 20:24:19 -07:00
Pavel Feldman 0b5456d00b
chore: perform action based on frame path (#32347) 2024-08-27 17:17:57 -07:00
Yury Semikhatsky acd2a4ddad
docs: global beforeEach/beforeAll hooks (#32348)
Fixes https://github.com/microsoft/playwright/issues/9468
2024-08-27 17:04:53 -07:00
Yury Semikhatsky 0fd97cb9ed
tests: delete flaky COOP test (#32346)
The scenario that the test covers is inherently racy and has been flaky
in all browsers.

Fixes https://github.com/microsoft/playwright/issues/32107
2024-08-27 14:53:27 -07:00
Pavel Feldman a1df11011c
chore: split recorder into files (#32345) 2024-08-27 14:10:21 -07:00
Pavel Feldman bc87467b25
chore: generate simple dom descriptions in codegen (#32333) 2024-08-27 11:52:14 -07:00
Yury Semikhatsky 3f085d5689
chore: remove same-site expectations for old browsers (#32334) 2024-08-26 18:41:58 -07:00
Pavel Feldman 177576a51b
chore: add simple dom util (#32332) 2024-08-26 16:28:40 -07:00
Pavel Feldman 6f55b57e5a
chore: move codegen into its own folder (#32330) 2024-08-26 15:24:02 -07:00
Yury Semikhatsky 888a5b53e7
docs: avoid confustion with incognito mode (#32327)
Fixes https://github.com/microsoft/playwright/issues/32321
2024-08-26 11:02:41 -07:00
Pavel Feldman 4340d153df
chore: deprecate locator.frameLocator() (#32306) 2024-08-26 10:28:54 -07:00
Pavel Feldman 3d9342aa77
chore: update removeAllListeners docs (#32305)
Closes https://github.com/microsoft/playwright/issues/31474
2024-08-26 09:29:02 -07:00
Max Schmitt 67d3d5f203
fix(clock): don't throw for |null| or |undefined| callbacks (#32309)
Fixes https://github.com/microsoft/playwright/issues/32293

This aligns it how Chromium and other browsers are doing it.
2024-08-26 09:26:38 -07:00
Max Schmitt 54709880c2
test: update Modernizir expectations (#32308)
Looks like `hiddenscroll` was different when an external monitor was
connected.
2024-08-26 08:32:22 -07:00
Max Schmitt 596f497633
fix: don't throw error on about:blank when blocking ServiceWorker (#32310)
Fixes https://github.com/microsoft/playwright/issues/32292
2024-08-26 08:27:21 -07:00
Playwright Service 5acd2dbf48
feat(webkit): roll to r2065 (#32322)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-26 10:25:59 +02:00
Simon Knott 1511d8643e
fix(test runner): expect.poll error reporting should handle non-expect errors (#32257)
Closes https://github.com/microsoft/playwright/issues/32256

We were expecting all errors to be of type `ExpectError`, but apparently
`expect` propagates rejections in the polling functions right through.
So we also need to handle that case.

I wonder if we have more cases of this. Would it make sense to enable
`useUnknownInCatchVariables` in TypeScript?
2024-08-26 09:39:25 +02:00
Playwright Service 9c81eab329
feat(webkit): roll to r2064 (#32319) 2024-08-26 06:56:08 +02:00
Max Schmitt 54c487c939 test: unskip 'should use ipv6 proxy' for Docker 2024-08-24 11:49:18 +02:00
Dmitry Gozman abe6c04a54
chore: remove noWaitAfter from selectOption (#32283)
This follows removing this option from other methods in v1.46. The two
methods still supporting `noWaitAfter` are `click` and `press`.
2024-08-23 14:50:43 -07:00
Pavel Feldman 9d86bc5336
fix(dupe): render dupe test error indicator (#32303)
Fixes https://github.com/microsoft/playwright/issues/32093
2024-08-23 14:33:37 -07:00
Pavel Feldman 37eb66df10
chore: extract performAction in recorder (#32279) 2024-08-23 10:19:44 -07:00
Pavel Feldman 4edc076935
chore: load env from playwright.env when running codegen (#32280) 2024-08-23 10:19:36 -07:00
Playwright Service 8703dd4f06
feat(webkit): roll to r2063 (#32295) 2024-08-23 17:57:18 +02:00
Max Schmitt 0d4d5758c4
test: update Modernizer tests to Safari 18 (#32290)
Fixes https://github.com/microsoft/playwright/issues/32288

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-08-23 16:59:55 +02:00
Max Schmitt 787f20c920
chore: fix doclint (#32294) 2024-08-23 16:26:39 +02:00
Max Schmitt 1b220c5289
chore: remove Chromium Windows proxy hacks (#31724)
Fixes https://github.com/microsoft/playwright/issues/17252
2024-08-23 15:17:00 +02:00
Dmitry Gozman 9a5b72d02a
chore: remove TestInfoImpl._stages (#32285)
This is a preparation to a bigger stages cleanup.
2024-08-23 06:16:18 -07:00
Simon Knott 3fb33e7144
chore(ui): decouple TestServerConnection from websocket transport (#32274)
Preparation for https://github.com/microsoft/playwright/issues/32076.
2024-08-23 14:58:34 +02:00
Dmitry Gozman 785ca19e51
fix(webserver): prefix each line of webserver output (#32286)
This unflakes various `web-server.spec.ts` tests and makes the output
more consistent.
2024-08-23 03:52:27 -07:00
Max Schmitt 8c0e173d6c
test: rebase modernizer Linux tests (#32268) 2024-08-23 12:51:49 +02:00
Dmitry Gozman 3a75f23ea1
fix(addInitScript): require non-undefined arg to trigger commonjs module (#32282) 2024-08-23 02:48:56 -07:00
Simon Knott 0b9c036505
chore(ui): add test for font preview (#32225)
Adds a test for the font preview feature.
2024-08-22 17:56:07 +02:00
Playwright Service 947fbc8590
feat(chromium-tip-of-tree): roll to r1253 (#32266)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-22 17:43:39 +02:00
Simon Knott 850436c656
chore(ui): move TeleSuiteUpdater into testIsomorphic (#32273)
Preparation for https://github.com/microsoft/playwright/issues/32076.
2024-08-22 17:29:10 +02:00
Max Schmitt 16e76cb71a
fix(client-certificates): errors during http2 TLS handshake (#32258) 2024-08-22 15:13:54 +02:00
Simon Knott 5368fd7ca7
fix(only-changed): exit successfully if there were no changes (#32197)
Closes https://github.com/microsoft/playwright/issues/32180

I was briefly wondering if we should output a log line a la "no tests
found", but my understanding is that that's the reporters job - so I
didn't change anything in that regard.
2024-08-22 14:53:00 +02:00
Dmitry Gozman 7758b330b1
fix(ui mode): make sure that reload does correctly restart the webserver (#32263)
Fixes #32103.
2024-08-22 05:48:31 -07:00
Dmitry Gozman dc4a8e48eb
docs(fixtures): explain an option array value edge case (#32261)
Closes #32033.
2024-08-22 05:47:19 -07:00
Playwright Service f74c6d77db
chore(driver): roll driver to recent Node.js LTS version (#32264) 2024-08-22 12:07:44 +02:00
Max Schmitt 666a8f22cf
chore: fix api.json serializer for language ports (#32260)
Fixes https://github.com/microsoft/playwright/issues/32241
2024-08-22 10:15:47 +02:00
Max Schmitt e3480d1886
test: add test for TLS renegotiation and client-certificates (#32252) 2024-08-22 08:42:09 +02:00
Dmitry Gozman 571f25a7d3
fix(role): hidden pseudos should not contribute to accessible name (#32251) 2024-08-21 11:14:41 -07:00
Dmitry Gozman d5a7495041
feat(addInitScript): support cjs modules when passing both path and arg (#32240)
This works with scripts bundled by:
- `esbuild entrypoint.ts --bundle --format=cjs --outfile=injected.js`
- webpack with a typical config
  ```js
  module.exports = {
    entry: { 'injected': './entrypoint.js', },
    output: {
      path: require('path').resolve(__dirname),
      filename: '[name].js',
      libraryTarget: 'commonjs2',
    },
  };
  ```
2024-08-21 09:46:38 -07:00
Guillaume M 837e2a883b
docs(browsers): fix typo (#32250) 2024-08-21 17:35:47 +02:00
Yury Semikhatsky 918dbe5e3a
chore: start listening for navigation events before navigation starts (#32237)
There is a chance in case of cross-process navigation that the
navigation event comes before `navigateFrame` finishes.
2024-08-21 08:34:55 -07:00
Max Schmitt 6512bccffd
docs(best-practises): add note about tsc (#32245) 2024-08-21 11:37:53 +02:00
Dmitry Gozman b66cb6caaa
docs(evaluate): improve the guide (#32222) 2024-08-21 01:31:41 -07:00
Pavel Feldman 109cab66f1
chore: extract recorder dialog into a class (#32233) 2024-08-20 10:56:55 -07:00
Pavel Feldman fc4d8f2bb6
chore: roll codicon (#32234) 2024-08-20 10:56:46 -07:00
Dmitry Gozman b4a9b247b4
fix(role): make sure to ignore style/script/noscript/template (#32231)
Even when these are a part of a hidden `aria-labelledby` traversal, all
browsers ignore them anyway.
2024-08-20 09:02:23 -07:00
Simon Knott b599335404
chore(ui): enable react/recommended lint rules (#32214)
Closes https://github.com/microsoft/playwright/issues/32159. I
originally set out to enable Strict Mode for our React UI, but found a
way better thing: Enabling the lint rules we had already installed!

`eslint-plugin-react` is already in of our `package.json`, and this PR
enables it and fixes some of the reported issues. Most of them are
around the `key` prop which is mostly about performance, but there's
also fixes for misspelled `data-testid` props.
2024-08-20 14:16:28 +02:00
Simon Knott 244761a3a2
chore(docs): Rework CI docs (#31988)
This PR moves around some of our CI docs. It moves the GitHub actions
docs from `ci-intro.md` to `ci.md`, reduces `ci-intro.md` to be an
introduction, adds a mention of Sharding to the best practices, and adds
a section on `--only-changed` called "Fail-Fast". Each of those changes
is a separate commit, to make this a little easier to review. If we find
any of those to commits to be contentious, i'll pull them out into
individual PRs.

While rolling this to playwright.dev, we'll also make the following
changes to its sidebar:
- move the `ci.md` document from the "Integrations" section to the
"Playwright Test" section
- make "Best Practices" the last item of the "Getting Started" section

---------

Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Yury Semikhatsky <yurys@chromium.org>
2024-08-20 09:03:02 +02:00
Kuba Janik f7e0bd3098
feat(ui-mode): add font preview to network tab (#32209)
Resolves https://github.com/microsoft/playwright/issues/32218

Currently, fonts are displayed as a raw binary file which does not give
any information to the users.
I replaced it with a simple font preview similar to the one found in the
dev tools of web browsers.
It is not a major feature but I think it is a nice addition and it might
be useful to somebody.

<img width="1043" alt="Screenshot 2024-08-17 at 18 33 46"
src="https://github.com/user-attachments/assets/a6cc7b57-7ea8-4a54-869d-57a44712597b">


https://github.com/user-attachments/assets/e52d9a72-fb2c-43c7-bfee-3d6d6edc6b6a
2024-08-20 08:28:02 +02:00
Dmitry Gozman 5271c26af1
fix(trace viewer): do not serve resources with x-unknown content type (#32219)
`x-unknown` is used as a placeholder for "no content-type" in the har.
We should not send it to the browser, because it is meaningfully
different from not sending `Content-Type` header. For example, Chromium
refuses to interpret stylesheets served with `x-unknown` content type.

Fixes https://github.com/microsoft/playwright-java/issues/1651.
2024-08-19 10:29:51 -07:00
Playwright Service 18694f6843
feat(webkit): roll to r2062 (#32147) 2024-08-19 19:29:23 +02:00
Sander c87ca052d1
fix(ct): vue jsx component.update type (#32213)
partial fix for:
https://github.com/microsoft/playwright/issues/31927#issuecomment-2267065378

The options object wasn't treated as partial, unlike in other
frameworks, which led to the `component.update({ props: {} })` type
being selected instead the `component.update(<Component prop={} />)`
during jsx usage.
2024-08-19 05:50:25 -07:00
Max Schmitt 010778f6c5
feat(client-certificates): allow passing certificates from memory (#32210) 2024-08-19 09:24:32 +02:00
Max Schmitt 74f5ce5489
docs: store parent type reference in documentation.js (#32215) 2024-08-19 09:11:20 +02:00
Max Schmitt faf4853259
chore: validate client-certificates on context creation (#32168) 2024-08-19 09:02:14 +02:00
Playwright Service 570e05699e
feat(chromium-tip-of-tree): roll to r1250 (#32202)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-17 10:56:18 +02:00
Max Schmitt 743565ee3e
chore: generate self-signed certificates for socks proxy (#32192) 2024-08-16 20:21:05 +02:00
Simon Knott 3e6bba0b79
fix(only changed): make only-changed work together with list mode (#32196)
Closes https://github.com/microsoft/playwright/issues/32161

Turns out we were wrong in
https://github.com/microsoft/playwright/pull/31727#discussion_r1685793870!

Adds support for `--only-changed` in combination with `--list` by
removing our code to prevent that.
2024-08-16 17:12:45 +02:00
Dmitry Gozman c4bb24f02f
feat(test runner): record trace after a test-scoped fixture teardown times out (#32160)
Fixes #30718, fixes #31537.
2024-08-16 08:03:02 -07:00
Dmitry Gozman e17d1c498b
fix(test runner): timeout in fixture teardown should not prevent other slots (#32157)
When two fixtures have different time slots, timeout in the first one
should not prevent the second one from tearing down.

Similarly, timeout in afterEach hook should not prevent fixture
teardowns.
2024-08-16 04:25:00 -07:00
Simon Knott 06ffdd61c9
fix(only-changed): show nice error message about shallow clones (#32189)
Closes https://github.com/microsoft/playwright/issues/32188

---------

Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-08-16 11:41:01 +02:00
Dmitry Gozman 1537d3c2de
chore(test runner): make 'debug' an explicit option internally (#32154)
This allows any time slot that has a legitimate timeout of zero to be
updated later on. See test for an example.

Previously, setting timeout to zero at any moment was considered a
"debug mode" and any subsequent timeouts were ignored.
2024-08-16 01:44:37 -07:00
Rui Figueira b2ccfc3d01
chore(trace-viewer): support opening a source location in embedded trace viewer (#32175)
Related: https://github.com/microsoft/playwright-vscode/pull/513
2024-08-15 14:13:11 -07:00
Playwright Service e7b7c715b0
feat(chromium): roll to r1131 (#32174)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-15 20:41:27 +02:00
Max Schmitt a1d32d997c
fix(client-certificates): improve close handling from target and proxy (#32158) 2024-08-15 10:21:10 +02:00
Max Schmitt aac3a84321
fix(client-certificates): stall on tls handshake errors (#32163)
Extracted from https://github.com/microsoft/playwright/pull/32158.
2024-08-15 08:51:40 +02:00
Debbie O'Brien f927495791
docs: release video and trace viewer video (#32164) 2024-08-14 23:20:19 +02:00
Yury Semikhatsky 60900f8541
chore(webkit): add listeners directly without eventsHelper (#32149)
The listeners are never removed, so there is no point in wrapping them
with the helper
2024-08-14 08:38:49 -07:00
Max Schmitt 4daf5c2303
fix(client-certificates): when server does tls renegotiation (#32155)
Certain https servers like Microsoft IIS aka. TLS servers do the TLS
renegotiation after the TLS handshake. This ends up in two
`'secureConnect'` events due to an upstream Node.js bug:
https://github.com/nodejs/node/issues/54362

Drive-by: Move other listeners like `'close'` / `'end'` to `once()` as
well.

Relates https://github.com/microsoft/playwright/issues/32004
2024-08-14 15:11:29 +02:00
Playwright Service 856c4509a2
feat(chromium-tip-of-tree): roll to r1249 (#32148)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-14 00:46:53 +02:00
Bryant Ung 3280ec5ee3
doc(release notes): Fix 1.46 release notes typos (#32145) 2024-08-13 15:24:47 -07:00
Dmitry Gozman f8eef3897c
chore: move urlMatch to isomorphic (#32142)
To be reused in injected code.
2024-08-13 12:47:02 -07:00
Yury Semikhatsky 6cc53cfce6
chore: move output parsing to concrete browsers (#32129) 2024-08-13 12:20:41 -07:00
Kuba Janik 0588834307
feat: allow URLSearchParams and string as params in APIRequestContext (follow-up) (#32143)
Follow-up to https://github.com/microsoft/playwright/pull/32120

I made some changes suggested by @yury-s in the previous PR that make a
lot of sense:
- added an example to the documentation
- improved tests
  - check params on the client and server end
  - reverted to non-English characters being used as params
2024-08-13 10:39:56 -07:00
Max Schmitt b7ed4d7b9e
docs: deprecate: Request.serviceWorker() (#32136) 2024-08-13 15:59:30 +02:00
Yury Semikhatsky a28f51a0f3
chore: use base BrowserType to reference browser types (#32125) 2024-08-12 22:20:58 -07:00
Kuba Janik 308381eeae
feat: allow URLSearchParams and string as params in APIRequestContext (#32120) 2024-08-12 14:22:03 -07:00
Rui Figueira 3d69c591d3
fix(web): use currentTheme instead of settings in toggleTheme (#32104) 2024-08-12 13:19:30 -07:00
Yury Semikhatsky 2ae196f708
fix(docs): API types do not extend EventEmitter (#32124)
Fixes https://github.com/microsoft/playwright/issues/32097
2024-08-12 11:22:48 -07:00
Simon Knott edd1894ac6
fix(test runner): run project dependencies of --only-changed test files (#32094)
Closes https://github.com/microsoft/playwright/issues/32070. We were
applying `additionalFileMatcher` not just to `filteredProjectSuites`,
but also to `projectSuites`. `projectSuites` is where we take dependency
projects from, though - so `--only-changed` led to empty dependency
projects, resulting in the reported bug.

The fix is to only apply `additionalFileMatcher` on
`filteredProjectSuites`.
2024-08-12 17:26:01 +02:00
Max Schmitt cae779b74f
docs: recommend Ubuntu 24.04 in Docker images (#31435) 2024-08-12 16:39:56 +02:00
Max Schmitt 0d575b4ef6
chore: less 'as any' in html-reporter (#32117)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Simon Knott <info@simonknott.de>
2024-08-12 15:17:42 +02:00
Simon Knott effb1ae234
fix(test runner): align with typescript behaviour for resolving index.js and package.json through path mapping (#32078)
Supercedes https://github.com/microsoft/playwright/pull/31915, closes
https://github.com/microsoft/playwright/issues/31811.

When TypeScript resolves a specifier via path mapping, it does not
interpret `package.json`. If path mapping resolves to a directory, it
only looks at the `index.js` file in that directory if it's in CommonJS
mode.

We need to mirror this in our `esmLoader.ts`.

---------

Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-08-12 15:05:19 +02:00
Simon Knott c8cc4f9c8b
chore(ui): update to react 18 (#32079)
Part of https://github.com/microsoft/playwright/issues/31863. Updates
most of our React usage to React 18. `recorder` doesn't seem to like it
yet. I suspect that some of our code isn't compatible with concurrent
mode, i've investigated that in
https://github.com/microsoft/playwright/pull/32101.

---------

Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-08-12 13:50:11 +02:00
Dmitry Gozman a30a8805c9
fix(expect): account for timeout during the first locator handler check (#32095)
Also considered an alternative to not perform the locator handler check
during one-shot, but that would be somewhat against the promise of the
locator handler that is supposed to run **before** every expect check.

Fixes #32089.
2024-08-12 01:57:15 -07:00
Max Schmitt ba8f94df56
chore(docs): remove unused generateToc function (#32111) 2024-08-12 10:56:59 +02:00
Simon Knott 45c2e8a3ed
chore(recorder): update to React 18 (#32101)
Part of https://github.com/microsoft/playwright/issues/31863. Updates
`recorder` to use React 18.
2024-08-12 09:19:28 +02:00
Playwright Service e8d845be64
feat(webkit): roll to r2061 (#32109) 2024-08-10 11:44:32 +02:00
Playwright Service 4d26036b7b
feat(webkit): roll to r2060 (#32082)
Reference: https://github.com/microsoft/playwright/pull/32108
2024-08-09 15:31:35 -07:00
Yury Semikhatsky d73c0ba689
test: skip COOP navigation test on wk linux (#32108)
Reference: https://github.com/microsoft/playwright/issues/32107
2024-08-09 15:30:56 -07:00
Dmitry Gozman 9b3e0e5667
chore: simplify binding result dispatch (#32092)
We can now pass an Error object through evaluate.
2024-08-09 03:46:52 -07:00
Max Schmitt 98a6e14e9d
docs: remove redundant TOC usages (#32096) 2024-08-09 12:44:01 +02:00
Yury Semikhatsky 236a8ac2ac
test: enable header overrides on redirect in firefox (#32088)
Fixes: https://github.com/microsoft/playwright/issues/32045
2024-08-08 23:46:36 -07:00
Playwright Service 5cc1e7b299
feat(firefox): roll to r1462 (#32086)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-08 22:41:49 +02:00
Playwright Service 83b807385d
feat(firefox-beta): roll to r1462 (#32087)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-08 22:41:09 +02:00
Dmitry Gozman 44445e30e5
fix(ui mode): make sure key for attachment view is unique (#32084)
Fixes #32052.
2024-08-08 10:57:44 -07:00
Pavel Feldman 80e014f4b6
chore: sources tab render polish (#32055) 2024-08-08 10:53:59 -07:00
Playwright Service 69287f26bc
feat(chromium-tip-of-tree): roll to r1248 (#32077)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-08 14:24:47 +02:00
Dmitry Gozman f24e46c367
fix(types): revert type changes made to support TS 5.5 (#32066)
Regressed in #31532. The TS5.5 changes broke chaining of `extend`s where
the first `extend` did not specify any type arguments.

Fixes #32056.
2024-08-08 05:21:48 -07:00
Playwright Service 05732b50c8
feat(chromium): roll to r1130 (#32074)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-08 14:13:18 +02:00
Playwright Service 48627ad484
feat(firefox-beta): roll to r1461 (#32068)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-08 11:37:37 +02:00
Simon Knott 17bb36a7fe
fix(ui): reset higlighted action on keyboard navigation (#32051)
Closes https://github.com/microsoft/playwright/issues/32050

When keyboarding through the action view, the UI continues showing the
hovered action. This makes keyboard nav hard to use.

The fix is to reset the higlighted action on keyboard navigation. This
is what we do when the mouse pointer leaves an action, and what I think
is reasonable.
2024-08-08 10:06:36 +02:00
Playwright Service 3d2b5e6801
feat(firefox-beta): roll to r1460 (#32059)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-08 08:48:12 +02:00
Playwright Service f8a7a301e6
feat(chromium-tip-of-tree): roll to r1247 (#32030)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-08 08:37:38 +02:00
faulpeltz ca25d2c802
fix: ubuntu version detection for linux mint 22 (#32049)
Add Linux Mint 22 (Ubuntu based distro) version detection for dependency
installation
Linux Mint 22.x -> Ubuntu 24.04

(also see original Linux Mint support PR #28085)
2024-08-07 14:28:03 -07:00
Playwright Service 7449ca21f4
feat(firefox-beta): roll to r1459 (#32054) 2024-08-07 14:21:54 -07:00
Dmitry Gozman ea747afcdd
chore: use a single binding for all Playwright needs (#32039)
This makes it easier to manage bindings, being just init scripts.
Fixes the BFCache binding problem.
Makes bindings removable in Firefox.

Fixes #31515.
2024-08-07 06:20:12 -07:00
Meir Blachman fd9276f2ac
docs: add discord link in readme (#32020) 2024-08-06 15:53:58 -07:00
Kuba Janik 7ec3a93db3
feat(ui-mode): add filters to network tab (#31956) 2024-08-06 14:52:35 -07:00
Pavel Feldman 79ca3f28c5
chore: simplify useSetting to not rely on useSyncExternalStore (#32018) 2024-08-06 14:30:15 -07:00
Yury Semikhatsky 7f60f284c6
docs(auth): use abs path, difference between storage locations (#32037)
Reference: https://github.com/microsoft/playwright/issues/31987
2024-08-06 11:36:49 -07:00
Yury Semikhatsky 43e852334b
docs: route.fallback() vs. route.continue() (#32035)
Fixes https://github.com/microsoft/playwright/issues/31983
2024-08-06 11:35:53 -07:00
Dmitry Gozman a54ed48b42
feat(test runner): --tsconfig cli option (#31932)
Introduce `--tsconfig` to specify a single config to be used for all
imported files, instead of looking up tsconfig for each file separately.

Fixes #12829.
2024-08-06 06:55:15 -07:00
Max Schmitt bff97b4810
test: fix failing client-certificate tests (#32021) 2024-08-06 08:46:35 +02:00
Meir Blachman 5a015b0d6e
docs(release-notes): fix typo in .NET release notes (#32015) 2024-08-06 07:19:55 +02:00
Pavel Feldman 3c87f217df
feat(events): allow waiting for removeAllListeners (#31941) 2024-08-05 21:14:35 -07:00
Yury Semikhatsky 193013c9ee
docs(har): default update mode is minimal (#32016)
Update the documentation to match actual behavior.

The actual behavior today:
* Default mode is `full` when `recordHar` is passed to
`browser.newContext`
* Default mode is `minimal` when calling `context.routeFromHAR` and
`page.routeFromHAR`

Reference https://github.com/microsoft/playwright/issues/31983
2024-08-05 11:29:43 -07:00
Yury Semikhatsky fef27395a5
chore(trace): do not nest API actions based on time (#31990)
They should be properly nested based on Node.js zones now.
2024-08-05 10:06:14 -07:00
Dmitry Gozman 5c9ce6b9d9
test: unflake various tests (#32014) 2024-08-05 08:29:13 -07:00
Max Schmitt 613ccb8d5b
chore(client-certificates): rewrite error for unsupported PFX errors (#32008) 2024-08-05 14:42:29 +02:00
Dmitry Gozman 32ee09dbe6
docs: release notes for 1.46 update (#32010) 2024-08-05 05:35:46 -07:00
Max Schmitt a47d2f998c
chore(lint): bump Microsoft.CodeAnalysis for linting code snippets (#32012) 2024-08-05 14:30:38 +02:00
Max Schmitt 71e614dc5a
fix(client-certificates): report error to the browser if incorrect passphrase (#32007) 2024-08-05 10:54:33 +02:00
Max Schmitt dbc4bc84d6
fix(trace-viewer): popup snapshot utf-8 support (#32006) 2024-08-05 09:11:31 +02:00
Playwright Service c54567a46b
feat(webkit): roll to r2056 (#31999)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-05 06:12:38 +02:00
Max Schmitt d0c840f639
fix(clock): mock time in Event.prototype.timeStamp (#31986)
Ideally we generate the timestamp when the Event gets created. This
patch adds a best-effort logic, since we can't override the constructor
of natively created events, e.g. `MouseEvent`.

Fixes https://github.com/microsoft/playwright/issues/31924
2024-08-02 15:27:54 +02:00
Max Schmitt 878a6a499b
chore: prefer executablePath for page.pause() (#31985)
Motivation: For scenarios where
[`findChromiumChannel`](f17de8222f/packages/playwright-core/src/server/registry/index.ts (L1016))
throws (no branded browser and no normal browser is installed) we were
[silently
catching](f17de8222f/packages/playwright-core/src/server/recorder.ts (L79))
when calling `page.pause()`.

This patch does not invoke `findChromiumChannel` when the
inspectedContext is Chromium based and has an `executablePath`
specified.

Note this was already fixed by #6214, but regressed since then.

Fixes https://github.com/microsoft/playwright/issues/31967
2024-08-02 11:18:51 +02:00
Max Schmitt f17de8222f
chore: run client-certificate tests in service mode (#31973) 2024-08-02 08:34:28 +02:00
Yury Semikhatsky db0980a850
chore(fetch): include response text into failOnStatusCode errors (#31978)
Fixes https://github.com/microsoft/playwright/issues/31834
2024-08-01 17:53:43 -07:00
Yury Semikhatsky 5a83fe55bc
chore(trace-viewer): hide status code field for failed request (#31977)
* Hide 'Status Code:' field for interrupted requests that don't have it.
* Clear up previously selected body when showing aborted requests.
* Highlight interrupted requests in red.
2024-08-01 17:26:52 -07:00
Yury Semikhatsky 5a80ddfaf9
chore: remove bright counter from sidebar tab selector (#31975)
Removing the following icon:

![image](https://github.com/user-attachments/assets/d2de2ed0-f66e-4452-8763-aad1b6e7bb79)

HTML `options` element cannot be styled, so just removing the counter in
sidebar mode:

<img width="348" alt="image"
src="https://github.com/user-attachments/assets/d636dca2-5007-41f7-866e-3a0f604d46fc">
2024-08-01 16:18:10 -07:00
Yury Semikhatsky a828fd5d73
test: ui mode annotations (#31965) 2024-08-01 14:47:50 -07:00
Yury Semikhatsky 1074a765e4
fix(trace): do not place expect into unfinished api calls based on time (#31970)
Fixes https://github.com/microsoft/playwright/issues/31959
2024-08-01 14:14:10 -07:00
Max Schmitt 69561a194a
fix(trace-viewer): make 'hide route actions' work for .NET (#31961) 2024-08-01 21:02:47 +02:00
Max Schmitt 73e0e92a7e
devops: retry download of upstream Node.js for drivers (#31962) 2024-08-01 19:45:25 +02:00
Dmitry Gozman a541751657
feat(ui mode): linkify attachment names and content (#31960)
- Pass `contentType` to the CodeMirror.
- Support `text/markdown` mode.
- Custom mode for non-supported types that linkifies urls.
2024-08-01 09:27:45 -07:00
Simon Knott 76cca7fc2c
fix(ui): only populate settings once (#31958)
We populate `localStorage` using an init script. Currently, this script
isn't just run for the UI though, but also for all iframes. So we're
resetting `localStorage` every time the UI loads an iframe.

This hasn't been a problem in the past, because the only consumer of
`localStorage`, `Settings`, only read from `localStorage` once and kept
most state in `useState` afterwards. With
https://github.com/microsoft/playwright/pull/31911, this is no longer
true, so the bug starts biting us!

The fix is to ensure the init script isn't run on iframes.
2024-08-01 17:28:48 +02:00
Playwright Service c858554dca
feat(chromium-tip-of-tree): roll to r1246 (#31951) 2024-08-01 15:13:15 +02:00
Dmitry Gozman bbe252a3d7
fix(ui mode): api review feedback (#31952)
- Hide "Testing Options" as not ready.
- Update SettingsView margins.
- Include `page.route` and similar methods into "Show route actions".
2024-08-01 05:36:19 -07:00
Playwright Service 6c6f10b678
feat(chromium): roll to r1129 (#31955)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-01 14:32:44 +02:00
Playwright Service a83134b270
feat(ffmpeg): roll to r1010 (#31949) 2024-08-01 13:17:11 +02:00
Yury Semikhatsky 47714d6559
feat(ui-mode): add annotations tab (#31945)
<img width="867" alt="image"
src="https://github.com/user-attachments/assets/7d714723-1d3f-49b2-944a-0a476d79aee8">

---------

Signed-off-by: Dmitry Gozman <dgozman@gmail.com>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-08-01 03:43:29 -07:00
Playwright Service 6af2635343
feat(chromium-tip-of-tree): roll to r1245 (#31948)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-01 10:27:02 +02:00
Yury Semikhatsky 62834e314f
chore(trace-viewer): less bright status code icon (#31940)
<img width="182" alt="image"
src="https://github.com/user-attachments/assets/8b381bcc-46e3-45c7-8fd2-e020436d1bff">

<img width="206" alt="image"
src="https://github.com/user-attachments/assets/4ea02b47-a4da-44f7-9c26-13b05374e89d">

<img width="213" alt="image"
src="https://github.com/user-attachments/assets/38b50e2a-f69c-4a78-abb2-2680453fc5fd">
2024-07-31 17:29:05 -07:00
Yury Semikhatsky 0217defab4
chore(trace-viewer): do not shrink metadata view (#31938)
Avoids the following effect:

![image](https://github.com/user-attachments/assets/694de773-acc0-4266-87f2-eab67a3c7ce2)
2024-07-31 16:37:16 -07:00
Yury Semikhatsky ecd384212d
chore(trace-viewer): copy only file name without line number (#31939)
As discussed in the meeting, copy only file name which is shown in the
same line, do not include highlighted line number.
2024-07-31 15:40:13 -07:00
Dmitry Gozman e62a54af7a
fix(test runner): do not revert the transform (#31930)
This allows a dynamic import of a TS file to be processed by Babel.

For some reason, Playwright used to revert the CJS transforms. However,
ESM loader and transforms are always active, so CJS should be too.
2024-07-31 13:17:09 -07:00
Yury Semikhatsky edb89dcb66
chore: make sure error stack includes message as before #31691 (#31934)
This brings stack formatting to how it was prior to
1686e5174d
so that the ports can use it.
2024-07-31 10:58:37 -07:00
Dmitry Gozman 7c55b94280
fix(trace): make sure the correct attachment name is used for downloads (#31928)
When two attachments have the same content sha1, we used the first one's
name for the downloaded file, no matter which one the user clicked to
download. Now we pass the name explicitly.

References #31912.
2024-07-31 06:20:36 -07:00
Sander c9a12e4ca1
docs(ct): fix component.update example for vue and svelte (#31889) 2024-07-31 13:40:19 +02:00
Simon Knott daca1681c0
refactor(ui): in splitview component, move sidebar and main from children into named properties (#31925)
Pulled out from https://github.com/microsoft/playwright/pull/31900

I stumbled over `React.Children`, because it's the first time I saw that
used. https://react.dev/reference/react/Children lists `React.Children`
it as "Legacy" and mentions it's uncommon. Also, the fact that SplitView
only displays its first two children, and all others are silently
discarded, can be a surprise to some.

By separating things out into `sidebar` and `main`, not only do we give
the two elements names (otherwise one needs to remember that sidebar is
always the first child), but we also prevent any "third children" from
being dropped.
2024-07-31 12:48:46 +02:00
Simon Knott 99724d0322
refactor(ui): some react refactorings (#31900)
Addresses https://github.com/microsoft/playwright/issues/31863. This PR
is chonky, but the individual commits should be easy to review. If
they're not, i'm happy to break them out into individual PRs.

There's two main things this does:

1. Remove some unused imports
2. Add a `clsx`-inspired helper function for classname templating

I wasn't able to replace `ReactDOM.render` with `ReactDOM.createRoot`.
This is the new recommended way starting with React 18, and the existing
one is going to be deprecated at some point. But it somehow breaks our
tests, i'll have to investigate that separately.
2024-07-31 12:12:06 +02:00
Dmitry Gozman 64fe245297
fix(trace viewer): attachment download (#31920)
- Update attachments tab margins.
- Make sure to pass `&download` in attachment urls. This makes them
downloadable, regressed in #28727.
- Do not additionally list image diffs as screenshots.

Fixes #31912.
2024-07-31 02:29:14 -07:00
Max Schmitt 55187207e4
chore: various roll fixes for .NET (#31914) 2024-07-30 19:09:20 +02:00
Simon Knott b8b562888e
refactor(ui): synchronize settings via useSyncExternalStore instead of prop drilling (#31911)
Broken out from https://github.com/microsoft/playwright/pull/31900, part
of https://github.com/microsoft/playwright/issues/31863.

Synchronizes different `useSettings` calls via `useSyncExternalStore`.
This saves us from having to drill down settings props everywhere,
without the big refactoring that a `Context` would be.
2024-07-30 17:57:31 +02:00
Simon Knott 8412d973c0
fix(ui): added test in watched file should be run (#31842)
Closes https://github.com/microsoft/playwright/issues/22211

Currently, when the server notifies the UI about changed files, the UI
determines what files to re-run based on an old test list. By listing
tests before that, we make sure that the test list is up-to-date, and
that added tests are included in the next run.

I've also removed the `listChanged` event as discussed in the team sync.
The event isn't used anywhere and fires in exactly the same cases where
`testFilesChanged` fired, so i've folded them into one another. This allowed simplifying `Watcher`.
2024-07-30 14:17:41 +02:00
Playwright Service 947f925443
feat(webkit): roll to r2054 (#31910)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-30 12:24:14 +02:00
Max Schmitt bd186640df
fix(client-certificates): use matching origin for connections on :443 (#31913)
Motivation: When using client-certificates on a website on port `443`,
we would normalise the user input with `new URL` but still generate a
"bad" representation of the "origin" internally, since the just do
concatenated "host:port".

(The origin doesn't contain the port in case of :443)

We use `clientCertificatesToTLSOptions` in two places:

a) for APIRequestContext, there we pass one from the URL constructor
over and
b) from the socks proxy, there we **now** also pass a "good one" over.

Test plan: We don't want to run the tests on port :443, so only manually
validated the fix.

Relates https://github.com/microsoft/playwright/issues/31906
2024-07-30 12:23:57 +02:00
Max Schmitt 44ce6096bb
feat(html-reporter): add Playwright logo as Favicon (#31908) 2024-07-30 12:02:06 +02:00
Max Schmitt ac0a3fb275
docs(best-practises): make trace icon location more clear (#31909) 2024-07-30 11:19:07 +02:00
Pavel Feldman 58b0c76f20
chore: use soft event emitter (#31868) 2024-07-29 17:11:31 -07:00
Max Schmitt 7e7319da7d
fix(client-certificates): don't use proxy when using BrowserContext.request (#31898) 2024-07-29 16:44:53 +02:00
Dmitry Gozman f232507afa
feat(ui mode): ui updates (#31894)
- Update copy to clipboard button.
- Reveal test source in the Source tab instead of external editor.
- New button to reveal in the external editor in the Source tab.
- Move the Pick Locator button next to snapshot tabs.
2024-07-29 07:32:13 -07:00
Max Schmitt f45cf65921
chore: add maxRetries to APIRequestContext.delete (#31893) 2024-07-29 14:39:30 +02:00
Max Schmitt cc313f3290
fix(client-certificates): error response body Content-Length calculation (#31897) 2024-07-29 14:39:14 +02:00
Max Schmitt acf5ea0904
chore: update browser patches as of Jun, 12, 2024 (#31888) 2024-07-29 10:30:28 +02:00
Playwright Service 1a7d6749da
feat(webkit): roll to r2053 (#31885)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-07-26 20:32:12 +02:00
Playwright Service 7690694677
feat(webkit): roll to r2052 (#31882) 2024-07-26 20:29:31 +02:00
Max Schmitt e784e2df01
chore: mark 1.47.0-next (#31879) 2024-07-26 17:50:11 +02:00
Max Schmitt 57c7d9e9bb
docs: add release notes for 1.46 (#31875)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Signed-off-by: Dmitry Gozman <dgozman@gmail.com>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-07-26 08:34:26 -07:00
Dmitry Gozman 9227d1c598
docs: explain a bit more about fixture boxing and custom titles (#31877) 2024-07-26 07:43:58 -07:00
Max Schmitt 6988194c97
test: unflake contextmenu recorder test (#31749) 2024-07-26 12:43:05 +02:00
Max Schmitt b214941a01
chore: make it more clear that --only-changed is per file (#31874) 2024-07-26 12:41:33 +02:00
Max Schmitt 47e4e45bc2
chore: update WebKit version to 18.0 (#31873) 2024-07-26 11:32:51 +02:00
Max Schmitt 09581b615d
fix(client-certificates): return target errors on response when using http2 (#31867) 2024-07-26 11:28:45 +02:00
Max Schmitt 335d31bf65
devops: remove GHA todo in primary workflow for itest (#31871)
This TODO got added during our GHA refactoring a while ago, where I
thought it might make sense to run our itests in `bash`. We didn't do it
before the refactoring either. It seems good to keep them running in
`pwsh` instead, so lets just remove the TODO.

Investigation notes: Running in `bash` on Windows via `Git Bash` seems
like doing a lot of magic, especially with path handling. Things
[like](a02ed38e60/tests/installation/registry.ts (L143))
this break then, since `tar` even when using `Git Bash` [doesn't accept
a Windows
path](https://sourceforge.net/p/mingw/mailman/mingw-users/thread/54CE104A.7060108@hccnet.nl/).

Signed-off-by: Max Schmitt <max@schmitt.mx>
2024-07-26 11:04:51 +02:00
Max Schmitt 81b3c0c402
fix(client-certificates): include socks-certs in npm package (#31872) 2024-07-26 11:04:38 +02:00
Max Schmitt a02ed38e60
chore: reduce file reads in client-certificates internal TLS server (#31865) 2024-07-25 22:36:25 +02:00
Dmitry Gozman a41cebc1c9
feat(ui mode): introduce Testing Options and Settings (#31841)
Testing Options control tests, while Settings are UI mode settings.

<img width="298" alt="Screenshot 2024-07-25 at 10 54 22 AM"
src="https://github.com/user-attachments/assets/7b6f5fff-687b-48d1-80b3-d1e6f2a257e8">


These sections are separately expandable, collapsed by default.

<img width="294" alt="Screenshot 2024-07-24 at 2 06 25 PM"
src="https://github.com/user-attachments/assets/5d35ac8c-9289-46ca-aaa2-ebc5419fa0c4">

References #31520.

---------

Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Simon Knott <info@simonknott.de>
2024-07-25 11:23:43 -07:00
Max Schmitt a966abfd31
test: unflake happy-eyeballs tests (#31861) 2024-07-25 20:22:51 +02:00
Dmitry Gozman d8d5289e86
fix(remote): make sure api calls reject before browser is closed (#31858)
Upon calling `browser.close()` or dropping remote connection, make sure
to reject api calls before resolving `browser.close()` and firing a
`disconnected` event.

This change aligns the order guarantee with non-remote case.
2024-07-25 09:57:34 -07:00
Max Schmitt 0c6ecf8df4
chore: use happy eyeballs for client-certificates (#31859) 2024-07-25 18:55:47 +02:00
Playwright Service d3e2c6cbb2
feat(chromium-tip-of-tree): roll to r1244 (#31856)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-25 18:54:24 +02:00
Max Schmitt 90af289ba2
test: use managed http2 server for client-certificates (#31844) 2024-07-25 18:53:38 +02:00
Simon Knott b06a95dd75
feat(trace viewer): show baseURL in Metadata pane (#31852)
Resolves https://github.com/microsoft/playwright/issues/31847 by adding
playwright config's `baseURL` value to the `context-options` trace
event, and showing that in the Trace Viewer.

Because the added property is optional, I didn't increment the trace
format version.

I've also considered pulling the `baseURL` from the existing
`browser.newContext` step to get around modifying the trace format, but
that felt pretty hacky.


https://github.com/user-attachments/assets/ecaef747-727d-4937-9ca3-1605ca9907b9

---------

Signed-off-by: Simon Knott <info@simonknott.de>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-07-25 17:14:46 +02:00
Simon Knott 4d4ed2a5c4
chore: enforce single quotes in JSX (#31855)
Discovered in
https://github.com/microsoft/playwright/pull/31852#discussion_r1691133106:
We're not enforcing single quotes for JSX, and it shows! We need to
start enforcing it to prevent even greater damage from being done ;D
2024-07-25 13:06:26 +02:00
Playwright Service 3ce948e972
chore(driver): roll driver to recent Node.js LTS version (#31854) 2024-07-25 12:52:50 +02:00
Simon Knott a1a4216b88
chore(ui): add test expectation that doesn't immediately pass on blank tree (#31850)
Followup to #31815
2024-07-25 12:21:24 +02:00
Playwright Service bdbe4795f1
feat(chromium): roll to r1128 (#31848)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-25 09:42:53 +02:00
Max Schmitt 7570c25b3d
chore: remove glob from client-certificate matching (#31846)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-07-24 19:13:03 +02:00
Max Schmitt ca149be154
test: skip SharedArrayBuffer on macOS 12 (#31845) 2024-07-24 18:45:03 +02:00
Elio Struyf 1e94abb683
docs: added MS Teams and mail reporter (#31579) 2024-07-24 11:55:45 +02:00
Max Schmitt c5b7ce86dc
feat(client-certificates): add http2 support (#31786) 2024-07-24 11:39:39 +02:00
Pavel Feldman c74843a914
chore(fetch): pass flush and finishFlush options to brotli (#31833)
Fixes https://github.com/microsoft/playwright/issues/31814
2024-07-23 18:28:34 -07:00
Yury Semikhatsky 13b5510d57
docs(webkit): supprot for non-core features may differ between OSes (#31831)
Fixes: https://github.com/microsoft/playwright/issues/31017
2024-07-23 17:35:02 -07:00
Pavel Feldman 7735affef4
fix(ui): print the web server output in the ui mode (#31824)
Fixes https://github.com/microsoft/playwright/issues/31300
2024-07-23 16:52:32 -07:00
Yury Semikhatsky 1918ae5c4a
fix(webkit): reenable CrossOriginOpenerPolicy (#31765)
Depends on https://github.com/microsoft/playwright-browsers/pull/1160
Fixes: https://github.com/microsoft/playwright/issues/14043
2024-07-23 15:02:47 -07:00
Max Schmitt c4862c022c
chore: client certificates api review (#31826) 2024-07-23 22:56:36 +02:00
Yury Semikhatsky 383e4b3c73
Revert "feat: introduce touchscreen.touch() for dispatching raw touch… (#31823)
… events (#31457)"

This reverts commit a3e31fd2c4.
2024-07-23 10:29:37 -07:00
Max Schmitt b9c4b6bff0
chore: client certificates refactorings (#31822) 2024-07-23 19:18:31 +02:00
Simon Knott f23d02a211
feat(test runner): --only-changed option (#31727)
Introduces an `--only-changed [base ref]` option.

`playwright test --only-changed` filters the test run to only run test
suites that have uncommitted changes.
`playwright test --only-changed=foo` runs only tests that were changed
since commit `foo`.

In pull request CI, this can be used to run changed tests first and fail
fast: `--only-changed=$GITHUB_BASE_REF`.
During local development, it can be used to quickly filter down to the
touched set of tests suites.
In some rare usecases, this can also help to cut down on CI usage for
pull requests. Tread with caution though.

File dependencies are taken into account to ensure that if you touched a
utility file, all relevant tests are still executed.

Closes https://github.com/microsoft/playwright/issues/15075
2024-07-23 18:04:17 +02:00
Simon Knott 2cc4e14756
fix(core): update maxRetries docs (#31810) 2024-07-23 08:27:27 -07:00
Dmitry Gozman e86c8af599
chore: rename route fixture in ct (#31817)
Addresses review feedback.
2024-07-23 07:43:28 -07:00
Max Schmitt 526e4118fa
chore: use socks.Duplex constructor instead of extending (#31816) 2024-07-23 15:44:16 +02:00
Simon Knott bbe5df3f5f
fix(ui): when --grep is used, UI should only show selected tests (#31815)
Closes https://github.com/microsoft/playwright/issues/31617.
2024-07-23 15:29:08 +02:00
Playwright Service d5a77c0f0b
feat(chromium-tip-of-tree): roll to r1243 (#31812)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-23 15:22:06 +02:00
Andrey Lushnikov d23ea26947
feat(firefox): roll Firefox & Firefox-Beta to 1458 (#31807)
Fixes https://github.com/microsoft/playwright/issues/31525
Closes https://github.com/microsoft/playwright/pull/31806
Closes https://github.com/microsoft/playwright/pull/31805
2024-07-23 10:37:00 +02:00
Simon Knott 1408a45595
chore(ct): remove suite dependency by connecting dependency graphs at read time, not write time (#31794)
Broken out of https://github.com/microsoft/playwright/pull/31727 as per
@dgozman's
[request](https://github.com/microsoft/playwright/pull/31727#discussion_r1685793229).

The PR goal is to remove the `suite` argument from the Component
testing's Vite Plugin. `suite` is used to enrich Vite's dependency graph
with information about dependencies between test suites and helper
files. It essentially merges the Vite graph with the
`compilationCache.ts > fileDependencies` graph, and then writes the
result back into `compilationCache.ts > externalDependencies`.

By refactoring this to make the connection on the reading end in
`collectAffectedTestFiles`, we can drop the `suite` parameter.

We didn't yet have a test that depended on the dependency graph being
connected correctly between `fileDependencies` and
`externalDepedencies`, so I've [extended an existing
test](53a539938b)
to capture that.
2024-07-23 10:19:58 +02:00
Pavel Feldman cf1a313a0c
chore: allow empty string in regex patterns (#31804) 2024-07-22 13:02:12 -07:00
Dmitry Gozman d87cb7a303
feat(trace viewer): allow hiding route actions (#31726)
Adds a new settings tab above the actions list.

<img width="307" alt="settings tab"
src="https://github.com/user-attachments/assets/792212b7-e2fd-4a5c-8878-654e2e060505">

Toggling the "Show route actions" checkbox hides all route calls:
`continue`, `fulfill`, `fallback`, `abort` and `fetch`.

References #30970.
2024-07-22 11:34:34 -07:00
Yury Semikhatsky e269092ef9
Revert "fix: add 'window-management' to chromium browser (#31687)" (#31801)
This reverts commit 0aa2f06f68.

Discussed the new permission in the API review and decided not to
proceed with the feature as we are not ready to commit to supporting it
yet:
* the API is Chromium specific
* the API is still experimental
* there is no clarity to what extend the screen manipulation APIs will
work in old headless which is our main test environment

We'll keep an eye on the demand for the feature and may get back to
implementing it in the future.

Reference: https://github.com/microsoft/playwright/issues/27198
2024-07-22 11:27:12 -07:00
Yury Semikhatsky bef87849e3
chore: show error when opening newer trace with old viewer (#31781)
Reference: https://github.com/microsoft/playwright-java/issues/1617
2024-07-22 08:16:25 -07:00
Josh Soref 7abbbd0c84
docs: spelling (#31779)
Fixes misspellings identified by the [check-spelling
action](https://github.com/marketplace/actions/check-spelling).

The misspellings have been reported at
https://github.com/jsoref/playwright/actions/runs/10015023629#summary-27685777352

The action will report that the changes in this PR would make it happy:
https://github.com/jsoref/playwright/actions/runs/10015023971#summary-27685778305

---

I understand that the commit messages will need to be reworded to match
house style. For the time being, these are merely noting the changes
they contain so that when I rebase or need to drop things, I can. --
I've already rebased once as someone fixed one of the items that my
draft work was going to fix.

---

## Testing
* The tests _mostly_ passed when I managed to trigger them, but there
were a handful of things that I didn't quite understand
* There are a large number of warnings relating to a bad interaction
between any workflow that uses this local action
b535139b32/.github/actions/run-test/action.yml (L74-L80)
and the action it calls -- I've opened Azure/login#474 asking them to
refactor their action so that it doesn't cause so much noise while
running this repository's tests
* I'm vaguely curious as to why this repository has a `branch`
constraint for its `pull_request` events in its workflows -- that
constraint gave me a number of additional headaches while trying to
prepare this branch for this PR.

---------

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
2024-07-22 06:45:22 -07:00
Playwright Service af3d2ba9fe
feat(webkit): roll to r2048 (#31778)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-20 14:27:41 +02:00
Dmitry Gozman b535139b32
fix(trace viewer): library-only trace should not merge actions (#31768)
Without `wallTime`, actions are matched by `actionName:undefined` and
all actions with the same are merged.

Fixes #31764.
2024-07-19 11:18:22 -07:00
Max Schmitt b8546eb35e
test: unflake client-certificate WebKit tests (#31776) 2024-07-19 15:08:04 +02:00
Simon Knott b269ceb773
chore(policy files): Update SECURITY.md to V0.0.9 (#31775)
Prompted by https://github.com/microsoft/playwright/pull/31738. There's
an updated `SECURITY.md` at
https://github.com/microsoft/repo-templates/blob/main/shared/SECURITY.md.
This PR pulls that into Playwright.

Signed-off-by: Simon Knott <info@simonknott.de>
2024-07-19 14:56:32 +02:00
Max Schmitt f570c747d5
test: unskip har http2 test on WebKit Windows (#31774) 2024-07-19 13:44:56 +02:00
Max Schmitt f104e920e0
fix(client-certificates): pass TLS servername for SNI (#31761) 2024-07-19 12:55:20 +02:00
Max Schmitt 0ecae56750
test: unflake 'should have ignoreHTTPSErrors=false by default' (#31771) 2024-07-19 12:04:12 +02:00
Yury Semikhatsky d007ff3b62
chore: make WKInterceptableRequest._requestId private (#31762)
With COOP navigation we may need to take over request in the new
provisional page where it will have different id. This is preparation to
that.
2024-07-18 15:19:53 -07:00
Max Schmitt 708def8804
fix(client-certificates): keep ignoreHTTPSErrors false by default (#31760) 2024-07-18 22:37:11 +02:00
Max Schmitt 6dbc7b54e8
feat(ui-mode): highlight console message in timeline on hover (#31756) 2024-07-18 16:39:40 +02:00
Playwright Service 097f28def9
feat(chromium-tip-of-tree): roll to r1242 (#31751)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-18 14:46:42 +02:00
Playwright Service 26c9478648
feat(chromium): roll to r1127 (#31755)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-18 14:46:19 +02:00
Max Schmitt 297b1a8afe
test: move page-clock tests into library/ tests folder (#31752) 2024-07-18 14:45:45 +02:00
Max Schmitt 453e3bdf9d
test: fix client-certificates tests on Windows (#31750) 2024-07-18 13:43:56 +02:00
Dmitry Gozman e78ce8521d
feat(chromium-tip-of-tree): roll to r1241 (#31748)
Closes https://github.com/microsoft/playwright/pull/31650
Closes https://github.com/microsoft/playwright/pull/31705
Relates https://github.com/microsoft/playwright/issues/31747
2024-07-18 12:11:03 +02:00
Dmitry Gozman 056997c41f
fix(toHaveScreenshot): attach "expected" when writing a missing expectation (#31745)
Previously, only the "actual" attachment was created, pointing to the
file in `test-results`. Now, the "expected" attachment pointing to the
file in `__screenshots__` is also created. This will help any reporters
that would like to know the "expected" path, for example to do a manual
accept/decline of the baseline.

Fixes #30693.
2024-07-18 02:42:44 -07:00
Dmitry Gozman 6491e5b415
chore: deprecate/remove noWaitAfter from some actions (#31739)
The following actions keep `noWaitAfter` option: `click`, `selectOption`
and `press`.

All other actions that used to have `noWaitAfter` now behave like it was
set to true, not waiting for follow-up navigations. In the docs, this
option is marked as completely ignored.

A small logic change was made to compensate for this behavior: when
waiting for the `hitTargetInterceptor`, we now race it against
navigations to avoid stalling when navigation stalls. Previously,
waiting for the interceptor was disabled when `noWaitAfter` was passed,
and since it's impossible to pass this option now, we mitigate by never
stalling instead.

Fixes #31469.
2024-07-18 00:19:08 -07:00
Matt Kleinsmith e06481a332
fix(recorder): address custom context menus (#31634) 2024-07-17 11:45:48 -07:00
Playwright Service 3cb41739a0
feat(firefox-beta): roll to r1457 (#31733)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-17 18:33:47 +02:00
Yury Semikhatsky 3f15fe8518
feat(reporter): links in attachment names, attachments name only (#31714)
* Allow calling `test.info().attach('My text');` without options (no
path nor body).
* Highlight links in attachment names:

<img width="992" alt="image"
src="https://github.com/user-attachments/assets/770e7876-3e43-4434-8cf1-194ad6ae5819">

Fixes https://github.com/microsoft/playwright/issues/31284
2024-07-17 09:30:49 -07:00
Dmitry Gozman f4399f7f06
fix(toHaveScreenshot): sanitize attachment names and paths (#31712)
... unless an array of file-system-friendly parts is provided.

Motivation: attachment name is used as a file system path when
downloading attachments, so we keep them fs-friendly.

References #30693.
2024-07-17 07:08:43 -07:00
Simon Knott 8eab28d858
fix(list reporter): print step ends in non-TTY mode (#31703)
When used in a terminal, the `list` reporter prints out information
about test steps to help debugging. In non-TTY environments like GitHub
Actions, currently it doesn't.

This PR changes that, so that in non-TTY environments you'll see the
"step end" messages appearing, but not the "step begin" messages. This
is a good middleground, because it helps the user understand test
progress, without being too verbose.

Closes https://github.com/microsoft/playwright/issues/31674
2024-07-17 13:36:37 +02:00
Max Schmitt ed6abf86c7
fix(expect): throw unsupported error when using this.equals() in expect (#31723) 2024-07-17 13:22:00 +02:00
Max Schmitt e11c0c0cbb
fix(connect): annotate internal api calls correctly (#31715) 2024-07-17 09:00:47 +02:00
Max Schmitt 3694c1422d
Revert "test: rebase golden snapshots on Chromium macOS arm64 (#31344)" (#31711)
This reverts commit 02416877da.

Since we landed
3127571b24
- we should revert this one as well.
2024-07-16 21:16:55 +02:00
Max Schmitt bb2e9d1175
chore: make 'npm run clean' ignore .DS_Store (#31710) 2024-07-16 20:55:12 +02:00
Max Schmitt 6a9e60d6a1
fix(ct): import ct* flavour types from ct-core and then from pwt (#31642) 2024-07-16 19:32:51 +02:00
Yury Semikhatsky 8021312c99
chore: enable notification permission tests in WebKit (#31699)
The Notifications API has been supported in WebKit since 2022, enable
related permission and tests.
2024-07-16 09:44:38 -07:00
Max Schmitt f66f5b800e
docs: fix broken anchor links (#31707) 2024-07-16 16:11:20 +02:00
Max Schmitt 7ce9b7e56b
fix(setInputFiles): throw when uploading file in directory upload (#31706) 2024-07-16 15:55:35 +02:00
damar Zaky 96e0a96ac1
docs: fix grammar and typos in various files (#31678)
- docs/src/best-practices-js.md
- docs/src/codegen.md
- docs/src/debug.md
- docs/src/events.md
- docs/src/library-js.md
- docs/src/locators.md
- docs/src/other-locators.md
- docs/src/test-components-js.md
- docs/src/trace-viewer.md

---------

Signed-off-by: damar Zaky <damzaky@gmail.com>
2024-07-16 06:15:25 -07:00
Playwright Service a5ca9b7d37
feat(webkit): roll to r2047 (#31701)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-16 08:28:58 +02:00
Yury Semikhatsky 37ffbd757e
chore: remove unused project to id mapping from html builder (#31698) 2024-07-15 14:35:11 -07:00
Ismael Onilearan 0aa2f06f68
fix: add 'window-management' to chromium browser (#31687) 2024-07-15 14:34:57 -07:00
Yury Semikhatsky de39d227f7
chore: linkify urls in attachments body (#31673)
Reference: https://github.com/microsoft/playwright/issues/31284
2024-07-15 12:20:22 -07:00
Max Schmitt d463d1f285
fix(snapshotter): allow rendering of & in STYLE tags (#31627)
Fixes https://github.com/microsoft/playwright/issues/31607
2024-07-15 17:33:22 +02:00
Max Schmitt 950875f0db
fix(docs): index all deeply nested types (#31690) 2024-07-15 16:35:15 +02:00
Simon Knott 58bcdde956
docs(contributing): some updates to recommended test commands (#31693)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-07-15 16:32:50 +02:00
Dmitry Gozman 6ee8f1de2d
Revert "chore: move artifacts recording to TestLifecycleInstrumentation (#30935)" (#31686)
This reverts commit ba5b460444.
2024-07-15 07:01:51 -07:00
Dmitry Gozman 1686e5174d
chore: allow evaluating Error objects (#31691)
Previously, Error objects were replaced with strings.
Now, Error objects are reconstructed back from the serialized value.
2024-07-15 05:47:40 -07:00
Dmitry Gozman 074cc7d467
Revert "feat(trace): record trace upon browser closure (#31563)" (#31677)
This reverts commit bc27ca225e. Considered
too risky.
2024-07-15 01:08:51 -07:00
Yury Semikhatsky 1b4d9003c6
fix(har): ignore boundary when matching multipart/form-data body (#31672)
Fixes https://github.com/microsoft/playwright/issues/31495
2024-07-12 16:59:48 -07:00
Max Schmitt 459b762565
chore: remove unused kTestSdkObjects (#31665) 2024-07-12 11:56:16 -07:00
Pavel Feldman 297143885a
fix(clock): ensure Date.now() is an integer (#31648)
Fixes https://github.com/microsoft/playwright/issues/31644
2024-07-12 11:44:25 -07:00
Max Schmitt 3127571b24
Revert "fix(chromium): pass --enable-gpu when running headless (#30937)"
This reverts commit d0b052e1e0.
2024-07-12 20:12:56 +02:00
Jorge Caridad fb59e6372b
docs: fix typos in various documentation files (#31656) 2024-07-12 10:24:52 -07:00
Playwright Service 68595ac385
feat(webkit): roll to r2045 (#31664)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-12 19:24:38 +02:00
Max Schmitt 71a668eb86
test: skip windows/CR client-certificates proxy tests (#31662) 2024-07-12 14:34:32 +02:00
Max Schmitt 9569cb5c1e
feat: support client certificates (#31529)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-07-12 11:42:24 +02:00
Dmitry Gozman 229000501e
chore: introduce helpers for non-stalling eval on page/context (#31658) 2024-07-12 02:26:16 -07:00
Max Schmitt 1b85ec9dc2
test: unflake signals temp dir removal test (#31655) 2024-07-12 09:34:04 +02:00
Playwright Service 2441c765b1
feat(chromium): roll to r1126 (#31649)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-12 00:03:29 +02:00
Max Schmitt 97e2aa07a5
test: fix Windows Socks tests (#31654) 2024-07-11 23:16:24 +02:00
Yury Semikhatsky 01e2c8ab06
docs: document numeric values of PLAYWRIGHT_FORCE_TTY (#31653)
Fixes https://github.com/microsoft/playwright/issues/31647
2024-07-11 14:02:47 -07:00
Daniel Flores b13bd66d20
docs: add missing pytest-playwright installation command (#31645) 2024-07-11 21:27:54 +02:00
Max Schmitt 4554372e45
chore: remove unused dependencies (#31638) 2024-07-11 14:13:12 +02:00
Pavel Feldman 77e50635ee
chore: fix build warnings (#31616) 2024-07-11 14:12:59 +02:00
Max Schmitt 89eef55dc7
chore: use own socks5 server for tests (#31639) 2024-07-11 14:12:48 +02:00
Playwright Service 2b77ed4d7a
feat(firefox): roll to r1457 (#31633)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-11 07:44:48 +02:00
Max Schmitt a3b0f0cba8
chore: address deprecated Vite warnings (#31618) 2024-07-10 22:32:08 +02:00
Matvey Chernyshov ba62f83454
chore: add android keys for channels switching (#31619) 2024-07-10 13:15:45 -07:00
Dmitry Gozman a1f82b0bb6
fix(trace): do not corrupt test runner actions when no library trace is present (#31564)
Recent logic that matches either by `stepId` or by `apiName`+`wallTime`
did not account for "no library trace" scenario.
2024-07-10 09:12:06 -07:00
Stanislav Grishaev ce2b138eeb
chore: add iPhone 15 device family (#31623)
Fixes https://github.com/microsoft/playwright/issues/31573

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-07-10 13:58:36 +02:00
Playwright Service dcff807ab8
feat(webkit): roll to r2044 (#31628)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-10 13:25:43 +02:00
Pavel Feldman f374f8db38
chore: follow up to the attachments preview change (#31598) 2024-07-09 09:58:59 -07:00
Playwright Service 067e423d14
feat(chromium-tip-of-tree): roll to r1239 (#31610)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-09 13:58:03 +02:00
Max Schmitt 0c11d6ed80
feat(trace-viewer): allow pasting traces (#31608) 2024-07-09 13:36:35 +02:00
Max Schmitt 5c8fe5c33c
docs: make x/y more clear (#31606)
Fixes https://github.com/microsoft/playwright/issues/31567
2024-07-09 12:52:51 +02:00
Playwright Service 1ea55acab3
chore(driver): roll driver to recent Node.js LTS version (#31609)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-09 12:07:34 +02:00
Álvaro Martínez 00131c1e3f
feat(trace-viewer): display text attachments in ui mode (#31215) 2024-07-08 11:16:14 -07:00
Michael Render 1d930542e1
docs(clock): Fix C# version of clock documentation (#31560) 2024-07-08 19:01:04 +02:00
Dmitry Gozman 21c4531618
fix(selector generator): do not reparent to invisible ancestor (#31590)
Fixes #31335.
2024-07-08 09:07:25 -07:00
Max Schmitt 4dfa55d1f1
chore(trace-viewer): move call tab copy button next to the value (#31586) 2024-07-08 10:23:19 +02:00
Dmitry Gozman 48db1b1663
fix(ui mode): allow --updateSnapshots (#31584)
Fixes #31408.
2024-07-08 01:08:57 -07:00
Dmitry Gozman bc27ca225e
feat(trace): record trace upon browser closure (#31563)
Retaining traces in the following scenarios:
- browser crash;
- manual `browser.close()`;
- implicit `browser.close()` from the `browser` fixture upon test end.

This does not affect the library, where `browser.close()` will not
retain the trace and will close the browser as fast as possible.

References #31541, #31535, #31537.
2024-07-06 11:34:34 -07:00
Dmitry Gozman 369a1eca48
feat(ct): experimental route fixture (#31554)
This fixture accepts the same arguments as `context.route()`, but also
supports request handlers compatible with msw syntax.
2024-07-06 09:35:20 -07:00
Debbie O'Brien b2bda9fce2
docs: update vs code projects explanation (#31571) 2024-07-05 17:37:00 +02:00
Max Schmitt 1132667ffe
chore: bump TypeScript to v5.5 (#31532) 2024-07-05 16:31:08 +02:00
Max Schmitt 2b94fa2e30 test: fix ESLint (remove unused imports) 2024-07-05 13:44:23 +02:00
Max Schmitt f56978edb2
test: isolate proxy creds between contexts (#31565) 2024-07-05 13:24:06 +02:00
Max Schmitt b79f3076ee
doc(clock): fix code snippets (#31568)
Fixes https://github.com/microsoft/playwright/issues/31566
2024-07-05 13:20:54 +02:00
Playwright Service 95ebfd301f
feat(webkit): roll to r2043 (#31561)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-05 10:57:11 +02:00
ryanrosello-og e36ebb6ede
feat(trace-viewer) add request urls for actions initiated via APIRequestContext (#31534) 2024-07-04 11:59:56 +02:00
Dmitry Gozman 1c69d3e175
chore: update flakiness metadata for better ui presentation (#31528) 2024-07-03 08:39:53 -07:00
Playwright Service 64b62988f6
feat(chromium-tip-of-tree): roll to r1237 (#31536)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-03 14:11:36 +02:00
Max Schmitt 2b974f2139
docs(clock): update time types in Python/.NET (#31511) 2024-07-03 10:46:33 +02:00
Max Schmitt bfbd5f6f2f
test: snapshot with all: unset in StyleSheet (#31514) 2024-07-03 09:40:50 +02:00
Max Schmitt 5bdced9c9b
chore: bump @types/node and chokidar (#31527) 2024-07-03 09:40:37 +02:00
Vitaliy Potapov 1e55a084bc
feat(html-reporter): hide annotations started with "_" (#31489)
Fixes: https://github.com/microsoft/playwright/issues/30179
2024-07-02 16:46:24 -07:00
Joe-Hendley a62260a9f2
feat(html report): linkify test annotations (#31521) 2024-07-02 16:45:16 -07:00
Nicolas Le Cam 9caf3b5f72
chore: Remove obsolete Chromium enabled features (#31513) 2024-07-02 09:10:42 -07:00
ryanrosello-og 262586a46a
feat(trace-viewer) add copy to clipboard on the Source > Stacktrace tab (#31394) 2024-07-02 09:09:39 -07:00
Max Schmitt 9dc7e40084
chore(electron): don't swallow close errors (#31509) 2024-07-01 22:00:03 +02:00
Noah Mayerhofer f62121548a
docs(ci): typo (#31508) 2024-07-01 20:57:16 +02:00
KeisukeYamashita 1f92376508
docs(ci): added Drone CI docs for Node.js (#31499) 2024-07-01 19:44:17 +02:00
Max Schmitt 9a3e0967e6
fix(electron): tracing with @playwright/test (#31437) 2024-07-01 19:19:38 +02:00
Max Schmitt b349a73645
fix(ct): export package.json (#31504) 2024-07-01 18:51:59 +02:00
Max Schmitt d1e76d9a92
docs(release-notes): fix .NET snippets (#31496) 2024-07-01 18:32:23 +02:00
Playwright Service 2136b96df1
feat(webkit): roll to r2041 (#31502)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-01 16:14:32 +02:00
Max Schmitt 7040340d61
test: adjust upload folder expectation for msedge (#31454) 2024-07-01 12:19:04 +02:00
Playwright Service 60773f34d8
feat(webkit): roll to r2040 (#31486)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-30 13:21:46 +02:00
4ydx 4089f4593b
fix(codgen): assertValue works with disabled select (#31315) 2024-06-28 13:04:59 -07:00
Debbie O'Brien ea33137a0e
docs: improve clock guide (#31487) 2024-06-28 13:04:39 -07:00
Pavel Feldman f46ae15500
test(clock): fix clock mode bots (#31472) 2024-06-28 11:46:28 -07:00
Debbie O'Brien 93d147cf28
docs: add release video (#31482) 2024-06-28 20:04:31 +02:00
Rui Figueira 9bc45ea2fc
feature(trace-viewer): embedded mode support PoC (#30885)
Companion PR of https://github.com/microsoft/playwright-vscode/pull/483
2024-06-28 10:36:11 -07:00
Playwright Service f1b04aaaf4
feat(webkit): roll to r2039 (#31480) 2024-06-28 15:23:38 +02:00
Yury Semikhatsky a3e31fd2c4
feat: introduce touchscreen.touch() for dispatching raw touch events (#31457) 2024-06-27 14:37:36 -07:00
Playwright Service 33ac75b7ab
feat(chromium-tip-of-tree): roll to r1236 (#31466)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-27 21:07:49 +02:00
Pavel Feldman c9e673c6dc
fix(utility): create utility world when web security is disabled (#31458)
Reverts previous attempt at #31096

Fixes: https://github.com/microsoft/playwright/issues/31431
Fixes: https://github.com/microsoft/playwright/issues/31442
2024-06-27 09:29:20 -07:00
Playwright Service 87785d6092
feat(chromium): roll to r1125 (#31467)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-27 17:01:16 +02:00
Yury Semikhatsky 111876d526
docs: improve addCookies.cookie parameter description (#31456) 2024-06-26 15:39:43 -07:00
Playwright Service 41b185d643
feat(webkit): roll to r2038 (#31441) 2024-06-26 09:20:28 -07:00
Playwright Service 976373ed2c
feat(chromium-tip-of-tree): roll to r1234 (#31418) 2024-06-26 16:51:57 +02:00
Max Schmitt dad305478a
docs: remove unnecessary html card (#31444) 2024-06-26 14:34:05 +02:00
Pavel Feldman da441347e2
fix(runner): do not run beforeEach hooks upon skip modifier (#31426)
Fixes https://github.com/microsoft/playwright/issues/31425
2024-06-25 10:47:37 -07:00
Max Schmitt f11ab2f145
chore: enable keepAlive in happy eyeballs http.Agent (#31434) 2024-06-25 19:05:32 +02:00
Playwright Service a6b6b243d0
chore(driver): roll driver to recent Node.js LTS version (#31432)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-25 12:16:36 +02:00
Pavel Feldman 122818c62c
feat: allow boxing and titling fixtures, simulate context fixture deps (#31423)
Fixes https://github.com/microsoft/playwright/issues/31411
2024-06-24 21:43:43 -07:00
Max Schmitt 47fb9a080d
fix(test-runner): don't add slow annotation twice (#31414) 2024-06-24 23:34:17 +02:00
Yury Semikhatsky 2b12f53332
chore(route): wait for raw headers from browser in case of redirects (#31410)
Redirects are always autoresumed, so the will always receive extra info
with raw headers. We only want to make raw headers available immediately
when there is a route.

Reference https://github.com/microsoft/playwright/issues/31351
2024-06-24 12:25:12 -07:00
Dmitry Gozman de723f39e9
docs: release notes for 1.45 (#31421) 2024-06-24 12:23:46 -07:00
Dmitry Gozman 114b6f0de6
docs: deprecate handle option in exposeBinding (#31419) 2024-06-24 11:29:40 -07:00
Yury Semikhatsky 865f0d8221
docs(java): correctly parse time (#31420) 2024-06-24 11:28:43 -07:00
Himanshu 74976b1da8
docs: Fixes minor typo. Changes These image -> This image (#31413)
Fixes a minor typo in the docker doc in `These image`
2024-06-24 09:04:42 -07:00
Yury Semikhatsky d74ddaebe7
fix: correctly report overridden headers on redirected requests (#31409)
Fixes https://github.com/microsoft/playwright/issues/31351
2024-06-21 17:44:58 -07:00
Max Schmitt 2285bcd55d
test: fix ct-vue-vite tests (#31406) 2024-06-22 00:50:10 +02:00
Romario Nijim 136fb996d1
docs: added more explanation to sharding to make it more understandable. (#31399)
* added more explanation to the sharding section for it to be more
understandable what it is and what it's purpose.
* because from the explanation in the docs. - it sound like that a
"shard" is a machine that is provided by playwright in addition to the
current setup , like a managed machine, but in reality it is simply a
separate job in the CI, dividing tests to separate jobs is sharding,
which sounds a lot easier when you think about it this way because it
could be confusing at the beginning IMO.
2024-06-21 10:20:56 -07:00
Playwright Service 42b9e8375a
feat(chromium): roll to r1124 (#31404)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-21 14:20:01 +02:00
Max Schmitt 7e1b69cf33
test: update Electron to v30 (#30334) 2024-06-21 00:43:26 +02:00
Max Schmitt 6ed3b374a8
fix(electron): allow downloads (#31390) 2024-06-21 00:35:14 +02:00
Max Schmitt 1ebd20a47b
chore: .NET generator fixes (#31401) 2024-06-20 23:33:46 +02:00
Playwright Service 940d20ad0b
feat(webkit): roll to r2037 (#31400)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-20 22:57:25 +02:00
Playwright Service 0694474fe1
feat(webkit): roll to r2036 (#31387)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-20 09:52:59 +02:00
Yury Semikhatsky 95fc2b8a8b
feat(fetch): maxRetries for fetch (#31386)
Fixes https://github.com/microsoft/playwright/issues/30978
2024-06-19 18:10:14 -07:00
Dmitry Gozman 2dfda0a16f
chore: bump ws to 8.17.1 in the utils bundle (#31384)
Follow-up to #31377.
2024-06-19 15:11:54 -07:00
Yury Semikhatsky a2b116aa39
fix(trace): ensure har entry _monotonicTime is always start time (#31385)
* Revert harTracer change from
aeba083da0
to make sure that har.Entry._monotonicTime always represents request
start time. The issue from the corresponding report was due to HEAD and
GET request sent for the same URL, that use case is still addressed as
we match by url + method
* Adjust resources monotonic time as well when several contexts are
shown in the trace viewer.

Fixes https://github.com/microsoft/playwright/issues/31133
2024-06-19 15:06:20 -07:00
Luke Page 94f0cadea3
fix(fs-watcher) ignore node_modules on windows (#31341)
Partially fixes https://github.com/microsoft/playwright/issues/31337 by
supporting ignoring node_modules on windows.

When I debug the function it gets a unix style path filename on windows,
so the function never ignores node_modules. The ignore path globs are
expected to use the unix path seperator and I've tested this fix works
on windows and I assume that since mac uses unix style, it also works
there (this is a pretty standard glob construct (chokidar points at any
match https://github.com/micromatch/anymatch and anymatch has this exact
example in their readme.md)

Signed-off-by: Luke Page <137174537+lukpsaxo@users.noreply.github.com>
2024-06-19 11:14:10 -07:00
dependabot[bot] 82a44f28e2
chore(deps-dev): bump ws from 8.16.0 to 8.17.1 (#31377)
Bumps [ws](https://github.com/websockets/ws) from 8.16.0 to 8.17.1.

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-19 10:42:43 -07:00
Playwright Service 45ee318673
feat(firefox): roll to r1456 (#31375)
Fixes https://github.com/microsoft/playwright/issues/31328
Fixes https://github.com/microsoft/playwright/issues/30837

---------

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-06-19 19:03:58 +02:00
Playwright Service a7958ff95f
feat(firefox-beta): roll to r1456 (#31376)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-19 18:25:57 +02:00
Max Schmitt 8ba4cff10f
devops: add headless new to flakiness dashboard (#31381) 2024-06-19 18:08:22 +02:00
ryanrosello-og ee63843f7d
feat(trace-viewer): add request method/status to the network details tab (#31274) 2024-06-19 09:05:20 -07:00
Max Schmitt 6d38525119
docs: add guide for print dialogs (#31340)
https://github.com/microsoft/playwright-internal/issues/211
Relates https://github.com/microsoft/playwright/issues/6543
2024-06-19 18:04:22 +02:00
Max Schmitt 951040185d
docs(test-parameterize): improve forEach example (#31331) 2024-06-19 17:45:27 +02:00
Dmitry Gozman 6ae9adfa4f
test: add "clock" to the metadata for dashboard traceability (#31370) 2024-06-18 14:56:08 -07:00
Dmitry Gozman ac90a47b73
fix(click): do not retarget <a> to the parent <label> (#31368)
Fixes #31359.
2024-06-18 12:12:19 -07:00
Yury Semikhatsky f6972c1e23
docs: use long for time in milliseconds (#31369)
In Java and .NET int is not enough to store millis since epoch.
2024-06-18 10:47:29 -07:00
Andrey Lushnikov ee7b5e6315
test: make sure main page recording continues after popup closes (#31365)
References https://github.com/microsoft/playwright/issues/30837
2024-06-18 10:29:41 -07:00
Max Schmitt 02416877da
test: rebase golden snapshots on Chromium macOS arm64 (#31344) 2024-06-18 19:09:24 +02:00
Yury Semikhatsky dbc54c763d
test: delete tests for non-existing fastForwardTo (#31366)
The tests repeat `it.describe('fastForward'` above them.
2024-06-18 09:34:32 -07:00
Max Schmitt 5fc56283a6
fix(clock): throw for invalid date (#31356)
Fixes https://github.com/microsoft/playwright/issues/31354
2024-06-18 18:23:55 +02:00
Max Schmitt c6aab05bd5
devops: make Android driver compile (#31360)
Fixes https://github.com/microsoft/playwright/issues/31355

All changes were done with the Android Studio upgrade assistant. It
updates it to the latest Gradle to make it compatible with recent Java
while keeping the `targetSdkVersion` unchanged.
2024-06-18 18:23:29 +02:00
Max Schmitt f05b4daa2f
fix(clock): under reused context (#31357)
We uninstall all the setInitScript but forgot to mark `installed` as
`false`.

Fixes https://github.com/microsoft/playwright/issues/31353
2024-06-18 18:21:33 +02:00
Andrey Lushnikov acf1b1f88c
test: add test reduced motion reset (#31364)
References https://github.com/microsoft/playwright/issues/31328
2024-06-18 09:01:35 -07:00
Robin Munn e1e6c28722
docs: fix typo in 1.45 release notes (#31350) 2024-06-18 10:11:48 +02:00
Yury Semikhatsky 9e6772818e
chore: cache normalized whitespaces in recorder (#31349)
Reference: https://github.com/microsoft/playwright/issues/31254

On the web page from the bug it reduces time to compute selectors by 8x:

**Before:**
<img width="549" alt="before"
src="https://github.com/microsoft/playwright/assets/9798949/f4482860-29d5-4643-92ab-b360a702f232">

**After:**
<img width="580" alt="after"
src="https://github.com/microsoft/playwright/assets/9798949/b6aca6a1-9306-4041-9042-d504dce1c33a">
2024-06-17 18:20:15 -07:00
Yury Semikhatsky 5443b66636
fix(codegen): trim alt selectors to 80 chars (#31346)
Fixes https://github.com/microsoft/playwright/issues/31254
2024-06-17 16:32:22 -07:00
Playwright Service f3f708e01a
feat(firefox-beta): roll to r1454 (#31343)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-17 21:34:24 +02:00
Dmitry Gozman a002572dd2
test: update some test conditions (#31336) 2024-06-17 10:20:57 -07:00
Pavel Feldman 2a7f17d820
chore: fix simulated clock bots (#31301) 2024-06-17 09:17:38 -07:00
Max Schmitt b62af828c3
docs(input): fix pressSequentially typo (#31333) 2024-06-17 16:27:36 +02:00
dependabot[bot] 6fb214de23
chore(deps-dev): bump braces from 3.0.2 to 3.0.3 (#31293) 2024-06-17 10:52:27 +02:00
Fumiaki MATSUSHIMA 838c572209
fix: select issue in Windows with Edge (#31270) 2024-06-17 10:28:07 +02:00
Sander 1cbc67144a
docs(ct): format story example code (#31317) 2024-06-17 10:27:34 +02:00
Dmitry Gozman 2ae2fb421c
chore: roll stable test runner to 1.45.0-beta-1718411373000 (#31326) 2024-06-14 19:43:35 -07:00
Dmitry Gozman a4deced132
chore: update browser_patches to May 1st (#31325) 2024-06-14 18:38:09 -07:00
Dmitry Gozman 32e25a252b
chore: mark v1.46.0-next (#31324) 2024-06-14 18:22:42 -07:00
Dmitry Gozman b7582616a9
docs: js release notes for v1.45 (#31323) 2024-06-14 17:29:33 -07:00
Yury Semikhatsky 76ba94bce6
test: postBody for intercepted fetch FormData with Blob (#31321)
Fixes https://github.com/microsoft/playwright/issues/24077
2024-06-14 13:30:22 -07:00
Dmitry Gozman fce2874796
feat(types): export PageAssertionsToHaveScreenshotOptions type (#31319)
Fixes #31089.
2024-06-14 09:39:21 -07:00
Playwright Service cf85905f44
feat(webkit): roll to r2035 (#31308) 2024-06-14 10:49:50 +02:00
Max Schmitt a9200be0af
fix(screenshotter): only wait for for document.fonts.ready on locator frame / page main frame (#31295)
**Investigation**

~~We use `nonStallingEvaluateInExistingContext` as of today, which does
`eval()` inside (from our utilityScript) which breaks for some sites. It
causes a hang, since the returned `Promise` of `eval()` hangs. We don't
know as of today why this happens. Without wrapping it ini `eval()` it
does not hang.~~

~~Workaround: Do a plain Runtime.evaluate instead.~~

workaround: Only wait on main frame.

Relates https://github.com/microsoft/playwright/issues/28995 (keeping it
open until they confirm that it helps)
2024-06-14 01:22:14 +02:00
Max Schmitt 4fff548fc6
docs: remove redundant duplicate headed paragraph (#31298) 2024-06-14 01:20:14 +02:00
Sander 132ceff702
docs(ct): faq how to access the component instance (#31305)
The question has been asked a few times:
https://github.com/microsoft/playwright/issues/16889,
https://github.com/microsoft/playwright/issues/22606 and I think more
people will encounter this
2024-06-13 16:10:35 -07:00
Max Schmitt a76e5824c0
docs: examples for file directory upload (#31302) 2024-06-13 23:37:47 +02:00
Dmitry Gozman d0b052e1e0
fix(chromium): pass --enable-gpu when running headless (#30937)
Fixes #30585.
2024-06-13 11:27:17 -07:00
Pavel Feldman 897f7449ef
fix(clock): fix pauseAt to arrive at wall time (#31297) 2024-06-13 10:21:00 -07:00
Playwright Service 8ea663aa64
feat(firefox): roll to r1454 (#31288) 2024-06-13 16:19:09 +02:00
Playwright Service def622b15d
feat(chromium-tip-of-tree): roll to r1231 (#31292)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-13 16:15:49 +02:00
Dmitry Gozman b9106a4c42
fix(test runner): do not use @babel/plugin-transform-dynamic-import (#31285)
Historically, this plugin was important to translate dynamic imports
into require calls so that we can intercept them and transpile.

This is not needed anymore with ESM loader enabled by default, so we can
avoid this transformation and support dynamic imports of ESM-only
packages/files.

Fixes #17075, fixes #23255, fixes #31140, references #23662.
2024-06-13 06:18:44 -07:00
Playwright Service e8285369f5
feat(chromium): roll to r1123 (#31289) 2024-06-13 11:28:56 +02:00
Playwright Service a2a6431efd
feat(webkit): roll to r2033 (#31286)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-13 10:05:49 +02:00
Yury Semikhatsky d432899d2f
docs: drop macOS 12 from supported systems (#31283) 2024-06-12 15:26:35 -07:00
Yury Semikhatsky 9a31821411
test: disable page-drag tests in headed linux (#31280)
The tests have been flaking across browsers apparently due to stray
mouse event sent by the OS.

See
https://devops.playwright.dev/flakiness.html#filter_spec=page%2Fpage-drag.spec.ts&show_flaky=true&timestamp=1718225128508
2024-06-12 15:09:56 -07:00
Max Schmitt fbb44b043b
test: skip folder upload tests on macOS-12 and Android (#31281) 2024-06-12 23:58:36 +02:00
dependabot[bot] f63b0252c9
chore(deps): bump braces from 3.0.2 to 3.0.3 in /packages/playwright/bundles/utils (#31264) 2024-06-12 22:22:35 +02:00
Max Schmitt dcf4e4e054
feat: allow folder uploads (#31165) 2024-06-12 22:20:18 +02:00
Debbie O'Brien 751a41f9ee
docs: update how network and console work (#31278) 2024-06-12 09:12:05 -07:00
Yury Semikhatsky f1475fa644
chore: trim multiline step titles to first line (#31269)
Fixes https://github.com/microsoft/playwright/issues/31266
2024-06-12 08:24:12 -07:00
Playwright Service 6a7bfe63a1
feat(webkit): roll to r2031 (#31272) 2024-06-12 16:06:47 +02:00
Dmitry Gozman f115ba85d9
test: add more edge-case tests for clock (#31256) 2024-06-11 16:43:44 -07:00
Pavel Feldman cf400a6080
Revert "feat(test runner): shuffle order of tests with sharding seed … (#31260)
…(#30817)"
2024-06-11 16:05:35 -07:00
Pavel Feldman 732e7393d3
Revert "feat(test): add URL field to annotations for hyperlink disp… (#31259)
…lay (#30665)"
2024-06-11 16:05:21 -07:00
dependabot[bot] b24fd0dd27
chore(deps): bump @azure/identity from 4.1.0 to 4.2.1 in /utils/flakiness-dashboard (#31261) 2024-06-11 15:37:43 -07:00
Playwright Service e07b46883d
feat(webkit): roll to r2029 (#31257) 2024-06-11 22:14:30 +02:00
Pavel Feldman 2b257ea963
chore(clock): introduce pauseAt (#31255) 2024-06-11 12:51:00 -07:00
Playwright Service 8fd0a56427
feat(chromium-tip-of-tree): roll to r1230 (#31251)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-11 18:52:38 +02:00
Pavel Feldman 6399e8de4e
chore: clock api review (#31237) 2024-06-11 09:42:15 -07:00
Yury Semikhatsky c08000b967
feat(chromium): storage-access permission (#31239)
Fixes https://github.com/microsoft/playwright/issues/31227
2024-06-11 09:18:45 -07:00
Max Schmitt f95b4e0ac8
docs(dotnet): recommend MSTest over NUnit (#31245) 2024-06-11 15:06:03 +02:00
Sander 664c4dd442
chore(ct): vue update vue-component-type-helpers (#31213)
The `ComponentProps` copied from
[`vue-component-type-helpers`](5c65f102d0/packages/component-type-helpers/index.ts (L6-L9))
was outdated and had an issue accurately inferring generic/functional
Vue components.
2024-06-10 17:22:00 -07:00
Sander d9ac51bf87
docs(ct): update testing library migration guide (#31222) 2024-06-10 17:20:51 -07:00
Matthijs Kok b60f99db36
docs(class-testproject): fix 'use' type reference (#31200) 2024-06-10 16:22:54 -07:00
Max Schmitt 98637ea5b5
chore: update socks dependencies (fix npm audit for 'ip' package) (#31231)
Fixes https://github.com/microsoft/playwright/security/dependabot/76

Ran `npm audit fix` locally.
2024-06-10 10:28:29 -07:00
Max Schmitt 185cc43dbf
devops: fix merge reports on PRs (#31232) 2024-06-10 19:21:02 +02:00
Carter Sande 701a405bdf
fix(trace-viewer): Rewrite file URIs in snapshots, like blob URIs. (#31113)
This allows snapshots of file:/// pages with external stylesheets,
images, etc to be rendered correctly in the trace viewer. (Otherwise, it
tries to request the file:/// URIs directly and the requests get blocked
by the browser.)

Fixes #31112.
2024-06-10 11:44:52 +02:00
Lee Byonghun abaddc01c9
fix: throw error when workers option is not number or percentage (#31210) 2024-06-10 11:27:54 +02:00
Pavel Feldman e280d0bd35
chore(clock): split wall and monotonic time (#31198) 2024-06-09 14:50:50 -07:00
Playwright Service 43d6d012d4
feat(firefox-beta): roll to r1453 (#31197) 2024-06-07 09:22:22 +02:00
Playwright Service 05e10a8d0f
feat(firefox): roll to r1453 (#31199)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-07 09:22:08 +02:00
Pavel Feldman dd3a41287e
chore: simplify doTick (#31196) 2024-06-06 19:26:30 -07:00
Pavel Feldman 826343b8a0
chore: rename fakeTimers to clock (#31193) 2024-06-06 15:56:13 -07:00
Denis Paris 3e86ebc80c
docs(trace-viewer): add link to trace object docs (#31182) 2024-06-06 22:07:56 +02:00
Playwright Service 8782936a00
feat(webkit): roll to r2022 (#31191)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-06 20:17:17 +02:00
Playwright Service e259f802d6
feat(chromium): roll to r1122 (#31188)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-06 20:02:58 +02:00
Yury Semikhatsky fc6fcc2118
chore: remove same site hack for libsoup on the client (#31192) 2024-06-06 08:55:38 -07:00
Playwright Service c8b7cda514
feat(chromium-tip-of-tree): roll to r1229 (#31187)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-06 16:49:45 +02:00
Pavel Feldman 384eed65ea
chore: organize fake timers (#31156) 2024-06-05 09:25:12 -07:00
Playwright Service f9c268a8e6
feat(webkit): roll to r2019 (#31167)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-05 15:19:32 +02:00
Max Schmitt 9a536b0a56
fix: add libicu74 dependency to webkit Ubuntu 24.04 (#31152) 2024-06-04 21:48:44 +02:00
Max Schmitt 34dac6523c
docs(test-parameterize): use absolute dotenv import (#31149) 2024-06-04 20:07:59 +02:00
Darío Kondratiuk 76b25e84cc
docs: Improve clock doc (#31147) 2024-06-04 18:48:56 +02:00
Max Schmitt 2d7bbe4d73
test: unflake should pass "key" attribute from JSX in variable (#31141) 2024-06-04 17:57:57 +02:00
Pavel Feldman c516ba0ec8
api(clock): rework api based on the review (#31137) 2024-06-04 06:51:35 -07:00
Matt 727b2189e4
docs: fix parallelism and sharding references (#31134) 2024-06-04 10:31:36 +02:00
Max Schmitt 9e6f051488
devops: merge other workflows (#31121) 2024-06-04 08:59:50 +02:00
Dmitry Gozman bdc7fc8288
docs: explain install-deps with proxy (#31136) 2024-06-03 16:26:29 -07:00
Sander c912621d10
docs(ct): api reference (#31109)
closes: https://github.com/microsoft/playwright/issues/30581
2024-06-03 09:58:56 -07:00
Pavel 8d0def190d docs: iterate over the clock (2) 2024-06-03 09:03:43 -07:00
Max Schmitt 8975684753
devops: group run-test commands into groups (#31116) 2024-06-03 16:39:18 +02:00
Max Schmitt d50a2bb0c6
test: fix service tests (#31130) 2024-06-03 16:28:07 +02:00
ggorlen baecdfd938
docs(auth): fix auth bash typo (#31124) 2024-06-03 12:50:37 +02:00
Max Schmitt 2c6fd722dd
feat: support Ubuntu 24.04 (#30826) 2024-06-03 12:47:16 +02:00
Playwright Service 0203fed0c2
feat(webkit): roll to r2017 (#31127)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-03 09:52:26 +02:00
Pavel Feldman 54e7e254cd
chore: fix driver modes to test with under_test set (#31117) 2024-06-01 08:33:46 -07:00
Pavel 8d2f4c1433 docs: iterate over the clock dock 2024-06-01 08:22:36 -07:00
Pavel 935aa0493c docs: do not use html cards with scripts 2024-06-01 07:43:11 -07:00
Pavel Feldman fc6c67f5f9
docs: start adding clock docs (#31111) 2024-06-01 07:30:58 -07:00
Playwright Service 4655a30bdd
feat(webkit): roll to r2016 (#31114)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-01 13:48:17 +02:00
Pavel Feldman 8bfd0eb6e4
chore: introduce clock test mode (#31110) 2024-05-31 14:44:26 -07:00
Joe-Hendley afa0bf2247
feat: increase length of printed html tags (#31105)
resolves https://github.com/microsoft/playwright/issues/30977 by
increasing the printed length of HTML tags from 50 -> 500 as suggested
by @dgozman
2024-05-31 10:45:56 -07:00
Pavel Feldman 76e977a934
chore: add clock.next() (#31097) 2024-05-31 08:09:24 -07:00
Playwright Service a617dd0df8
feat(webkit): roll to r2015 (#31103)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-31 14:39:58 +02:00
Pavel Feldman f17d0440a7
chore: attempt at fixing double init scripts (#31096) 2024-05-30 15:38:10 -07:00
Yury Semikhatsky 9a11be3305
chore(trace-viewer): grid view z-index, source column in resource details (#31094)
New look for multiple contexts:

<img width="585" alt="image"
src="https://github.com/microsoft/playwright/assets/9798949/02dc5f54-0946-40a9-9459-942c4362a32e">
2024-05-30 14:45:33 -07:00
Yury Semikhatsky 4c020c9861
chore(trace-viewer): preserve column widths after showing resource details (#31093)
* Column widths are now stored on in the NetworkPanel context, this way
they are not reset after selecting an empty range (and changing position
of the NetworkGridView in the component tree).
* Column widths values are now preserved if column set changes (e.g.
selecting entries from a single context and then from multiple
contexts).
2024-05-30 12:21:32 -07:00
Pavel Feldman f97d87ea5a
docs: fix the api review typos (#31071) 2024-05-30 12:15:52 -07:00
Mathias Leppich 5708148496
fix(merge-reports): only change test ids when needed (#31061)
When merging blob reports test ids are patched to make sure there is no
collision when merging reports that might have overlapping test ids.
However, even if you were merging reports that had no overlapping ids,
all test ids will be modified, which is an undesirable side effect.

This PR only modify test ids when the same test id has already been used
in a previous blob report.

----

This change is also part of
https://github.com/microsoft/playwright/pull/30962
2024-05-30 11:29:20 -07:00
Yury Semikhatsky 6067b78f88
chore: http credentials send immeidately/unauthorized enum (#31076)
Reference https://github.com/microsoft/playwright-internal/issues/205
Reference https://github.com/microsoft/playwright/issues/30534
2024-05-30 10:19:56 -07:00
Max Schmitt d6d373c459
devops: fix client side changes GHA workflow
Signed-off-by: Max Schmitt <max@schmitt.mx>
2024-05-30 18:56:03 +02:00
Pavel Feldman 170c457a61
feat(timers): a stab at fake timers (#31075) 2024-05-30 09:38:27 -07:00
Playwright Service a1db91040e
feat(chromium): roll to r1121 (#31090)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-30 17:50:22 +02:00
Playwright Service cb589d7fa5
feat(chromium-tip-of-tree): roll to r1227 (#31091)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-30 17:49:59 +02:00
Playwright Service b3ee52659d
chore(driver): roll driver to recent Node.js LTS version (#31087) 2024-05-30 12:15:49 +02:00
Dmitry Gozman ba5b460444
chore: move artifacts recording to TestLifecycleInstrumentation (#30935)
The spirit of this change is reverting #23153. Since that time, we have
moved tracing and `artifactsDir` lifetime into the test runner, so the
reason for revert is mitigated.

Fixes #30287, fixes #30718, fixes #30959.
2024-05-29 18:05:17 -07:00
Yury Semikhatsky f93da40925
feat(webkit): roll to r2014 (#31074)
Closes https://github.com/microsoft/playwright/pull/31059
Closes https://github.com/microsoft/playwright/pull/31012

Reference https://github.com/microsoft/playwright-browsers/issues/795
2024-05-29 17:20:38 -07:00
Mathias Leppich 6e9c31f93b
fix(runner): don't write last run info when listing tests (#31062) 2024-05-29 09:07:40 -07:00
Playwright Service 97a82e6b77
feat(firefox): roll to r1452 (#31068)
Fixes https://github.com/microsoft/playwright/issues/31039
Closes https://github.com/microsoft/playwright/pull/31069
2024-05-29 08:28:26 -07:00
Debbie O'Brien 141c6a9c81
docs: add video on running tests (#31066) 2024-05-29 17:19:49 +02:00
Yury Semikhatsky a11a6d9874
fix(blob): make sure tele reporters do not override ids (#31056)
Fixes https://github.com/microsoft/playwright/issues/31023
2024-05-28 16:37:11 -07:00
Pavel Feldman 6675652269
chore: split client-side instrumentation into sync and async (#31054) 2024-05-28 14:29:57 -07:00
Xan 61203964a8
docs: remove uneeded sentence in docs (#31053)
"To learn more about generating tests check out or detailed guide on
Codegen."

Should it be 'our'? And why does it link back to itself? Should be
removed.

Signed-off-by: Xan <57809064+devxan@users.noreply.github.com>
2024-05-28 13:41:38 -07:00
Rui Figueira f254290ab4
fix(trace-viewer): fix snapshot.html (#31033)
Actual path to get trace contexts is /contexts, not /context
2024-05-28 13:14:22 -07:00
Sander e047c478a4
feat(ct): resolve hooksConfig import refs (#31024)
closes https://github.com/microsoft/playwright/issues/30453
2024-05-28 12:29:52 -07:00
Max Schmitt 67181c9f11
devops: have client side changes issue per Playwright version (#31052)
This should address the issue which we had before of manually taking
entries over into a new issue.

Closes https://github.com/microsoft/playwright/pull/31027
2024-05-28 11:19:29 -07:00
Max Schmitt 63fd28e038
docs(grep): contains tags (#31042) 2024-05-28 19:30:47 +02:00
Max Schmitt 3d7bd70aea
devops: bump actions/github-script@v6 to actions/github-script@v7 (#31028) 2024-05-28 18:10:53 +02:00
Max Schmitt 1fafbe580c
docs(test-cli): remove --tag from docs (#31041)
Fixes https://github.com/microsoft/playwright/issues/31038
2024-05-28 09:08:34 -07:00
Playwright Service fb8f868128
feat(webkit): roll to r2013 (#31045)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-28 17:20:55 +02:00
Ernst de Jong ef023c4f40
chore(types): fix typo in screenshot mode (#31047) 2024-05-28 16:14:21 +02:00
Joonas Häkkinen a300a15afe
docs(test-fixtures): fix minor grammar mistake (#31046) 2024-05-28 14:17:34 +02:00
Playwright Service 6a055434ce
feat(chromium-tip-of-tree): roll to r1226 (#31044)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-28 14:15:32 +02:00
Playwright Service ef65cff2e1
feat(chromium-tip-of-tree): roll to r1225 (#31035)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-27 18:40:06 +02:00
cavivie a7599ad509
feat(api): add host option in launchServer options (#30999) 2024-05-27 11:24:23 +02:00
amankagithub 0e0b426e47
feat(html): filter test cases by annotation text in HTML report (#30751) 2024-05-24 13:12:16 -07:00
Debbie O'Brien af46dbef53
docs: update vs code doc extension updates (#30968) 2024-05-24 09:30:37 -07:00
Pavel Feldman bff1e41add
chore: do not render post data if there is none (#31008)
Fixes https://github.com/microsoft/playwright/issues/30992
2024-05-24 09:27:49 -07:00
Yury Semikhatsky 9884c851ff
feat(expect): expose expect timeout (#30969)
Fixes https://github.com/microsoft/playwright/issues/30583
2024-05-24 08:56:43 -07:00
Dmitry Gozman c906448fe2
fix(recorder): do not ignore signals except for navigation (#30994)
When a signal arrives late enough, after the last action was committed
in 5 seconds, we should still account for it. This includes downloads,
popups and dialogs, but not navigations.

Exposed by a flaky test "should record open in a new tab with url".
2024-05-23 17:40:39 -07:00
Dmitry Gozman ae1e07de10
test: skip/improve some tests that are flaky (#30993) 2024-05-23 17:40:27 -07:00
Playwright Service b12cfe457b
feat(webkit): roll to r2012 (#30990)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-23 23:28:33 +02:00
Yury Semikhatsky 2cbd7b78ea
chore: change expect.getState() return type to unknown (#30989)
Eventually we would like to remove this method altogether.
2024-05-23 14:06:59 -07:00
Yury Semikhatsky f7b0490500
chore: remove references to jest expand (#30988)
Since https://github.com/microsoft/playwright/pull/7722 we always set
expand to false
[here](a106428114/packages/playwright/src/matchers/expect.ts (L176))
and don't expose any means to change that (in jest it's
expect.setState).
2024-05-23 13:44:15 -07:00
Yury Semikhatsky a106428114
feat(config): respectGitIgnore option (#30972)
Fixes https://github.com/microsoft/playwright/issues/30553
2024-05-23 12:05:02 -07:00
Playwright Service 20a23b3485
feat(chromium): roll to r1120 (#30980)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-23 14:53:48 +02:00
Debbie O'Brien 7ead708902
docs: add release video (#30964) 2024-05-23 10:32:08 +02:00
Playwright Service a968b2a5f6
feat(firefox-beta): roll to r1451 (#30958)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-23 10:30:15 +02:00
Playwright Service 14d98aaaf7
feat(firefox): roll to r1451 (#30950) 2024-05-23 10:30:06 +02:00
Playwright Service 7645d293f0
feat(chromium-tip-of-tree): roll to r1223 (#30966)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-23 09:29:15 +02:00
Playwright Service 2d448ec2a0
feat(webkit): roll to r2011 (#30971)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-23 09:24:04 +02:00
Mathias Leppich 825e0e466e
feat(test runner): shuffle order of tests with sharding seed (#30817) 2024-05-22 16:22:09 -07:00
Matt Marsh d048ee4f5b
docs(cli): correct CLI grep documentation (#30940)
The documentation for command line usage of `--grep` did not provide the
correct string used for comparisons. This has now been fixed to include
the project name.

Fixes #30895
2024-05-22 16:05:20 -07:00
Dmitry Gozman eed6a10f3f
fix(tracing): speed up trace recording (#30946)
This includes two major changes:
- reuse `SerializedFS` for live test runner tracing;
- merge scheduled `appendFile` operations into a single `fs` call.

In some cases, this improves performance of UI mode by 61% and
performance of `trace: on` mode by 38%. Note that performance
improvement on the average test will not be as noticeable.

References #30875, #30635.
2024-05-22 15:19:32 -07:00
Max Schmitt cfc9623a79
fix(vscode): keep config order in vscode extension project dropdown (#30954)
Relates https://github.com/microsoft/playwright/issues/30936
2024-05-22 22:18:03 +02:00
Pavel Feldman 964fe66ccc
chore: hint at unroute for handle errors (#30949) 2024-05-22 08:54:19 -07:00
Olaf Alders 5b00ce1594
docs: fix typo in ConsoleMessage class (#30857) 2024-05-22 13:31:14 +02:00
Pavel Feldman e7a11c0ca2
fix: propagate close reason to api context (#30945) 2024-05-21 18:05:58 -07:00
Pavel Feldman 7b27fc3916
chore: pass outputDir to uimode (#30941)
Fixes https://github.com/microsoft/playwright/issues/30886
2024-05-21 14:36:31 -07:00
Yury Semikhatsky 148d759a4c
fix(chromium): do not fetch intercepted request body from network (#30938)
Fixes https://github.com/microsoft/playwright/issues/30760
2024-05-21 12:49:47 -07:00
오소현 165ecac5df
feat(test): add URL field to annotations for hyperlink display (#30665) 2024-05-21 12:46:38 -07:00
Debbie O'Brien 47185b743b
docs: add last failed to running tests (#30730) 2024-05-21 12:37:39 -07:00
Cornelius Roemer 822cba2e2b
docs(actionability.md): fix grammar (#30756) 2024-05-21 12:35:17 -07:00
Joel Einbinder d0644f5444
fix(electron): flaky startup if stderr comes in too fast (#30855)
Chromium's `DevTools listening on` message sometimes arrives before
Playwright is finished connecting to Node. Without this patch, it would
miss the message and fail to connect.
2024-05-21 12:15:05 -07:00
Matt Marsh 68abd36464
docs: add detail on dot reporter output (#30939)
docs: detail on how to interpret dot reporter output added.

Fixes #30908
2024-05-21 12:06:05 -07:00
Dmitry Gozman 6290af3a08
feat(reporters): align and document environment variables (#30912)
- Documents `PLAYWRIGHT_FORCE_TTY` and `FORCE_COLOR` across terminal
reporters.
- New `PLAYWRIGHT_LIST_PRINT_STEPS`. Removes undocumented test-only
`PW_TEST_DEBUG_REPORTERS_PRINT_STEPS`.
- Replaces `PLAYWRIGHT_HTML_REPORT` with `PLAYWRIGHT_HTML_OUTPUT_DIR`
and `PW_TEST_HTML_REPORT_OPEN` with `PLAYWRIGHT_HTML_OPEN` for
consistency, supports older versions for backwards compatibility.
- New `PLAYWRIGHT_HTML_HOST`, `PLAYWRIGHT_HTML_PORT` and
`PLAYWRIGHT_HTML_ATTACHMENTS_BASE_URL`.
- New `PLAYWRIGHT_JUNIT_STRIP_ANSI` and
`PLAYWRIGHT_JUNIT_INCLUDE_PROJECT_IN_TEST_NAME`.
- Removes `PW_HTML_REPORT` that was set for unknown reason.
2024-05-21 10:46:52 -07:00
Max Schmitt a93ad3dade
fix(fetch): allow UTF-8 in Location header (#30904) 2024-05-21 09:15:33 +02:00
Yury Semikhatsky 042896472b
fix: route.continue should not change multipart form data body (#30863)
The bug was fixed in https://github.com/microsoft/playwright/pull/30734.
This PR adds a test and updates interception logic to not send post data
when it is not modified.

Fixes https://github.com/microsoft/playwright/issues/30788
2024-05-20 16:36:57 -07:00
Dmitry Gozman b67b9634c1
chore: remove support for "experimental" from documentation (#30880)
Also add support for "hidden" and make `generate_types/index` actually
pass tsc checks.
2024-05-20 10:30:32 -07:00
Lukas Bockstaller 437b14a903
fix: relative url path for ui mode (#29924)
This is a follow up #29564 

I did a deep dive on a redirect issue I observed in my infrastructure
and originally attributed to some configuration mistakes on my part.
I have code hosted on `example.com/code` and use subdomain proxying.
This leads to the uimode being exposed on
`example.com/code/proxy/{{port}}`.

Clicking on the open uimode link shown by vscode redirected with a 302
to `example.com/proxy/{{port}}`

The absolute redirect url overruled the relative path handling reverse
proxies rely on.

This PR turns the absolute into a relative url to avoid this issue.
2024-05-20 10:18:08 -07:00
Atmaram Naik 7fd3539ebd
docs(intro): adds all three package manager commands (#30884) 2024-05-20 16:14:35 +02:00
Max Schmitt 162c18f586
feat(roll): roll Firefox to r1450 (#30865)
Fixes
https://github.com/microsoft/playwright/actions/runs/9120975643/job/25079367394
2024-05-19 16:28:32 +02:00
Max Schmitt 9188ff7917
docs: add release-notes for language ports (#30868) 2024-05-17 23:18:16 +02:00
Playwright Service b6a7d0a17e
feat(chromium): roll to r1119 (#30879)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-17 19:06:11 +02:00
Yury Semikhatsky dcaded5255
chore(trace-viewer): format negative duration as - (#30840) 2024-05-17 09:32:57 -07:00
Yury Semikhatsky b375f10778
fix: fulfill with unassigned status codes (#30856)
Fixes https://github.com/microsoft/playwright/issues/30773
2024-05-17 09:32:40 -07:00
Dmitry Gozman 4ad94c1a8c
chore: print friendly localhost address from http server (#30853) 2024-05-17 08:55:12 -07:00
Playwright Service c9df73bc59
feat(webkit): roll to r2010 (#30861)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-17 09:45:16 +02:00
Playwright Service 4efb788f99
feat(chromium-tip-of-tree): roll to r1222 (#30859)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-16 23:23:47 +02:00
Max Schmitt 1526f1b522
chore: freeze webkit on macOS-12 (#30854) 2024-05-16 20:10:27 +02:00
Yury Semikhatsky 2734a05342
feat(trace-viewer): show nework request source id (#30810)
<img width="1392" alt="image"
src="https://github.com/microsoft/playwright/assets/9798949/dcfd4d71-4a41-48ac-9f24-2996200f966a">

Fixes https://github.com/microsoft/playwright/issues/28903
2024-05-15 16:29:26 -07:00
Dmitry Gozman 89cdf3d56e
feat: env.PLAYWRIGHT_FORCE_TTY to control reporters' tty (#30834)
Previously, terminal reporters consulted `process.stdout.isTTY`. Now it
is possible to control the tty behavior:
- `PLAYWRIGHT_FORCE_TTY=0` or `PLAYWRIGHT_FORCE_TTY=false` to disable
TTY;
- `PLAYWRIGHT_FORCE_TTY=1` or `PLAYWRIGHT_FORCE_TTY=true` to enable TTY,
defaults to 100 columns when real columns are unavailable;
- `PLAYWRIGHT_FORCE_TTY=<number>` to force enable TTY and set the
columns.

Fixes #29422.
2024-05-15 15:01:52 -07:00
Playwright Service 3370f37e7b
feat(webkit): roll to r2009 (#30833) 2024-05-15 23:24:42 +02:00
Pavel Feldman 8dec672121
chore(testServer): accept video parameter when running tests (#30832) 2024-05-15 12:45:57 -07:00
Dmitry Gozman 5fa0583dcb
fix(test runner): regular worker termination finishes long fixtures (#30769)
Previously, terminating worker always had a 30 seconds force exit.

Now, regular worker termination assumes that process will eventually
finish tearing down all the fixtures and exits. However, the
self-destruction routine keeps the 30 seconds timeout to avoid zombies.

Fixes #30504.
2024-05-15 10:37:36 -07:00
Max Schmitt 90765a226f
fix(electron): allow launching with spaces in path (#30820)
Fixes https://github.com/microsoft/playwright/issues/30755
2024-05-15 18:20:00 +02:00
Joe-Hendley 6ae5cd3824
feat: implement flag to fail flaky tests (#30618)
Implements feature requested in
https://github.com/microsoft/playwright/issues/30457

The test runner treats flaky tests as failures when the flag is enabled,
but still reports flaky tests as flaky in the reporting interface. It
feels like something worth discussing as this behaviour makes sense to
me, but looked a bit odd to @BJSS-russell-pollock when I ran this past
him.

Closes #30457.
2024-05-15 09:10:10 -07:00
Pavel Feldman 7a588e6c72
chore: do not close the reused context when video is on (#30807)
Fixes https://github.com/microsoft/playwright/issues/30779
2024-05-15 09:05:06 -07:00
Playwright Service fda9051c75
feat(webkit): roll to r2008 (#30818)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-05-15 11:34:39 +02:00
Yury Semikhatsky fb319e6d3d
fix: match client step and server action by explicit stepId (#30641)
Matching bu `apiName@wallTime` fails when two actions start at the same
time, e.g. two parallel api requests. Moreover, it results in trace
actions that have parent set to themselves, which in turn causes
infinite loop in the trace viewer. To avoid this problems we write
stepId explicitly to the library trace and use those step ids to find
corresponding test runner steps.

The stepId is passed via zone in case of expect, because the protocol
step is quite deep in the call chain after or explicitly in case of API
call steps created by the test runner instrumentation.
2024-05-14 12:10:46 -07:00
Sander 9ce41fa1b0
fix(ct): mount then unmount then mount (#30657)
closes https://github.com/microsoft/playwright/issues/30628
2024-05-14 11:03:46 -07:00
Max Schmitt 27ce5c0226
test: should take fullPage screenshots and mask elements outside of it (#30802)
Regression test for #30770.
2024-05-14 18:09:18 +01:00
Max Schmitt c8c37009c3
test(esm): fix import attribute tests (#30798)
Pre Node.js `18.20.0`:

- `assert` is supported

Post Node.js `18.20.0`

- `assert` and `with` is supported.

Before https://github.com/microsoft/playwright/pull/30482 we kept
`asserts` in the JS code, Node.js was interpreting them. The `with`
keyword was not supported, this was what the PR was fixing.

After https://github.com/microsoft/playwright/pull/30482 Babel is
converting `assert` (deprecated) into `with` (successor) since we use
the `deprecatedAssertSyntax` option.

This means, that the minimum Node.js version we support in order to use
import attributes is now `18.20.0` where they added the `with` support.
This follows our principle of supporting only the latest minor release
for Node.js versions.

See here for the 18.20 changelog:

> #### Added support for import attributes
>
> Support has been added for import attributes, to replace the old
import
> assertions syntax. This will aid migration by making the new syntax
available
> across all currently supported Node.js release lines.
>
> This adds the `with` keyword which should be used in place of the
previous
> `assert` keyword, which will be removed in a future semver-major
Node.js
> release.
>
> For example,
>
> ```console
> import "foo" assert { ... }
> ```
>
> should be replaced with
>
> ```console
> import "foo" with { ... }
> ```

Fixes https://github.com/microsoft/playwright/pull/30482 - the tests
were a noop before, since they were tree-shaked by Babel.
2024-05-14 17:59:41 +01:00
Max Schmitt b06c1dfff1
Revert "fix(highlight): highlight Top Layer elements (#30001)" (#30800)
This reverts commit a932222662.

Closes https://github.com/microsoft/playwright/pull/30797 - maybe there
is a better way to get the page height?
`document.documentElement.scrollHeight` seems to not work on Firefox.
Relates https://github.com/microsoft/playwright/issues/30770
2024-05-14 17:23:52 +01:00
Yury Semikhatsky 873f3a03ac
chore(trace): add context create event for test runner (#30697)
Adding metadata event to the test.trace to simplify time computation
logic.
2024-05-14 09:00:33 -07:00
Max Schmitt 7057f28991
devops: migrate electron & video bots to re-usable run-test action (#30778) 2024-05-14 08:55:33 -07:00
Max Schmitt 79d2fcfc20
docs(python): fix browser.context snippet (#30759)
Signed-off-by: Max Schmitt <max@schmitt.mx>
2024-05-14 15:36:17 +01:00
Playwright Service f56f965461
feat(chromium-tip-of-tree): roll to r1221 (#30786)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-14 13:44:29 +01:00
Playwright Service d3d2275922
chore(driver): roll driver to recent Node.js LTS version (#30782)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-14 11:08:01 +01:00
Playwright Service 07ccd5ed7f
feat(webkit): roll to r2007 (#30776)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-05-14 10:33:00 +01:00
Dmitry Gozman 776b04e5ea
feat: APIRequestContext dispose reason (#30765)
Similarly to page.close, we pass test-runner specific reason to
facilitate better error messages.

```
  1) a.test.ts:10:11 › test

    Error: apiRequestContext.fetch: Fixture { request } from beforeAll cannot be reused in a test.
      - Recommended fix: use a separate { request } in the test.
      - Alternatively, manually create APIRequestContext in beforeAll and dispose it in afterAll.
    See https://playwright.dev/docs/api-testing#sending-api-requests-from-ui-tests for more details.

       9 |
      10 |       test('test', async () => {
    > 11 |         await context.fetch('http://example.com');
         |                       ^
      12 |       });
      13 |
```

Closes #29260.
2024-05-13 18:51:30 -07:00
Max Schmitt f2441eb4b5
docs(dotnet): roll fixes (#30771) 2024-05-13 15:56:14 -07:00
Dmitry Gozman 8334191b94
fix(selector generator): properly escape re used in has-text (#30767)
Fixes #30499.
2024-05-13 12:40:46 -07:00
Yury Semikhatsky 64b4ac1732
fix(electron): record har file (#30748)
Fixes https://github.com/microsoft/playwright/issues/30747
2024-05-10 15:32:01 -07:00
Yury Semikhatsky e728e90944
docs: waitForResponse method predicate example (#30739)
Fixes https://github.com/microsoft/playwright/issues/30731
2024-05-10 09:22:59 -07:00
Yury Semikhatsky 00bf7ea815
chore(trace-viewer): more clear classification of trace contexts (#30737) 2024-05-09 17:28:39 -07:00
Yury Semikhatsky a50cd30519
chore: use monotonic time for sorting (#30735)
* Use only monotonicTime for sorting, do not use wallTime for that
* Since test runner and the library can be running on different
machines, those machines may have clocks which are not synchronized. To
avoid problems in such cases we compute delta between test runner and
and library contexts based on a start time of action that exists in both
contexts.
2024-05-09 15:31:23 -07:00
Dmitry Gozman 0d004c9f3c
fix(chromium): concat all post data entries for request.postData() (#30734)
This already works in Firefox, but does not work in WebKit.
2024-05-09 14:08:38 -07:00
Debbie O'Brien 10da0801e3
docs(dotnet): improve trace viewer (#30716) 2024-05-09 20:34:01 +02:00
Yury Semikhatsky 1a22e06062
chore: only patch callIds when there are multiple trace files (#30721) 2024-05-09 09:33:16 -07:00
Playwright Service cfde97b0a0
feat(chromium): roll to r1118 (#30728)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-09 17:06:43 +01:00
Playwright Service 8d588477a0
feat(chromium-tip-of-tree): roll to r1220 (#30725)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-09 17:06:31 +01:00
Playwright Service 7e494fdfb0
chore(driver): roll driver to recent Node.js LTS version (#30723) 2024-05-09 13:05:28 +01:00
Dmitry Gozman a5d384c1f6
docs: add section explaining scrolling (#30719)
Fixes #30643.
2024-05-08 21:04:05 -07:00
Yury Semikhatsky 7a0c7730e7
fix(trace-viewer): make call ids unique across trace files (#30720) 2024-05-08 17:33:31 -07:00
Playwright Service 4a1a63189f
feat(chromium-tip-of-tree): roll to r1219 (#30712) 2024-05-08 22:30:54 +01:00
Debbie O'Brien 54cf6559b4
docs: fix intro whats next codgen link (#30714) 2024-05-08 22:55:44 +02:00
Max Schmitt 8ef32a9394
devops: move microphone access into own action (#30634) 2024-05-08 20:03:37 +01:00
Debbie O'Brien 4f84ae31bd
docs(dotnet): improve trace viewer intro (#30671) 2024-05-08 20:01:47 +01:00
Viktor Szépe 150cbcbdf3
chore: fix typos (#30645) 2024-05-08 19:40:03 +01:00
Rui Figueira cf3ff6531a
chore: make NodeSnapshot type recursive and more (#30619)
Also, deviceDescriptors are now imported with ESM import instead of require()
2024-05-08 11:08:40 -07:00
Sander 4b5ecd2d79
docs(ct): remove router faq (#30663) 2024-05-08 18:40:12 +01:00
Saswat Das 7c826719ec
chore: remove redundant parameters from isElementStyleVisibilityVisible (#30637) 2024-05-08 17:45:53 +01:00
Christophe Chauvot ddeec35450
docs(release-notes): Fixed typo in 1.44 js notes (#30647) 2024-05-08 17:41:53 +01:00
Max Schmitt a0938fc7a4
chore: set minimum Node.js requirement to 18 (#30684) 2024-05-08 17:41:27 +01:00
Max Schmitt 5babb37f19
docs(python): roll fixes (#30708) 2024-05-08 08:44:28 -07:00
Michael Render 81e907f4c1
docs(dotnet): fix isMobile in snippet (#30699) 2024-05-07 22:34:55 +01:00
Yury Semikhatsky 0164dca302
chore: extract trace modernizer into its own class (#30696) 2024-05-07 11:42:28 -07:00
ggorlen 2d7b1480b2
docs(reporters): wrap reporter in array, fixing typo in docs (#30686) 2024-05-07 11:16:21 +00:00
Yury Semikhatsky d1cdf6826d
chore: do not render args in method signature in release notes (#30682) 2024-05-06 16:00:24 -07:00
Max Schmitt 4adf184e5a
devops: remove Node.js 16 bots (#30683) 2024-05-06 22:52:31 +00:00
Yury Semikhatsky cadfd9c88e
test: unflake "should report browser close signal 2" (#30681) 2024-05-06 15:39:31 -07:00
Max Schmitt c7e7a7ef56
devops: add Node.js 22 bots (#30644) 2024-05-06 19:58:44 +00:00
Pavel Feldman 979233e483
chore: print resolved host in the http server terminal (#30677) 2024-05-06 11:01:36 -07:00
Debbie O'Brien 5d21e3729c
docs: fix example for accessible description (#30672) 2024-05-06 10:11:45 -07:00
Max Schmitt aa0020878a
fix(chromium): allow pasting in DevTools without self-xss warning (#30653)
Fixes https://github.com/microsoft/playwright/issues/30425
2024-05-03 18:22:43 +00:00
Max Schmitt a45617b4b5
devops: fix stress tests on Windows (#30655) 2024-05-03 18:05:52 +00:00
Max Schmitt d9d760705a
docs: fix broken links which broke build (#30651)
Fixes https://github.com/microsoft/playwright.dev/pull/1370
Fixes https://github.com/microsoft/playwright/pull/30648
2024-05-03 16:35:18 +00:00
Playwright Service ce69236510
feat(chromium): roll to r1117 (#30646)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-03 15:29:02 +00:00
Debbie O'Brien c086b09f7e
docs: add new video on generating tests (#30631) 2024-05-03 16:21:51 +02:00
Yury Semikhatsky d5b387159a
feat(fetch): sendImmediately (#30627)
Fixes https://github.com/microsoft/playwright/issues/30534
2024-05-02 16:30:12 -07:00
Playwright Service 5639cab4a4
feat(webkit): roll to r2005 (#30638)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-02 18:13:21 +00:00
jonghoonpark a6488c4a28
fix(html-reporter): add filter for anonymous describe (#30621)
related issue: https://github.com/microsoft/playwright/issues/30475

## Motivation:
On https://github.com/microsoft/playwright/issues/30475, we found that
anonymous describe is rendered in html report

## Modification:
Make filter for anonymous describe

## Result:
anonymous describe will be filtered out.
Not render empty describe
Close https://github.com/microsoft/playwright/issues/30475 issue
2024-05-02 09:54:44 -07:00
Dmitry Gozman fd92509dda
fix(role): extract tagName safely (#30636)
Fixes #30616.
2024-05-02 09:42:19 -07:00
georg.dev 8173cdc485
fix(reporters): improve detection of output folder clashes (#30607)
When comparing `outputDir` and html-reporter `outputFolder`, we now make
sure that both paths end with a forward-slash.

Fixes #28677

---------

Co-authored-by: Georg Unterholzner <georg.unterholzner@dynatrace.com>
2024-05-02 08:32:57 -07:00
Playwright Service c1fbc753a7
feat(webkit): roll to r2004 (#30633)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-02 12:44:19 +00:00
Debbie O'Brien bf11c95d58
docs: improve dotnet getting started (#30594) 2024-05-02 12:06:39 +02:00
Max Schmitt 980f9c6ad4
chore: drop firefox-asan (#30626) 2024-05-01 22:13:00 +00:00
Philipp Daun 702bafdd88
docs: add third-party GitHub pull request reporter (#30454)
Add a new third-party reporter: [Playwright Report Comment
Action](https://github.com/marketplace/actions/playwright-report-comment).

A GitHub action that comments report summaries on pull requests.

Screenshots visible in the action readme and below.


![Screenshot](https://github.com/daun/playwright-report-summary/raw/main/assets/comment-passed.png)


![Screenshot](https://github.com/daun/playwright-report-summary/raw/main/assets/comment-failed.png)

Signed-off-by: Philipp Daun <post@philippdaun.net>
2024-05-01 13:28:23 -07:00
Yury Semikhatsky ff35f651e6
chore: delete expired location handler from client map (#30574) 2024-05-01 13:04:21 -07:00
Kawahara Shotaro 4e2ea2280c
docs: Add pnpm as an install option for Playwright (#30601)
This pull request adds pnpm as an install option for Playwright.
Previously, only npm and yarn were listed as installation options.
2024-05-01 13:01:33 -07:00
Max Schmitt 8a91ef1f55
devops: refactor GitHub Actions workflows (#30524) 2024-05-01 18:44:15 +00:00
Yury Semikhatsky 3b7c4fac22
chore: add common env vars for junit and json reporters (#30611) 2024-05-01 10:16:49 -07:00
Dmitry Gozman c3d8b22198
docs: mention that globalSetup does not respect config options (#30609)
Closes #30605.
2024-04-30 09:01:44 -07:00
Yury Semikhatsky 6c827121bf
chore: roll stable test runner to 1.44 beta (#30600) 2024-04-29 18:35:21 -07:00
Yury Semikhatsky ad0938c659
chore: mark 1.45.0-next (#30598) 2024-04-29 17:19:05 -07:00
Yury Semikhatsky 154694b2a5
chore: update playwright-browsers to Mar 19 (#30599)
Upstream commit 5a76c58a3d8e61d581e593882532346961863354
2024-04-29 17:03:40 -07:00
Yury Semikhatsky fa7d4e5143
docs: releae notes 1.44 for js (#30596) 2024-04-29 16:48:40 -07:00
Yury Semikhatsky b9f70f4ac4
docs(junit): document existing options and env (#30595) 2024-04-29 11:29:15 -07:00
Pavel Feldman fb90797d73
fix(last-run): remove globalOutputDir (#30571) 2024-04-29 09:02:54 -07:00
Pavel Feldman 96f3d19819
feat(ctrl_or_meta): add a universal ctrl-meta modifier (#30572)
Fixes https://github.com/microsoft/playwright/issues/12168
2024-04-29 08:15:12 -07:00
Harsh Gupta ebafb95054
docs(python): fix CDPSession documentation example (#30584) 2024-04-29 10:58:59 +00:00
Yury Semikhatsky 1f63cbff08
docs: toHaveUrl.ignoreCase in languages (#30573) 2024-04-26 15:02:51 -07:00
Pavel Feldman b5dee9ecb7
feat(html): allow ctrl+clicking status (#30556) 2024-04-26 10:50:20 -07:00
Dmitry Gozman ab3df111c9
chore: remove TeleTestCase._resultsMap (#30567) 2024-04-26 10:11:01 -07:00
Tan Li Hau 194479d90e
fix: pass key attribute from jsx to component test (#30426)
When using the `key` attribute in jsx inside the test modules, it is not
serialised and passed to the browser in component test
2024-04-26 09:49:44 -07:00
Yury Semikhatsky 3643fd456b
feat: outputFile option and PLAYWRIGHT_BLOB_OUTPUT_FILE env for blob (#30559)
Reference https://github.com/microsoft/playwright/issues/30091
2024-04-26 09:33:53 -07:00
Yury Semikhatsky b5aca9fca8
test: relax "should print if globalTimeout is reached" expectation (#30558) 2024-04-25 18:40:58 -07:00
Yury Semikhatsky ae9345d0bd
docs: add FormData to the examples (#30557) 2024-04-25 16:31:27 -07:00
Dmitry Gozman 6d20da568e
feat: expect(locator).toHaveRole(role) (#30555)
References #13517. Fixes #18332.
2024-04-25 15:26:10 -07:00
Yury Semikhatsky 9a1b34a4b0
Revert "fix: shut down workers before reporter.onEnd (#30329)" (#30551)
This reverts commit 3cea17abb6.

Reference https://github.com/microsoft/playwright/issues/30550

The test is preserved but marked as fixme.
2024-04-25 14:21:54 -07:00
Dmitry Gozman 086ea79c25
chore: remove checkCoverage script (#30552)
We do not benefit from it for many years already.
2024-04-25 14:00:14 -07:00
Dmitry Gozman 9bd2aea130
feat(locator handler): address api review feedback (#30554)
- Remove `handler` argument from `removeLocatorHandler`.
- Rename `allowStayingVisible` into `noWaitAfter`.
- Improve logging related to locator handler.
- Remove experimental badges.
2024-04-25 14:00:02 -07:00
Dmitry Gozman dc0665210f
fix(reporters): properly determine flaky status for serial mode (#30529)
There are plenty of edge cases in this area:
- interrupted test run;
- did not run because of serial mode failure;
- failed before `test.skip()` call (e.g. in `beforeEach`) in one of the
retries;
- and more...

Related issues: #28322, #28321, #27455, #17652.
Prior changes: #27762, #26385, #28360, probably more.

There is still some duplication between `outcome()` and similar logic in
`base.ts`, which might be deduped in a follow-up.

Fixes #28322.
2024-04-25 13:39:14 -07:00
Yury Semikhatsky 5502a16e1d
fix(junit): merged report should preserve total duration (#30525)
Fixes https://github.com/microsoft/playwright/issues/30518
2024-04-25 13:34:17 -07:00
Yury Semikhatsky 714235d6c8
fix(merge): include command hash into the report name (#30528)
Reference https://github.com/microsoft/playwright/issues/30091
2024-04-25 13:34:00 -07:00
Pavel Feldman 4fa1030af6
chore: hide skipped tests by default (#30546)
Fixes https://github.com/microsoft/playwright/issues/30540
2024-04-25 12:48:41 -07:00
Pavel Feldman 14413148f4
chore: document --last-failed (#30544)
drive-by: undocument --browser
2024-04-25 12:29:51 -07:00
Yury Semikhatsky d5bcc41f79
test: run File dependent test only on Node 20+ (#30549) 2024-04-25 11:53:27 -07:00
Playwright Service dfda3003a1
feat(webkit): roll to r2003 (#30543)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-25 19:38:21 +02:00
Yury Semikhatsky 1cfa64343a
docs: describe report name configuration (#30547)
Reference https://github.com/microsoft/playwright/issues/30091
2024-04-25 10:15:25 -07:00
Yury Semikhatsky b074932a44
feat(blob): PLAYWRIGHT_BLOB_FILE_NAME env variable (#30530)
Reference https://github.com/microsoft/playwright/issues/30091
2024-04-25 09:45:38 -07:00
Pavel Feldman a2eb43b335
feat(runner): allow running last failed tests (#30533)
Fixes: https://github.com/microsoft/playwright/issues/30506
2024-04-25 08:15:27 -07:00
Playwright Service 8e6272b1e3
feat(chromium): roll to r1116 (#30542)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-25 16:08:13 +02:00
Playwright Service 0f28063538
feat(chromium-tip-of-tree): roll to r1215 (#30541)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-25 15:26:03 +02:00
Dmitry Gozman a6f0a89169
test: unflake "should work with custom reporter" (#30526) 2024-04-24 20:03:39 -07:00
Pavel Feldman ff3d3ae8f2
fix(ui): print config and global setup errors (#30531)
Fixes: https://github.com/microsoft/playwright/issues/30513
2024-04-24 18:54:48 -07:00
Dmitry Gozman 59689c9c97
feat(addLocatorHandler): various improvements (#30494)
- Automatically waiting for the overlay locator to be hidden, with
`allowStayingVisible` opt-out.
- `times: 1` option.
- `removeLocatorHandler(locator, handler)` method.
- Passing `locator` as first argument to `handler`.

Fixes #30471. Fixes #30424. Fixes #29779.
2024-04-24 15:19:12 -07:00
Yury Semikhatsky e2f7acea1e
docs: fix capitalization and alphabetic order in TestConfig (#30523) 2024-04-24 15:18:43 -07:00
Yury Semikhatsky f1f3929a67
chore: get rid of ConfigInWorker, use FullConfig instead (#30517)
Addressing API review feedback.
2024-04-24 14:14:05 -07:00
Dmitry Gozman 6fecf52016
test: adjust headers expectations for firefox-beta (#30520)
There is a new experimental feature enabled in firefox-beta that sends a
"Priority" header.
2024-04-24 14:05:39 -07:00
Max Schmitt 1b7e097b68
docs(python): add docs for new_context fixture (#30522)
https://github.com/microsoft/playwright-internal/issues/202
2024-04-24 22:40:38 +02:00
Max Schmitt c9e4c49c2f
devops: remove redundant files (#30521) 2024-04-24 22:26:31 +02:00
Max Schmitt d5ade91a92
devops: change flakiness-dashboard auth to be secret-less (#30488) 2024-04-24 22:23:28 +02:00
Yury Semikhatsky 4e086e6df8
docs: update type property description (#30516) 2024-04-24 13:10:17 -07:00
Playwright Service 9914b35c96
feat(firefox-beta): roll to r1449 (#30510)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-24 12:43:26 -07:00
Pavel Feldman e91d372544
fix(ct): allow importing components from node_modules (#30493)
Fixes https://github.com/microsoft/playwright/issues/29854
2024-04-24 12:32:28 -07:00
Pavel Feldman 7a9fd27146
chore: never watch node_modules (#30514) 2024-04-24 12:27:47 -07:00
Dmitry Gozman 8fc7723f22
fix(types): allow any return type from event handlers (#30492)
Closes #29353.
2024-04-24 09:25:43 -07:00
Playwright Service b1d963c24c
feat(webkit): roll to r2002 (#30505)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-24 17:06:52 +02:00
Yury Semikhatsky 230a8437d3
feat(fetch): support FormData as multipart parameter (#30489)
Reference https://github.com/microsoft/playwright/issues/28070
2024-04-23 17:05:27 -07:00
Yury Semikhatsky 73c12f1f77
fix: increase global timeout for a test (#30491)
1s is not enought on CI to start running the tests sometimes.
2024-04-23 16:10:30 -07:00
Dmitry Gozman 25b881cd10
fix(firefox): "warn" console messages should be "warning" (#30490)
Fixes #30136.
2024-04-23 15:07:29 -07:00
Pavel Feldman 4514b7e3ed
chore: use original test ids in html report (#30486)
Fixes https://github.com/microsoft/playwright/issues/30430
2024-04-23 14:28:27 -07:00
Yury Semikhatsky 67c430435a
docs: more accurate test id description (#30487)
Reference https://github.com/microsoft/playwright/issues/30430
2024-04-23 14:07:37 -07:00
Dmitry Gozman b52cd7e4dc
test: make sure skipped tests in serial mode are reported (#30484)
This is a regression test for #28321, in preparation for changing some
skipped/flaky test status logic.
2024-04-23 10:51:27 -07:00
Pavel Feldman f5ca5241f3
feat(esm): support import attributes (#30482)
Fixes https://github.com/microsoft/playwright/issues/30473
2024-04-23 10:13:01 -07:00
Dmitry Gozman 02c0706896
docs: do not recommend waitForLoadState (#30483)
Instead, just perform an action and auto-waiting will handle it.

Closes #30236.
2024-04-23 09:22:58 -07:00
Rui Figueira c80b851422
fix(codegen): prevent csp directive violations (#30366) 2024-04-23 07:33:12 -07:00
Max Schmitt d7169973ae
chore(roll): roll chromium-tip-of-tree to r1214 (#30481) 2024-04-23 15:59:48 +02:00
Dmitry Gozman 18dcd6adff
test: make expectations for some reporter tests readable (#30470) 2024-04-22 18:29:26 -07:00
Dmitry Gozman b0fbe058ae
feat: TestProject.ignoreSnapshots (#30466) 2024-04-22 16:16:38 -07:00
Dmitry Gozman b9e5a934ee
test: make expectations readable for more step reporting tests (#30468) 2024-04-22 15:30:51 -07:00
Yury Semikhatsky 1d786c804d
chore: generate globalTimeout and maxFailures errors in runner (#30467)
Generate 'global timeout' and 'max failures' errors in the runner. Avoid
reading `config.globalTimeout` and `config.maxFailures` in the base
reporters.

Reference https://github.com/microsoft/playwright/issues/29768
2024-04-22 14:00:16 -07:00
Yury Semikhatsky 1e52c37b25
chore: remove unused field (#30465) 2024-04-22 13:31:17 -07:00
Dmitry Gozman 4a275b8eca
feat: expect(locator).toHaveAccessibleDescription (#30463)
References #18332.
2024-04-22 12:33:30 -07:00
Dmitry Gozman 4046d154ae
test: unflake and enable some Firefox tests (#30461)
Fixes #30399.
2024-04-22 11:25:10 -07:00
Yury Semikhatsky 42f91e30d1
chore: remove link to deleted troubleshooting guide (#30462)
Fixes https://github.com/microsoft/playwright/issues/30446
2024-04-22 10:58:48 -07:00
Playwright Service 35a6d91ada
feat(firefox): roll to r1449 (#30432)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-22 09:29:34 -07:00
Playwright Service dd1a9f5e96
feat(chromium): roll to r1115 (#30449) 2024-04-20 18:42:22 +02:00
Max Schmitt a932222662
fix(highlight): highlight Top Layer elements (#30001) 2024-04-20 08:51:16 +02:00
Playwright Service d332541df7
feat(webkit): roll to r2001 (#30435)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-20 00:39:01 +02:00
Max Schmitt 058a30877d
devops: fix headed macOS-14 bots (#30442) 2024-04-20 00:32:48 +02:00
Max Schmitt 629829816b
chore: move azure/login step to the end of the workflows (#30441) 2024-04-19 22:00:13 +02:00
Dmitry Gozman 9b6627a063
feat(role): roll and pass WPT accname tests, calculate description (#30434)
There are new "non-manual" WPT accname tests that we now mostly pass,
which required a few tweeks in calculating role and name.

Also implemented accessible description computation, which is just a
small addition on top of accessible name, and passed respective wpt
tests.

References #18332.
2024-04-19 12:49:49 -07:00
Max Schmitt 3f8bd5ffd1
devops: updated auth mode follow-ups (#30440) 2024-04-19 21:23:39 +02:00
Max Schmitt ed0e1909e5
devops: change auth mode for flakiness/docker/driver uploads (#30405) 2024-04-19 20:36:15 +02:00
Yury Semikhatsky 8c181f7e2b
fix: rebuild project tree from scratch when listing tests (#30407)
Instead of filtering tests assuming there are no two projects with same
name we always rebuild test tree from scratch and restore previos test
results in the list mode.

Fixes https://github.com/microsoft/playwright/issues/30396
2024-04-18 16:49:07 -07:00
Max Schmitt a1b3332e54
chore: follow-up on Electron launch (#30423)
Follow-up to https://github.com/microsoft/playwright/pull/30382.
2024-04-19 00:34:07 +02:00
Dmitry Gozman eea1f9984f
feat: expect(locator).toHaveAccessibleName (#30420)
References #18332.
2024-04-18 12:28:55 -07:00
Stephen Wade fb3bcc8b18
devops: fix issues with audio in macOS 14 on GitHub Actions (#30410) 2024-04-18 20:07:39 +02:00
Andrey Lushnikov bdf95186f0
test: add test for tab blurring in firefox (#30418)
References https://github.com/microsoft/playwright/issues/30399
2024-04-18 10:49:09 -07:00
Dmitry Gozman 103ec90751
fix(role): align presentation role conflict resolution with the spec (#30408)
See
https://www.w3.org/TR/wai-aria-1.2/#conflict_resolution_presentation_none

Fixes #26809.
2024-04-18 08:53:31 -07:00
Playwright Service a98abbdda9
feat(chromium-tip-of-tree): roll to r1213 (#30415)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-18 15:29:11 +02:00
Playwright Service a41122daa2
feat(firefox): roll to r1448 (#30411)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-18 11:16:28 +02:00
Dmitry Gozman 984182bd53
fix(role): embedded control inside the target element (#30403)
According to the spec, such controls should use the native value as long
as they have "aria-label". The relevant spec section is 2D.

However, there is an open issue that claims this should always apply,
and all browsers and wpt test actually do that:
https://github.com/w3c/accname/issues/64.

Fixes #28848.
2024-04-17 12:25:08 -07:00
Dmitry Gozman b72e3a3eba
fix(role): explicitly hidden aria-labelledby should be recursively traversed (#30402)
The accessible name computation spec has changed to explicitly mention
this case:

Step 2A. Hidden Not Referenced. If the current node is hidden and is:
- Not part of an aria-labelledby or aria-describedby traversal, where
the node directly referenced by that relation was hidden.
- Nor part of a native host language text alternative element (e.g.
label in HTML) or attribute traversal, where the root of that traversal
was hidden.

See https://w3c.github.io/accname/#computation-steps. Chromium, Firefox
and Safari all agree with the spec.

Fixes #29796.
2024-04-17 11:22:09 -07:00
Mateusz Burzyński 82aefd24db
types: allow readonly tuples to be used as ReporterDescription (#30387)
This makes it easier to create helper functions like:
```ts
function createReporter(options: MyOptions) {
  return ['my-reporter', options] as const
}
```

At the moment, such functions can't be passed to `reporters` because a
readonly array is not assignable to the expected mutable array.
Playwirght certainly doesn't require those arrays to be mutable so it
would make sense to relax this.
2024-04-16 17:39:11 -07:00
Yury Semikhatsky cda1c945af
test: web assertion inside expect.poll (#30391)
Reference https://github.com/microsoft/playwright/issues/30322
2024-04-16 17:37:25 -07:00
Yury Semikhatsky 3bdbe4284e
fix(steps): make expect.toPass and expect.poll step containers (#30389)
Fixes https://github.com/microsoft/playwright/issues/30322
2024-04-16 16:18:37 -07:00
Yury Semikhatsky 73fce8fb98
chore: replace Zones with AsyncLocalStorage (#30381)
Reference https://github.com/microsoft/playwright/issues/30322
2024-04-16 12:51:20 -07:00
Yury Semikhatsky 3cea17abb6
fix: shut down workers before reporter.onEnd (#30329) 2024-04-16 09:49:11 -07:00
Peng Xiao 58187075c8
fix: running electron tests on windows for node 20.12.2 (#30382) 2024-04-16 17:41:19 +02:00
Playwright Service 78793e05ff
feat(chromium): roll to r1114 (#30385)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-16 13:55:36 +02:00
Max Schmitt 563c9baf00 devops: migrate html merge upload to Azure Federate credentials 2024-04-16 13:16:40 +02:00
Playwright Service e2c1efad9e
feat(chromium-tip-of-tree): roll to r1212 (#30380)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-16 07:33:17 +02:00
OKURA Masafumi af634c2e1b
Fix a grammar mistake in ui-mode doc (#30378) 2024-04-15 15:24:04 -07:00
Dmitry Gozman a6a44a07a7
chore: align crServiceWorker with crPage (#30367)
Simplify network-related methods because crNetworkManager already
handles initial/non-initial calls.
2024-04-15 11:09:38 -07:00
Playwright Service 950e2af44c
feat(webkit): roll to r2000 (#30374)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-15 18:47:31 +02:00
Christopher Dunderdale f7e612fb4b
docs(auth): small improvement to .NET storageState example (#30313) 2024-04-15 10:32:12 +02:00
Yury Semikhatsky 6ad48fb594
chore: make step test expectations readable (#30362)
Reference https://github.com/microsoft/playwright/issues/30322
2024-04-13 20:07:18 -07:00
Playwright Service 80e725b5a3
feat(chromium): roll to r1113 (#30364)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-13 14:04:30 +02:00
Yury Semikhatsky c4418875d3
chore: do skip failing test (#30361) 2024-04-12 15:47:13 -07:00
Yury Semikhatsky dc1077c5a2
test: steps inside expect.toPass (#30359)
Reference https://github.com/microsoft/playwright/issues/30322
2024-04-12 14:51:10 -07:00
Max Schmitt a467312731
fix(snapshotter): remove noscript when javaScriptEnabled is undefined (#30355) 2024-04-12 20:26:52 +02:00
Max Schmitt 56a7adeb8a
test: unflake 'should not include trace resources from the previous chunks' test (#30257) 2024-04-12 19:48:53 +02:00
Yury Semikhatsky 1ef85015f3
fix(merge): preserve static annotations on the tests that did not run (#30348)
Fixes https://github.com/microsoft/playwright/issues/30260
2024-04-11 16:17:57 -07:00
Max Schmitt 2b5488902a
docs(mock): fix typo (#30346)
Fixes https://github.com/microsoft/playwright/issues/30326
2024-04-11 11:37:44 -07:00
Playwright Service 1ab40d8860
feat(webkit): roll to r1999 (#30343)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-11 19:09:46 +02:00
Max Schmitt 96053ed0b5
Revert "fix(reuse): reset Origin Private File System API (#29921)" (#30342)
This reverts commit 048d6669fd.

This change caused the crash for
https://github.com/microsoft/playwright/issues/30339#issuecomment-2049870789.
If we don't execute this code, it does not crash.

Reverting it for now until the Chromium fix lands in Beta/Stable.
2024-04-11 19:07:15 +02:00
Playwright Service 15c29f4a91
chore(driver): roll driver to recent Node.js LTS version (#30332)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-11 12:14:29 +02:00
Max Schmitt bff9f30b6f
test: add test for 'should parse cookie with large Max-Age correctly' (#30323) 2024-04-10 22:13:01 +02:00
Yury Semikhatsky 01d4293803
chore: class link generation in release notes (#30324) 2024-04-10 10:05:54 -07:00
Max Schmitt 15b423106f
fix(ui-mode): do not loose run information after writing into testDir (#30312)
Partially reverts https://github.com/microsoft/playwright/pull/30008
that started to reset all test results upon listing tests, including the
test that did just run and triggered re-listing.

https://github.com/microsoft/playwright/issues/30300.
2024-04-10 19:01:51 +02:00
Max Schmitt b2ded9fed1
fix(expect): throw better received error when no element was found (#29890)
Fixes https://github.com/microsoft/playwright/issues/29873
2024-04-10 10:01:19 +02:00
Playwright Service b5e36583f6
feat(webkit): roll to r1998 (#30310)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-09 16:19:58 +02:00
Playwright Service f9b97fa125
feat(chromium-tip-of-tree): roll to r1210 (#30308)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-09 15:10:26 +02:00
Playwright Service f67ad68bd2
chore(driver): roll driver to recent Node.js LTS version (#30306)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-09 12:37:26 +02:00
Max Schmitt 47a7a3af90 devops: fix 'bump driver Node.js' workflow 2024-04-09 12:35:13 +02:00
Max Schmitt 108b250d86
fix(docker): set default shell encoding (#30288)
This seems to be common practise, as per
[here](https://github.com/search?q=org%3Amicrosoft%20%2FENV%20LANG%3DC.UTF-8%2F&type=code).

Fixes https://github.com/microsoft/playwright/issues/30245
Fixes https://github.com/microsoft/playwright/issues/28642
2024-04-09 09:14:35 +02:00
Max Schmitt 86cc252da2
docs: add v1.43 release notes for language ports (#30263) 2024-04-09 09:03:58 +02:00
Playwright Service 62ae71f96a
feat(webkit): roll to r1997 (#30295)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-08 19:01:49 +02:00
Playwright Service 8deb44cd37
feat(webkit): roll to r1996 (#30291)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-08 14:16:01 +02:00
Sander 1a34c85886
chore(ct): bump vite to v5.2.8 (#30264) 2024-04-08 09:48:05 +02:00
Jean-François Greffier aef2d3879c
docs(components): fix hooks imports in components test examples (#30282) 2024-04-08 09:46:01 +02:00
Dmitry Gozman a6827772a5
fix(esmLoader): unref MessagePort in the main thread (#30271)
This prevents the process from not exiting forever due to an open port.
2024-04-06 14:25:57 -07:00
Yury Semikhatsky 3e03c800df
chore: resolve config location earlier (#30275)
Reference https://github.com/microsoft/playwright/issues/29768
2024-04-05 19:32:56 -07:00
Yury Semikhatsky 9e89f292bf
chore: remove usage of configFile from junit reporter (#30273)
Reference https://github.com/microsoft/playwright/issues/29768
2024-04-05 15:44:00 -07:00
Dmitry Gozman adc645d3cb
docs: note that sharding only works for parallel tests (#30272)
References #30253.
2024-04-05 11:05:20 -07:00
Pavel Feldman 3cea258a9c
chore: expose clear cache to test server (#30268) 2024-04-05 09:31:34 -07:00
Pavel Feldman 5043bd55dc
chore: move dev server to config-based framework extensibility (#30234) 2024-04-05 08:39:51 -07:00
Dmitry Gozman e18a358bc6
test: check that ESM loader works without config with type:module (#30258) 2024-04-05 07:03:27 -07:00
Yury Semikhatsky 7ad255301f
docs: fix C# and python snippets (#30232) 2024-04-04 13:49:15 -07:00
dependabot[bot] 996b1ce390
chore(deps-dev): bump undici from 5.28.3 to 5.28.4 (#30252) 2024-04-04 21:09:24 +02:00
Dmitry Gozman 5d810f1e07
chore: roll stable test runner to 1.43.0-beta-1712217576000 (#30250)
Co-authored-by: Yury Semikhatsky <yurys@chromium.org>
2024-04-04 11:26:03 -07:00
Dmitry Gozman d5907f4b13
feat(junit): includeProjectInTestName option (#30233)
Fixes #30246.
2024-04-04 11:04:51 -07:00
Dmitry Gozman 88f2717e87
docs: hint that popup main request is accessible through BrowserContext (#30249)
Fixes #30229.
2024-04-04 09:23:21 -07:00
Max Schmitt 18b51308ff
test(svelte): migrate svelte-navigator to custom minimal router (#30225)
Repro: `cd tests/components/ct-svelte && rm -rf node_modules
package-lock.json && npm i && npx playwright test --project=chromium`

Follow-up based on
https://github.com/microsoft/playwright/pull/28624#issuecomment-1858608101.

Svelte has no router by default, only SvelteKit - so lets remove the
package which is not maintained anymore and not recommended.
2024-04-04 16:01:08 +02:00
Playwright Service 345240b9df
feat(chromium-tip-of-tree): roll to r1209 (#30242)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-04 14:12:57 +02:00
Playwright Service 4d4308e7b3
feat(chromium): roll to r1112 (#30235) 2024-04-04 09:25:57 +02:00
dependabot[bot] 0d5964d3f9
chore(deps): bump vite from 5.0.12 to 5.0.13 (#30227) 2024-04-04 09:25:46 +02:00
Pavel Feldman 8ee286b366
chore: migrate to the testserver.initialize (#30226) 2024-04-03 12:50:56 -07:00
Yury Semikhatsky 5c5f0d77e4
chore: move implementation of Config and Project to TestConfig and TestProject (#30212)
Reference https://github.com/microsoft/playwright/issues/29768
2024-04-03 10:47:32 -07:00
Max Schmitt 43745210a5
fix(trace-viewer): exit if given trace.zip does not exist (#30222) 2024-04-03 18:47:03 +02:00
Max Schmitt 010bc29a3c
chore: harden markdown link validation (#30221) 2024-04-03 17:51:32 +02:00
Playwright Service 0734d1e733
feat(webkit): roll to r1995 (#30218)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-03 14:17:06 +02:00
Yury Semikhatsky 63f876a335
chore: remove overrides for type and status (#30211)
Reference https://github.com/microsoft/playwright/issues/29768
2024-04-02 17:42:13 -07:00
Козынченко Вячеслав e58a33a0ae
feat(expect) - add ignoreCase option for toHaveURL (#30192)
feat(expect): add ignoreCase option for toHaveURL

Fixes #30057
2024-04-02 16:20:46 -07:00
Yury Semikhatsky 81bcf2a53b
docs: document FullReporter API (#30186)
* FullConfig split into FullConfig and ConfigInWorker
* FullProject split into FullProject and ProjectInWorker
* Tests can only access {Config, Project}InWorker, while reporters can
only access Full{Config,Project}. This will allow in the future to
change the reporter API independently from the tests.
* Added documentation for the 4 classes.
2024-04-02 16:15:02 -07:00
Yury Semikhatsky 39b3c93b85
docs: note about sharded projects in the merged config (#30184)
Fixes https://github.com/microsoft/playwright/issues/29841
2024-04-02 14:41:23 -07:00
Yury Semikhatsky 8056e5391f
docs: update context.backgroundPage event examples (#30210)
Fixes https://github.com/microsoft/playwright-java/issues/1530
2024-04-02 11:32:57 -07:00
Playwright Service 4baacba4f9
feat(chromium-tip-of-tree): roll to r1208 (#30207)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-02 16:29:09 +02:00
Dmitry Gozman 6d56b453ff
fix(connect): include websocket close reason in the error message (#30203)
When websocket disconnects during `browserType.connect()` call, the
error looks like this now:

```
browserType.connect: Custom error message received over WebSocket
```

Previously, it was a generic error:
```
browserType.connect: Target page, context or browser has been closed
```
2024-04-01 21:05:33 -07:00
Pavel Feldman 6e799fdfa8
chore: do not run setup tasks on test run via server (#30202) 2024-04-01 15:31:09 -07:00
Peng Xiao cc881fdb1f
fix: content editable retarget (#29792)
If `contenteditable` is wrapped into a button or `[role=button]`,
`element.fill` will incorrectly retarget the closest button element.

fix https://github.com/microsoft/playwright/issues/29813
2024-04-01 13:03:09 -07:00
Yury Semikhatsky 1602548c10
docs(java,csharp): add BrowserContext.backgroundPage(s) (#30200)
Refereence https://github.com/microsoft/playwright-java/issues/1530
2024-04-01 10:54:51 -07:00
Playwright Service 7f88c4f482
feat(chromium-tip-of-tree): roll to r1207 (#30190)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-31 22:26:52 +02:00
Pavel Feldman 7afd4170ea
chore: opt into stdio forwarding (#30185) 2024-03-30 18:45:10 -07:00
Hansanto a950a7b86b
feat: Support intervals arg for toPass (#30037)
Fixes #30040

# Context

In the `playwright.config` file, we can custom the default `timeout`
property for `expect.toPass` by the property:

```ts title='playwright.config.ts'
export default defineConfig({
  // ...
  expect: {
    toPass: {
      timeout: 60_000,
    },
  },
});
```

However, we can't customize the `intervals` option. So the default value
is always `[100, 250, 500, 1000]`.

# Goal

Add the possibility to customize the intervals option from the
`playwright.config` file.

```ts title='playwright.config.ts'
export default defineConfig({
  // ...
  expect: {
    toPass: {
      timeout: 60_000,
      intervals: [1000, 2000, 3000]
    },
  },
});
```
2024-03-29 10:17:29 -07:00
Yury Semikhatsky 3001c9ac73
fix: preserve test declaration order in html and merged report (#30159)
* Add `Suite.entries` that returns tests and suites in their declaration
order
* Exposed `Suite.type` and `TestCase.type` for discriminating between
different entry types.
* Blob report format is updated to store entries instead of separate
lists for suites and tests.
* Bumped blob format version to 2, added modernizer.

Fixes https://github.com/microsoft/playwright/issues/29984
2024-03-29 10:12:33 -07:00
Yury Semikhatsky 16318ea715
chore: remove unused botName from types (#30172) 2024-03-28 16:16:15 -07:00
Playwright Service 4d8babb27c
feat(webkit): roll to r1994 (#30171)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-28 21:44:19 +01:00
Pavel Feldman baaf8c8093
chore: hide internal commands (#30170) 2024-03-28 12:19:03 -07:00
Andrey Lushnikov 4781b3c3a8
fix(firefox): disable cache when request interception is enabled (#30113)
Fixes #30000
2024-03-28 10:25:37 -07:00
Playwright Service a440800403
feat(chromium-tip-of-tree): roll to r1206 (#30165)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-28 15:53:12 +01:00
Playwright Service ff6bb7546f
feat(chromium): roll to r1111 (#30164)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-28 15:20:52 +01:00
Max Schmitt ffffb81c3b
fix: UI Mode tags without theme applied (#30138)
Trace Viewer theming is override based. By default you should have
something applied - an optional `dark-mode` class might be there too.
2024-03-27 16:46:26 +01:00
Pavel Feldman 5912362089
chore: export MatcherReturnType type (#30139)
Fixes https://github.com/microsoft/playwright/issues/30131
2024-03-27 08:33:00 -07:00
Playwright Service 352609c44f
feat(webkit): roll to r1993 (#30137)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-27 01:49:24 +01:00
Pavel Feldman d7710f0c3e
chore: do not exit UI mode upon page reload (#30135) 2024-03-26 15:49:44 -07:00
Max Schmitt aeb403f851
feat(webkit): dedicated macOS-14 build (#30079)
Fixes https://github.com/microsoft/playwright/issues/30070
2024-03-26 23:05:14 +01:00
Dmitry Gozman 53755968fb
chore: update browser patches to 475e15 (#30134) 2024-03-26 15:01:07 -07:00
Pavel Feldman 4cce7e5bff
doc: document mocking read-only browser apis (#30122)
Documents https://github.com/microsoft/playwright/issues/30115
2024-03-26 14:20:20 -07:00
Dmitry Gozman b9b06cb010
chore: mark version 1.44.0-next (#30129) 2024-03-26 13:44:10 -07:00
Dmitry Gozman 757f308475
docs: release notes 1.43 for js (#30128) 2024-03-26 13:25:00 -07:00
Yury Semikhatsky 021c5c108c
chore: revert support of duplicate form data fields in multipart post data (#30127)
We want to adopt FormData API for the requests.

This is a revert of 4b3c596874 and
a849ea9741

Reference https://github.com/microsoft/playwright/issues/28070
2024-03-26 12:36:35 -07:00
Dmitry Gozman e4403dd6c8
fix(chromium): race between requestPaused and requestWillBeSent in workers (#30125)
Workers use page's session for `Fetch` domain and worker's session for
`Network` domain. Therefore, `CRNetworkManager` should keep track of the
right session for each domain separately.

This is covered by currently flaky tests:
- `should report and intercept network from nested worker`,
- `should intercept network activity from worker`,
- `should intercept network activity from worker 2`.
2024-03-26 11:11:09 -07:00
Dmitry Gozman dd1eca2a9d
fix(trace viewer): show correct number of pages without screencast (#30124)
Exposed by the flaky "should open two trace files" test.
2024-03-26 10:25:12 -07:00
Pavel Feldman 0bf635ecce
chore: ensure max failures exit yields erroneous status code (#30120)
Fixes https://github.com/microsoft/playwright/issues/30118
2024-03-26 09:20:13 -07:00
Julian Luis Almandos c27ec77d55
docs(test-projects-js.md): fix typo in "Test filtering" section (#30114) 2024-03-26 08:15:02 -07:00
Pavel Feldman 2de8a6b002
chore: move filter params into the clearCookies (#30111) 2024-03-26 08:12:26 -07:00
Playwright Service 1824ba118e
feat(chromium-tip-of-tree): roll to r1205 (#30119)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-26 15:19:59 +01:00
Andrey Lushnikov 397244c026
test: add a test for disabled cache with context-wide request interception (#30072)
References #30000
2024-03-25 22:03:24 -07:00
Max Schmitt 599185dd07
feat(ui-mode): show native tags in test tree (#30092)
This brings up the question that we would show the tag name twice if its
a tag in a title. This would be aligned to how HTML report is doing it.

Fixes https://github.com/microsoft/playwright/issues/29927

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-03-26 01:06:22 +01:00
Dmitry Gozman 051afb9ce0
fix(test runner): update fixture teardown error message (#30109)
With the recent change that gave after hooks a separate timeout, fixture
teardown does not imply that "test finished successfully, but fixture
teardown was slow".
2024-03-25 17:04:03 -07:00
Playwright Service 8e27d67ecd
feat(webkit): roll to r1992 (#30110)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-26 00:06:46 +01:00
Max Schmitt 65d82797f1
fix(ct): ct ID clash on similar imports (#30108)
This restores the [best
effort](https://github.com/microsoft/playwright/pull/29407/files#diff-8dd3534dc5013c3779edeaded71324b0dd1c1807668f3c6d9e9a1aab1c20ae91L152)
logic if its a relativ path.

Fixes https://github.com/microsoft/playwright/issues/30085

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Pavel Feldman <pavel.feldman@gmail.com>
2024-03-25 23:50:45 +01:00
Pavel Feldman 7039ad0d11
chore: follow up to the api review for test server (#30097) 2024-03-25 15:42:58 -07:00
Yury Semikhatsky a849ea9741
feat(fetch): multiple fields with the same name in post data (#30104)
Rerefence https://github.com/microsoft/playwright/issues/28070
2024-03-25 15:39:45 -07:00
Dmitry Gozman 911d8effb9
feat(test runner): do not mock tty in the worker process (#30107)
This was historically done to make `console.log()` have colors. However,
this makes any other code that checks `process.stdout.isTTY` incorrectly
assume real TTY support.

Node18 and Node20 now respect `FORCE_COLOR=1` in console, so our default
behavior of forcing colors in the worker process just works out of the
box. See https://github.com/nodejs/node/pull/48034.
2024-03-25 15:31:58 -07:00
Yury Semikhatsky 4b3c596874
docs(fetch): multiple fields with the same name in java and .net (#30105)
Reference https://github.com/microsoft/playwright/issues/28070
2024-03-25 13:49:09 -07:00
Playwright Service 05cbb14d28
feat(firefox): roll to r1447 (#30080)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-25 19:48:38 +01:00
Max Schmitt 253a2f9a9c
chore: address UI Mode keyboard shortcut feedback (#30088)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-03-25 19:48:20 +01:00
Max Schmitt e69355a6e2
test: skip 'should fulfill with gzip and readback' on Electron and Android (#30103) 2024-03-25 19:35:44 +01:00
Playwright Service 2e8db67f07
feat(firefox-beta): roll to r1447 (#30100)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-25 19:22:59 +01:00
Max Schmitt f5823786fd
docs: migrate to newer :::warning syntax (#30089)
- Migrate from `:::warning` to `:::danger[Warning]`.
- Migrate from `:::caution` to `:::warning`.
- `:::warning` and `:::caution` were the color same before.
- `:::caution` is deprecated and gets removed in v4 of Docusaurus
- Also migrate to the [newer title
syntax](3877c1254f/packages/docusaurus-utils/src/markdownUtils.ts (L86-L91))

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-03-25 19:22:15 +01:00
Max Schmitt 032f27ff84
docs: change if: always() to if: !cancelled() (#30102)
Fixes https://github.com/microsoft/playwright/issues/29451

See
https://github.com/microsoft/playwright/issues/29451#issuecomment-2008476721
for investigation.
2024-03-25 19:17:05 +01:00
Shriphad Rao 82804cce64
fix: time in ms for skip test (#30078)
Fixes https://github.com/microsoft/playwright/issues/29861
2024-03-25 08:51:09 -07:00
Dmitry Gozman 95d649b406
feat: address api review feedback for 1.43 (#30066)
- Update docs for `trace: retain-on-first-failure`.
- Update docs for `devtools` option.
- Rename `Locator.enterFrame()` to `Locator.contentFrame()`.
- Rename `FrameLocator.exitFrame()` to `FrameLocator.owner()`.
2024-03-25 07:42:13 -07:00
Dmitry Gozman 7a3c002944
fix(ct): allow importing json files (#30067)
While we are not fully resolving imports during compilation, do not
treat `json` as a non-importable asset.

Fixes #29926.
2024-03-25 07:41:54 -07:00
Pavel Feldman 1539cde034
chore: allow passing path to config to the test server (#30068) 2024-03-22 16:04:59 -07:00
Pavel Feldman ee9432b9da
chore: send test params over the wire in ui mode (#30046) 2024-03-22 13:49:28 -07:00
Dmitry Gozman c8e8d8f8bb
test: fulfilling with gzip should allow to read the body (#30065)
Fixes #29261.
2024-03-22 13:32:28 -07:00
Playwright Service 2443d6560f
feat(firefox-beta): roll to r1446 (#30062)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-22 21:27:33 +01:00
Dmitry Gozman c1400a3db5
Revert "feat(codegen): add button to generate toHaveScreenshot statement (#29996)" (#30064)
This reverts commit 1bb463163b. Decided to
wait for a better VRT story.

References #29250.
2024-03-22 13:26:22 -07:00
Max Schmitt 14cd7953f3
devops(merge): validate zip before uploading (#30061) 2024-03-22 21:22:19 +01:00
Max Schmitt 4a67437704
devops(gha): move from always() to !cancelled() (#30060)
**Investigation:**

- According to
[here](https://github.com/microsoft/playwright/actions/runs/8351676198),
the job got cancelled, because someone force-pushed and another commit
took priority.
- We have `if: always()` for uploading the blobs, even if they are
cancelled. We expect, that the task before (`npx playwright test`)
finished writing the blob, but it didn't - cancelled in between. We
still upload - a broken one.
- We download the broken zip and it breaks from there on.

Proposed change: Instead of uploading always, upload if it did not get
cancelled.

Quoting from the GitHub Actions docs about `always()`:

> Warning: Avoid using always for any task that could suffer from a
critical failure, for example: getting sources, otherwise the workflow
may hang until it times out. If you want to run a job or step regardless
of its success or failure, use the recommended alternative: if: `${{
!cancelled() }}`

This is phase 1/2 where it changes our code to use this new condition.
The actual roll-out happens once it works for us.

Relates https://github.com/microsoft/playwright/issues/29451
2024-03-22 19:25:13 +01:00
Yury Semikhatsky a511731f55
fix(html): keep projects from different bots separate (#30051) 2024-03-22 10:02:00 -07:00
Playwright Service 9ce83e10f4
feat(firefox): roll to r1446 (#30053)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-22 13:00:38 +01:00
Playwright Service b834c0b9ed
feat(webkit): roll to r1991 (#30049)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-22 13:00:15 +01:00
Playwright Service 63cc132daa
feat(firefox-beta): roll to r1445 (#30028)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-22 12:59:21 +01:00
Dmitry Gozman 348d0c2bfa
test: can register service workers in an iframe (#30045)
References #29267.
2024-03-21 15:34:23 -07:00
Pavel Feldman a9fc4de37e
chore: queue run and list commands from ui (#30033) 2024-03-21 14:28:07 -07:00
Dmitry Gozman e0588446c0
feat(firefox): roll to 1445 (#30043) 2024-03-21 13:26:02 -07:00
Dmitry Gozman ef57489cf9
test: iframe is covered by service workers (#30042)
References #29267.
2024-03-21 11:27:27 -07:00
Max Schmitt 352cb7fa08
feat(browser): roll Chromium to 1110 (#30039)
Browser roll bot was broken, got fixed by
3d4e0061bc.
2024-03-21 14:26:42 +01:00
Playwright Service 86d43131e9
feat(chromium-tip-of-tree): roll to r1204 (#30038)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-21 14:23:38 +01:00
Max Schmitt 3d4e0061bc
devops: fix roll_browser script
Signed-off-by: Max Schmitt <max@schmitt.mx>
2024-03-21 13:39:24 +01:00
Pavel Feldman 7ad0a12c23
chore: remove ui mode update globals (#30031) 2024-03-20 21:09:49 -07:00
Dmitry Gozman 3e73a6ce69
feat(test runner): show multiple errors, at most one per stage (#30024)
Previously, there was at most one "hard error", as opposite to multiple
"soft errors". This was done to preserve the historic behavior at the
time of introducing multiple `TestInfo.errors`.

With this change, every user callback that is executed `withRunnable()`
can throw an error and/or timeout, and both of these will end up in
`TestInfo.errors`.

Additionally, there is at most one "unhandled exception" error, to avoid
flooding the report with mass failures.

Drive-by: remove boolean arguments from `_failWithError()`.

Fixes #29876.
2024-03-20 21:01:30 -07:00
Dmitry Gozman 6f360f7207
feat(trace): do not record events that are not used in the viewer (#30030)
This is especially useful for network events that are already in the
har, but also get into the trace.
2024-03-20 21:01:17 -07:00
Dmitry Gozman 9d40f619c4
feat: deprecate "devtools" launch option (#30025)
References #29899.
2024-03-20 16:48:00 -07:00
Yury Semikhatsky 69e90f38c7
fix(codegen): import re in python (#30026)
Fixes https://github.com/microsoft/playwright/issues/30019
2024-03-20 16:38:28 -07:00
Pavel Feldman 8a1ff34578
chore: split ui mode view into files (#30029) 2024-03-20 16:00:35 -07:00
Yury Semikhatsky 69f2ae1e4d
test: intercepted requests bypass disk cache (#30011)
Reference https://github.com/microsoft/playwright/issues/30000
2024-03-20 15:43:29 -07:00
Pavel Feldman 48ccc9cbcd
chore: prepare to reuse test server from ui mode (6) (#30008) 2024-03-20 13:43:26 -07:00
Max Schmitt 2bd3e104ab
chore: remove run-driver wrapper in driver (#30027) 2024-03-20 21:15:46 +01:00
dependabot[bot] 980fa90d3c
chore(deps): bump black from 23.3.0 to 24.3.0 in /utils/doclint/linting-code-snippets/python (#30022) 2024-03-20 19:10:19 +01:00
Max Schmitt dd0b6f7ec5
test: generate debug controller channel (#30018) 2024-03-20 16:56:29 +01:00
Playwright Service c712b365ad
feat(chromium-tip-of-tree): roll to r1203 (#30017)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-20 13:31:12 +01:00
Yury Semikhatsky da2b099b5c
docs: note on locator handler trigger (#30004)
Fixes https://github.com/microsoft/playwright/issues/30003
2024-03-19 16:54:49 -07:00
Max Schmitt 911fd204cf
devops: fix WebView2 tests (#30009)
Turns out we were using version 119.0.2151.58 before where the tests are
failing. After this change we are using 122.0.2365.92.

Fixes https://github.com/microsoft/playwright/issues/29695
Relates https://github.com/actions/runner-images/issues/9538
2024-03-19 23:18:20 +01:00
Pavel Feldman 0a22a86e2e
chore: prepare to reuse test server from ui mode (5) (#30005) 2024-03-19 14:08:21 -07:00
Dmitry Gozman 1bb463163b
feat(codegen): add button to generate toHaveScreenshot statement (#29996)
Fixes #29250.
2024-03-19 14:01:04 -07:00
Pavel Feldman 54aca430b0
chore: prepare to reuse test server from ui mode (4) (#29995) 2024-03-19 13:00:49 -07:00
Playwright Service 3ee13cbf2b
feat(webkit): roll to r1990 (#29999)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-19 14:31:38 +01:00
jonghoonpark b929c0d8f7
feat(ui-mode): add key shortcuts for playwright uI test runner (#29868) 2024-03-19 12:36:42 +01:00
Playwright Service db7d40e4f2
feat(firefox-beta): roll to r1444 (#29851)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-19 11:50:19 +01:00
Playwright Service 3c993fbbda
feat(firefox): roll to r1444 (#29853)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-19 11:50:12 +01:00
Dmitry Gozman be1af15d57
feat: always enable ESM loader with the new API (#29991)
It does not require a process restart anymore, so safe to enable.

Fixes #29747.
2024-03-18 21:54:25 -07:00
Dmitry Gozman b41b802662
fix(test runner): avoid dependency tracking colliding between esm and cjs (#29994)
When collecting dependencies both from CJS loader and from ESM loader,
the latter would overwrite the dependencies set instead of appending.

Also make sure cts/cjs/mts/mjs are all supported equally.

References #29747.
2024-03-18 17:17:58 -07:00
Pavel Feldman c7b074d39e
chore: prepare to reuse test server from ui mode (3) (#29989) 2024-03-18 17:14:21 -07:00
Dmitry Gozman 70e6cdac57
feat: enterFrame/exitFrame (#29992)
This introduces `Locator.enterFrame()` and `FrameLocator.exitFrame()` to
convert between locator and frame locator.

Fixes #29336.
2024-03-18 13:42:08 -07:00
Max Schmitt a6d1fb93de
fix(trace-viewer): encode attachment filenames as UTF-8 (#29993)
Fixes https://github.com/microsoft/playwright/issues/29967

Tested in Firefox, Chromium, and Safari. This now leads to "good
attachment names" in Chromium and Safari, for Firefox, it won't produce
attachments, it will open them inline, but this is not a regression, was
before like that already.

See here for the spec:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition#filename_2

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
2024-03-18 21:26:45 +01:00
Yury Semikhatsky 35db70ea1d
chore: trim file names longer than 60 chars (was 100) (#29725)
Test-specific output dir and snapshot names are trimmed to 60 chars
instead of just 100. The snapshot names are still trimmed at 100 chars
for backwards compatibility.


Reference https://github.com/microsoft/playwright/issues/29719
2024-03-18 12:53:15 -07:00
Pavel Feldman ef4438ee99
chore: prepare to reuse test server from ui mode (2) (#29966) 2024-03-18 09:59:02 -07:00
Pavel Feldman 6faadf5160
chore: prepare to reuse test server from ui mode (#29965) 2024-03-18 09:50:11 -07:00
Max Schmitt 0db1d40abc
fix(types): evaluate should not unpack return unions (#29971) 2024-03-18 16:42:33 +01:00
Playwright Service 306db80d03
feat(chromium-tip-of-tree): roll to r1202 (#29963)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-15 20:04:22 +01:00
Max Schmitt 5d0c61fa0c
docs: fix logger API usage (#29961) 2024-03-15 19:04:14 +01:00
Max Schmitt 048d6669fd
fix(reuse): reset Origin Private File System API (#29921)
Fixes https://github.com/microsoft/playwright/issues/29901

This clears the Origin Private File System API when using VSCode
extension.
2024-03-15 17:40:46 +01:00
Max Schmitt be465c6a1c
fix(trace-viewer): allow Chrome extension fallback in SW (#29954)
https://github.com/microsoft/playwright/issues/29144
2024-03-15 16:27:07 +01:00
Max Schmitt 5bc6ca6345
fix: allow disposing ElementHandles multiple times (#29953)
Fixes https://github.com/microsoft/playwright/issues/29945
2024-03-15 16:26:56 +01:00
Max Schmitt 3e78426acc
fix(trace-viewer): report upload error as aria-role=alert (#29956)
Turns out NVDA and Narrator work differently. This is a follow-up to
https://github.com/microsoft/playwright/pull/29838 which was not working
in NVDA before - looks like a NVDA bug. Using alert instead.

Relates
https://github.com/microsoft/playwright/issues/29095#issuecomment-1999332067
2024-03-15 16:25:36 +01:00
Pavel Feldman 94348bb3c5
chore: align test tree with vscode (#29864) 2024-03-14 15:44:35 -07:00
Playwright Service 23bfeec5c7
feat(webkit): roll to r1989 (#29942)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-14 21:15:08 +01:00
Max Schmitt 7cbef691ae
fix: throw error if setInputFile does not exist (#29944)
Fixes https://github.com/microsoft/playwright/issues/29941
2024-03-14 20:27:33 +01:00
Max Schmitt 93dc89fa1f
test: add file upload test case with popup handling (#29937)
https://github.com/microsoft/playwright/issues/29923

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
2024-03-14 19:26:42 +01:00
Max Schmitt b158e4ef96
fix: postDataJSON without Content-Type header (#29918)
Regressed after
38fc74db7c.

Test coverage: Some tests were failing on the flakiness dashboard
2024-03-14 16:48:34 +01:00
Debbie O'Brien 1114c42e44
docs: add release video to release notes (#29939) 2024-03-14 15:45:26 +01:00
Karl Horky 914208c567
chore: fix typo in property name (#29907) 2024-03-13 12:22:40 +01:00
Dmitry Gozman 349b25e61a
fix(storageState): try to collect storage state on existing pages first (#29915)
This helps in a case where navigating to an origin fails for some
reason, for example because a registered service worker loads some
content into the supposedly blank page.

Fixes #29402.
2024-03-12 19:20:35 -07:00
Dmitry Gozman 2ce421b27a
fix(trace viewer): synchronize monotonic times between context entries (#29908)
When displaying remote context trace and local test runner trace
together, we should not compare monotonic time between the two.

This change reuses existing logic for merging actions timing to also
update context boundaries and events by the same time delta.

Fixes #29767.
2024-03-12 16:32:58 -07:00
Yury Semikhatsky 166d2d4fde
chore: separate results for repeated snapshot names (#29880)
Reference #29719
2024-03-12 16:10:43 -07:00
Dmitry Gozman 78b8aed4bd
docs: mark addLocatorHandler as experimental (#29909) 2024-03-12 12:02:25 -07:00
Dmitry Gozman 276ef5c19b
docs(auth): small note about UI mode (#29887)
Fixes #29846.

---------

Signed-off-by: Dmitry Gozman <dgozman@gmail.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-03-12 11:04:21 -07:00
Max Schmitt 38fc74db7c
fix: postDataJSON with application/x-www-form-urlencoded; charset=UTF-8 (#29889)
Fixes https://github.com/microsoft/playwright/issues/29872
2024-03-12 17:20:39 +01:00
Playwright Service be325507cb
feat(chromium-tip-of-tree): roll to r1201 (#29897)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-12 13:47:56 +01:00
Playwright Service ab23e9139b
feat(chromium-tip-of-tree): roll to r1200 (#29884)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-12 10:29:36 +01:00
Playwright Service 7840d3e6d9
feat(webkit): roll to r1988 (#29883)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-12 09:57:32 +01:00
Yury Semikhatsky 70f49f6ff1
docs: junit integration release notes (#29885) 2024-03-11 16:35:19 -07:00
Dmitry Gozman 88e80cf948
chore(test runner): simplify TimeoutManager and TimeoutRunner (#29863) 2024-03-11 15:43:50 -07:00
Jean-François Greffier 8f4c2f714d
docs(java): update JUnit examples with new fixtures (#29406)
Documentation for JUnit integration aka JUnit fixtures
https://github.com/microsoft/playwright-java/issues/1369
2024-03-11 11:21:41 -07:00
Yury Semikhatsky 59228f19ce
fix: tty.WriteStream method stubs for process.stdout/stderr (#29865)
Fixes #29839
2024-03-11 10:11:16 -07:00
Max Schmitt 94e61fc95a
test: bump ct typescript version (#29855) 2024-03-11 17:09:26 +01:00
Yury Semikhatsky 7f6f17d1c3
chore: simplify toMatchSnapshot names calculation (#29862)
Reference https://github.com/microsoft/playwright/issues/29719
2024-03-10 11:11:35 -07:00
Dmitry Gozman d214778548
chore(test runner): move timeout handling to the top, stop inheriting runnable (#29857) 2024-03-08 15:19:36 -08:00
Playwright Service 8f2c372bd8
feat(webkit): roll to r1987 (#29856)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-08 10:15:19 +01:00
Dmitry Gozman 875ce1cf09
fix(chromium): use blockedReason as failure reason when available (#29849)
This covers blocked requests, e.g. mixed-content, that receive
`loadingFailed` with empty `errorText`.

Also, forcefully resolve `allHeaders()` in this case, since we know
there will be no actual network headers.

Fixes #29833.
2024-03-07 14:07:04 -08:00
Max Schmitt 84d3308969
chore: limit trace-viewer minimum viewport (#29850)
https://github.com/microsoft/playwright/issues/29100
2024-03-07 22:42:21 +01:00
Max Schmitt 9ca895dea0
fix(trace-viewer): trap focus inside drop-target popup (#29845)
https://github.com/microsoft/playwright/issues/29099
2024-03-07 22:24:21 +01:00
Max Schmitt 40b8bcb6ad
devops: mark Docker images as EOL (#29847)
As per https://github.com/microsoft/playwright-dotnet/pull/2879.
2024-03-07 20:18:24 +01:00
Max Schmitt 591d327eac
chore: trace-viewer a11y fixes (#29838) 2024-03-07 16:02:31 +01:00
Dmitry Gozman 006ee7f3b0
feat: separate timeout for after hooks (#29828)
Instead of sharing the timeout with the test, and then extending it when
test times out, we give after hooks a separate timeout.
2024-03-06 12:31:54 -08:00
Sarkis Matinyan 0c3f60e95e
fix(ui): show stack frames in ui mode (#29560)
#29558, #29500
2024-03-06 12:29:35 -08:00
Max Schmitt d125ff4d39
docs: fix inconsistent .NET snippets (#29831) 2024-03-06 17:51:44 +01:00
Lukas Bockstaller 425f737eb6
feat: exposes tags in testInfo (#29794)
Fixes #29793.

---------

Signed-off-by: Lukas Bockstaller <lukas.bockstaller@everest-erp.com>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-03-06 08:33:06 -08:00
Max Schmitt a678561cda docs(release-notes): fix wrong browser versions 2024-03-06 11:02:51 +01:00
Max Schmitt b3edb2a130
docs: add release-notes for language bindings (#29825) 2024-03-06 10:47:04 +01:00
Dmitry Gozman 1d4bdc6898
chore(test runner): make runAsStage throw and catch errors explicitly (#29814) 2024-03-05 16:35:11 -08:00
Dmitry Gozman a3ed799cd5
fix(tsconfig): when extending, retain pathsBasePath from the original config (#29822)
This fixes a case where we incorrectly used the final config's base path
when resolving relative path mappings in the absence of the baseUrl.

Fixes #29816.
2024-03-05 16:34:39 -08:00
Pavel Feldman 8bf8091cb1
chore: extract the tele test tree (#29824) 2024-03-05 15:11:56 -08:00
Max Schmitt 502d21e96a
docs: use relative links if possible (#29823) 2024-03-05 22:36:33 +01:00
Dmitry Gozman abfd2c4e66
feat(ui mode): text filter should filter by explicit tags (#29821)
Fixes #29815.
2024-03-05 10:58:55 -08:00
Playwright Service 0feb05cf98
feat(chromium-tip-of-tree): roll to r1199 (#29817)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-05 13:11:37 +01:00
Pavel Feldman e314b83e56
chore: iterate towards tele reporter reuse in vscode (2) (#29812) 2024-03-04 19:52:20 -08:00
Dmitry Gozman 5eb8fea616
chore: rewrite worker main through TestInfoImpl._runAsStage (#29644) 2024-03-04 19:36:58 -08:00
Max Schmitt 291567b922
test(remove-cookie): do not rely on external websites for tests (#29811)
Fixes https://github.com/microsoft/playwright/issues/29795
2024-03-04 23:49:12 +01:00
Rui Figueira 73ffaf65d7
fix(codegen): fill action prevents omnibox navigation recording (#29790)
This PR is a fix proposal for a bug when trying to record a omnibox
navigation after a recorded action (e.g., `fill`).

The following test, included in this PR, reproduces the problem:

```ts
  test('should record omnibox navigations after recordAction', async ({ page, openRecorder, server }) => {
    const recorder = await openRecorder();
    await recorder.setContentAndWait(`<textarea></textarea>`);
    await Promise.all([
      recorder.waitForOutput('JavaScript', 'fill'),
      page.locator('textarea').fill('Hello world'),
    ]);
    // for performed actions, 5 seconds is the time needed to ensure they are committed
    await page.waitForTimeout(5000);
    await page.goto(server.PREFIX + `/empty.html`);
    await recorder.waitForOutput('JavaScript', `await page.goto('${server.PREFIX}/empty.html');`);
  });
```

After performed actions (e.g., `click`), it successfully records the
navigation as long as there's at least a 5 sec. gap between both
actions. That happens because after that 5 sec. interval the performed
action is automatically commited and therefore the navigation is not
stored as a signal of that action.

The proposed fix for recorded actions also forces that action to be
automatically commited after 5 sec (for testing, I'm using 500ms to
speed up the test execution).
2024-03-04 12:31:03 -08:00
Max Schmitt ef0a24a1b0
chore: remove chromium-with-symbols build (#29807) 2024-03-04 20:12:01 +01:00
Pavel Feldman 743a6ffe1d
chore: iterate towards tele reporter reuse in vscode (#29803) 2024-03-04 11:08:40 -08:00
Playwright Service de73af99fa
feat(firefox): roll to r1443 (#29801)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-04 18:11:17 +01:00
Playwright Service a431afb818
feat(webkit): roll to r1986 (#29800)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-04 18:11:04 +01:00
Pavel Feldman 68284b0505
chore: inject string pool into the tele receiver (#29781) 2024-03-04 08:46:32 -08:00
Marco D'Agostini d5d4f591f3
fix typo in docs: "toHaveScreeshot()" (#29780) 2024-03-02 17:00:16 -08:00
Pavel 04e1747038 chore: follow up to align the tsdoc 2024-03-02 07:32:44 -08:00
Jan Sepke e83b4c25be
docs(test-snapshots-js.md): Add link to snapshotPathTemplate (#29727)
]
2024-03-02 07:28:45 -08:00
PaulTriandafilov 8e48ee714d
feat(playwright-core): add remove cookies api (#29698) 2024-03-02 07:27:01 -08:00
Pavel Feldman ef924c14e7
chore: do not use project id in telereporter (#29776) 2024-03-01 21:44:08 -08:00
Pavel Feldman bbcc3c1238
chore: remove private config usage from telereporter (#29771) 2024-03-01 13:14:12 -08:00
Pavel Feldman d0cc5871d8
chore: remove private suite from tele reporter (#29752) 2024-03-01 11:30:28 -08:00
Dmitry Gozman ba3d887660
docs: improve addLocatorHandler docs (#29770) 2024-03-01 11:19:37 -08:00
Renan Greca 4e0bd6286e
docs: Improved JSDoc for expect.toPass (#29722) 2024-03-01 10:51:23 -08:00
Dmitry Gozman a8c26d235c
Revert "chore(role): cache element list by role (#29130)" (#29765)
This reverts commit 1ce3ca25a2.

Added a regression test.

Fixes #29760.
2024-03-01 09:37:28 -08:00
Pavel Feldman ff16d7960c
fix(tsload): fix tsconfig inheritance resolution (#29766)
Fixes https://github.com/microsoft/playwright/issues/29731
2024-03-01 09:36:04 -08:00
Playwright Service f8e441a521
feat(chromium): roll to r1107 (#29762)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-01 16:38:09 +01:00
Playwright Service ceb1dd01aa
feat(chromium-tip-of-tree): roll to r1198 (#29756)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-03-01 14:29:12 +01:00
Playwright Service 8780f7ad46
feat(chromium-tip-of-tree): roll to r1197 (#29753)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-01 09:31:56 +01:00
Pavel Feldman baf2cdf936
fix(ct): stop-gap for shared file import (#29744)
Fixes: https://github.com/microsoft/playwright/issues/29739
2024-02-29 19:13:32 -08:00
Yury Semikhatsky c08a4e72d1
chore: call testInfo.snapshotPath directly (#29755)
Reference https://github.com/microsoft/playwright/issues/29719
2024-02-29 16:59:39 -08:00
Pavel Feldman 989cf8f179
chore: remove pw- binaries from ct (#29754) 2024-02-29 16:50:00 -08:00
Dmitry Gozman 0f30cdab23
feat(firefox): roll ff and ff-beta to 1442 (#29751)
This requires changes in `FFPage`.
Also fixing a new ff-specific test that introduced flakiness on the
bots.

Closes https://github.com/microsoft/playwright/pull/29750
Closes https://github.com/microsoft/playwright/pull/29724
Closes https://github.com/microsoft/playwright/pull/29681
Closes https://github.com/microsoft/playwright/pull/29678
2024-02-29 14:44:45 -08:00
Pavel Feldman 532d8e5500
fix(ct): fix the non-react cli entry points (#29748)
Fixes https://github.com/microsoft/playwright/issues/29746
2024-02-29 12:48:15 -08:00
Pavel Feldman 99744d0683
chore: normalize telereceiver type imports (#29745) 2024-02-29 12:31:07 -08:00
Playwright Service 0da29959fa
feat(chromium-tip-of-tree): roll to r1196 (#29742)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-29 20:10:46 +01:00
Playwright Service 30be5e0d26
feat(webkit): roll to r1985 (#29740)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-29 18:58:37 +01:00
Pavel Feldman d9a00342c8
fix(HEAD): revert GET->HEAD migration, net-effect was negative (#29738)
Fixes: https://github.com/microsoft/playwright/issues/29732
2024-02-29 09:02:05 -08:00
Playwright Service 6bd7665bce
feat(webkit): roll to r1984 (#29736)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-29 15:37:32 +01:00
Elio Struyf f4f26fdf7b
docs(reporters): added 3rd-party GitHub Actions Reporter (#29728) 2024-02-29 10:25:54 +01:00
Dmitry Gozman aedd7ca0be
chore: make CRNetworkManager handle multiple sessions (#29721)
It was already handling worker sessions, but not OOPIFs. As a result,
some functionality was properly implemented only for OOPIFs and not for
workers.

This change removes OOPIFs fanout for network-related calls from CRPage
and moves that to the CRNetworkManager, now also covering workers.
2024-02-28 15:51:27 -08:00
Stevan Freeborn 52b803ecf5
feat(trace mode): add on-first-failure mode for traces (#29647)
Implements the changes suggested in #29531
2024-02-28 14:39:18 -08:00
Pavel Feldman d48aadac7e
fix: point to the right cli program export (#29715)
Fixes: https://github.com/microsoft/playwright/issues/29711
2024-02-28 14:05:42 -08:00
Flo Becker 772345c83c
fit(ct): remove unused type import (#29706)
Signed-off-by: Flo Becker <flo@die-beckerei.de>
2024-02-28 13:31:43 +01:00
Pavel Feldman 8264bec01e
fix(ff): stop gap for setInputFiles race (#29696) 2024-02-27 11:50:24 -08:00
Yury Semikhatsky 321e9d72c3
docs: better addLocatorHandler example in release notes (#29692) 2024-02-27 10:29:49 -08:00
Yury Semikhatsky d8c16c1edf
chore: roll stable runner to 1.42.0-beta-1708998235000 (#29675) 2024-02-27 08:36:03 -08:00
Max Schmitt 713fbb5d23
devops: fix cherry_pick_into_release_branch permissions (#29689)
Fixes
https://github.com/microsoft/playwright/actions/runs/8067553095/job/22038251156.

Signed-off-by: Max Schmitt <max@schmitt.mx>
2024-02-27 17:34:16 +01:00
Max Schmitt 1a43adc506
chore: fix docs roll for functions without args follow-up (#29687) 2024-02-27 16:40:18 +01:00
Max Schmitt 03902d8e85
chore: fix docs roll for functions without args (#29684) 2024-02-27 07:21:35 -08:00
Yury Semikhatsky 1c8e8bea7e
chore: roll stable test runner to 1.42.0-beta-1708994059000 (#29672) 2024-02-26 17:39:25 -08:00
Andrey Lushnikov b183159fd0
test: add regression test for cross-context clicking (#29668)
References https://github.com/microsoft/playwright/issues/29096
2024-02-26 16:52:49 -08:00
Pavel Feldman 9d0430fa26
chore: strengthen linting (#29669) 2024-02-26 16:52:28 -08:00
Yury Semikhatsky 01846b954d
chore: mark 1.43.0-next (#29670) 2024-02-26 16:45:25 -08:00
Yury Semikhatsky 77e1b02552
docs: 1.42 release notes (#29666) 2024-02-26 16:34:19 -08:00
Yury Semikhatsky c1421bc9f2
docs: typescript compiler invocation before tests (#29667)
Fixes https://github.com/microsoft/playwright/issues/29618
2024-02-26 15:26:05 -08:00
Lukas Bockstaller bd8d044433
feat(uimode) uses relative paths to establish websocket connection (#29617) 2024-02-26 15:09:24 -08:00
Yury Semikhatsky 56028269bb
devops: add a hint how to create a repro (#29665)
Fixes https://github.com/microsoft/playwright/issues/29620
2024-02-26 13:33:57 -08:00
Sander 015a1bcc1c
feat(ct): double unmounting component throws error (#29650) 2024-02-26 11:16:27 -08:00
Sander 303d7fdac9
chore(ct): vue resolve internal type errors (#29649) 2024-02-26 11:15:55 -08:00
Sander 7e502e91b2
fix(ct): solid pass children when they are defined (#29648) 2024-02-26 11:15:08 -08:00
Pavel Feldman 7eb910a652
chore: enable eslint for js (#29639) 2024-02-26 09:39:21 -08:00
Simon Knott c5af51c59d
docs(intro): fix grammar mistake in docs (#29659)
Signed-off-by: Simon Knott <info@simonknott.de>
2024-02-26 15:19:27 +01:00
Playwright Service 9a38aedf09
feat(firefox): roll to r1440 (#29643)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-24 09:19:46 +01:00
Pavel Feldman 6b5e273b6d
chore: reuse test server wire for reporter events (#29640) 2024-02-23 15:51:20 -08:00
Dmitry Gozman 8d9c67ac5d
chore(test runner): do not nest fixture setups inside each other, similar to teardown (#29619) 2024-02-23 14:47:13 -08:00
Dmitry Gozman d7c4ee901a
test: enable localhost proxy tests on webkit mac, unless bypass rules are set (#29641) 2024-02-23 14:27:30 -08:00
Jeppe Reinhold 4d868f6ba8
fix(ct-react+ct-react17): only pass children to React.createElement when they are defined (#29592) 2024-02-23 12:30:42 -08:00
Playwright Service 034b550810
feat(firefox-beta): roll to r1440 (#29637)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-23 21:03:38 +01:00
Pavel Feldman a3aea813bc
chore: implement server-based list files (#29633) 2024-02-23 08:29:44 -08:00
Pavel Feldman 2ca45ff948
chore: use test server as a singleton (#29630) 2024-02-22 15:56:38 -08:00
Pavel Feldman ee93136132
chore: streamline config loader (#29627) 2024-02-22 15:14:13 -08:00
Max Schmitt adccd39b01
docs(dotnet): type specific addLocatorHandler handler (#29586) 2024-02-22 23:53:09 +01:00
Pavel Feldman ac0787d0c8
chore: expose find related files over test server (#29604) 2024-02-22 13:37:24 -08:00
Yury Semikhatsky 92b1b16041
chore: update browser patches to Jan 9 2024 (#29623)
Commit 337e0dbf2cb068a5a519b09fee1155509fb2dc1f
2024-02-22 13:17:33 -08:00
Playwright Service 50e7d8ca7a
feat(chromium-tip-of-tree): roll to r1195 (#29588)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-22 17:28:09 +01:00
Playwright Service 85df43520e
feat(chromium): roll to r1105 (#29613)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-22 17:27:59 +01:00
Playwright Service fde5db4eb8
feat(webkit): roll to r1983 (#29615)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-22 16:56:42 +01:00
Yury Semikhatsky 5ca8e17a2d
fix: resend overridden headers on redirect without merging (#29605)
Reference https://github.com/microsoft/playwright/issues/13106
2024-02-22 07:44:14 -08:00
Simon Willison e846afeb98
docs(python): Clarify Pytest v.s. Library on Python intro page (#29590) 2024-02-22 09:27:41 +01:00
Pavel Feldman 82b17bdda1
chore: mark server-related fixture options as such (#29602) 2024-02-21 17:04:36 -08:00
Pavel Feldman ba72f7e429
chore: an iteration on test server (#29589) 2024-02-21 09:27:48 -08:00
Playwright Service 7c9ca0c7ef
feat(chromium): roll to r1104 (#29595)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-21 16:25:15 +01:00
Pavel Feldman a023cd1f57
fix(output): clear output before global setup (#29584) 2024-02-20 14:24:59 -08:00
Dmitry Gozman b811df4ac1
fix(fixtures): attribute teardown step to the right TestInfo instance (#29523) 2024-02-20 13:51:03 -08:00
Yury Semikhatsky 9a1e0a8ff7
docs: custom reporter path in --reporter option (#29585)
Fixes https://github.com/microsoft/playwright/issues/29525
2024-02-20 13:32:53 -08:00
Dmitry Gozman f9aebda5db
fix(fixtures): attribute teardown step to the right TestInfo instance (#29523) 2024-02-20 12:35:43 -08:00
dependabot[bot] 6c8d81d957
chore(deps): bump ip from 2.0.0 to 2.0.1 in /packages/playwright-core/bundles/utils (#29583) 2024-02-20 20:36:42 +01:00
Jean-François Greffier 6494bb30a0
JUnit codegen (#29424)
Codegen for JUnit

Fixes https://github.com/microsoft/playwright-java/issues/1039

Following JUnit5 integration
https://github.com/microsoft/playwright-java/issues/1369
2024-02-20 11:08:53 -08:00
Jan Lelis 3f46ba0680
docs(auth): Fix double use of JSON.stringify in Session storage example (#29554) 2024-02-20 19:57:44 +01:00
David 593feea166
fix: use addEventListener instead of onmessage in portTransport.ts (#29581) 2024-02-20 10:04:26 -08:00
Pavel Feldman d573c515a3
chore: add test server stub (#29568) 2024-02-20 09:56:33 -08:00
Max Schmitt 84fefdaac6
fix(console-api): locator filter with hasText (#29563)
Relates https://github.com/microsoft/playwright/issues/29546
2024-02-20 17:35:11 +01:00
Playwright Service 023ef97c49
feat(webkit): roll to r1982 (#29570)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-02-20 09:24:50 +01:00
Playwright Service e06f7a881d
feat(webkit): roll to r1981 (#29567)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-19 23:06:00 +01:00
Pavel Feldman a99652b0d9
chore: remove clearCompilationCache, do not push cache it into loader… (#29548) 2024-02-19 10:21:05 -08:00
dependabot[bot] 31bd58f8f3
chore(deps-dev): bump undici from 5.28.2 to 5.28.3 (#29533) 2024-02-19 09:32:23 +01:00
Playwright Service ce8cda006e
feat(webkit): roll to r1980 (#29540)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-19 09:31:03 +01:00
Jonah 7b59932b45
docs(contributing): update required node version (#29547)
Closes #29518

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-02-19 09:28:49 +01:00
Dmitry Gozman f414227ed8
chore(test runner): make FixturePool.registrations private (#29539)
This way everyone resolves through a public function instead of a map
lookup, which is sometimes wrong.
2024-02-16 20:29:33 -08:00
Yury Semikhatsky ce55cdffb8
fix: update path to cli.js in run-driver-win.cmd (#29538)
This was missed in https://github.com/microsoft/playwright/pull/29131

Fixes the following error in java on windows:

```
Error: Cannot find module 'C:\Users\RUNNER~1\AppData\Local\Temp\playwright-java-910508779801292985\package\lib\cli\cli.js'
    at Module._resolveFilename (node:internal/modules/cjs/loader:1144:15)
    at Module._load (node:internal/modules/cjs/loader:985:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:135:12)
    at node:internal/main/run_main_module:28:49 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}
```
2024-02-16 19:35:11 -08:00
Yury Semikhatsky f3fde992eb
chore: remove --project-grep, add wildcard support (#29537)
Reference #15128
2024-02-16 19:18:00 -08:00
Pavel Feldman 043c5aaffb
chore: follow up to web socket util extraction (#29536) 2024-02-16 18:16:45 -08:00
Pavel Feldman 4f1d8cdd63
chore: hide test server related cli commands (#29532) 2024-02-16 14:32:44 -08:00
Dmitry Gozman 269a293ba1
chore(test runner): allow TestInfoImpl without a TestCase (#29534)
This will be useful to run `beforeAll`/`afterAll` hooks with a separate
`TestInfo` instance, as well as run use helpers like
`_runAndFailOnError()` during scope teardown.
2024-02-16 12:43:13 -08:00
Dmitry Gozman dbf0b25146
chore(test runner): do not rely on zones for fixture steps (#29519) 2024-02-16 10:51:45 -08:00
Max Schmitt 05e6b5b5c7
test: unflake electron tests (#29520) 2024-02-15 22:09:17 +01:00
Dmitry Gozman dc9cddde95
chore: do not rely on zones for predefined steps (#29485)
This fixes some edge cases where fixtures and steps inside them were
attached to the wrong parent (see the new test).
This will also allow to replace some `runAsStep` calls with a flat list
of tasks to do that do not rely on lexical scope.
2024-02-15 12:49:08 -08:00
Dmitry Gozman 08afb34c14
chore(test runner): make timeout error an Error (#29515) 2024-02-15 11:38:13 -08:00
Dmitry Gozman bd5403dcad
chore: remove --tag and tagFilter (#29468)
This makes new tags filtered by the `grep`. New `TestCase.tags` API now
includes both old and new tags.
2024-02-15 11:37:16 -08:00
Max Schmitt fb48bfcbe6 Revert "devops: auto close questions (#29513)"
This reverts commit 09d0a099a2.
2024-02-15 19:22:25 +01:00
Dmitry Gozman bc2d4302f5
test: fix a broken reporter test (#29514)
It failed to print an error with missing stack, e.g. a timeout error.
2024-02-15 09:45:48 -08:00
Max Schmitt 09d0a099a2
devops: auto close questions (#29513)
Signed-off-by: Max Schmitt <max@schmitt.mx>
2024-02-15 18:14:51 +01:00
Sylvain Finot b11b118e02
feat(chromium): expose parameters to generate outline / tagged PDF (#29494)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-02-15 17:28:04 +01:00
Playwright Service a3d62acbdd
feat(chromium): roll to r1103 (#29506)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-15 17:03:00 +01:00
Playwright Service 2be5e97a29
feat(chromium-tip-of-tree): roll to r1194 (#29507)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-15 17:02:47 +01:00
Yury Semikhatsky edc1c13f31
docs: locator handler type should be Runnable in java (#29503) 2024-02-14 19:21:28 -08:00
Max Schmitt 93a2c00a1d
docs(webServer): add missing options (#29490) 2024-02-14 17:57:40 +01:00
Max Schmitt ce5d970929
docs: make sure to await route.* methods (#29489)
Fixes https://github.com/microsoft/playwright/issues/29471
Follow-up on https://github.com/microsoft/playwright/pull/28745.
2024-02-14 17:57:12 +01:00
Max Schmitt 918c26fa02
docs(other-locators): hide css:light selector engine (#29491)
https://github.com/microsoft/playwright/issues/29479
2024-02-14 08:49:42 -08:00
Playwright Service 593bf35eb7
feat(webkit): roll to r1979 (#29493)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-14 16:10:57 +01:00
Pavel Feldman 217c0618df
chore: rename find-related-tests to find-related-test-files (#29483) 2024-02-13 15:40:49 -08:00
Yury Semikhatsky 2693614c7a
Revert "fix(chromium): best effort 304 status on reload (#29373)" (#29481)
This reverts commit 17bc8f9a15.

Reference https://github.com/microsoft/playwright/issues/28779
Fixes https://github.com/microsoft/playwright/issues/29441
2024-02-13 11:43:04 -08:00
Brian Scramlin 2550ba3396
Update test-fixtures-js.md (#29283) 2024-02-13 11:28:34 -08:00
Pavel Feldman 7aef5249d8
chore: pass the private data to the runner via config (#29467) 2024-02-13 09:34:03 -08:00
Max Schmitt 8fca4c86aa
test: make Android/WebView2 bots green (#29477) 2024-02-13 17:55:58 +01:00
Playwright Service ff4191335d
feat(chromium-tip-of-tree): roll to r1193 (#29473)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-13 14:55:03 +01:00
Sander e14ded7af3
fix(ct): svelte export MountResult (#29385)
related to https://github.com/microsoft/playwright/pull/29375
2024-02-13 12:18:43 +01:00
Max Schmitt 30557ed28c
fix(electron): stalling on delayed process close (#29431) 2024-02-13 10:25:46 +01:00
Dmitry Gozman f605a5009b
fix(esmLoader): do not serialize the whole compilation cache after each import (#29464)
Instead, send the newly created cache entry only.

References #29418.
2024-02-12 16:39:53 -08:00
Max Schmitt b947639d3a
fix(ct): fix component.d.ts core types (#29463)
Fixes https://github.com/microsoft/playwright/issues/29461
2024-02-12 22:37:31 +01:00
Max Schmitt fe81790221
fix(accessibility): firefox with aria-invalid element (#29462)
Fixes https://github.com/microsoft/playwright/issues/29459
2024-02-12 12:12:31 -08:00
Max Schmitt 498b8bb269
fix(tracing): do not serialise out-of-process Buffers (#29425) 2024-02-12 21:03:38 +01:00
Max Schmitt b15a7076dc
test: unskip 'msedge' tests (#29456)
This removes all msedge skips again and makes msedge equal with chromium
skip wise.

Fixes https://github.com/microsoft/playwright/issues/26711
2024-02-12 17:37:45 +01:00
Yury Semikhatsky 7834beb932
chore: extract --project-grep option for matching with regex (#29445)
Reference https://github.com/microsoft/playwright/issues/15128
2024-02-10 11:19:00 -08:00
Pavel Feldman 586d14f02c
chore: add find-related-tests command (#29439) 2024-02-09 19:02:42 -08:00
Dmitry Gozman f0244b8a76
chore: rename handleLocator to addLocatorHandler (#29443) 2024-02-09 15:18:50 -08:00
Max Schmitt 61b88a851d
fix(merge): blobs before tags API (#29438)
Fixes https://github.com/microsoft/playwright/issues/29434
2024-02-09 20:47:38 +01:00
Max Schmitt abd8502490
devops: do not publish sha-X Docker images (#29433) 2024-02-09 09:07:10 -08:00
Yury Semikhatsky 7a86bf4af6
chore: delete store.ts (#29423) 2024-02-08 12:55:18 -08:00
Pavel Feldman 7f81c6e138
feat(ct): allow clearing cached build and test transformations (#29410) 2024-02-08 10:24:01 -08:00
Playwright Service 32a1d49729
feat(webkit): roll to r1978 (#29421)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-08 19:19:30 +01:00
Dmitry Gozman 61955e55b1
fix(handleLocator): address API review feedback (#29412)
- docs improvements;
- `force: true` ignores `handleLocator`;
- wrapping an internal call;
- more test cases;
- `pw:api` log entries for this API.
2024-02-08 07:39:05 -08:00
Playwright Service a131843c59
feat(chromium-tip-of-tree): roll to r1192 (#29416)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-08 15:41:53 +01:00
Playwright Service 03659e1d2d
feat(chromium): roll to r1102 (#29415)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-08 14:00:50 +01:00
Pavel Feldman 84dea09cb9
fix(ct): resolve components used in tests during the vite build (#29407) 2024-02-07 20:39:45 -08:00
Dmitry Gozman 3abd7c808e
fix(connectOverCDP): send custom headers in /json/version request (#29408)
Fixes #29403.
2024-02-07 17:41:21 -08:00
Dmitry Gozman 6b37a706db
chore(codegen): disable multiple locators choice in UI (#29409)
This feature needs more polish to be released.
2024-02-07 17:08:04 -08:00
Dmitry Gozman 3331a40647
feat(test runner): tags/annotations (#29248)
API changes:
- `test(title, details, body)` where details contain `tag` and
`annotation`.
- similar `details` property added to `test.skip`, `test.fail`,
`test.fixme`, `test.only`, `test.describe` and other `test.describe.*`
variations.
- `TestProject.tagFilter`/`TestConfig.tagFilter` that supports logical
tag expressions with `(`, `)`, `and`, `or` and `not`.
- `--tag` CLI option to filter by tags.
- New annotations are available in `TestInfo.annotations` and
`TestCase.annotations`.
- New tags are available in `TestCase.tags`.
    
Reporter changes:
- `json` reporter includes new tags in addition to old `@smoke`-style
tags. **Breaking**: tags are now listed with the leading `@` symbol.
- `html` reporter filters by old and new tags with the same `@smoke`
token.

Fixes #29229, fixes #23180.
2024-02-07 16:31:25 -08:00
Playwright Service 58f580dbde
feat(chromium-tip-of-tree): roll to r1191 (#29401)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-07 19:28:54 +01:00
Colin Harris bb380691f0
docs: reference GitHub actions/checkout@v4 and actions/setup-node@v4 (#29392) 2024-02-07 09:50:09 +01:00
Dmitry Gozman 9e285ce919
docs: do not call custom expect message an "error message" (#29390)
Fixes #29378.
2024-02-06 12:12:45 -08:00
Yury Semikhatsky 721d84f17a
fix(har): do not throw on -1 status code (#29371)
Fixes https://github.com/microsoft/playwright/issues/29311
2024-02-06 10:17:29 -08:00
Dmitry Gozman 18ce0fa370
fix(trace viewer): replace blue dot with red dot+warning (#29380)
Also how the explanation on hover.

Fixes #29263.
2024-02-06 08:27:45 -08:00
Playwright Service cfefac74ab
feat(webkit): roll to r1977 (#29377) 2024-02-06 09:18:46 +01:00
Pavel Feldman 20699c36ba
chore: simplify types handling in toHaveScreenshot (#29374) 2024-02-05 19:07:30 -08:00
Dmitry Gozman fb29d90052
docs: remove overloads from test.* APIs (#29376) 2024-02-05 19:03:04 -08:00
Pavel Feldman 286adf3af3
chore(ct): export MountResult (#29375)
Fixes https://github.com/microsoft/playwright/issues/27509
2024-02-05 17:19:39 -08:00
Yury Semikhatsky 17bc8f9a15
fix(chromium): best effort 304 status on reload (#29373)
Reference https://github.com/microsoft/playwright/issues/28779
2024-02-05 16:56:42 -08:00
Pavel Feldman 4bafe71eb1
chore: unconflict ct test ports (#29332) 2024-02-05 16:47:39 -08:00
Pavel Feldman 5f5e058e96
fix(fixtures): tear down base fixture after error in derived (#29337)
Fixes https://github.com/microsoft/playwright/issues/29325
2024-02-05 16:47:15 -08:00
Max Schmitt 8c007fd3fc
fix(toHaveScreenshot): stylePath as first arg (#29372) 2024-02-05 22:52:16 +01:00
Max Schmitt 57d841ffae
test: vendor 'proxy' dependency (#29370)
Fixes https://github.com/microsoft/playwright/issues/28701
2024-02-05 21:57:14 +01:00
Max Schmitt 47f8ba2a04
feat(electron): expose ElectronApplication console events (#29322)
Fixes https://github.com/microsoft/playwright/issues/5905
2024-02-05 21:30:54 +01:00
Max Schmitt 2690e4c827
devops: fix Android tests (#29335) 2024-02-05 20:39:00 +01:00
Max Schmitt bf31f2865f
chore: disable blank issue templates (#29368) 2024-02-05 20:02:15 +01:00
Christopher Dunderdale 36eed69fe2
docs(emulation): fix incorrect code snippet for using JavaScriptEnabled (#29333) 2024-02-04 10:31:28 +01:00
Yury Semikhatsky 79e379fc11
chore: do not set metadata.error for expect failure results (#29310)
The metadata.error change was brought back in
https://github.com/microsoft/playwright/pull/29271and it broke java port
as we could have error and result set simulteniously. This PR moves the
logic to the trace recorder instead and keeps the protocol contract
clear that either error or result is present, but not both.
2024-02-02 16:41:08 -08:00
Pavel Feldman dd0ef72cd8
feat(tsconfig): respect tsconfig references (#29330)
Fixes https://github.com/microsoft/playwright/issues/29256
2024-02-02 16:18:44 -08:00
Dmitry Gozman b9565ea26e
chore(test runner): refactor beforeAll/afterAll hooks and modifiers (#29309)
- Modifiers that only depend on the worker fixtures are implemented as
`beforeAll` hooks.
- Modifiers that depend on test fixtures are implemented as `beforeEach`
hooks.
- Pushed `_runAndFailOnError` down the stack, wrapping individual hooks
instead of the whole "before hooks" section.
- Reused the same code to run `beforeAll` and `afterAll` hooks and
modifiers.

**Behavior change**: `test.skip()` inside a `beforeAll` now skips the
hook and all tests in the suite.
2024-02-02 14:25:46 -08:00
Max Schmitt a6e0af6767
feat: parse projects option as RegExp (#29327)
Fixes https://github.com/microsoft/playwright/issues/15128
Relates https://github.com/microsoft/playwright/pull/17244

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Yury Semikhatsky <yurys@chromium.org>
2024-02-02 23:05:20 +01:00
Pavel Feldman 85e4589a90
Update feature.yml
Signed-off-by: Pavel Feldman <pavel.feldman@gmail.com>
2024-02-02 10:33:59 -08:00
Playwright Service 9e383c8b19
feat(webkit): roll to r1976 (#29326)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-02 18:26:51 +01:00
Max Schmitt 7d64ca4c54
fix(trace viewer): correctly trim locations on Windows (#29321)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-02-02 18:18:34 +01:00
Playwright Service ab95aabec5
feat(webkit): roll to r1975 (#29320)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-02-02 16:00:51 +01:00
Playwright Service 9ed344a765
feat(webkit): roll to r1974 (#29319)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-02 16:00:14 +01:00
Max Schmitt e69f159f43
devops: fix roll into PR action (#29318)
Signed-off-by: Max Schmitt <max@schmitt.mx>
2024-02-02 14:16:56 +01:00
Pavel Feldman fcd3c7b523
Revert "fix(ct): resolve paths before detecting JS" (#29312)
Reverts microsoft/playwright#29308
2024-02-01 21:11:30 -08:00
Pavel Feldman eb8cbbbf62
fix(ct): resolve paths before detecting JS (#29308) 2024-02-01 21:06:31 -08:00
Pavel Feldman d56a50245b
chore: Jest-inspired GitHub templates (thanks Jest!) (#29303) 2024-02-01 14:58:33 -08:00
Ian Macalinao 08729cd2e6
fix(recorder): reference Language enum for recorderTypes (#29294) 2024-02-01 13:48:30 -08:00
Rui Figueira b88a008a87
feat(codegen): slider support (#29087) 2024-02-01 13:45:19 -08:00
Pavel Feldman 020a39860d
chore: polish network panel highlight (#29299)
Fixes https://github.com/microsoft/playwright/issues/29287
2024-02-01 13:44:26 -08:00
Pavel Feldman 4784139bb0
fix(test): do not allow mixing tests from different types (#29284)
Fixes https://github.com/microsoft/playwright/issues/29282
2024-02-01 11:59:56 -08:00
Yury Semikhatsky a89dbe3813
devops: custom blob report name for test runner tests (#29280)
Otherwise uploaded reports all have clashing names report-1.zip and
report-2.zip.
2024-02-01 09:17:48 -08:00
Dmitry Gozman cf6549687c
fix(trace viewer): reveal error location when it comes from the test (#29268)
Errors coming from the test runner do not have an associated `action`,
but have a `stack` that we can reveal.
2024-02-01 08:23:07 -08:00
Playwright Service 80189c9daf
feat(chromium-tip-of-tree): roll to r1190 (#29291)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-01 14:42:55 +01:00
Playwright Service b32a539470
feat(chromium): roll to r1101 (#29290)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-01 14:23:40 +01:00
Dmitry Gozman 7cb886ce07
fix(codegen): refresh overlay listeners upon documentElement change (#29277)
This is similar to other listeners that we refresh upon
`onGlobalListenersRemoved`. Covered by sometimes flaky codegen tests.
2024-01-31 17:08:15 -08:00
Yury Semikhatsky b5082e10fd
fix: do not retry missing snapshot errors (#29272)
When `updateSnapshots === 'missing'` we generate new expectations on the
first attempt and don't retry the test afterwards instead of trying it
retries-1 times and only writing new expectation on the last attempt.
This logic infects all serial mode suites that contain the test with
missing expectations, so they also will not be retried.

Reference https://github.com/microsoft/playwright/issues/29073
2024-01-31 15:33:38 -08:00
Playwright Service ad0be80717
feat(webkit): roll to r1973 (#29274)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-02-01 00:31:13 +01:00
Max Schmitt 622153db18
Revert "chore: remove fake error from expect calls (#28112)" (#29271)
This reverts commit 2c3955a28c.

Relates https://github.com/microsoft/playwright-python/issues/2258
2024-01-31 23:43:37 +01:00
Playwright Service 15a20259b9
feat(webkit): roll to r1972 (#29269)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-31 23:43:26 +01:00
Max Schmitt 0f8d619012
docs(dotnet): add docs for SetDefaultExpectTimeout (#29259) 2024-01-31 17:49:01 +01:00
Pavel Feldman aff6cf3c83
chore: extract ws server util (#29247) 2024-01-30 14:36:51 -08:00
Dmitry Gozman aeafd44726
chore: strip Authorization header on ws redirect (#29246) 2024-01-30 14:26:25 -08:00
Daniel Han be6ab76c04
docs: add CLI documentation for --no-deps (#29235) 2024-01-30 11:44:33 -08:00
Playwright Service 4c0db7ba78
feat(firefox-beta): roll to r1439 (#29243)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-30 19:44:36 +01:00
Playwright Service 7b440d48f7
feat(chromium-tip-of-tree): roll to r1189 (#29244)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-30 19:43:44 +01:00
Playwright Service 082d4d5552
feat(firefox): roll to r1439 (#29242)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-30 19:05:18 +01:00
Max Schmitt 4affcdef71
devops: run tests on macOS 14 (#29241) 2024-01-30 18:04:35 +01:00
iridescentGray 289127d523
docs: fix python mock docs (#29230) 2024-01-30 09:04:28 +01:00
iridescentGray 14f94fcff5
fix: python mock doc Missing (#29187) 2024-01-29 15:02:19 -08:00
Yury Semikhatsky 13550b7329
fix: add new line before sourceURL (#29199)
Reference https://github.com/microsoft/playwright/issues/29116
2024-01-29 15:00:42 -08:00
Yury Semikhatsky ad6e40538a
fix(electron): make sure user arguments go first (#29204) 2024-01-29 15:00:12 -08:00
John Hill 82f40d0802
docs: Add Warning about Github Annotations (#29202) 2024-01-29 14:59:28 -08:00
Pavel Feldman c85308d717
chore: remove deprecated debug controller events (#29203) 2024-01-29 14:58:29 -08:00
Tanay Vardhan e9a8fc944c
fix: Add support for exif jpeg file formats (#29208) 2024-01-29 14:58:13 -08:00
Bruno Mańczak 3e2d5b2800
docs: add an example of how to use "+" key as part of a shortcut (#29221) 2024-01-29 14:57:10 -08:00
Max Schmitt 4df4054f19
feat(driver): add option to strip out lone surrogates (#29179)
https://github.com/microsoft/playwright-dotnet/issues/2819
2024-01-29 22:14:55 +01:00
Max Schmitt f4b8ff9c95
fix: don't use git status for workspace consistency (#29224)
Motivation: We verify this already in the
[infra.yml](https://github.com/microsoft/playwright/blob/main/.github/workflows/infra.yml).
Doing it in `workspace.js` breaks the canary builds, because it has
stray files (package.json / package-lock.json).
2024-01-29 20:13:54 +01:00
Max Schmitt 1db4e2effb
devops: bump GitHub Actions workflow actions (#29219)
Fixes:

<img width="2186" alt="image"
src="https://github.com/microsoft/playwright/assets/17984549/e75b4319-a8d9-4784-8357-83611f2671ae">
2024-01-29 19:22:44 +01:00
Max Schmitt cf70a01836
test: should serialize storageState with lone surrogates (#29089)
https://github.com/microsoft/playwright-dotnet/issues/2819
2024-01-29 19:22:33 +01:00
Dmitry Gozman acc72c2663
fix(codegen): assertValue works with disabled input (#29205)
Also add tests for new codegen functionality.

Fixes #29161.
2024-01-27 14:54:22 -08:00
Max Schmitt 36ebdfb441
fix: provisional fix for Trace Viewer source 404 (#29192)
Motivation: Sometimes the files are not available anymore on the Service
Worker side. The Trace Viewer frontend then falls back to `file?path=`
and uses its response, no matter what the response status is.

This patch checks for the response status code before using its
response.

e.g. https://github.com/microsoft/playwright-dotnet/issues/2775 after
some time / and some other reports.

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-01-27 14:05:15 +01:00
Dmitry Gozman 5ee7179b13
fix(test runner): make TestTracing responsible for trace management (#29181)
... instead of a fixture.

Fixes #29133, fixes #28733, fixes #28476.
2024-01-26 15:52:25 -08:00
Yury Semikhatsky 32034728ad
test: request overrides and routeFromHar (#29200)
Test that modifications from `route.fallback()` apply to the requests
before reading from/writing to HAR.

Reference https://github.com/microsoft/playwright/issues/29190
2024-01-26 15:19:01 -08:00
Yury Semikhatsky 82981a8091
fix: interception id not found error in route.continue (#29180)
We stopped catching all exceptions in
https://github.com/microsoft/playwright/pull/28539 in hope that we'll
get loadingFailed even before Fetch.continue/fulfill command's error.
Turns out this is racy and may fail if the test cancels the request
while we are continuing it. The following test could in theory reproduce
it if stars align and the timing is good:

```js
it('page.continue on canceled request', async ({ page }) => {
  let resolveRoute;
  const routePromise = new Promise<Route>(f => resolveRoute = f);
  await page.route('http://test.com/x', resolveRoute);

  const evalPromise = page.evaluate(async () => {
    const abortController = new AbortController();
    (window as any).abortController = abortController;
    return fetch('http://test.com/x', { signal: abortController.signal }).catch(e => 'cancelled');
  });
  const route = await routePromise;
  void page.evaluate(() => (window as any).abortController.abort());
  await new Promise(f => setTimeout(f, 10));
  await route.continue();
  const req = await evalPromise;
  expect(req).toBe('cancelled');
});
```

Fixes https://github.com/microsoft/playwright/issues/29123
2024-01-25 16:54:42 -08:00
Gabriel Feo 12a9a308f8
chore: replace "node.js" mention in shared docs (#29119)
Remove "Node.js" mention from the shared part of docs, which are shown
in docs for Python and other platforms.
2024-01-25 16:53:25 -08:00
Max Schmitt f741f08b3b test: fix itest (follow up to #28932) 2024-01-25 23:55:24 +01:00
Yury Semikhatsky 0113e8455b
fix: make TeleSuite.project work for all suites (#29177)
Fixes https://github.com/microsoft/playwright/issues/29173
2024-01-25 13:44:08 -08:00
Yury Semikhatsky 85c42939b1
devops: do not use broken overwrite: true for uploads (#29160)
Reverting parts of https://github.com/microsoft/playwright/pull/29080
related to use of overwrite: true as it is racy and
[fails](https://github.com/microsoft/playwright/actions/runs/7641699534/job/20819588957?pr=28932#step:10:63)
time to time with parallel jobs:


![image](https://github.com/microsoft/playwright/assets/9798949/cd484e2d-2875-4950-9247-5ea033c6e92d)


Reference https://github.com/actions/upload-artifact/issues/506
2024-01-25 12:55:29 -08:00
Max Schmitt 4c4789c740
chore: validate deps during install (#28932)
Motivation: On Windows we call around 50 times `PrintDeps.exe` which
takes on a very fast machine 500+ms. On Linux we do it around 120 times
(`ldd`) which takes around 150ms.

This change validates the dependencies once on browser install (`npx
playwright install`). In case its failing, it will emit a warning, in
case of a success, it will create a marker file that the binary has been
validated. For future `launch()` calls, we'll read this file and if
exists, we'll not validate again. Otherwise we'll validate again.

Note: If the marker file is older than 30 days, the browser will be
validated again.
2024-01-25 20:55:53 +01:00
Pavel Feldman 6a14b1dc51
chore: automatically detect the dev server (#29176) 2024-01-25 11:46:47 -08:00
Pavel Feldman 24ff2e2bad
chore: provisional fix for win install test failure (#29175) 2024-01-25 11:46:30 -08:00
Pavel Feldman b5e175e6e2
fix: tolerate wrongly-typed annotations (#29162)
Fixes https://github.com/microsoft/playwright/issues/29149
2024-01-25 11:35:17 -08:00
Pavel Feldman f7fb1e4d4e
chore(ct): use sticky test server if available (#29136) 2024-01-25 08:36:13 -08:00
Dmitry Gozman f5de6e5538
feat(codegen): generate multiple selectors to choose from (#29154)
When possible, "pick locator" generates:
- default locator;
- locator without any text;
- locator without css `#id`.

Fixes #27875, fixes #5178.
2024-01-25 07:35:58 -08:00
Dmitry Gozman bc83d7084c
fix(chromium): emulate navigator.userAgentData along with UA (#29159)
Fixes #28989, fixes #29139.
2024-01-25 07:34:11 -08:00
Playwright Service 129f5bfdbe
feat(chromium): roll to r1100 (#29167)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-25 15:24:49 +01:00
Playwright Service 6a04ed6a1e
feat(chromium-tip-of-tree): roll to r1188 (#29169)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-25 15:24:33 +01:00
Yury Semikhatsky f49426b006
docs: update browsers when updating playwright (#29128) 2024-01-24 21:54:03 -08:00
Playwright Service 86c881f206
feat(chromium-tip-of-tree): roll to r1187 (#29153)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-24 18:36:00 +01:00
Max Schmitt ba8d141de8
chore: drop Ubuntu 18.04 (#29145)
This will now yield:

```
root@a85fb37f0c96:/work# npx playwright install
Failed to install browsers
Error: ERROR: Playwright does not support chromium on ubuntu18.04-x64
```

On Ubuntu 18.04.
2024-01-24 17:46:20 +01:00
Max Schmitt d50479a76f
devops: switch to ISO date string for Canary versions (#29142)
Fixes https://github.com/microsoft/playwright/issues/28906
2024-01-24 17:13:00 +01:00
Yury Semikhatsky 0752f0202f
docs: teardown examples (#29134)
Fixes https://github.com/microsoft/playwright/issues/29068
2024-01-23 16:35:30 -08:00
Yury Semikhatsky ea855e232e
docs: update note on filtering dependent projects (#29135)
Fixes https://github.com/microsoft/playwright/issues/29102
2024-01-23 16:10:43 -08:00
Yury Semikhatsky 9cd2916623
docs: add a new fruit when mocking response (#29137)
Strawberry is already in the original list.

Fixes https://github.com/microsoft/playwright/issues/29114
2024-01-23 16:10:33 -08:00
Pavel Feldman cec2ff1772
chore: split cli processing into cli endpoint and program (#29131) 2024-01-23 15:22:09 -08:00
Dmitry Gozman 1ce3ca25a2
chore(role): cache element list by role (#29130) 2024-01-23 13:45:26 -08:00
Pavel Feldman 8898a537e0
chore: extract a dev variation of the ct plugin (#29126) 2024-01-23 12:55:28 -08:00
Dmitry Gozman 8e607d509f
fix(recorder): disallow external imports (#29129)
Previously, new `Recorder` instance was given an existing
`InjectedScript`. However, we built a separate source for
`InjectedScript` vs `Recorder`, and both bundles contain their own copy
of all helper modules, e.g. `roleUtils`.

This resulted in two copies of helper modules, which is troublesome for
any module-level globals like a top-level cache. Depending on whether
`Recorder` or `InjectedScript` called into the helper, they would access
the different value of a module global, which lead to bugs.

To prevent this, we force any external dependencies to be imported
through the `InjectedScript.utils`.
2024-01-23 11:29:40 -08:00
Dmitry Gozman 5bc5056a1f
chore(role): cache pseudo content calculation (#29115) 2024-01-23 10:09:23 -08:00
Pavel Feldman 41c15cb176
chore: move vite root dir into template folder (#29081) 2024-01-23 09:40:05 -08:00
Max Schmitt d89ed88679
docs: do not recommend PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD anymore (#29121) 2024-01-23 09:12:47 -08:00
Playwright Service 3e2d7fe7e7
feat(chromium): roll to r1099 (#29120)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-23 13:34:59 +01:00
Dmitry Gozman 9b974e0026
chore: speedup frequent element text normalization (#29113)
We cache `ElementText` for frequent operations, but then call
`normalizeWhitespace` on it every time which burns a lot of CPU.
2024-01-22 21:33:56 -08:00
Yury Semikhatsky fbf87ef904
fix: test.fail wrapper method (#29112)
Fixes https://github.com/microsoft/playwright/issues/29104
2024-01-22 19:47:27 -08:00
Yury Semikhatsky b2de9bc865
fix: mock safari.pushNotification (#29107)
Fixes https://github.com/microsoft/playwright/issues/29032
2024-01-22 15:44:13 -08:00
Max Schmitt db00aa7305
fix: remove unused TestInfo.stdout/stderr (#29076)
https://github.com/microsoft/playwright/issues/29062
2024-01-22 19:22:31 +01:00
Playwright Service 4e877f270d
feat(webkit): roll to r1970 (#29103)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-22 19:22:11 +01:00
Max Schmitt c3566d259f
chore: better error messages when stable channel installations fail on Windows (#29077)
https://github.com/microsoft/playwright/issues/29004
2024-01-22 18:15:35 +01:00
Yury Semikhatsky 4b0e55abda
devops: make sure uploaded reports always contain directory (#29080)
* Before the change if if uploaded artifact path contained just one file
it would be [archived
directly](694cdabd8b/src/search.ts (L142-L151)),
but if there is a sister folder it would be an archive of the entire
dir. According to the action docs "If a wildcard pattern is used, the
path hierarchy will be preserved after the first wildcard pattern", so
hopefully it means that the directory is always compressed even if there
is a single file in it.
* Use `overwrite: true` to have only one artifact with pull request
number.
2024-01-19 17:23:22 -08:00
dependabot[bot] c635fc9a19
chore(deps): bump vite from 5.0.11 to 5.0.12 (#29078) 2024-01-19 17:23:07 -08:00
Yury Semikhatsky d7958ba4ad
chore: quote path only if contains whitespaces (#29079)
Otherwise we always quote as `trace.zip` matches \W.

This is a follow-up to 674988c633
Reference https://github.com/microsoft/playwright/issues/29039
2024-01-19 16:52:39 -08:00
Pavel Feldman d61f99034a
fix(ct-react): do not reset mount hooks upon update (#29072)
Fixes https://github.com/microsoft/playwright/issues/29058
2024-01-19 12:55:36 -08:00
Dmitry Gozman f3fac6f4e9
feat: page.handleLocator that closes any interstitial pages/dialogs (#29029) 2024-01-19 12:35:00 -08:00
Pavel Feldman 71a48c2562
chore: migrate ct to vite5 (#29033)
Closes https://github.com/microsoft/playwright/issues/28607
2024-01-19 11:13:03 -08:00
Sander 54c57fdebe
chore(ct): revert export mount result (#29070) 2024-01-19 11:11:23 -08:00
Max Schmitt e551506c9e
Revert "feat(codegen): add range input recording support (#28767)" (#29069) 2024-01-19 19:47:59 +01:00
Yury Semikhatsky 674988c633
chore: add quotes to the path only when necessary (#29057)
This is a follow-up to c76f5294ce
Reference https://github.com/microsoft/playwright/issues/29039
2024-01-19 10:27:15 -08:00
Max Schmitt 6a15d43539
docs: rename example env var (#29061) 2024-01-19 17:43:37 +01:00
Playwright Service 057b0dd0ab
feat(firefox-beta): roll to r1438 (#29063)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-19 13:27:53 +01:00
Pavel Feldman 4010940315
chore: move off babel proposals to plugins (#29053) 2024-01-18 17:50:52 -08:00
Dmitry Gozman b7d22b64e8
feat(merge): prepend bot name to global errors (#29055)
This way one can figure out where does the error come from.

An example merged report that exhibits the issue:
https://mspwblobreport.z1.web.core.windows.net/run-7563628632-1-2328b83af75801ab76bb06c214fee483cf5bc07c/index.html#?q=s%3Afailed%20s%3Aflaky
2024-01-18 15:11:32 -08:00
Yury Semikhatsky c76f5294ce
fix: quote trace file path when printing error message (#29052)
Fixes https://github.com/microsoft/playwright/issues/29039
2024-01-18 14:23:12 -08:00
Max Schmitt 4a45724633
fix: open 0.0.0.0 as localhost (#29054)
Fixes https://github.com/microsoft/playwright/issues/29047
2024-01-18 22:21:49 +01:00
Max Schmitt b5e766e99e
chore: remove unused ncp dependency (#29043) 2024-01-18 21:27:45 +01:00
Playwright Service 84cf633c92
feat(chromium-tip-of-tree): roll to r1186 (#29044)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-18 21:24:28 +01:00
Playwright Service 7d7198c055
feat(webkit): roll to r1969 (#29050)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-18 11:36:43 -08:00
Pavel Feldman 03815b9eb1
chore: migrate to Node 18 lockFileVersion 3 (#29051) 2024-01-18 11:33:23 -08:00
romanimm a217d6a08d
docs: fix typo for stylePath (#29034) 2024-01-18 09:59:31 +01:00
Pavel Feldman ee3960529e
fix(ct): allow passing date, url, bigint as properties (#29031)
Closes: https://github.com/microsoft/playwright/issues/29028,
https://github.com/microsoft/playwright/issues/29027
2024-01-17 20:43:28 -08:00
Pavel Feldman 2328b83af7
test: add a props.children test (#29026)
Closes https://github.com/microsoft/playwright/issues/29023
2024-01-17 12:53:01 -08:00
Dmitry Gozman 300a0127de
Revert "feat(trace): allow Trace Viewer to include credentials when fetching traces cross-origin (#28502)" (#29024)
This reverts commit 3f3f332060.

References #29019.
2024-01-17 10:40:58 -08:00
Pavel Feldman c82919859c
chore: add an image import component test (#29016)
Closes: https://github.com/microsoft/playwright/issues/22657
2024-01-17 09:06:02 -08:00
inottn 0fa85143a0
docs: add missing imports (#29014) 2024-01-17 08:11:55 +01:00
Pavel Feldman 1db18711a2
fix(ct): move import list into the compilation cache data (#28986) 2024-01-16 19:31:19 -08:00
Dmitry Gozman e6d51cf7bd
chore: refactor actionability check to go through node-side retry (#28982)
This allows to inject a checkpoint in between the actionability checks.

Drive-by: cleanup `InjectedScriptPoll`-related code.
2024-01-16 19:11:41 -08:00
Yury Semikhatsky a3c38bc1f9
devops: merge paginated results when downloading blobs (#29013)
* The results are paginated by default to return max 30 entries, see
[this
page](https://docs.github.com/en/rest/actions/workflow-runs?apiVersion=2022-11-28).
We use
[octakit.paginate](https://octokit.github.io/rest.js/v20#pagination),
wrapped into
[github-script](60a0d83039)
to automatically load all artifacts urls.

* Also bumped github-script to v7
2024-01-16 16:14:38 -08:00
Dmitry Gozman d023829dd5
fix(locator parser): allow escaped quotes in the digest function (#29012)
This supports mixed quotes locators in JavaScript where we are not sure
what quote is the correct one, so we normalize to unescaped single quote
when comparing with the original.

Drive-by: we were allowing single quotes in Python, Java and .NET, but
these are actually not allowed.

Regressed in #27718.
Fixes #28630.
2024-01-16 16:06:02 -08:00
Dmitry Gozman 9b657b54fb
fix(launcher): unregister global process handlers when all browser are closed (#29011)
Otherwise, we forever block SIGTERM and SIGHUP by registering a handler
that does not do anything (due to no browsers to close) and prevents
default handler that exits from running.

Fixes #28091.
2024-01-16 14:41:26 -08:00
Dmitry Gozman 775ef30e43
fix(test runner): make TestCase.id not depend on the path separator (#29010)
Fixes #28991.
2024-01-16 13:32:47 -08:00
Playwright Service ab7d1b5e53
feat(webkit): roll to r1968 (#29009)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-16 20:26:36 +01:00
Max Schmitt 7e6072583b
docs(docker): various enhancements (#28994)
Fixes https://github.com/microsoft/playwright-python/issues/2241
2024-01-16 19:27:17 +01:00
Max Schmitt 7721f910b2
chore: roll stable-test-runner to 1.41.0-beta-1705101589000 (#28993) 2024-01-16 08:59:55 -08:00
Playwright Service 25ec071277
feat(chromium-tip-of-tree): roll to r1185 (#29003)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-16 17:35:21 +01:00
jonghoonpark 4c0a972b69
feat(expect): Make toPass's option configurable by TestConfig (#28231)
Co-authored-by: jonghoon.park <jonghoon.park@lucentblock.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2024-01-16 12:28:38 +01:00
Pavel Feldman bbe26dbdbb
chore: build import registry source (#28978) 2024-01-14 08:41:40 -08:00
Pavel Feldman 92ad1b385c
chore: refactor import processing in ct (#28975) 2024-01-12 20:02:27 -08:00
Max Schmitt f2ebc53f18
chore: mark version 1.42.0-next (#28973) 2024-01-13 00:20:27 +01:00
Max Schmitt cd922d137c
chore: update browser patches to 03ca0a7 (#28974) 2024-01-13 00:19:49 +01:00
Max Schmitt 01af7e5d8e
docs(release-notes): add v1.41 release notes (#28697)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-01-13 00:11:42 +01:00
Yury Semikhatsky d4329bb6f2
docs: add example of data isolation between parallel tests (#28958) 2024-01-12 12:47:40 -08:00
Dmitry Gozman 48317af1cc
feat(trace): preserve noscript when javascript is disabled (#28971)
Closes #27504, closes #27532.
2024-01-12 12:11:39 -08:00
Max Schmitt 7670fd21e2
fix(esm): >= Node.js 21 globalPreload -> initialize (#28526)
https://github.com/microsoft/playwright/issues/28524
https://github.com/microsoft/playwright/issues/28732


https://nodejs.org/en/blog/announcements/v21-release-announce#module-customization-hook-globalpreload-removed-use-register-and-initialize-instead
2024-01-12 09:51:45 -08:00
Dmitry Gozman 37634df0c4
docs: note that opacity:0 still counts as visible element (#28965)
Closes #28954.
2024-01-12 09:38:23 -08:00
Dmitry Gozman 90665ef056
docs: update auto-waiting doc (#28960)
- Replace action names with links to `Locator.click`.
- Remove "Attached" check in favor of "locator resolves to a single
element".
- Replace getter methods in assertion section with auto-retriying
assertions.
- Add missing actions.

---

<img width="837" alt="Screenshot 2024-01-11 at 1 02 34 PM"
src="https://github.com/microsoft/playwright/assets/9881434/1946678d-6a7e-45cf-a299-2f18cb3fb5a5">
2024-01-12 09:33:42 -08:00
Max Schmitt 808359ba6c
fix(driver): add external commands only for JS binding (#28968)
Motivation: Before this change if a language binding invoked the CLI
with `--help` or without any arguments (which will also show the help
text) it was suggesting that test/merge-reports/show-report is something
we support. After this change this does not get shown anymore.
2024-01-12 18:26:00 +01:00
Yury Semikhatsky 8936885a67
fix(chromium): preserve header overrides in redirects (#28962)
Reference https://github.com/microsoft/playwright/issues/28758
2024-01-12 08:55:20 -08:00
Playwright Service 69c9e985bf
feat(webkit): roll to r1967 (#28952)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-12 15:01:47 +01:00
Yury Semikhatsky b392c2d392
docs: add proxy example to the API testing guide (#28959)
Fixes https://github.com/microsoft/playwright/issues/28940
2024-01-11 13:39:35 -08:00
Max Schmitt c5097a500d
docs: add java/csharp code snippets for FormData (#28951)
Fixes https://github.com/microsoft/playwright/issues/28811

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2024-01-11 18:36:05 +01:00
Playwright Service 229ec522ac
feat(chromium-tip-of-tree): roll to r1184 (#28950)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-11 14:38:26 +01:00
Playwright Service 3ace946fc2
feat(chromium): roll to r1097 (#28949)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-11 14:38:16 +01:00
Playwright Service 48517760e7
chore(driver): roll driver to recent Node.js LTS version (#28943) 2024-01-11 11:15:42 +01:00
Pavel Feldman 38822d1014
chore: remove manual __esModule override (#28935) 2024-01-10 16:28:08 -08:00
Pavel Feldman a0750b7854
chore: network panel polish (#28924) 2024-01-10 15:28:33 -08:00
Dmitry Gozman 3851d9b897
test: make sure asLocator works with has+hasText at the same time (#28937) 2024-01-10 12:42:55 -08:00
Yury Semikhatsky 19a4f15eb6
chore: remove redundant checks from network interception (#28922)
We only intercept requests in Playwright so these fields are always
undefined.
2024-01-09 13:35:51 -08:00
Max Schmitt 2ddf3a45f9
chore(firefox): rewrite error message for $HOME directory ownership mismatch (#28921)
Fixes https://github.com/microsoft/playwright/issues/28896
2024-01-09 20:40:39 +01:00
Playwright Service 4b99d21dbd
feat(chromium-tip-of-tree): roll to r1183 (#28913)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-09 14:39:59 +01:00
Playwright Service a519af6830
feat(webkit): roll to r1966 (#28911)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-09 11:03:40 +01:00
Max Schmitt feece0f569
fix(deps): check only .dll/.exe files on Windows (#28901)
Fixes https://github.com/microsoft/playwright/issues/28846
2024-01-08 21:53:18 +01:00
Max Schmitt 0f3bd9835f
test: update 'proxy' dependency to v2 (#28895)
This won't fix it yet, but prepare for a smaller version bump once the
upstream fix has been merged.
https://github.com/microsoft/playwright/issues/28701.
2024-01-08 19:57:46 +01:00
Max Schmitt 1d8c6d4760
test: unflake 'android.launchServer' WS leak test (#28891)
This test was flaky all the time. The problem was that we were sending
messages on a WS connection which wasn't ready yet, so we lost some.
2024-01-08 19:07:06 +01:00
Max Schmitt 67478efe92
devops: fix Chromium ToT headed tests (#28892)
This broke in
6c2c777cae (diff-2d067b4a60c6de032d0719122683d3179baf5c9ff0f1669ce8e05938102526e2L358)
2024-01-08 09:30:40 -08:00
Viicos 88d7ff97a1
docs(python): fix example in mock docs (#28894) 2024-01-08 15:14:56 +01:00
Sander 28875fa608
chore(ct): dedupe types (#28816) 2024-01-07 19:45:42 -08:00
Playwright Service 76ab990208
feat(firefox-beta): roll to r1437 (#28888)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-07 20:23:06 +01:00
Yury Semikhatsky 1617779f3e
test: page.reload should return 304 status (#28881)
Test for https://github.com/microsoft/playwright/issues/28779
2024-01-05 13:49:45 -08:00
Playwright Service f428f0793f
feat(firefox): roll to r1438 (#28882)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-05 21:11:34 +01:00
geke-scottlogic 6bd61cd8c6
docs: Improve clarity on toHaveText and toContainText assertions (#28623)
This closes https://github.com/microsoft/playwright/issues/28058.
2024-01-05 09:20:50 -08:00
Playwright Service 572e656be0
feat(chromium): roll to r1096 (#28878)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-05 13:21:50 +01:00
Playwright Service ce2ffd90f5
feat(firefox-beta): roll to r1436 (#28876)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-05 11:17:44 +01:00
Yury Semikhatsky fad703d4ee
docs: update merge example to upload-artifact@v4 (#28849)
Artifacts in upload-artifact@v4 are
[immutable](https://github.com/actions/upload-artifact/tree/main?tab=readme-ov-file#breaking-changes),
so we cannot simply copy reports into single artifact.

Fixes https://github.com/microsoft/playwright/issues/28800
2024-01-04 16:03:22 -08:00
Playwright Service 76cd76ff1c
feat(webkit): roll to r1965 (#28868)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-04 20:49:05 +01:00
Max Schmitt 32f595d1c9
docs(browsers): fix comment about stable Firefox (#28862) 2024-01-04 09:30:42 -08:00
Yury Semikhatsky 6c2c777cae
devops: migrate to download/upload-artifact@v4 (#28850)
`actions/upload-artifact@v4` comes with the following [breaking
change](https://github.com/actions/upload-artifact?tab=readme-ov-file#breaking-changes):
"Due to how Artifacts are created in this new version, it is no longer
possible to upload to the same named Artifact multiple times. You must
either split the uploads into multiple Artifacts with different names,
or only upload once. Otherwise you will encounter an error."

Due to that we cannot copy multiple blob report folders into the same
artifact name and rely on the action to merge them. Instead, as
suggested by their migration guide, we upload each blob report into a
uniquely named artifact with prefix `blob-report-` and then download all
of them into same directory.

This version change also affects how we store pull_request_number.txt
into an artifact. Previously we relied on the fact that uploading
artifact with the same name would silently override existing one, but
now it's an error. To overcome that, we upload PR number file into
uniquely named artifacts `pull-request-*` and later extract them into
same location with `unzip -n` which will never override existing file,
so we end up with single `pull_request_number.txt`.

Reference #28800
2024-01-04 09:13:55 -08:00
Playwright Service edf369ea3c
feat(chromium-tip-of-tree): roll to r1182 (#28864)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-04 17:19:56 +01:00
Max Schmitt e30c0a6ff7
devops: fix pr_check_client_side_changes workflow (#28847)
https://github.com/microsoft/playwright/actions/runs/7401729926/workflow
2024-01-03 13:15:50 -08:00
Sander eebb69121e
fix(ct): vue update slots (#28835)
Due to [Vue 3.4](https://blog.vuejs.org/posts/vue-3-4): _"refactored
reactivity system that makes effect triggering more accurate and
efficient"_

closes: https://github.com/microsoft/playwright/issues/28830
2024-01-03 20:48:41 +01:00
Max Schmitt 58fa4fce74
fix: use logger in default context with connectOverCDP (#28838)
Fixes https://github.com/microsoft/playwright/issues/28813
2024-01-03 19:49:47 +01:00
Max Schmitt abc746bd7a
chore: get rid of 'electron-to-chromium' dependency (#28826) 2024-01-03 19:49:37 +01:00
Xuan d8733d9229
docs: remove the create method from extensibility (#28823)
I saw the `create` method in the
[Extensibility](https://playwright.dev/docs/extensibility) section of
the document but didn't quite understand its actual purpose. Therefore,
I attempted to add this method in the test examples, but it seems that
regardless of what this method returns or if it throws an error, it has
no effect. Upon further examination of the
[selectors.ts](https://github.com/microsoft/playwright/blob/main/packages/playwright-core/src/client/selectors.ts)
and
[types.ts](https://github.com/microsoft/playwright/blob/main/packages/playwright-core/src/client/types.ts#L129)
files, I noticed that this method is not defined. Consequently, I opened
this pull request to remove the description of this method to prevent
any potential misunderstandings by others.

If there are any misunderstandings, feel free to close this pull
request. Thank you.
2024-01-03 09:39:57 -08:00
Playwright Service 620c82af48
feat(webkit): roll to r1964 (#28839) 2024-01-03 09:06:59 +01:00
Playwright Service 3dfd7edf99
feat(chromium-tip-of-tree): roll to r1181 (#28831)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-02 14:35:15 +01:00
Playwright Service a7c9060731
feat(webkit): roll to r1963 (#28820)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-02 09:37:18 +01:00
Nick Wittland 7bffff5790
docs: configuration of junit reporter in ci.md (#28817) 2023-12-31 13:43:10 -08:00
Sander df4b11c169
fix(ct): react17 eslint errors (#28783) 2023-12-30 17:29:20 -08:00
Rui Figueira 778828cc43
feat(codegen): add range input recording support (#28767) 2023-12-30 17:22:57 -08:00
Playwright Service 214b3733b2
feat(webkit): roll to r1962 (#28803) 2023-12-28 15:18:18 +01:00
Playwright Service 19b309f80b
feat(chromium-tip-of-tree): roll to r1180 (#28804) 2023-12-28 15:17:53 +01:00
Playwright Service 2d5488d8e3
feat(chromium-tip-of-tree): roll to r1179 (#28787)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-26 21:00:39 +01:00
Playwright Service 39abc6386f
feat(webkit): roll to r1961 (#28776)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-12-23 09:25:07 +01:00
Playwright Service b06b772ae7
feat(webkit): roll to r1960 (#28777) 2023-12-23 09:23:37 +01:00
Sander 4d62784eeb
feat(ct): react component as props (#28382)
closes: https://github.com/microsoft/playwright/issues/28367#issuecomment-1830298864
2023-12-22 20:51:59 -08:00
Pavel Feldman afb2582eaa
chore: render only react child (#28775)
Fixes https://github.com/microsoft/playwright/issues/28410
2023-12-22 17:15:49 -08:00
Yury Semikhatsky b00fbdb388
test: update expectations for WebKit Windows (#28774)
Reference https://github.com/microsoft/playwright/issues/28726
2023-12-22 16:02:23 -08:00
Yury Semikhatsky 32ecb07f64
test: route.continue headers are propagated to redirected requests (#28771)
Failing test for https://github.com/microsoft/playwright/issues/28758
2023-12-22 14:31:41 -08:00
Pavel Feldman fc5f34369a
chore: only highlight uncaught errors in source (#28772) 2023-12-22 14:19:53 -08:00
Playwright Service 9219a0eb90
feat(webkit): roll to r1959 (#28761) 2023-12-22 22:09:37 +01:00
Pavel Feldman eeb9e06d5e
chore: box step w/o modifying runtime errors (#28762) 2023-12-22 12:00:17 -08:00
Yury Semikhatsky 5f14d42723
Revert "fix: respect .only in --list mode" (#28770)
This reverts commit 9a5bfc54e5.

As it breaks extension.

Reference #28709
2023-12-22 11:03:30 -08:00
Playwright Service b62317c056
feat(webkit): roll to r1958 (#28760)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-22 20:03:07 +01:00
Pavel Feldman f5c57d0e98
chore: reuse image diff component in trace/html (#28727)
Fixes https://github.com/microsoft/playwright/issues/28685
2023-12-22 10:17:35 -08:00
Yury Semikhatsky ff99aa33b0
fix: input events triggered by playwright actions should have composed=true (#28730)
Fixes https://github.com/microsoft/playwright/issues/28726
2023-12-21 15:25:16 -08:00
Yury Semikhatsky 207585ef63
docs: clarify tracing name parameter semantics (#28759)
Fixes https://github.com/microsoft/playwright/issues/28751
2023-12-21 15:24:54 -08:00
Pavel Feldman 5d9e08ac61
chore: box soft steps (#28749)
Fixes https://github.com/microsoft/playwright/issues/28259
2023-12-21 12:16:03 -08:00
Playwright Service ef81b05237
feat(chromium-tip-of-tree): roll to r1178 (#28756) 2023-12-21 19:58:08 +01:00
Yury Semikhatsky db703a98ea
docs: no floating promises in route handlers (#28745)
Fixes https://github.com/microsoft/playwright/issues/28737
2023-12-21 09:57:35 -08:00
Playwright Service 8161a7401f
feat(webkit): roll to r1957 (#28752)
Fixes https://github.com/microsoft/playwright/issues/28643

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-21 10:45:14 +01:00
Yury Semikhatsky f7e298fec3
docs: clarify toPass timeout behavior (#28747)
Fixes https://github.com/microsoft/playwright/issues/28744
2023-12-20 15:39:53 -08:00
Yury Semikhatsky 87ca45366b
docs: quote to avoid variable expansion in powershell (#28728)
Fixes https://github.com/microsoft/playwright/issues/28724
2023-12-20 09:56:37 -08:00
Playwright Service e95b424b83
feat(firefox-beta): roll to r1435 (#28740)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-20 17:23:33 +01:00
Playwright Service a827011c3b
feat(firefox): roll to r1435 (#28739)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-20 15:46:47 +01:00
Yury Semikhatsky 6d583a2dbe
fix: exit from merge-reports in type: "module" projects (#28725)
Fixes https://github.com/microsoft/playwright/issues/28699
2023-12-19 16:49:25 -08:00
Max Schmitt b88b194e9f
feat(run-server): expose --host (#28723) 2023-12-19 23:19:46 +01:00
Yury Semikhatsky dcaa5758f0
fix: respect .only in --list mode (#28721)
Fixes https://github.com/microsoft/playwright/issues/28709
2023-12-19 12:24:54 -08:00
George Griffiths 4c848c0daf
feat(expect): Allow expect timeout to be configured outside of the runner (#28716)
Fixes #28702
2023-12-19 10:55:05 -08:00
Ben McCann bbf588a992
feat(ct): upgrade to vite-plugin-svelte 3 (#28624) 2023-12-19 19:48:37 +01:00
Yury Semikhatsky afc1ac7063
fix: errors in evaluate should be JavaScriptErrorInEvaluate (#28706)
Fixes https://github.com/microsoft/playwright/issues/28690
2023-12-19 10:47:43 -08:00
Playwright Service b33a04bc88
feat(chromium-tip-of-tree): roll to r1177 (#28712)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-19 16:35:02 +01:00
Dmitry Gozman 6b178d22e2
fix: do not produce TargetClosedError: <message> errors (#28704) 2023-12-18 12:34:43 -08:00
Max Schmitt e2c335a40c
docs(intro): update requirements to new macOS version (#28683) 2023-12-18 18:38:51 +01:00
Max Schmitt 696237205a
fix(ui-mode): disconnected error styling (#28681)
Fixes https://github.com/microsoft/playwright/issues/28679
Fixes https://github.com/microsoft/playwright/issues/28680
2023-12-18 17:32:57 +01:00
Yury Semikhatsky ea4bb715f3
devops: extend client side changes pattern to include protocol and API changes (#28682) 2023-12-18 15:06:29 +01:00
Sander aaf9cc5b49
fix(ct): solid typecheck (#28686) 2023-12-16 12:42:50 -08:00
Max Schmitt 576b3406e3
test: tree gardening (#28676)
Looks like massaging the signals test in
8ab0660d1b (diff-f9d332d27364a8a58e52f5d7ffc180df7581589565b62186757b21839aabf889)
didn't make it fully green.

As of today it fails on Darwin 13 which is version 22, so we should not
run into the first if.
2023-12-15 17:39:31 -08:00
Playwright Service 54e2ecc45b
feat(webkit): roll to r1956 (#28678)
Fixes https://github.com/microsoft/playwright/issues/28567.

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-15 15:54:05 -08:00
Yury Semikhatsky a1a4133152
chore: extract unroute behavior tests into a separate file (#28674)
Reference https://github.com/microsoft/playwright/issues/23781
2023-12-15 15:37:57 -08:00
Max Schmitt 35b61b7cdf
test: use net8.0 for webview2 tests (#28665) 2023-12-15 13:03:33 -08:00
Yury Semikhatsky 86ef7393ba
docs: remove unrouteAll.behavior option from java (#28675)
This option does not make sense in the synchronous API where all active
routes would be on the same call stack any way.

Reference https://github.com/microsoft/playwright/issues/23781
2023-12-15 12:09:26 -08:00
Max Schmitt 39bdbbf029
test: codegen #28663 follow-up (#28673) 2023-12-15 12:05:13 -08:00
Max Schmitt 665bce64ae
docs(dotnet): add a note on how to install a custom .NET version in Docker (#28672)
Fixes https://github.com/microsoft/playwright-dotnet/issues/2698
Relates https://github.com/microsoft/playwright/issues/28667
2023-12-15 10:40:50 -08:00
Max Schmitt dfd8f25e6c
docs(csharp): refer to net8.0 (new LTS) (#28664) 2023-12-15 10:32:51 -08:00
Max Schmitt 44c3ad5ceb
chore: make csharp library codegen more csharp like (#28663) 2023-12-15 10:24:26 -08:00
Yury Semikhatsky 9c845365f7
chore: revert TestProject.botName for this release (#28670)
This is essentially a revert of f88288d71d

Reference https://github.com/microsoft/playwright/issues/27284
2023-12-15 09:48:34 -08:00
Yury Semikhatsky d1e13557fb
test: fulfill/continue/fallback do not throw if page has been closed (#28659)
Reference https://github.com/microsoft/playwright/issues/23781
2023-12-15 09:45:13 -08:00
Yury Semikhatsky d89837c58e
chore: revert noWaitForFinish option, page.close does not wait for ro… (#28658)
…ute handlers

Reference https://github.com/microsoft/playwright/issues/23781
2023-12-15 09:00:12 -08:00
Playwright Service c36c2ecf7e
feat(firefox): roll to r1434 (#28660)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-15 08:36:52 -08:00
Max Schmitt 256b287649
docs: note that custom args are on your own risk (#28656)
https://github.com/microsoft/playwright/issues/28537
2023-12-14 14:37:31 -08:00
Yury Semikhatsky f8d0204d2f
chore: provide better message for unhandled internal server errors (#28653)
This changes error message from `Error: ` to `Error: Protocol error
(Fetch.continueRequest): Internal server error, session closed.` when
running `npm run ctest -- --repeat-each 100 -x --headed --timeout 3000
--workers 1 library/browsercontext-route.spec.ts:172` prior to
9d91b7caf5.
2023-12-14 13:49:11 -08:00
Yury Semikhatsky f28ceffa37
feat: page.unrouteAll and context.unrouteAll (#28635)
Reference https://github.com/microsoft/playwright/issues/23781
2023-12-14 13:48:17 -08:00
Playwright Service d9ab83c5f7
feat(webkit): roll to r1955 (#28652)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-14 11:10:54 -08:00
Dmitry Gozman 35e8c440c2
fix(dispatchers): separate gc bucket for main frame, increased limit (#28629)
- Keep main frames in a separate bucket, so that page methods that
redirect to the main frame continue to work.
- Increase default dispatchers limit to `10_000`.
- Increase dispatchers limit for `JSHandle`/`ElementHandle` to
`100_000`.

Fixes #28320, #28503.
2023-12-14 10:42:08 -08:00
Matt Jennings 3f3f332060
feat(trace): allow Trace Viewer to include credentials when fetching traces cross-origin (#28502)
Add the `'credentials': include` option on the trace fetch so the
browser can include cookies when fetching from a different origin,
assuming the origin returns the correct Access-Control-Allow-Origin and
Access-Control-Allow-Credentials headers.

Fixes #28501
2023-12-14 10:41:01 -08:00
Playwright Service 1101b46037
feat(chromium-tip-of-tree): roll to r1176 (#28650) 2023-12-14 08:59:16 -08:00
Playwright Service d4c66a6295
feat(chromium): roll to r1095 (#28649) 2023-12-14 08:58:59 -08:00
Pavel Feldman d242ff67ef
chore: follow up to the stylePath review (#28636) 2023-12-14 08:19:24 -08:00
Max Schmitt ff3b70b625
docs(docs): add docs about integrating Trace into NUnit/MSTest (#28639) 2023-12-13 21:03:29 -08:00
Max Schmitt e8c8852c00
chore: discourage methods on ElementHandle (#28637)
Mirrors the deprecations from page.* over to ElementHandle.
2023-12-13 20:06:01 -08:00
Yury Semikhatsky e31e5b1b7c
fix: use blob fileName as is without adding shard suffix (#28634)
Fixes https://github.com/microsoft/playwright/issues/27284
2023-12-13 18:47:13 -08:00
Max Schmitt 9b2585cd4e
fix: 'should collect trace with resources, but no js' test in service mode (#28628) 2023-12-13 11:42:29 -08:00
Yury Semikhatsky 9d91b7caf5
fix(route): silently catch errors when handling route on server (#28612)
This is a follow-up to 119afdf788 Since
continue/fulfill/abort now may throw on the server after page has been
closed, we need to catch the errors manually. On the client it's fixed
by the original change.

This fixes errors in the existing tests:
```
  1) [chromium] › library/browsercontext-route.spec.ts:172:3 › should support Set-Cookie header ────

    Error: 

       at ../packages/playwright-core/src/server/chromium/crConnection.ts:147

      145 |     const id = this._connection._rawSend(this._sessionId, method, params);
      146 |     return new Promise((resolve, reject) => {
    > 147 |       this._callbacks.set(id, { resolve, reject, error: new ProtocolError('error', method) });
          |                                                         ^
      148 |     });
      149 |   }
      150 |

        at /Users/yurys/playwright/packages/playwright-core/src/server/chromium/crConnection.ts:147:57
        at new Promise (<anonymous>)
        at CRSession.send (/Users/yurys/playwright/packages/playwright-core/src/server/chromium/crConnection.ts:146:12)
        at RouteImpl.continue (/Users/yurys/playwright/packages/playwright-core/src/server/chromium/crNetworkManager.ts:566:25)
        at FrameManager.requestStarted (/Users/yurys/playwright/packages/playwright-core/src/server/frames.ts:299:23)
        at CRNetworkManager._onRequest (/Users/yurys/playwright/packages/playwright-core/src/server/chromium/crNetworkManager.ts:314:57)
        at CRNetworkManager._onRequestPaused (/Users/yurys/playwright/packages/playwright-core/src/server/chromium/crNetworkManager.ts:202:12)
        at CRSession.emit (node:events:517:28)
        at /Users/yurys/playwright/packages/playwright-core/src/server/chromium/crConnection.ts:172:14
        at runNextTicks (node:internal/process/task_queues:60:5)
        at processImmediate (node:internal/timers:447:9)
```


![image](https://github.com/microsoft/playwright/assets/9798949/1c436dc2-f113-4ba6-952c-dca5a8c5fa62)

Reference https://github.com/microsoft/playwright/issues/28490
2023-12-13 09:34:20 -08:00
Pavel Feldman afe90d648e
fix: do not generate api call steps inside named expects (#28609)
Fixes: https://github.com/microsoft/playwright/issues/28528
2023-12-13 09:06:02 -08:00
Max Schmitt 297cfdfc5f
chore: use ReadonlyArray for input parameters (#28564) 2023-12-12 16:22:48 -08:00
Dmitry Gozman d2dc8eb1e3
fix(components): make sure defineConfig(c1, c2) works (#28608) 2023-12-12 14:01:01 -08:00
Yury Semikhatsky 66e056c306
fix: disable PaintHolding to be able to click in oopifs (#28604)
Fixes https://github.com/microsoft/playwright/issues/28023
2023-12-12 12:20:44 -08:00
Playwright Service af5a23e55f
feat(chromium-tip-of-tree): roll to r1175 (#28605)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-12 11:27:51 -08:00
Dmitry Gozman 10dda30c7f
fix(reporters): carefully handle empty lines (#28591)
In some circumstances, like "No tests found" error, reporters produce a
lot of unnecessary empty lines:

```
$ npx playwright test
Error: No tests found




$ <next command>
```

Also, `line` reporter removes the `npx playwright test` command entirely
when `onError` happens before `onBegin`.
2023-12-11 21:18:48 -08:00
Playwright Service d20a20b9b6
feat(webkit): roll to r1954 (#28592)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-11 18:42:34 -08:00
Pavel Feldman 76ace0fc09
chore: workaround webkit screenshot animation issue (#28582) 2023-12-11 18:20:24 -08:00
Dmitry Gozman ac3600ec96
feat: explain that argument is a regex (#28590)
- in docs;
- in the error message.

Terminal output:

```
$ npx playwright test foobar
Error: No tests found.
Make sure that arguments are regular expressions matching test files.
You may need to escape symbols like "$" or "*" and quote the arguments.
```

References #28551.
2023-12-11 17:35:39 -08:00
Dmitry Gozman ee9a7dad12
docs: emphasize that has is a relative locator (#28588)
References #28556.
2023-12-11 17:35:29 -08:00
Playwright Service 23415da3db
feat(webkit): roll to r1953 (#28574)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-11 09:30:11 -08:00
Andrey Lushnikov dd9028cfe2
test: fix browsercontext-basic offline test (#28558)
Since the last firefox roll, firefox now does internal redirect to the
error page when it's been forced into offline mode.
2023-12-08 15:26:24 -08:00
Playwright Service 7827838d22
feat(chromium): roll to r1094 (#28560)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-08 14:59:38 -08:00
Playwright Service a01ef0e9ce
feat(chromium-tip-of-tree): roll to r1174 (#28559)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-08 14:58:03 -08:00
Dmitry Gozman 532e4c5802
test: add a test for issue 28520 (#28552)
References #28520.
2023-12-08 10:55:26 -08:00
Andrey Lushnikov 8d3a931377
feat(firefox): roll FF Stable & Beta to 1433 (#28543)
Fixes #28495
2023-12-08 10:48:44 -08:00
Max Schmitt 736c0efd43
chore: use more explicit awaits when returning in client (#28443) 2023-12-07 20:13:35 -08:00
Yury Semikhatsky 119afdf788
fix: throw if fuliflled with unsupported status code (#28539)
If request gets cancelled by the page before we fulfill it, we receive
`loadingFailed` event. In that case we'll ignore interception error if
any, otherwise the error will be propagated to the caller.

Fixes https://github.com/microsoft/playwright/issues/28490
2023-12-07 16:57:39 -08:00
Dmitry Gozman d587435efa
feat(trace): show target point for raw mouse apis (#28459)
Fixes #27931.
2023-12-07 06:27:49 -08:00
Yury Semikhatsky 411abdb752
feat: add fileName option to blob reporter (#28525)
Reference https://github.com/microsoft/playwright/issues/27284
2023-12-06 20:44:06 -08:00
Max Schmitt 2d2c270388
chore: mark outofprocess connection not as remote (#28156) 2023-12-06 17:58:19 -08:00
Yury Semikhatsky 2adfbf24a9
chore: roll stable test runner (#28523) 2023-12-06 14:21:01 -08:00
Max Schmitt 8ab0660d1b
test: skip webgl tests on macOS-arm64 (#28522)
Fixes https://github.com/microsoft/playwright/issues/28216.

Drive-by: adjust signals expectation.

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
2023-12-06 13:52:49 -08:00
Yury Semikhatsky f88288d71d
feat: config.botName for describing environment in the reports (#28507)
Reference https://github.com/microsoft/playwright/issues/27284
2023-12-06 13:34:16 -08:00
Playwright Service 29a0ea35d0
feat(firefox-beta): roll to r1430 (#28509) 2023-12-05 22:30:37 -08:00
jaktestowac.pl 297f2af16b
docs: add info about merging fixtures to fixtures page (#28468) 2023-12-05 17:02:55 -08:00
dependabot[bot] 6838484ab5
chore(deps): bump vite from 4.4.10 to 4.4.12 (#28505) 2023-12-05 16:52:41 -08:00
Playwright Service 4b968412c9
feat(firefox): roll to r1430 (#28489)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-05 13:00:30 -08:00
Max Schmitt 524ed3e269
fix(electron): after v28.0 (#28499)
Fixes https://github.com/microsoft/playwright/issues/28048
Relates https://github.com/electron/electron/issues/40501
2023-12-05 12:46:28 -08:00
Playwright Service aadc9345fa
feat(webkit): roll to r1951 (#28498)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-05 12:28:24 -08:00
Yury Semikhatsky 8f056fbbce
chore: do not wait for route on close if route.continue() threw an error (#28487)
Reference https://github.com/microsoft/playwright/issues/23781
2023-12-05 10:26:17 -08:00
Yury Semikhatsky d437e26861
test: sync XHR interception (#28462)
The test now ensures that the request is actually continued.

Reference https://github.com/microsoft/playwright/issues/28461
2023-12-05 09:58:15 -08:00
Dmitry Gozman c7018951e5
fix(trace): title should not wrap over to the timeline (#28496) 2023-12-05 09:21:51 -08:00
Christopher Dunderdale c8bc79655f
docs: fix various syntax errors in .NET documentation (#28472) 2023-12-05 09:19:12 -08:00
Yury Semikhatsky 74e51d334e
feat: wait for active route handlers on page/context close (#28414)
Reference https://github.com/microsoft/playwright/issues/23781
2023-12-04 16:19:05 -08:00
Yury Semikhatsky ab68d7b9de
fix(webkit): delay request event until requestIntercepted is received (#28484)
Previously we were wrongly firing `route` event for the request which
are not in fact intercepted (e.g. requests from service worker).

Related https://github.com/microsoft/playwright/pull/28414
Reference https://github.com/microsoft/playwright/issues/23781
2023-12-04 13:02:00 -08:00
Yury Semikhatsky 9a95d9a60c
chore: remove unused request._redirectedFrom (#28485) 2023-12-04 12:38:07 -08:00
Dmitry Gozman b4de3133cc
docs: add exposeNetwork option documentation to connectOptions fixture (#28483) 2023-12-04 09:38:17 -08:00
Pavel Feldman facec88c99
fix: speed up caret hiding while screenshotting (#28460)
Fixes #28375
2023-12-03 21:06:40 -08:00
Playwright Service ea7fe340c1
feat(webkit): roll to r1950 (#28469) 2023-12-03 04:54:45 -08:00
Laurent Thiebault ac846c1632
docs: fix some typo (#28450) 2023-12-02 15:35:51 -08:00
Yury Semikhatsky 607a243380
chore: remove unused fields from wk network (#28455) 2023-12-01 14:51:41 -08:00
Yury Semikhatsky b166189247
fix: disable memory cache when intercepting in webkit (#28458) 2023-12-01 14:49:27 -08:00
Max Schmitt f44ef81af7
fix(snapshot): broken snapshot after use of setInputFiles (#28444) 2023-12-01 09:38:50 -08:00
Pavel Feldman d296d057d3
Update bug.md
Signed-off-by: Pavel Feldman <pavel.feldman@gmail.com>
2023-12-01 09:33:51 -08:00
Pavel Feldman 0a7a10d0f6
feat(vrt): allow providing screenshot style (#28229) 2023-11-30 17:42:45 -08:00
Max Schmitt da6a36062e
docs(docker): add note on how to create your own (#28434)
https://github.com/microsoft/playwright/issues/28383

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2023-11-30 14:04:42 -08:00
Max Schmitt 8efa8dbc1d
fix(ui-mode): make UI Mode projects scrollable (#28438)
Fixes https://github.com/microsoft/playwright/issues/28393



https://github.com/microsoft/playwright/assets/17984549/5791e422-f4e6-4202-b66c-b77bbb476c04
2023-11-30 13:26:03 -08:00
Playwright Service f21455017e
feat(chromium-tip-of-tree): roll to r1173 (#28422) 2023-11-30 05:41:58 -08:00
Playwright Service b06f9ab055
feat(chromium): roll to r1093 (#28421) 2023-11-30 05:41:23 -08:00
Pavel Feldman 92a0d24069
fix: restore timeout error name (#28408)
Fixes https://github.com/microsoft/playwright/issues/28404
2023-11-29 17:28:17 -08:00
Dmitry Gozman 35c2633013
docs: state that grid support is experimental (#28406) 2023-11-29 12:16:10 -08:00
Max Schmitt c137b23a6c
fix(trace-viewer): scroll over multiple pages (#28316)
Fixes https://github.com/microsoft/playwright/issues/28208
2023-11-29 11:27:19 -08:00
Playwright Service 1901a1a155
feat(chromium-tip-of-tree): roll to r1172 (#28374)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-28 19:45:12 -08:00
Yury Semikhatsky 15a8ba5158
fix(route): correctly remove expired handlers (#28385)
* Check if handler is still in the route list before calling it
* Check if the handler is still in the list before removing it after
`times` expiration
2023-11-28 17:52:16 -08:00
Yury Semikhatsky 2e762fd3d2
fix: parse report.jsonl without creating large string (#28366)
Reference https://github.com/microsoft/playwright/issues/28362
2023-11-28 08:47:44 -08:00
Pavel Feldman 022b36332d
chore: do not add to the internal action logs (#28365)
Fixes https://github.com/microsoft/playwright/issues/28319
2023-11-27 16:43:47 -08:00
Yury Semikhatsky cea28b2df9
docs: clarify beforeAll execution on exception (#28361)
Reference https://github.com/microsoft/playwright/issues/28285
2023-11-27 16:37:30 -08:00
Dmitry Gozman f61e445f2b
Revert "chore(test runner): remove fake skipped test results (#27762)" (#28360)
This reverts commit 210168e36d.

Fixes #28321.
2023-11-27 16:08:20 -08:00
Sander f58c1f37eb
fix(ct): empty slots or children (#28225)
closes: https://github.com/microsoft/playwright/issues/28212
2023-11-27 15:53:50 -08:00
Playwright Service 96ce1a8f88
feat(webkit): roll to r1949 (#28358)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-27 21:51:30 +01:00
Alexander Kachkaev 41728e7098
chore(install): Improve ECONNRESET handling in downloadFile (#28344)
See
https://github.com/microsoft/playwright/issues/28329#issuecomment-1826753106
for context
2023-11-27 21:44:24 +01:00
Yury Semikhatsky dc8ecc3ca4
fix(merge): normalize path separators when merging across platforms (#28227) 2023-11-27 12:43:56 -08:00
Yury Semikhatsky 854ae4eede
docs: remove duplicate entry for --config (#28357) 2023-11-27 11:38:52 -08:00
Playwright Service 888f4965bf
feat(webkit): roll to r1948 (#28323)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-24 09:33:53 +01:00
Yair Cohen 54c9c7ff9c
docs(test-sharding) fix typo (#28215) 2023-11-23 18:00:02 +01:00
Playwright Service 7dd121c784
feat(chromium): roll to r1092 (#28312)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-23 16:04:35 +01:00
Playwright Service 4faa0bcbb8
feat(chromium-tip-of-tree): roll to r1171 (#28313)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-23 16:04:04 +01:00
Debbie O'Brien ff2f93e36d
docs: Add video for Playwright 1.40 (#28309) 2023-11-23 14:01:05 +01:00
Debbie O'Brien 3d54d377ba
docs: Update codegen documentation and screenshots (#28302) 2023-11-23 13:05:03 +01:00
Yury Semikhatsky 82f970e5c1
chore: print more accurate MiB instead of Mb when downloading browsers (#28304)
Fixes https://github.com/microsoft/playwright/issues/28283
2023-11-23 11:09:38 +01:00
Playwright Service 24c52d5755
chore(driver): roll driver to recent Node.js LTS version (#28308)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-23 11:06:28 +01:00
Aislinn Hayes 1f953c2148
docs: add a link to screenshots api in the docs (#28288) 2023-11-23 11:06:06 +01:00
Max Schmitt 958e45316e
test(itest): add CDN TCP connection hangs test (#28301) 2023-11-22 22:39:59 +01:00
Yury Semikhatsky 2b4d51b1e8
docs: grep for project dependencies (#28299)
Fixes https://github.com/microsoft/playwright/issues/28296
2023-11-22 12:31:54 -08:00
Max Schmitt 3b5cfae455
chore: update TypeScript to 5.3 (#28300)
https://devblogs.microsoft.com/typescript/announcing-typescript-5-3/
2023-11-22 12:31:05 -08:00
Max Schmitt 2f1b0d6ff7
fix(install): hang on server side connection close (#28278) 2023-11-22 20:26:21 +01:00
Max Schmitt e405c1deea
docs(trace-viewer): fix <details><summary> syntax (#28276) 2023-11-22 19:40:23 +01:00
Playwright Service 91c5bac52b
feat(chromium-tip-of-tree): roll to r1170 (#28277)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-22 10:15:24 +01:00
Playwright Service 7caa212a1f
feat(webkit): roll to r1947 (#28270)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-21 21:47:26 +01:00
Max Schmitt d7d1c80cf7
docs(python): add ignoreCase to NotToHaveAttribute (#28267)
https://github.com/microsoft/playwright-python/issues/2078
2023-11-21 08:54:23 -08:00
Max Schmitt 8c880cad76
docs(release-notes): 1.40 nits (#28271) 2023-11-21 08:54:01 -08:00
Max Schmitt 5ef5e776f6
docs(browsers): add protocol to PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST (#28246) 2023-11-20 21:17:37 +01:00
itchyny 440f5e5d2b
fix: collect all errors in removeFolders (#28239)
This PR fixes
https://github.com/microsoft/playwright/pull/27790#pullrequestreview-1738958803.
Previously this function returns only the first error when some of the
promises fail. But the type annotation suggests that the original
intention was to collect all the errors. This commit fixes the error
values, and unexpected `TypeError: object is not iterable`.
2023-11-20 10:58:10 +01:00
Pavel Feldman 3f55587dd8
feat(vrt): bring back wait for font loading (#28226) 2023-11-17 17:16:32 -08:00
Yury Semikhatsky 34c8516d09
fix: correctly print number of interrupted tests in markdown (#28228) 2023-11-17 16:53:36 -08:00
Dmitry Gozman 62d4c3fe02
fix(defineConfig): do not add an empty project list to project-less configs (#28224)
Otherwise, merging two configs without `projects` property will create a
config with an empty project list, which is semantically different and
always leads to "No tests found".
2023-11-17 13:36:50 -08:00
Dmitry Gozman 11bf96fe98
test: unflake a few tests (#28205) 2023-11-16 16:31:42 -08:00
Dmitry Gozman 5488c03d7f
chore: make asLocator() always safe (#28207) 2023-11-16 16:31:34 -08:00
Dmitry Gozman 738155d85d
fix(dispatcher): only remove stale dispatcher after sending "create" (#28176)
Otherwise, we might dispose objects referenced in the initializer of the
new object being created, which triggers an exception on the client.
2023-11-16 15:07:43 -08:00
Dmitry Gozman 61c089fcbd
feat(recorder): UX updates for assertion tools (#28198)
- No locator editor.
- No value editor for `toHaveValue`.
- Visual feedback for `toBeVisible`/`toHaveValue`.
- UI tweaks.
2023-11-16 13:19:36 -08:00
Dmitry Gozman da6707f785
fix(chromium): properly detect session closed errors for oopifs (#28197)
Exposed by the flaky test `should not throw on exposeFunction when oopif
detaches`.
2023-11-16 11:44:10 -08:00
Max Schmitt ff706ec8bd
test: skip Intl.ListFormat test on ubuntu20.04 (#28185)
It was failing across the Ubuntu 20.04 bots:


![image](https://github.com/microsoft/playwright/assets/17984549/3b80f04d-cae8-4288-8fd3-b94d9bf1ce03)

This is most likely because on Ubuntu 20 libicu-dev has version 66.1.
And according to

https://wksearch.azurewebsites.net/#path=%2Fhome%2Fjoe%2Fwebkit%2FSource%2FJavaScriptCore%2Fruntime%2FIntlListFormat.h&line=32
the ListFormatter requires 67 which is the case in Ubuntu 22 (70).
2023-11-16 20:39:32 +01:00
Pavel Feldman 2bd7d67adc
chore: render testInfo errors in the Errors tab (#28179)
Fixes https://github.com/microsoft/playwright/issues/28056
2023-11-16 11:37:57 -08:00
Max Schmitt ee1e6cd72f
test: unskip service tests (#28170) 2023-11-16 20:14:55 +01:00
Dmitry Gozman 19cfd0cc5e
chore: roll stable-test-runner to 1.40.0-beta-1700102862000 (#28192) 2023-11-16 10:14:56 -08:00
Playwright Service 3cc1dacd5c
feat(chromium-tip-of-tree): roll to r1169 (#28184)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-16 13:48:03 +01:00
Dmitry Gozman 8150b27413
chore: mark version 1.41.0-next (#28180) 2023-11-15 20:05:36 -08:00
Yury Semikhatsky 85438edb97
test: Intl.ListFormat is working in playwright all browsers (#28178)
Fixes https://github.com/microsoft/playwright/issues/23978
2023-11-15 18:47:42 -08:00
Dmitry Gozman aec4399d8f
docs: release notes for v1.40 (#28175) 2023-11-15 18:38:43 -08:00
Pavel Feldman 25b9c4eb4a
chore: do not lose error name for js errors (#28177) 2023-11-15 18:27:32 -08:00
Siddharth Singha Roy 4575c9a182
chore(logs): Add new log level to capture client-server message's metadata information (#28141)
Goal - Capture minimal diagnostic information for each message being
sent between the playwright client and server.

---------

Co-authored-by: Siddharth Singha Roy <ssingharoy@microsoft.com>
2023-11-15 15:37:14 -08:00
Max Schmitt 80bab8afae
fix(electron/android): re-add Element.prototype.checkVisibility check (#28173)
Regressed in https://github.com/microsoft/playwright/pull/28148.
2023-11-15 15:10:13 -08:00
Max Schmitt 7ffcb42551
test: fix 'exposeFunction should not leak' in video mode (#28169)
This is like how we do it with the other channel tests. In video mode we
produce artifacts so we need to add them to our expectation.
2023-11-15 21:48:47 +01:00
Playwright Service 0867c3ce5b
feat(chromium): roll to r1091 (#28171)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-15 21:31:01 +01:00
Daniel 1c8ceb0a02
fix(html-reporter): Include specified host and port in the logged instructions to launch the HTML report (#28144)
Signed-off-by: Daniel <3473356+D4N14L@users.noreply.github.com>
2023-11-15 21:25:03 +01:00
Max Schmitt 611badcf74
fix: setInputFiles test in driver mode (#28166)
https://github.com/microsoft/playwright/pull/28156
2023-11-15 20:09:36 +01:00
Max Schmitt 30aa8cd904
docs(input): use web-first assertion for isChecked() (#28162)
Fixes https://github.com/microsoft/playwright/issues/28161
2023-11-15 10:51:30 -08:00
Max Schmitt 84d1260d1a
fix(recorder): inspect element when starting typing in locator editor (#28134) 2023-11-15 19:40:10 +01:00
Playwright Service bb241abaff
feat(webkit): roll to r1944 (#28148)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-11-15 19:34:53 +01:00
Max Schmitt b66839b039
fix(exposeFunction): exposeFunction should not leak client side BindingCalls (#28163)
This should already make it a bit better. There is more going on tho.

https://github.com/microsoft/playwright/issues/28146
2023-11-15 17:15:25 +01:00
Dmitry Gozman 557f3afd74
feat(recorder): assert value as a separate tool (#28145) 2023-11-14 15:17:42 -08:00
Hemang Rajyaguru f76c261b16
docs(ci.md): added google cloud CI docs for NodeJs using the playwright Docker Image (#27831)
Fixes #27769
2023-11-14 13:57:14 -08:00
Dmitry Gozman 0a052cb4d6
feat(recorder): assert visibility tool (#28142) 2023-11-14 12:55:34 -08:00
Dmitry Gozman 03031a6d2c
chore: update browser patches to d8f2e2984 (#28139) 2023-11-14 10:18:18 -08:00
Yury Semikhatsky ec2c7024b6
docs: fix ignoreCase description (#28121) 2023-11-14 10:18:04 -08:00
Max Schmitt 2ac1cde879
fix(recorder): resize of assert overlay textarea (#28137) 2023-11-14 18:07:27 +01:00
Pavel Feldman 60a37f37ef
chore: allow tabbing from codemirror locator editor (#28116) 2023-11-14 08:13:29 -08:00
Playwright Service 78293053b4
feat(chromium-tip-of-tree): roll to r1168 (#28128)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-14 14:18:05 +01:00
Dmitry Gozman bf4c315b09
fix(types): explicit ExpectMatcherState type, optional Expect arg (#28119)
Fixes #28035.
2023-11-13 18:37:50 -08:00
Dmitry Gozman 16aee8b5d0
fix(codegen): comment-out generated expects for library scripts (#28118)
- reverts "fix(codegen): generate expect import for library
(https://github.com/microsoft/playwright/pull/28107)";
- comments-out generated expects.
2023-11-13 16:56:27 -08:00
Dmitry Gozman 36b99c3437
chore(recorder): standby mode, expose setModeRequested in DebugController (#28117) 2023-11-13 16:39:14 -08:00
Dmitry Gozman 2c3955a28c
chore: remove fake error from expect calls (#28112)
We used to have a fake `error` property, so that trace viewer shows
failed expectes as such. Today, we have a step for each expect that
contains a proper error. Sending the fake error to the client confuses
language ports.
2023-11-13 16:39:05 -08:00
Dmitry Gozman ec4893d235
docs: update phrasing for 1.40 features (#28113) 2023-11-13 15:56:50 -08:00
Pavel Feldman b0f75a6a3a
chore: allow editing locator while matching text (#28115) 2023-11-13 15:42:46 -08:00
Pavel Feldman ae5cdf16f0
chore: allow asserting substring (#28111) 2023-11-13 14:38:04 -08:00
Max Schmitt 8b1c637c16
fix(codegen): generate expect import for library (#28107) 2023-11-13 21:54:30 +01:00
Yury Semikhatsky 35aeace476
docs(assertions): note on whitespace normalization (#28110)
Fixes https://github.com/microsoft/playwright-java/issues/1419
2023-11-13 12:28:50 -08:00
Pavel Feldman cd70d51aa8
chore: remove redundant check for highlight liveness (#28108)
Closes https://github.com/microsoft/playwright/issues/28002
2023-11-13 11:44:25 -08:00
Pavel Feldman db38f0d2df
chore: flag text mismatch when editing (#28106) 2023-11-13 11:44:06 -08:00
Elijah Mock 40b8df7217
docs(running-tests-*.md): Correct "running tests" typos (#28055)
I have corrected some typos and grammar issues that I found when reading
your documentation.

---------

Signed-off-by: Elijah Mock <28277163+ekcom@users.noreply.github.com>
2023-11-13 11:31:29 -08:00
Dmitry Gozman 120f0228c5
feat(selector generator): try improving text candidate with heuristics (#28074)
- Drop number-like prefixes and/or suffixes.
- Trim long texts to a word boundary around 15-25 character.
2023-11-13 11:30:16 -08:00
Jozef Hollý 39a555513b
Add HOME=/root to container samples in docs (#27832)
Reference: #6500
(https://github.com/microsoft/playwright/issues/6500#issuecomment-1664210041)

It seems that this is now required, so this PR applies that to the docs.

Signed-off-by: Jozef Hollý <1708197+j2ghz@users.noreply.github.com>
2023-11-13 10:49:39 -08:00
faulpeltz d9ccc80d0c
fix: ubuntu version detection for linux mint (#28085) 2023-11-13 18:02:10 +01:00
Mattias Wallander c6d154f9c4
feat: Add support for dispatching device motion events (#28067)
References #27887.
2023-11-13 08:58:46 -08:00
divdavem 0ade89c121
Partial documentation update, page.evaluate never returns a handle (#28080)
The documentation is misleading because `page.evaluate` never returns a
handle.
Some other parts of the documentation may need to be updated as well
(especially other languages than javascript, I think I saw this issue
also on other pages).

---------

Signed-off-by: divdavem <david-emmanuel.divernois@amadeus.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-11-13 08:54:58 -08:00
Playwright Service d94c3e04e8
feat(webkit): roll to r1943 (#28089)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-13 11:19:39 +01:00
Pavel Feldman 1b3349d091
chore: use codemirror in the on-hover locator editor (#28090) 2023-11-10 22:00:28 -08:00
Yury Semikhatsky fae5dd898a
chore: remove from client check if browser is co-located with server (#28071)
Reference https://github.com/microsoft/playwright/issues/27792
2023-11-10 15:24:31 -08:00
Max Schmitt 1aee48f2d0
test: COEP/COOP/CORP isolated iframe should work (#28083)
https://github.com/microsoft/playwright/issues/28082
2023-11-10 16:44:02 +01:00
Max Schmitt 2954e1263e
test: skip dispatchEvent(deviceOrientation) tests on Android (#28077)
Its [only available to
SecureContexts](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/modules/device_orientation/device_orientation_event.idl;l=34?q=device_orientation_event.idl&ss=chromium%2Fchromium%2Fsrc)
which our loopback in Android is not treated as a SecureContext.

We could either move it into the library tests, but then loose page test
coverage or just skip it. I decided for the latter.

Relates https://github.com/microsoft/playwright/pull/27960.
2023-11-10 16:28:45 +01:00
Playwright Service 1b22c43c35
feat(webkit): roll to r1942 (#28073) 2023-11-10 09:31:18 +01:00
Playwright Service 9b1b1e02ed
feat(webkit): roll to r1941 (#28069)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-09 22:45:04 +01:00
Max Schmitt 6d3913f459
chore: fix Ubuntu 22.04 WebKit on 20.04 host (#28068)
https://github.com/microsoft/playwright/issues/27313
2023-11-09 21:59:28 +01:00
Dmitry Gozman 62b6af3a7f
fix(android): respect recordHar option (#28046)
Fixes #28015.
2023-11-09 08:36:05 -08:00
Dmitry Gozman 7f10fe935a
test: add a test for concurrent hover (#28042)
References #27969.
2023-11-09 08:27:34 -08:00
Playwright Service 6c2abf016e
feat(chromium-tip-of-tree): roll to r1167 (#28053)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-09 15:16:43 +01:00
Playwright Service 93d202c480
feat(chromium): roll to r1090 (#28052)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-09 15:16:20 +01:00
Pavel Feldman b004c1a0a7
chore: rework assert dialog (#28043) 2023-11-08 20:09:58 -08:00
Max Schmitt 5f527fedb1
fix: JSHandle preview text for non-ascii attributes/children (#28038)
This surfaced in .NET that the string in the driver got incorrectly cut,
then transferred to .NET as an invalid UTF8 character
[`\ud835`](https://charbase.com/d835-unicode-invalid-character) which
.NET wasn't able to parse and threw an error.

Drive-by: Move similar function from
`packages/playwright-core/src/client/page.ts` into isomorphic
`stringUtils`.

https://github.com/microsoft/playwright-dotnet/issues/2748
2023-11-09 00:11:01 +01:00
Mattias Wallander 5a9fa69c6d
feat: Add support for dispatching device orientation events (#27960)
Fixes #27887
2023-11-08 09:50:25 -08:00
Dmitry Gozman c759e6a6f6
docs: move expect.extend docs from "test configuration" to "assertions" (#28039) 2023-11-08 09:29:36 -08:00
Dmitry Gozman 2afd857642
chore: prepare to use codemirror in recorder (#28025) 2023-11-07 20:49:03 -08:00
Pavel Feldman 061ded19b6
chore: place overlay inside the glass pane (#28026) 2023-11-07 19:36:12 -08:00
Playwright Service 1a8b61199f
feat(firefox-beta): roll to r1429 (#28024)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-08 04:22:34 +01:00
Max Schmitt e788c711c6
fix: electron video tests (#28004) 2023-11-07 23:42:17 +01:00
Pavel Feldman cb14de7a5b
chore: do not use ansi outsite of TTY (#27979)
Fixes https://github.com/microsoft/playwright/issues/27891
2023-11-07 14:09:40 -08:00
Playwright Service b9aaa38d3b
feat(firefox): roll to r1429 (#28020)
Fixes https://github.com/microsoft/playwright/issues/27682

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-07 22:20:55 +01:00
Pavel Feldman eeda25c47f
chore(recorder): glue the overlay to the top (#28021) 2023-11-07 12:58:41 -08:00
Playwright Service a9c4406439
feat(chromium-tip-of-tree): roll to r1166 (#28009)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-07 19:27:33 +01:00
Max Schmitt 07d5093583
test: test gardening (#28001) 2023-11-07 08:47:15 -08:00
Max Schmitt 19b0f5ccb3
docs(dotnet): page -> Page (#27988)
Fixes https://github.com/microsoft/playwright-dotnet/issues/2738
Fixes https://github.com/microsoft/playwright/pull/27946
2023-11-07 09:28:18 +01:00
Dmitry Gozman 810382c074
chore(recorder): more UX fixes for text assertions (#27995) 2023-11-06 16:40:33 -08:00
Pavel Feldman 87787dcc7d
chore: allow click close the page w/o errors (#27994) 2023-11-06 15:13:41 -08:00
Dmitry Gozman ffd2e02aa3
feat(recorder): various UX fixes (#27967) 2023-11-04 21:18:27 -07:00
Yury Semikhatsky 53a78a315e
fix(merge): preserve original "rootDir" by default (#27963)
Fixes https://github.com/microsoft/playwright/issues/27877
2023-11-03 13:49:47 -07:00
Yury Semikhatsky 738cbfc216
devops: call merge-reports with explicit config (#27965)
After https://github.com/microsoft/playwright/pull/27963 we have to
provide explicit merge config to disambiguate testDir.
2023-11-03 13:49:32 -07:00
Dmitry Gozman f401a482d2
fix(codegen): consume pointer events alongside mouse events (#27949)
Fixes #27926.
2023-11-03 13:41:51 -07:00
Max Schmitt 326c9785b4
fix(trace-viewer): keep searchParams on / redirect (#27956)
Relates to https://github.com/microsoft/playwright/issues/27952.

Might help future users too.
2023-11-03 17:38:55 +01:00
Pavel Feldman a55fe8fd1f
chore: reset preserveOutput in ui mode (#27944)
Fixes https://github.com/microsoft/playwright/issues/27892
2023-11-02 20:50:23 -07:00
Pavel Feldman e84dd4d708
fix(ui): do not fail on clashing groups (#27943)
Fixes https://github.com/microsoft/playwright/issues/27929
2023-11-02 20:50:08 -07:00
Max Schmitt f9c4955fe8
fix(msedge): install with multiple artifacts (#27939)
The API response looked like this:

<img width="1584" alt="image"
src="https://github.com/microsoft/playwright/assets/17984549/89d32ad4-8770-48c3-b562-231ae7b9ef3b">

-> multiple entries for `Windows` and `X64`, but some without artifacts.
-> We filter now for `artifacts.length > 0` which seems like a healthy
change.

Fixes https://github.com/microsoft/playwright/issues/22841
2023-11-02 15:30:40 -07:00
Dmitry Gozman a7fd515626
chore(recorder): use designMode for text selection tool (#27936)
This allows us to barely support shadow dom, compared to no support at
all.
2023-11-02 13:47:53 -07:00
Ben Scott c59483c5fb
fix(tsconfig): handle tsconfig paths without a baseUrl (#27846) 2023-11-02 11:27:49 -07:00
Playwright Service bc1b59042c
feat(chromium-tip-of-tree): roll to r1165 (#27928)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-02 18:00:14 +01:00
Playwright Service 059c865689
feat(chromium): roll to r1089 (#27925)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-02 15:16:43 +01:00
Playwright Service 50342a0c9d
feat(firefox-beta): roll to r1428 (#27923)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-02 10:47:48 +01:00
Playwright Service 0fda074183
feat(firefox): roll to r1428 (#27912)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-02 10:47:35 +01:00
Dmitry Gozman 07da88dcf1
feat(recorder): generate toHaveValue/toBeEmpty/toBeChecked (#27913) 2023-11-01 21:17:25 -07:00
Pavel Feldman 0f2de59b7c
chore: remove graceful browser.close cleanup (#27916) 2023-11-01 20:17:10 -07:00
Pavel Feldman 817a130cdc
chore: dispose-based callback termination (#27911) 2023-11-01 16:36:39 -07:00
Dmitry Gozman 3dedbced13
feat(recorder): in-page overlay (#27904) 2023-11-01 15:56:49 -07:00
Max Schmitt d983941447
test: locale/timeZone should affect Intl.DateTimeFormat() (#27898)
https://github.com/microsoft/playwright/issues/27802
2023-11-01 17:29:57 +01:00
Max Schmitt f518684d89
chore: fix parameterized tests on the flakiness dashboard (#27900)
Abstract issue: I have parameterised tests via the titlePath (describe)
and they are not shown on the flakiness dashboard. Before #24486 only
title() was shown, after #24486 titlePath() will be displayed, but we
still did have the testId based on the test.title() and not
test.titlePath(). This ends up that they will still be treated as a
single spec.

After this change they are not treated as a single spec anymore and
treated as different ones:

<img width="891" alt="image"
src="https://github.com/microsoft/playwright/assets/17984549/f24284cd-5d94-4f7e-a45d-8c8e5eb537ef">

Note: This is tested.

Follow-up on https://github.com/microsoft/playwright/pull/24486.
2023-11-01 17:28:30 +01:00
Yury Semikhatsky 36c4c24f8a
fix: only convert input files for browser collocated with server (#27873)
Reference #27452
Fixes #27792
2023-11-01 08:40:12 -07:00
Playwright Service 38115d121b
feat(chromium): roll to r1088 (#27897)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-11-01 13:52:00 +01:00
Playwright Service 0c4de1f4ce
feat(webkit): roll to r1932 (#27884)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-31 19:39:23 +01:00
Max Schmitt 38a0921845
fix: Google Chrome Beta/Stable install on macOS (#27880) 2023-10-31 16:49:13 +01:00
Max Schmitt 08b8181632
chore: make Trace Viewer start page AAA compliant (#27879) 2023-10-31 16:35:13 +01:00
Playwright Service d38eab0df1
feat(chromium-tip-of-tree): roll to r1164 (#27881)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-31 14:11:12 +01:00
Max Schmitt cff9ac04e4
fix: cross-origin Page.goto referer (#27859)
Fixes https://github.com/microsoft/playwright/issues/27765
2023-10-31 11:10:15 +01:00
Max Schmitt 08685a654a
test: using ServiceWorker on localhost over HTTPS (#27863) 2023-10-31 10:28:57 +01:00
Playwright Service c3b533d834
feat(firefox): roll to r1427 (#27871)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-30 23:23:39 +01:00
Yury Semikhatsky c7b6a76437
fix(fetch): throw when methods are called on disposed context (#27868)
Fixes #27822
2023-10-30 15:23:12 -07:00
Renan Greca 7bab19d807
docs: syntax corrections in expect.extend documentation (#27772)
Signed-off-by: Yury Semikhatsky <yurys@chromium.org>
Co-authored-by: Yury Semikhatsky <yurys@chromium.org>
Co-authored-by: Pavel Feldman <pavel.feldman@gmail.com>
2023-10-30 22:03:24 +01:00
Playwright Service afa5cdc53f
feat(firefox-beta): roll to r1427 (#27866)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-30 22:02:27 +01:00
Max Schmitt 59b8cf008e
fix(codegen): don't generate page.frame() calls anymore (#27820)
Fixes https://github.com/microsoft/playwright/issues/27650
2023-10-30 21:56:45 +01:00
Dmitry Gozman f620828818
chore: allow PW_VERSION_OVERRIDE in tests (#27861) 2023-10-30 11:04:35 -07:00
Luigi Colombi 3127765bde
chore: add curly space to fix eslint run (#27858) 2023-10-30 12:05:48 +01:00
Sander 1a34b6d211
fix(ct): solid render array as child (#27849)
closes:
https://github.com/microsoft/playwright/issues/27587#issuecomment-1762133376

related: https://github.com/microsoft/playwright/pull/27692

CC @dgozman

Co-authored-by: sand4rt <mbr@mbrs-MacBook-Air.local>
2023-10-28 11:22:10 -07:00
Sander 96787d2626
fix(ct): vue render array as slot (#27851)
partial fix for:
https://github.com/microsoft/playwright/issues/27587#issuecomment-1762133376

related: https://github.com/microsoft/playwright/pull/27692

CC @dgozman

Co-authored-by: sand4rt <mbr@mbrs-MacBook-Air.local>
2023-10-28 11:21:37 -07:00
Sander 3313381040
fix(ct): react render array as child (#27692)
Signed-off-by: Sander <info@mesander.com>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
Co-authored-by: mbr <mbr@mbrs-MacBook-Air.local>
2023-10-28 10:36:48 -07:00
Pavel Feldman 462e70ab82
chore: render sidebar tab selector as drop down (#27844) 2023-10-27 15:31:31 -07:00
Pavel Feldman 4d82d6801f
chore: render full pathname in network panel (#27843)
Fixes #27618
2023-10-27 14:14:24 -07:00
Dmitry Gozman 100d3b2601
fix(css parser): support nested builtin functions (#27841)
Things like `:nth-child(1 of :has(span:nth-last-child(3)))`.

Fixes #27743.
2023-10-27 13:16:12 -07:00
Dmitry Gozman 88f30d1ce2
feat: support firefoxUserPrefs in launchPersistentContext (#27840)
Fixes #27773.
2023-10-27 09:24:41 -07:00
Debbie O'Brien d395a38a63
docs: add v1.39 release video (#27838) 2023-10-27 14:36:32 +02:00
Playwright Service 49b662c22c
feat(chromium): roll to r1087 (#27834)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-27 14:19:42 +02:00
Dmitry Gozman 4d8dd55b90
chore: refactor Recorder, introduce RecorderTool (#27826) 2023-10-26 19:42:03 -07:00
Dmitry Gozman 24deac458b
feat(expect): generate toHaveText (#27824) 2023-10-26 18:49:14 -07:00
Sander 54ebee79f7
chore(ct): resolve internal type errors (#26779) 2023-10-26 14:57:49 -07:00
Pavel Feldman ff206bd9c1
chore: render time in the trace viewer log (#27825) 2023-10-26 14:45:15 -07:00
Jorge Senín 89e0978da4
Update class-page.md (#27750) 2023-10-26 12:57:37 -07:00
Pavel Feldman 778047facc
chore: stream trace viewer logs (#27807) 2023-10-26 11:15:43 -07:00
Max Schmitt 5f366088be
chore: get rid of rimraf package (#27790)
This seems more reliable nowadays as rimraf.

https://github.com/microsoft/playwright/issues/27712

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
2023-10-26 19:41:00 +02:00
Greg Bergé ae1e1885dc
docs: add Argos Reporter to doc (#27789) 2023-10-26 10:05:02 -07:00
Max Schmitt 841bb92049
chore: update Docker Node.js version to new LTS (20) (#27813)
Node.js 20 was promoted to LTS on 2023-10-24.

Fixes https://github.com/microsoft/playwright/issues/27812
2023-10-26 09:45:54 -07:00
Yury Semikhatsky 86c78c1e0f
fix(html): do not update total time when filtering tests (#27808)
![image](https://github.com/microsoft/playwright/assets/9798949/491ef34d-6674-4242-a6f4-dcef048a18f5)


Fixes #27758
2023-10-26 08:20:14 -07:00
Playwright Service 37ab6832ab
feat(chromium-tip-of-tree): roll to r1163 (#27817)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-26 15:49:25 +02:00
Playwright Service 00d3b4bdc3
chore(driver): roll driver to recent Node.js LTS version (#27814)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-26 10:31:29 +02:00
Yury Semikhatsky 0ade5aa9ad
fix: ignoreCase in toHaveAttribute (#27809)
Fixes #27795
2023-10-25 19:22:13 -07:00
Pavel Feldman 47733b04fb
chore: do not select after hooks automatically (#27805) 2023-10-25 17:05:06 -07:00
Max Schmitt 54235120a0
fix: npx playwright install on Ubuntu 18.04 (#27791) 2023-10-25 23:13:58 +02:00
Debbie O'Brien 09ff9a5908
docs: update screenshots (#27760) 2023-10-25 20:16:48 +02:00
Max Schmitt 5f0d91a42c
test: add test for multipart keeping order (#27787)
Test for https://github.com/microsoft/playwright/issues/27720
2023-10-25 19:33:00 +02:00
Playwright Service 1afeff5be0
feat(firefox-beta): roll to r1426 (#27793)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-25 12:32:35 +02:00
Playwright Service 60f2de77da
feat(firefox): roll to r1426 (#27794)
Fixes https://github.com/microsoft/playwright/issues/27741

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-25 12:32:19 +02:00
Pavel Feldman 0bb9f7cdf7
feat(ui): show test status in trace view (#27785) 2023-10-24 16:41:40 -07:00
Pavel Feldman 7de0ccd36e
chore: support await using for close() and dispose() (#27766)
This change assumes that the user has Node 18 with Symbol.dispose
available.

Fixes https://github.com/microsoft/playwright/issues/27141
2023-10-24 12:25:53 -07:00
Dmitry Gozman c8134bca5d
feat(html): show top-level errors (#27763)
Drive-by:
- extract `TestErrorView`;
- replace `data-test-id` with `data-testid` and `getByTestId()`.

---

<img width="1001" alt="top-level errors in html report"
src="https://github.com/microsoft/playwright/assets/9881434/2d6c0c52-8df1-46a9-b3fd-06ddc6f16796">
2023-10-24 09:35:07 -07:00
Dmitry Gozman 210168e36d
chore(test runner): remove fake skipped test results (#27762)
Fixes #27455.
2023-10-24 09:31:30 -07:00
Playwright Service c33b41df77
feat(chromium-tip-of-tree): roll to r1162 (#27774)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-24 15:43:13 +02:00
Max Schmitt fe7847b126
fix: require JSX inside PWT with pnpm (#27744)
Fixes https://github.com/microsoft/playwright/issues/27285
2023-10-23 22:48:12 +02:00
Yury Semikhatsky 5e51a734e7
fix: interrupt request.allHeaders()/response() on page.close() (#27695)
Reference https://github.com/microsoft/playwright/issues/27227
2023-10-23 12:45:35 -07:00
Pavel Feldman 5752a28f87
chore: make tests strict (1) (#27731) 2023-10-23 09:31:30 -07:00
Max Schmitt f48861ddee
fix(inspector): highlight xpath/css locators without engine prefix (#27742)
Motivation: As of today when a user inspects a Locator which is a xpath,
it won't work if the user has not prefixed it with `xpath=` because we
internally compare the given with the generated locator.

Works: `locator('xpath=//div[contains(@class, "foo")]')`
Does not work: `locator('//div[contains(@class, "foo")]')`

Relates
https://github.com/microsoft/playwright/issues/27707#issue-1952360264
Fixes
https://github.com/microsoft/playwright-dotnet/issues/2718#issuecomment-1771073816

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
2023-10-23 18:23:28 +02:00
Playwright Service 9af667be26
feat(webkit): roll to r1928 (#27755)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-23 18:22:49 +02:00
Max Schmitt 766bc5cd77
docs: .NET ParallelScope (#27745)
Fixes https://github.com/microsoft/playwright-dotnet/issues/2732
2023-10-23 18:22:17 +02:00
Max Schmitt 5fe77f9a6f
chore: better error for trace viewer over http:// (#27722)
We saw in the past a lot of users reporting issues like this. Maybe a
more readable error helps.

Before they just saw:

```
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'register')
  at index.38834ec3.js:1:3775
  at index.38834ec3.js:1:4006
```

Fixes https://github.com/microsoft/playwright/issues/27655
2023-10-23 18:21:19 +02:00
Dmitry Gozman b8678ef902
chore(test runner): simplify some dispatcher logic (#27732)
- remove `onlyStartedTests` in favor of explicit branch with comments;
- produce one "test not found" error per test instead of a single large
error;
- extract `_failTestWithErrors` from `_massSkipTestsFromRemaining`.
2023-10-23 09:15:13 -07:00
Dmitry Gozman 85112be25c
fix(test runner): properly handle uncaught errors in test.fail() (#27734)
Before this fix, unhandled error during test.fail():
- marks this test as "interrupted";
- fails next test in the file with "fatal error".

After this fix:
- marks this test as "failed as expected";
- restarts worker for the next test.
2023-10-23 09:14:31 -07:00
Michaël Vanderheyden 0a0878d567
feat: add pixel 7 device with android 14 (#27700) 2023-10-23 12:59:42 +02:00
Max Schmitt 6d7d37061d
fix(recorder): Locator picker had wrong initial language in language bindings (#27706)
**Description**

When a language port was using Inspector with the "Locator Picker"
feature, it only recognised JavaScript as a language by default. As a
workaround the user was able to click record, interact with the page and
then the language would be correctly used -> csharp e.g. would work in
the "Locator Picker".

**Why?**

Our language bindings are setting `PW_LANG_NAME=<sdkLanguage>` env var
-> good. Our recorder harness also uses this along its internal state
here:


b9b289b641/packages/playwright-core/src/server/recorder.ts (L369)

and it gets used here (no parameter means: we use the first language
aka. primary language):


b9b289b641/packages/playwright-core/src/server/recorder.ts (L95)

The only issue is that the Inspector frontend in the beginning does not
know which language it should use and pass over to the server side, it
then falls back to JavaScript.

**Proposed fix**

Instead of passing it over from the frontend to the server side, we just
always use it from the server side, aka. "currentLanguage". When the
user switches languages in the frontend, "currentLanguage" already gets
updated properly via the "fileChanged" event.

https://github.com/microsoft/playwright-dotnet/issues/2718

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
2023-10-22 13:02:14 +02:00
Dmitry Gozman d1d5fc67dc
fix(recorder): show action point in main frame only (#27719) 2023-10-20 20:58:09 -07:00
Dmitry Gozman d67515f6c1
chore(test runner): do not produce some of the fake skipped test results (#27730) 2023-10-20 17:01:46 -07:00
Sander 27daa5e7b1
fix(ct): solid render array as child (#27715) 2023-10-20 11:44:30 -07:00
Dmitry Gozman 6fe31ab52c
feat: support alternative quotes in js parseLocator() (#27718)
Fixes #27707.
2023-10-20 08:42:29 -07:00
Max Schmitt 9fcfe68fcb
docs: document PWDEBUG=console disables timeout (#27725)
Fixes https://github.com/microsoft/playwright/issues/27691

Signed-off-by: Max Schmitt <max@schmitt.mx>
2023-10-20 11:10:29 +02:00
Debbie O'Brien a9bfb22852
docs: improve python ci guide (#27724) 2023-10-20 11:02:47 +02:00
Pavel Feldman f46c889449
chore: fix total progress reporting w/ deps (#27716) 2023-10-19 20:07:47 -07:00
Pavel Feldman d003945a7b
chore(ui): do not watch output folders (#27694) 2023-10-19 15:53:57 -07:00
Dmitry Gozman 6e62a11643
fix(trace): EPERM on windows (#27693)
When merging trace files, we sometimes left open read streams from the
zip, which prevents it from being removed.

Fixes #27286.
2023-10-19 11:14:17 -07:00
Max Schmitt b1325c9208
fix(keyboard): event order for Escape key (#27711)
This test was failing in Chromium before this change.

Caused by
40d5e3a3c9/packages/playwright-core/src/server/chromium/crInput.ts (L54-L55)

which messes up the order of the protocol calls.

Fixes https://github.com/microsoft/playwright/issues/27709.
2023-10-19 18:18:29 +02:00
Max Schmitt 02fe462dda
docs: remove why-playwright.md (#27699)
This is not referenced anywhere and not getting updated.
2023-10-19 17:32:59 +02:00
Playwright Service 6ba2eaf24a
feat(chromium-tip-of-tree): roll to r1161 (#27705)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-19 16:44:36 +02:00
Playwright Service 920f8766f0
feat(chromium): roll to r1086 (#27703)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-19 16:15:22 +02:00
Ahmed Mubbashir Khan 7289cb7841
docs(ci): For Jenkins updated command from ci to npm ci (#27702) 2023-10-19 14:28:49 +02:00
Yury Semikhatsky bd58c0d5d2
fix: preserve lastModified timestamp in setInputFiles (#27671)
Fixes #27452
2023-10-18 14:05:09 -07:00
Oleksandr Pelykh 7cd390b708
docs (test-cli-js.md): fix typo for list marker (#27636) 2023-10-18 13:56:22 -07:00
Sindre Bøyum ee0811ad1a
docs: clarify devices import (#27648) 2023-10-18 13:55:20 -07:00
Sander 562938b271
fix(ct): baseURL playwright config (#27689)
closes: https://github.com/microsoft/playwright/issues/27627
2023-10-18 13:53:58 -07:00
Dmitry Gozman fd82b2b3fa
feat(json report): add expected/unexpected/skipped/flaky stats (#27685)
Fixes #27498.
2023-10-18 12:55:31 -07:00
Pavel Feldman 3aa147914c
chore: split error to client and server sides (#27672) 2023-10-17 21:34:02 -07:00
Playwright Service 8eab375c1d
feat(chromium-tip-of-tree): roll to r1160 (#27657) 2023-10-18 02:28:31 +02:00
Pavel Feldman 091f6883f5
chore: remove the usages of raw target closed message constant (#27669) 2023-10-17 15:35:41 -07:00
Playwright Service 5262e5ab35
feat(chromium-tip-of-tree): roll to r1159 (#27605) 2023-10-17 22:41:23 +02:00
Max Schmitt a005064cc8
docs: make test-timeouts AAA compliant (#27667) 2023-10-17 22:39:33 +02:00
Pavel Feldman d4296dbff4
chore: break dowload.path() to throw (#27662) 2023-10-17 12:56:56 -07:00
Josh Lee 08bc4fd801
fix(registry): don't download x64 binaries on other platforms (#27462)
On Linux platforms, specifically check that process.arch is x64, rather
than treating it as 'not arm64'.

Treat Raspbian's /etc/os-release file as Debian.

Document the supported platforms somewhat.

Fixes #27453
2023-10-17 12:54:20 -07:00
Max Schmitt 0a49c3dbb9
chore: bump @babel dependencies (#27632)
This fixes:

```
Run npm audit --omit dev
# npm audit report

@babel/traverse  <7.23.2
Severity: critical
Babel vulnerable to arbitrary code execution when compiling specifically crafted malicious code - https://github.com/advisories/GHSA-[6](https://github.com/microsoft/playwright/actions/runs/6535308689/job/17744452034?pr=27631#step:10:7)[7](https://github.com/microsoft/playwright/actions/runs/6535308689/job/17744452034?pr=27631#step:10:8)hx-6x53-jw[9](https://github.com/microsoft/playwright/actions/runs/6535308689/job/17744452034?pr=27631#step:10:10)2
fix available via `npm audit fix`
node_modules/@babel/traverse

1 critical severity vulnerability

To address all issues, run:
  npm audit fix
Error: Process completed with exit code 1.
```
2023-10-17 20:52:41 +02:00
Playwright Service 86ce598dfa
chore(driver): roll driver to recent Node.js LTS version (#27652)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-17 14:58:35 +02:00
Pavel Feldman a54dbfdadf
chore: plumb the target close reason when test fails (#27640) 2023-10-16 20:32:13 -07:00
Yury Semikhatsky 4e845e7b1d
fix(fetch): JSON.stringify on client (#27644)
Fixes https://github.com/microsoft/playwright/issues/27602
2023-10-16 16:33:49 -07:00
Dmitry Gozman e8b4c03e54
fix(chromium): do not cancel downloads when intercepting (#27638)
Fixes #27575.
2023-10-16 15:12:52 -07:00
Max Schmitt fd2fbe9d2f
fix: merge{Tests,Expects} via ESM imports (#27630)
Backport to 1.39.X?

Fixes https://github.com/microsoft/playwright/issues/27617
2023-10-17 00:09:44 +02:00
Playwright Service f8277ca99c
feat(webkit): roll to r1927 (#27639)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-16 23:27:15 +02:00
Pavel Feldman b0c73b72f1
chore: push protocol error conversion to dispatcher (#27608) 2023-10-16 13:13:00 -07:00
Dmitry Gozman d83d9ce268
chore: make sure that we print warning for unsupported OS (#27610)
Also, fix some missing paths in download lists.
2023-10-16 10:49:57 -07:00
Yury Semikhatsky b2dc0d2fbd
test: unskip "should keep selection in multiple pages" (#27611)
https://github.com/microsoft/playwright/pull/27609 fixed the
functionality in WebKit.

Fixes https://github.com/microsoft/playwright/issues/27475
2023-10-16 09:47:05 -07:00
Max Schmitt 4b771f9d4b
chore: remove /ms-playwright-agent in focal Docker image (#27631)
This was missing in focal but was there in Jammy.


6b31b30df9/utils/docker/Dockerfile.jammy (L44)
2023-10-16 18:17:21 +02:00
Max Schmitt 6b31b30df9
chore: allow a script to generate release-notes for GitHub (#27596)
`node utils/render_release_notes.mjs js 1.39`
2023-10-16 11:23:22 +02:00
Playwright Service b3bcf1c75a
feat(chromium): roll to r1085 (#27604)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-14 16:17:50 +02:00
Dmitry Gozman fc32ca676b
feat: check client version on the server (#27585) 2023-10-13 21:02:30 -07:00
Dmitry Gozman f0167091e6
fix(test runner): rework compilation cache logic (#27607)
- Do not write from workers.
- Remove marker files.
- Always try/catch reading from fs.

This mostly reverts https://github.com/microsoft/playwright/pull/26830
and https://github.com/microsoft/playwright/pull/26353.

Fixes #27592.
2023-10-13 21:01:40 -07:00
Playwright Service 3e4a1e89a1
feat(webkit): roll to r1926 (#27609) 2023-10-13 17:09:38 -07:00
Yury Semikhatsky 80c408023e
test: unflake "should fail without credentials" (#27606)
Speculative fix. The test marked as failed => we reuse the browser
without closing the context.
2023-10-13 14:15:12 -07:00
Yury Semikhatsky d6adfee7c0
test: update expectation on windows for "should reject if launched br… (#27603)
…owser fails immediately"

The test has been failing on Windows since
f212fd1a83
2023-10-13 14:02:55 -07:00
Playwright Service 6400e5c564
feat(webkit): roll to r1925 (#27588) 2023-10-13 09:23:47 -07:00
Yury Semikhatsky bc59565d77
fix(webkit): support clipboard.readText (#27581)
Reference #27475
2023-10-13 09:10:35 -07:00
Pavel Feldman f8a30fb726 chore: follow up to target close message 2023-10-12 14:58:19 -07:00
Yury Semikhatsky 9d76c09ddb
test: preserve selection when switching pages (#27578)
Reference https://github.com/microsoft/playwright/issues/27475
2023-10-12 12:52:06 -07:00
Playwright Service 7b4a9d967a
feat(webkit): roll to r1923 (#27571) 2023-10-12 11:18:48 -07:00
Pavel Feldman f212fd1a83
chore: unify target closed errors (#27540) 2023-10-12 11:05:34 -07:00
Playwright Service 8595a6c25f
chore(driver): roll driver to recent Node.js LTS version (#27565)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-12 12:16:22 +02:00
AlexKomanov 117f3f1298
docs: Fixing a release version of a method toHaveAttribute (#27559)
There is a mistake in the release version of the `toHaveAttribute`
method. It was released in the 1.39 version and not in the 1.40 like was
mentioned in the documentation.
2023-10-12 08:30:40 +02:00
Dmitry Gozman 823b104a9e
feat(html): "copy to clipboard" for text attachments (#27556)
Mostly copied from trace viewer. Not reused due to different
colors/icons.

Screenshot:

<img width="999" alt="copy-to-clipboard"
src="https://github.com/microsoft/playwright/assets/9881434/2bb38442-3b8d-42ba-a3ed-4b9052b22854">
2023-10-11 17:56:05 -07:00
Pavel Feldman 393bd36e0a
chore: composed->merge (#27555) 2023-10-11 13:56:27 -07:00
Dmitry Gozman 3a43aaa700
chore: roll stable-test-runner to 1.39.0-beta-1697048429000 (#27553) 2023-10-11 13:42:04 -07:00
Dmitry Gozman db4047b131
docs: update release notes for 1.39 (#27549) 2023-10-11 10:58:26 -07:00
Dmitry Gozman a5be8ce86a
test: unflake some more tests (#27546) 2023-10-11 10:34:11 -07:00
Dmitry Gozman ebd0ff9422
chore: update browser patches to 7f74cfc1d (#27539) 2023-10-10 16:10:40 -07:00
Dmitry Gozman 7aee202aef
chore: mark 1.40.0-next (#27538) 2023-10-10 16:10:28 -07:00
Dmitry Gozman 0d168dc8d0
chore: release notes for 1.39 (#27537) 2023-10-10 15:17:43 -07:00
Dmitry Gozman 4f9b285c07
chore: update WebKit version to 17.4 (#27536) 2023-10-10 14:49:49 -07:00
Dmitry Gozman d11380e911
docs: improve test.step documentation (#27535) 2023-10-10 14:48:44 -07:00
Playwright Service 9edb811434
feat(chromium-tip-of-tree): roll to r1158 (#27533)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-10 21:32:47 +02:00
Dmitry Gozman d05c865389
test: unflake a few tests (#27519) 2023-10-10 09:14:58 -07:00
Debbie O'Brien 2776d8446b
docs: how to update playwright in python (#27527) 2023-10-10 16:15:40 +02:00
Dmitry Gozman 2407041090
fix(chromium): avoid premature continue of redirects (#27520)
This has recently regressed in #27429.

We now continue requests that are paused for the second time. However,
redirects share `networkId` with the original request, so we may confuse
paused redirect with a second pause for the original request.

This is covered by the flaky test `page-route.spec.ts:392 > should work
with redirects for subresources`
References #27294.
2023-10-09 20:08:35 -07:00
Pavel Feldman fd6bf8aa2c
chrome: improve error messages on vscode side (#27521) 2023-10-09 19:55:24 -07:00
Pavel Feldman 97c0894bc0
docs: better expect.extend docs (#27515) 2023-10-09 17:16:42 -07:00
Pavel Feldman 11a4b3f7f5
chore: remove parsed stack trace (#27496) 2023-10-09 17:04:16 -07:00
Dmitry Gozman 40ba5ebc1d
test: unflake a launcher test in driver mode (#27518) 2023-10-09 14:52:05 -07:00
Dmitry Gozman e8523abea5
test: mark some --headless=new tests as fixme (#27516) 2023-10-09 14:07:22 -07:00
Dmitry Gozman 39f92e82f6
test: limit workers to one for Firefox on Windows (#27514) 2023-10-09 12:34:59 -07:00
Playwright Service 036a018351
feat(webkit): roll to r1921 (#27512) 2023-10-09 10:56:04 -07:00
Dmitry Gozman 1cb406f3a6
docs: note that pytest CLI args only apply to default fixtures (#27511)
Fixes #27413.
2023-10-09 09:32:40 -07:00
Michael Bodnarchuk e70b10ac2e
docs(test-reporters): Added Testomat.io reporter to list of reporters (#27449) 2023-10-07 11:17:44 +00:00
Playwright Service 9062dd0139
feat(chromium): roll to r1084 (#27497) 2023-10-07 10:48:51 +00:00
Pavel Feldman b807c974c3
chore: allow passing path to property in toHaveJSProperty (#27495)
Fixes https://github.com/microsoft/playwright/issues/27487
2023-10-06 15:47:07 -07:00
Playwright Service 7381099ad1
feat(webkit): roll to r1920 (#27493) 2023-10-06 22:11:26 +00:00
Dmitry Gozman 7447761fb7
fix(build): ignore empty bundle directories (#27491)
These are often left after some file moves.
2023-10-06 12:29:01 -07:00
Dmitry Gozman ae5610f5c1
chore: include full messages into pw:channel logs (#27488)
Currently, we pass an object to the logger and it seems to use default
Node's `util.inspect()` which does not print properties at 3+ depth.
2023-10-06 11:04:33 -07:00
Debbie O'Brien 45fe42e896
docs: add latest release video (#27479) 2023-10-06 15:32:57 +02:00
Debbie O'Brien 3773f004db
docs: add intros for all pages (#27480) 2023-10-06 15:08:51 +02:00
Playwright Service cf29d1baa9
feat(webkit): roll to r1919 (#27472) 2023-10-06 07:15:56 +00:00
Max Schmitt f856e3e4bc
chore: run 'npm pkg fix' (#27470)
As per

```
npm WARN publish npm auto-corrected some errors in your package.json when publishing.  Please run "npm pkg fix" to address these errors.
npm WARN publish errors corrected:
npm WARN publish Removed invalid "scripts"
npm WARN publish "bin[playwright-core]" script name was cleaned
npm WARN publish "repository.url" was normalized to "git+https://github.com/microsoft/playwright.git
```

works now as per
https://www.npmjs.com/package/@playwright/test/v/1.39.0-alpha-1696547902000
when you scroll down.

https://github.com/microsoft/playwright/issues/22555
2023-10-05 23:42:27 +00:00
Max Schmitt 10e7654fd9
chore: update repository.url in package.json (#27469)
As per
https://github.com/microsoft/playwright/actions/runs/6425074868/job/17446981722#step:7:168.

e.g. here:
2e4b4ad8be/package.json (L28-L31)
docs:
https://docs.npmjs.com/cli/v10/configuring-npm/package-json#repository

https://github.com/microsoft/playwright/issues/22555
2023-10-05 23:18:22 +00:00
Max Schmitt 0efa4a90cc
devops: Node.js 16 -> Node.js 18 (#27467)
As per
https://github.com/microsoft/playwright-internal/blob/main/INFRASTRUCTURE.md.


Fixes https://github.com/microsoft/playwright/issues/27148.
2023-10-05 23:08:43 +00:00
Playwright Service ece6e70076
feat(webkit): roll to r1918 (#27466)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-05 23:00:46 +00:00
Max Schmitt ce928cd12f
fix: make processRunner nullable (#27468)
This fixes:
```
D:\a\playwright\playwright\packages\playwright\lib\common\process.js:119
  await processRunner.gracefullyClose().catch(() => {});
                      ^

TypeError: Cannot read properties of undefined (reading 'gracefullyClose')
    at gracefullyCloseAndExit (D:\a\playwright\playwright\packages\playwright\lib\common\process.js:119:23)
    at process.<anonymous> (D:\a\playwright\playwright\packages\playwright\lib\common\process.js:81:11)
    at process.emit (node:events:513:28)
    at emit (node:internal/child_process:946:14)
    at processTicksAndRejections (node:internal/process/task_queues:84:21)
```

from
[here](https://github.com/microsoft/playwright/actions/runs/6424299724/job/17444659548#step:7:2936).

`gracefullyCloseAndExit` gets called via `__stop__` and wants to use
`processRunner` var which gets created during `__init__`. So its
`undefined` when `__stop__` gets called.
2023-10-05 22:59:20 +00:00
Max Schmitt ba207697c3
devops: don't force NPM 8 everywhere (#27465)
We used to have this historically due to bots which were running on
Node.js 14. Node.js 14 was shipping NPM 7 back in the days.

Now all bots are on >= Node.js 16 so we can remove this legacy code.
2023-10-05 22:21:00 +00:00
Dmitry Gozman 0717b386f9
test: disable some failing tests (#27463) 2023-10-05 15:00:08 -07:00
Pavel Feldman 70dbb9d83a
feat(trace): allow navigating from error to source (#27464) 2023-10-05 14:59:59 -07:00
Dmitry Gozman cba2fc0752
chore: align FFConnection with CRConnection (#27450) 2023-10-05 13:46:41 -07:00
Max Schmitt 293c85935a
devops: publish using NPM provenance feature (#27459)
As per
https://docs.npmjs.com/generating-provenance-statements#publishing-packages-with-provenance-via-github-actions.

We use Node.js 18 (LTS) to get NPM 9+.

Closes https://github.com/microsoft/playwright/issues/22555
2023-10-05 20:00:18 +00:00
Playwright Service 5e2b9f158c
feat(webkit): roll to r1917 (#27444)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-10-05 19:21:21 +00:00
Playwright Service 3f6b419fee
feat(chromium-tip-of-tree): roll to r1157 (#27454)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-05 18:38:36 +00:00
Playwright Service d877f15902
feat(webkit): roll to r1916 (#27447)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-10-05 17:32:21 +00:00
Playwright Service 2ea28c9732
feat(webkit): roll to r1915 (#27443)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-10-05 17:31:40 +00:00
Playwright Service b3897b209e
feat(chromium): roll to r1083 (#27445)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-05 16:52:10 +00:00
Pavel Feldman 89e1f69738 chore: regenerate types after spell check 2023-10-04 19:57:36 -07:00
Jim Hays dcc8dcca73
Fix various typos (Fixes #27396) (#27391)
Fixes https://github.com/microsoft/playwright/issues/27396
2023-10-04 19:56:42 -07:00
Pavel Feldman 25f06575bf
docs: recommend using test stories in ct (#27440)
Closes https://github.com/microsoft/playwright/issues/27439
2023-10-04 19:48:26 -07:00
Yury Semikhatsky 0eb7a09967
test: screenshot of css box-shadow (#27438)
Reference #21620
2023-10-04 17:26:01 -07:00
Pavel Feldman b2a07c2675
docs: improve the emulation viewport doc (#27434)
Closes https://github.com/microsoft/playwright/issues/27428
2023-10-04 16:57:23 -07:00
Dmitry Gozman 045e8aa368
chore: move devices from Playwright to LocalUtils (#27437)
Also, do not create `LocalUtils` for remote connections. This avoids
sending device on every remote connect.
2023-10-04 16:48:54 -07:00
Playwright Service b584a86a8b
feat(chromium-tip-of-tree): roll to r1156 (#27433)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-04 23:06:50 +00:00
Dmitry Gozman daba77644c
feat: composedExpect (#27432)
Allows to merge multiple expects with custom matchers added by
`expect.extend()`.
2023-10-04 15:01:25 -07:00
Dmitry Gozman d426f2fd4e
fix(chromium): continue requests paused for the second time (#27429)
Sometimes Chromium restarts requests. This leads to multiple
`Fetch.requestPaused` for a single `Network.requestWillBeSent`.

Fixes #27294.
2023-10-04 11:18:06 -07:00
Playwright Service 7dcba6f5f0
feat(firefox): roll to r1425 (#27427)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-04 11:00:50 -07:00
Yury Semikhatsky ac48a47d33
feat: toHaveAttribute without value (#27418)
This time not doing it in other languages due to unjustified generator
complexity.

Fixes #27341
2023-10-04 09:27:28 -07:00
Anthony Vanelverdinghe 5295d468ad
Prevent Firefox from creating shortcuts (#27412)
Fixes #27359
2023-10-03 15:57:33 -07:00
Pavel Feldman 5a7b405bdb
chore: add console icon titles (#27416)
Fixes https://github.com/microsoft/playwright/issues/27411
2023-10-03 15:52:37 -07:00
Pavel Feldman c226d97b87
chore: bump vite to 4.4.10 (#27417) 2023-10-03 14:59:13 -07:00
Dmitry Gozman 65ce4cd213
feat: expose composedTest() instead of test._extendTest() (#27414) 2023-10-03 13:26:30 -07:00
Pavel Feldman 47b0255b89
chore: instrument nested workers (#27400)
Ref: https://github.com/microsoft/playwright/issues/27376
2023-10-03 13:08:15 -07:00
Pavel Feldman ae08d03d75
fix(role): compute <output> accessible name from labels (#27415)
Fixes: https://github.com/microsoft/playwright/issues/27403
2023-10-03 13:01:13 -07:00
Pavel Feldman 13cca1db3d
test: add a test for cdp w/ trace (#27410)
Closes https://github.com/microsoft/playwright/issues/27409
2023-10-03 13:00:35 -07:00
mash-graz 2c56af3a3b
fix: use most recent stable debian release browser binaries in case of debian testing and unstable (#27397)
Fixes: #27398
2023-10-03 12:35:21 -07:00
Caleb St-Denis b5a40a90c2
docs: Fix typo in JS intro (#27401) 2023-10-03 09:52:33 +02:00
Debbie O'Brien 3a1e5f4b7b
docs: improve project dependencies (#27390) 2023-10-03 09:51:56 +02:00
Dmitry Gozman 9116a81c17
test: add more installation test scenarios (#27240) 2023-10-02 21:10:26 -07:00
Yury Semikhatsky 567386c23f
fix(webkit): add libnghttp2 to the deps on older distros (#27399)
`bin/WPENetworkProcess` depends on `libsoup-3.0.so.0` which we bundle
with the browser on Ubuntu 20 and Debian 11, but soup3 depends on
`libnghttp2.so` which is expected to be installed on the host.

Fixes https://github.com/microsoft/playwright/issues/27255
2023-10-02 18:06:28 -07:00
Dmitry Gozman 2aca7fdcc2
fix(chromium): scroll into view elements inside iframes before waiting (#27394)
This forces iframes to be visible, so that `rAF`s always run.

Fixes #27196.
2023-10-02 17:21:06 -07:00
Yury Semikhatsky c751bf135e
devops: stop using deprecated method of installing node (#27392)
Otherwise we see a warning for 1 minute every time during the script
run:

<img width="616" alt="image"
src="https://github.com/microsoft/playwright/assets/9798949/4593048c-a901-4db5-a15e-1b6dd1970625">


The instructions are taken from
https://github.com/nodesource/distributions#debian-and-ubuntu-based-distributions
2023-10-02 14:24:58 -07:00
Playwright Service 1bed74bc8b
feat(webkit): roll to r1914 (#27279) 2023-10-02 11:36:23 -07:00
Andrey Lushnikov 471d12ac7b
chore: keep linux browser deps script up-to-date (#27309)
References https://github.com/microsoft/playwright/issues/27255
2023-10-02 11:34:49 -07:00
Dmitry Gozman dfc75a1e1a
test: speed up installation tests by not isolating browser unless required (#27370) 2023-10-02 11:26:08 -07:00
Sander d1ae0ab94f
docs(ct): pnpm create playwright (#27377)
pnpm supports the `create` command which acts as a shortcut to `pnpm dlx
create-*`

related:
https://github.com/microsoft/playwright/pull/24397/files#diff-af370723ed754e89d1e69d20f211a5a8249651b1b5692348398bbd105f1ac445R47
2023-10-02 10:58:58 -07:00
Yury Semikhatsky ac9d1ec421
test: scroll into view element in cross-origin iframe outside viewport (#27369)
Reference: #27196
2023-09-29 17:23:51 -07:00
Yury Semikhatsky bb8a102164
chore(types): add blob reporter to the known reporter types (#27371)
Closes https://github.com/microsoft/playwright/issues/27357
2023-09-29 15:15:18 -07:00
Dmitry Gozman 5deea65bf2
fix(test runner): move removing artifacts dir from stop() to onExit (#27364)
Fixes #27326.
2023-09-29 14:57:32 -07:00
Dmitry Gozman 55c4bb97af
chore: extract CDPSession on the server side, remove duplicate code (#27349)
This makes sure that protocol calls after target close are rejected
correctly.
2023-09-29 12:50:02 -07:00
Dmitry Gozman 2a8d6a8207
docs: encourage using expect() instead of getters like textContent() (#27362) 2023-09-29 10:52:20 -07:00
Dmitry Gozman 81694b7401
test: unflake some tests (#27354) 2023-09-29 10:45:31 -07:00
Pavel Feldman d136b0aeb6
feat(step): allow boxing steps (#27334) 2023-09-29 09:44:00 -07:00
Yury Semikhatsky 0f14446518
chore: log formatting for single state (#27351)
Fixes formatting for "waiting for element to be  and stable".
2023-09-29 09:14:26 -07:00
Dmitry Gozman 08e71fec5d
test: add installation tests for supposed plugin story (#27331) 2023-09-28 17:18:22 -07:00
Pavel Feldman 4fd2b4adef
chore: bump the babel (#27348) 2023-09-28 17:12:57 -07:00
Pavel Feldman 2892467839
chore: delete temporary artifacts after test (#27332) 2023-09-27 16:29:21 -07:00
Dmitry Gozman c8143748e6
chore: remove Page._didDisconnect (#27317)
Instead of having `didClose` based on page creation/destruction and
`didDisconnect` based on session lifetime, we make session lifetime
being managed by the `CRPage`/`FFPage`/`WKPage` instead.
2023-09-27 14:09:56 -07:00
Dmitry Gozman 7da1dfd21c
docs: add C# code snippet to extensibility.md (#27328)
Fixes #27160.
2023-09-27 11:54:02 -07:00
Pavel Feldman 20f20e9fba
chore: use stock image matcher in library tests (#27319) 2023-09-26 18:46:21 -07:00
Sander 2032b64ee6
feat(ct): allow baseUrl and host config (#27295)
closes: https://github.com/microsoft/playwright/issues/27283
2023-09-26 16:32:51 -07:00
Pavel Feldman ffd20f43f8
chore: dispose stale handles to prevent oom, 1000 of a kind max (#27315)
https://github.com/microsoft/playwright/issues/6319
2023-09-26 15:54:33 -07:00
jaktestowac.pl 6181960898
docs: best-practices update (#27267)
Best practices doc update:

- adding UI Mode to `Use Playwright's Tooling` section
- correcting heading for `Use parallelism and sharding` (previously this
section was falsy included in `Lint your tests`)

Fixes #27302
2023-09-26 12:26:15 -07:00
Yury Semikhatsky d198784f1a
fix(blob): use reporters from the merge config (#27301)
Fixes https://github.com/microsoft/playwright/issues/27281
2023-09-26 11:41:17 -07:00
Pavel Feldman 07e794eb83
chore: follow up to runnable change (#27300) 2023-09-26 08:57:14 -07:00
Dmitry Gozman c0dc2328aa
chore: use JobDispatcher helper in one more place (#27299) 2023-09-25 20:08:22 -07:00
Pavel Feldman aed86c98a8
chore(ct): allow using component as a property (#27272) 2023-09-25 17:00:52 -07:00
Pavel Feldman 4e62468aee
chore: use closures to set current runnable (#27293) 2023-09-25 15:22:25 -07:00
Yury Semikhatsky 3ea03c9f4c
docs: use encodeToString instead of encode in examples (#27297)
Fixes https://github.com/microsoft/playwright/issues/27273
2023-09-25 14:57:58 -07:00
Dmitry Gozman 9a5356f93b
fix(snapshot): invalidate style sheet upon CSSGroupingRule changes (#27296)
Previously, snapshotter listened to CSSStyleSheet modifications, but one
can also modify the list of rules inside CSSGroupingRule.

Fixes #27288.
2023-09-25 14:34:17 -07:00
wodyjowski 522782cce6
fix: desiredCapabilities removed (#27275)
DesiredCapabilities field was removed in selenium grid > 4.8.2
Without this field removed it's impossible to connect to grid.
Grid throws exception on POST /session
[stackoverflow issue](https://stackoverflow.com/a/76695833)

Fixes #27276
2023-09-25 13:52:16 -07:00
Dmitry Gozman 32a50e2d90
chore(test runner): use helper method in JobDispatcher (#27278) 2023-09-25 11:05:49 -07:00
Dmitry Gozman 7bd8032439
docs: mention Locator.first in toBeVisible (#27292)
Fixes #26842.
2023-09-25 10:59:39 -07:00
Dmitry Gozman 0f72ef0584
fix(streams): avoid leaking event listeners (#27291)
Fixes #26998.
2023-09-25 10:59:14 -07:00
Dmitry Gozman 66eb3043f5
feat(json report): expose startTime and duration (#27290)
Fixes #27183.
2023-09-25 10:58:55 -07:00
Pavel Feldman d6ec1ae399
chore: document chaining expect.extend (#27262)
Fixes https://github.com/microsoft/playwright/issues/15951
2023-09-22 13:56:59 -07:00
Pavel Feldman a6a0257c88
feat(expect): allow chaining expects (#27248) 2023-09-22 12:12:17 -07:00
Dmitry Gozman 49fd9500fe
fix: handle worker process start failure (#27249)
Worker process start failure is reported as a test error and skips other
tests from the group.
If happened during stop (e.g. from a Ctrl+C) before worker has fully
initialized, this error is ignored.

Drive-by: send SIGINT in tests to the whole tree, to better emulate
Ctrl+C behavior.
2023-09-22 10:57:35 -07:00
Matt Hooper e786eddf5a
chore: Update README grammar (#27159) 2023-09-22 10:47:48 -07:00
Pavel Feldman c7d9ae1c8b
ui(trace): make drawer appear under action list (#27260) 2023-09-22 10:43:44 -07:00
Debbie O'Brien 175ae09fef
docs: improve trace viewer (#27205) 2023-09-22 16:57:02 +02:00
Dmitry Gozman ccaec034d8
chore(test runner): extract JobDispatcher (#26776) 2023-09-21 17:13:00 -07:00
Pavel Feldman 51a774f8a3
chore: include log in matcherResult (#27164) 2023-09-21 16:23:46 -07:00
Pavel Feldman 287d720b8e
chore: remove dedicated console channel (#27234) 2023-09-21 16:16:43 -07:00
Playwright Service 4bf5af6d86
feat(webkit): roll to r1912 (#27242) 2023-09-21 15:23:14 -07:00
Dmitry Gozman 1857a3fb56
fix(evaluate): make sure to try/catch toJSON access (#27238) 2023-09-21 13:31:28 -07:00
Dmitry Gozman 14a3659071
test: speed up installation tests by not downloading from cdn multiple times (#27220) 2023-09-21 12:40:18 -07:00
Yury Semikhatsky 0bc55fac91
test: unskip "should capture full viewport" (#27233)
This is fixed by
https://github.com/microsoft/playwright-browsers/pull/643

Fixes https://github.com/microsoft/playwright-browsers/issues/637
2023-09-21 11:20:18 -07:00
Debbie O'Brien 4b8e528136
docs: update screenshots (#27207)
- add new screenshots
2023-09-21 10:30:19 -07:00
Playwright Service 1d6ec0923c
feat(webkit): roll to r1911 (#27226) 2023-09-21 09:33:12 -07:00
Dmitry Gozman b9509b3ec6
Revert "feat(evaluate): serialize map and set (#26730)" (#27219)
This reverts commit ee203b782c.

References #24040.
Fixes #27181.
2023-09-20 18:31:09 -07:00
Andrey Lushnikov abde650398
docs: clarify Locator.or element matching (#27208)
Fixes https://github.com/microsoft/playwright/issues/27169

---------

Signed-off-by: Andrey Lushnikov <aslushnikov@gmail.com>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2023-09-20 13:14:19 -07:00
Debbie O'Brien 9f3c73b425
docs: ui mode minor docs fixes (#27206) 2023-09-20 19:19:01 +02:00
Debbie O'Brien 36f481b779
docs: small fix in headings (#27209) 2023-09-20 19:16:19 +02:00
Dmitry Gozman 2af7d672ef
fix(tracing): bump trace version to V5, migrate V4 traces to consoleMessage.args (#27162)
This moves the fix in #27095 from `modernize` to `appendEvent`. The
reason is that `trace V4` is used both for older traces that do not have
`consoleMessage.args` and the new ones with `args`. Since we do not call
`modernize` for traces of the same version, the original fix does not
help in this case.

Fixes #27144.
2023-09-19 16:21:09 -07:00
Yury Semikhatsky 88038f1b00
fix: do not throw from fetch when response has invalid cookie (#27192)
Cookie value is limited by 4096 characters in the browsers. If
setCookies failed we try setting each cookie individually just in case
only some of them are bad.

Fixes https://github.com/microsoft/playwright/issues/27165
2023-09-19 16:18:16 -07:00
Dmitry Gozman bb4268d165
fix(locators): do not escape regular expressions with u or v flag (#27188)
Fixes #27163.
2023-09-19 13:16:50 -07:00
Playwright Service ddcc52bfcc
feat(chromium-tip-of-tree): roll to r1152 (#27182)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-09-19 18:29:17 +02:00
Playwright Service 59df916b8d
chore(driver): roll driver to recent Node.js LTS version (#27175)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-09-19 12:32:29 +02:00
Playwright Service f064fb6840
feat(firefox-beta): roll to r1425 (#27128)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Andrey Lushnikov <aslushnikov@gmail.com>
2023-09-19 00:31:58 -07:00
Yury Semikhatsky 7f1d93dd3f
docs: 1.38 release notes for language ports (#27167) 2023-09-18 17:38:35 -07:00
Andrey Lushnikov 94e272ba0f
fix(firefox): properly handle navigations (#27132)
In firefox, the `frameRequestedNavigation` is coming from renderer and
thus can happen **after** the `Network.requestWillBeSent`, which is
dispatched from the browser process.

Fixes https://github.com/microsoft/playwright/issues/24132
2023-09-18 17:01:19 -07:00
Pavel Feldman 6b36a50969
chore: simplify expect zone wrapper (#27145) 2023-09-18 15:02:50 -07:00
Debbie O'Brien 40e8445b82
docs: update order to improve flo (#27077) 2023-09-18 20:10:18 +02:00
Yury Semikhatsky 8964587d18
test: update webkit test expectations after last roll (#27155)
https://github.com/microsoft/playwright/issues/26992 was fixed by
https://github.com/microsoft/playwright-browsers/pull/635.

Reference https://github.com/microsoft/playwright-browsers/issues/637
Fixes https://github.com/microsoft/playwright/issues/26992
2023-09-18 09:57:18 -07:00
Pavel Feldman 955be6bd61
chore: populate matcherResult for toHaveScreenshot (#27136)
Ref #26929
2023-09-18 09:12:23 -07:00
Playwright Service 3b4e21dd99
feat(webkit): roll to r1910 (#27134) 2023-09-18 08:57:34 -07:00
Pavel Feldman 9fe037fb63
chore: populate matcherResult in web assertions (#27133)
Ref https://github.com/microsoft/playwright/issues/26929
2023-09-16 14:24:10 -07:00
Dmitry Gozman 3bcf9687e6
fix(test runner): make sure auto worker fixtures run before auto test fixtures (#27131)
Fixes #27114.
2023-09-15 14:51:31 -07:00
Debbie O'Brien c119bd5bd8
docs: update screenshots test generator (#27116) 2023-09-15 13:01:57 -07:00
Debbie O'Brien b9dda64dfe
docs: improve sidebar titles (#27078) 2023-09-15 13:01:08 -07:00
Debbie O'Brien 993f952d6a
docs: add screenshot for attachments (#27076) 2023-09-15 12:58:25 -07:00
Pavel Feldman 527d260cbf
chore: hide tracing calls from traces (#27096) 2023-09-15 12:55:49 -07:00
Andrey Lushnikov a34030be80
browser(firefox): support relative paths for firefox videos (#27099)
Firefox protocol requires absolute paths for video recording.

Fixes https://github.com/microsoft/playwright/issues/27086
2023-09-15 10:26:20 -07:00
Pavel Feldman c914d62c69
chore: nicer network grid header (#27102) 2023-09-15 09:16:29 -07:00
Max Schmitt 0d44405762
fix: custom expect matchers on Locator/Page/APIResponse instance (#27117)
Fixes https://github.com/microsoft/playwright/issues/27113
2023-09-15 18:05:44 +02:00
Yury Semikhatsky ebf6a08290
fix: list tests only once (#27103)
Fixes #27087
2023-09-14 20:00:30 -07:00
Max Schmitt 26cbe69442
test: use intermediate merge report for JSON repoter (#27092) 2023-09-15 04:36:15 +02:00
Pavel Feldman 699e790f69
chore: fit body in the network panel (#27100) 2023-09-14 17:15:24 -07:00
Dmitry Gozman a26f568b36
fix(tracing): support old traces with consoleMessage.args (#27095)
Fixes #27072.
2023-09-14 17:07:29 -07:00
Dmitry Gozman b3edf8e562
fix(har): handle invalid Expires/Max-Age (#27098)
Fixes #27073.
2023-09-14 17:06:56 -07:00
Pavel Feldman c6510ac000
chore: align select options docs (#27097)
Fixes: https://github.com/microsoft/playwright/issues/27094
2023-09-14 16:41:36 -07:00
David Paquette 3170963f42
fix: render JUnit attachment paths relative to outputFile (#27024) 2023-09-14 12:58:09 -07:00
Dmitry Gozman 603861c48d
fix: revert toMatchSnapshot deprecation (#27089)
- This reverts commit
8348f66107
landed in #26718.
- Update docs to point towards `toHaveScreenshot`.
2023-09-14 12:52:41 -07:00
Max Schmitt aa929bff3b
test: unflake 'filter should update stats' test (#27085)
It's not possible to calculate the total test duration of the tests in
the UI, since our `msToString` function is lossy. This patch unflakes
the
[test](https://github.com/microsoft/playwright/actions/runs/6183832112/job/16787806162?pr=27074#step:7:254)
when it took longer than a second to start, by writing the test-ids to
the DOM, getting them into the Node.js process, and calculating their
test duration sum based on the JSON report.

Drive-by: I found a bug that we used the JSON report from the main
test-runner process rather than from the merge process, so the test IDs
were still old. (Without that change the `useIntermediateMergeReport`
tests were not passing.
2023-09-14 19:51:05 +02:00
Max Schmitt 4431a8366d
fix: collect stdio from forked processes (#27074)
A summary about the attempts we tried in
https://github.com/microsoft/playwright/pull/26931 for
https://github.com/microsoft/playwright/issues/26859 and
https://github.com/microsoft/playwright/issues/24591.

1. attempt: collect all the stdio from the worker host.
- this made it hard to capture the live console logs for the live trace
2. attempt: collect all the stdio from the worker host, but keep
proxying `process.{stdout,stderr}.write`.
- this solved the live console logs problem, since we could still listen
on them
- we found out about a race that the stdout/stderr streams can still
buffer data while the test already had finished
- we created a best effort flush implementation but didn't like the
complexity it introduced to the project
3. attempt: keep things like they are but also listen to stdio from the
worker host
- this solves the race of console.log in the test (things stay like they
are)
    - this keeps live trace working (things stay like they are)
- a known pitfall is that it could result in logs which don't end up in
the reporter onStdOut/onStdErr, but it is already a significant
improvement over how it was before.
      - before: they were not getting displayed
- after: they are getting displayed and there is a low likelihood that
they don't end up in the reporter API if the write happens slightly
before a test finished.

Closes #26931
Fixes #26859
Fixes #24591
2023-09-14 18:34:26 +02:00
Playwright Service 57e5183809
feat(chromium): roll to r1081 (#27080)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-09-14 16:00:21 +02:00
Playwright Service 3b16bbd04a
feat(chromium-tip-of-tree): roll to r1151 (#27081)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-09-14 16:00:06 +02:00
Brian Donovan 70fa1dd78a
docs: fix typo (#27062) 2023-09-14 12:45:36 +02:00
Dmitry Gozman f9298cfff6
fix(tracing): unclash trace names between test and hooks (#27063)
Fixes #27048.
2023-09-13 19:56:40 -07:00
Andrey Lushnikov 45d2a36453
chore: roll stable test runner to 1.38 beta (#27066) 2023-09-13 16:01:06 -07:00
Andrey Lushnikov d84357cedc
docs: fix line wrapping in release notes (#27067) 2023-09-13 15:55:31 -07:00
Dmitry Gozman d85dc687b9
devops: include utils/isomorphic into client-side changes (#27061) 2023-09-13 13:37:07 -07:00
Andrey Lushnikov e367b5a0c0
docs: add release notes for 1.38 (#27028)
Signed-off-by: Andrey Lushnikov <aslushnikov@gmail.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-09-13 11:37:45 -07:00
Yury Semikhatsky 1424185c23
test: init script runs onces in iframes (#27057)
Failing test for #26992.
2023-09-13 09:46:59 -07:00
Max Schmitt ce43ea7d99
chore: roll @zip.js/zip.js to 2.7.29 (#27047) 2023-09-13 18:39:10 +02:00
Max Schmitt c06ed8c0bc
chore: add --disable-search-engine-choice-screen flag to Chromium (#27038)
As per `https://github.com/puppeteer/puppeteer/pull/10880`
2023-09-13 18:06:50 +02:00
Playwright Service bf35390c8d
feat(webkit): roll to r1908 (#27049) 2023-09-13 17:40:18 +02:00
Max Schmitt 5faa66912c
docs: add types to Python run() defs (#27044)
Fixes https://github.com/microsoft/playwright-python/issues/2071
2023-09-13 15:18:15 +02:00
Playwright Service 00b74a4aae
feat(chromium): roll to r1080 (#27041)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-09-13 14:12:45 +02:00
Playwright Service 3203b6c31f
feat(chromium-tip-of-tree): roll to r1150 (#27031)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-09-13 08:59:12 +02:00
Andrey Lushnikov 64bf2a624f
test: fix webkit test on Darwin (#27029) 2023-09-12 15:01:44 -07:00
Yury Semikhatsky fac4560a82
chore(types): host, port in html reporter config (#27027) 2023-09-12 13:38:10 -07:00
Pavel Feldman 02c72e545b
feat(onEnd): allow overriding the exit code (#27010)
Fixes: https://github.com/microsoft/playwright/issues/26858
2023-09-12 13:37:30 -07:00
Max Schmitt d0945192a4
feat: make it possible to filter by column in HTML report (#27020) 2023-09-12 22:13:15 +02:00
Yury Semikhatsky 700b310150
fix(fetch): restore from empty storage state (#27025)
Fixes #26833
2023-09-12 13:11:18 -07:00
Debbie O'Brien 78309b9900
docs: update ui mode (#26964) 2023-09-12 18:28:11 +02:00
Debbie O'Brien 8bd26fe074
docs: running tests improvements (#26956) 2023-09-12 16:51:19 +02:00
Max Schmitt 466088215e
chore: clear NPM cache of Docker image (#27000) 2023-09-12 08:14:45 +02:00
Pavel Feldman 97b3625049
chore: polish ui mode for better mac appearance (#27008) 2023-09-11 19:01:00 -07:00
Pavel Feldman 91478ea316
chore: document new onEnd params (#27006) 2023-09-11 18:17:49 -07:00
Andrey Lushnikov aa1862cd2b
chore: update browser patches as of Aug, 1 2023 (#27005)
Internal commit reference:

2fa26b1d22
2023-09-11 18:16:33 -07:00
Andrey Lushnikov 41cd9e183a
chore: cut 1.38.0 branch (#27004) 2023-09-11 18:16:16 -07:00
Pavel Feldman 7c838653d6
chore: fix the split view, reset window on timeline click (#27007) 2023-09-11 18:16:02 -07:00
Dmitry Gozman d9eabda09d
fix(locators): escape quotes in regular expressions (#27002)
Fixes #26974.
2023-09-11 15:49:04 -07:00
Max Schmitt 6bbc09c96c
chore: show channel name in trace viewer metadata (#26987)
Fixes https://github.com/microsoft/playwright/issues/26986
2023-09-11 23:06:56 +02:00
Max Schmitt 5811d65b9d
Revert "chore: pin node to 20.5 to work around https://github.com/nod… (#26979)
…ejs/node/issues/49497 (#26921)"

This reverts commit 874e285adf.
2023-09-11 22:33:09 +02:00
Debbie O'Brien 4d488b464a
docs: update intro for js (#26959) 2023-09-11 18:54:34 +02:00
Max Schmitt c327d5af5b
chore: roll TypeScript to 5.2.2 (#26977) 2023-09-11 18:18:19 +02:00
Max Schmitt 01ab703400
test: restore useIntermediateMergeReport=true test mode in html tests (#26989)
This got accidentally removed in
https://github.com/microsoft/playwright/pull/26799.
2023-09-11 09:14:05 -07:00
Max Schmitt 54f36bee93
chore: make html report image attachment clickable (#26978) 2023-09-11 08:44:00 +02:00
Pavel Feldman 80b9e02837
fix(trace): do not attach screenshots twice (#26971) 2023-09-08 18:00:12 -07:00
Yury Semikhatsky 2feae015aa
chore: remove details from markdown reports (#26961)
- remove error details from the reports
- collapse flaky tests by default
- limit comment to 65365 character

GitHub API has comment length limit 65536 chars:
```
Unhandled error: HttpError: Validation Failed: {"resource":"IssueComment","code":"unprocessable","field":"data","message":"Body is too long (maximum is 65536 characters)"}
```
2023-09-08 17:49:34 -07:00
Pavel Feldman c3f5486dab
chore: group attachments across actions in trace (#26969) 2023-09-08 16:47:45 -07:00
Dmitry Gozman 186f86905c
chore: make @playwright/test depend on playwright (#26946) 2023-09-08 14:23:35 -07:00
Dmitry Gozman 7c0766a273
devops: install pnpm and yarn for secondary installation tests (#26968) 2023-09-08 13:54:05 -07:00
Yury Semikhatsky 0213fef484
test: unskip passing test (#26960)
The functionality was fixed in
[webkit](https://github.com/microsoft/playwright-browsers/pull/625) and
should be available with [recent
roll](https://github.com/microsoft/playwright/pull/26953).

Fixes #26876
2023-09-08 12:57:32 -07:00
Pavel Feldman 8ba8c9385d
chore: keep split positions when zooming (#26942) 2023-09-08 12:30:08 -07:00
Dmitry Gozman e6d9b2a818
test: add installation tests for yarn and pnpm (#26937) 2023-09-08 10:06:31 -07:00
Playwright Service f5e6f2e6d2
feat(webkit): roll to r1907 (#26953) 2023-09-08 09:03:51 -07:00
Yury Semikhatsky fd28e8d801
test: reset view scale after navigation (#26939)
Failing test for #26876
2023-09-08 08:58:07 -07:00
Debbie O'Brien 829609dac0
docs: writing tests python merge with node (#26926) 2023-09-08 17:13:00 +02:00
Pavel Feldman 99047cba03
chore: add install browsers dialog (#26940) 2023-09-07 18:34:59 -07:00
Pavel Feldman 167c35ca66
chore: store scroll positions in trace viewer (#26938) 2023-09-07 17:14:39 -07:00
Playwright Service aa3f4f208e
feat(chromium): roll to r1079 (#26934) 2023-09-07 18:48:50 +02:00
Playwright Service e814657a38
feat(chromium-tip-of-tree): roll to r1149 (#26933)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-09-07 17:51:47 +02:00
Debbie O'Brien 9b99aea57f
docs: python running tests guide (#26910) 2023-09-07 15:47:40 +02:00
Playwright Service bf1f2d2c81
feat(firefox): roll to r1424 (#26915)
Fixes https://github.com/microsoft/playwright/issues/26463

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-09-06 23:02:52 -07:00
Playwright Service bcf59ed721
feat(webkit): roll to r1905 (#26909) 2023-09-07 07:41:46 +02:00
Pavel Feldman 7fa16d2230
chore: pick frame selectors in recorder (#26923) 2023-09-06 18:35:32 -07:00
Pavel Feldman 61a1924328
chore: align recorder drawer with trace viewer (#26922) 2023-09-06 17:13:25 -07:00
Pavel Feldman 874e285adf
chore: pin node to 20.5 to work around https://github.com/nodejs/node/issues/49497 (#26921)
Works around https://github.com/nodejs/node/issues/49497
2023-09-06 16:38:19 -07:00
Pavel Feldman d65da74b8f
fix(trace): allow typing in selector w/ frames (#26919) 2023-09-06 16:14:40 -07:00
Pavel Feldman ea4974ce36
chore: allow resetting the time filter (#26920) 2023-09-06 16:14:26 -07:00
Dmitry Gozman cb8656f24f
chore: remove @types/node from deps (#26918)
This effectively reverts #14230. We will install `@types/node` in `npm
init playwright` instead.
2023-09-06 16:09:35 -07:00
Yury Semikhatsky 34af2b9477
Revert "docs(java): Add SoftAssertions for Java (#26512)" (#26917)
As explained in
https://github.com/microsoft/playwright-java/issues/819#issuecomment-1709019419
we are not ready to ship this in its current form. Reverting for now.

This reverts commit 475c96d4c2.
2023-09-06 15:28:54 -07:00
Max Schmitt f71df9fb50
chore: introduce sdkLanguage based userDataDir misuse error (#26894)
Fixes https://github.com/microsoft/playwright-python/issues/2059

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2023-09-06 22:58:44 +02:00
Max Schmitt d79dad09e8
fix(ui-mode/tv): do not open new tab on macOS (#26877)
Fixes https://github.com/microsoft/playwright/issues/9434
2023-09-06 22:57:29 +02:00
Max Schmitt 0527006a54
docs(test-typescript): rename transpilation issues doc (#26893) 2023-09-06 22:57:12 +02:00
Dmitry Gozman abea8f4d1c
docs: update deprecation messages for type() methods (#26912) 2023-09-06 12:41:12 -07:00
Dmitry Gozman 361038c950
feat: rename PageError to WebError (#26913) 2023-09-06 12:40:53 -07:00
Andrey Lushnikov 9105a20ac4
fix: remove window.stop() from page.setContent() implementation (#26886)
The call was added back in 2019 to stop network loading. See commit:
56a48559c2

However, there's no evidence that this call is needed any more:
- all the tests pass without it
- `window.stop()` behavior is poorly defined, so relying on it is
unfortunate.

The `window.stop()` call, however, causes trouble while rolling firefox:
under certain condititions, the call prevents document from firing the
`load` event in the `document.open().write(..).close()` sequence that
comes immediately after the call. While this does look like a bug in
Firefox itself, we failed to reproduce it in isolation.

For the reference, the following tests fail with the Firefox 116 (using
`PWTEST_TRACE=1` triggers the race condition somewhere):

```bash
PWTEST_TRACE=1 npm run ftest cli-codegen
```
2023-09-06 11:02:38 -07:00
Pavel Feldman b4012df160
fix(trace): make locator picker work for iframes (#26883)
Fixes https://github.com/microsoft/playwright/issues/26878
2023-09-06 09:44:47 -07:00
Playwright Service 500821d1bd
feat(chromium-tip-of-tree): roll to r1148 (#26904)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-09-06 18:15:32 +02:00
Pavel Feldman e0db46ae14
chore: highlight ansi in browser messages as well (#26881) 2023-09-05 17:29:07 -07:00
Pavel Feldman e065a927bb
docs: fix string eval snippet
Signed-off-by: Pavel Feldman <pavel.feldman@gmail.com>
2023-09-05 16:34:56 -07:00
Yury Semikhatsky f045e13e00
test: contextmenu on right click (#26885)
Reference https://github.com/microsoft/playwright/issues/26515
2023-09-05 16:12:17 -07:00
Timothy C. Quinn 2f4d1714b8
docs: fixing JS Comments for Evaluate (#26880) 2023-09-05 22:53:16 +02:00
Dmitry Gozman 740472ce8f
fix(trace viewer): retain currentSrc of all images (#26841)
When `<source>` or `srcset=` are involved, the actual image src is
determinted at runtime based on factors like `devicePixelRatio` and
media queries that depend on width/height.

Since these factors may differ in the Trace Viewer itself, we should
preserve the `currentSrc`, use it as an actual `src`, and disable
various `<source>` and `srcset=`.
2023-09-05 12:48:07 -07:00
Pavel Feldman 1fda6d1536
docs: remove --headless=chrome mentions (#26865)
Fixes https://github.com/microsoft/playwright/issues/26862
2023-09-05 08:42:54 -07:00
Playwright Service 94c1b749b2
feat(webkit): roll to r1904 (#26855)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-09-04 16:08:23 +02:00
Ivo Berger f219f9fd41
devops: fix tags on jammy stable images (#26834) 2023-09-03 09:57:09 +02:00
Pavel Feldman 8c494e2519
chore: add log/error tabs and counters (#26843) 2023-09-01 20:12:05 -07:00
Yury Semikhatsky ce3e0dcf84
test: unskip test in headless (#26844)
Reference https://github.com/microsoft/playwright/issues/22617
2023-09-01 17:26:23 -07:00
Andrey Lushnikov afd4363aab
docs: enhance hooks example to illustrate after hooks behavior (#26846)
Fixes https://github.com/microsoft/playwright/issues/26821
2023-09-01 17:18:31 -07:00
Pavel Feldman 1c5f53f216
chore: show innermost error in ui mode (#26840) 2023-09-01 13:48:15 -07:00
Pavel Feldman a339bead09
chore: implement faster ansi2html format for console (#26826) 2023-09-01 09:09:47 -07:00
Debbie O'Brien 583964f8dd
docs: move github section (#26792) 2023-09-01 14:42:47 +02:00
Andrey Lushnikov 54e4e5caca
fix: implement atomic append for compilation cache (#26830)
Note: this reverts commit ffd6cf60eb.

Fixes #26769
2023-08-31 17:55:13 -07:00
Pavel Feldman 4948920437
fix(ui): do not log from beforeAll twice (#26799)
Fixes https://github.com/microsoft/playwright/issues/26790
2023-08-31 17:34:15 -07:00
Dmitry Gozman f3c02a5b4f
fix(trace viewer): make red dot to the center of the target element (#26825)
Also make sure red dot is visible in the popout tab.

Fixes #24532.
2023-08-31 16:52:54 -07:00
Dmitry Gozman fa286de0b3
fix(test runner): extract FailureTracker helper (#26757)
This way we can reuse it for:
- tracking `maxFailures` across phases;
- tracking failures for runner;
- tracking failures for `runJob` helper class later on.

Fixes #26344.
2023-08-31 15:32:29 -07:00
Dmitry Gozman 6d85ba1494
fix: remove connectInsteadOfLaunching (#26828) 2023-08-31 15:29:04 -07:00
Max Schmitt b387249e45
chore: enhance download/install logic of branded browsers (#26806)
- Remove the check for 32 vs. 64 bit, since we only support 64 Windows
since a while
- Introduce `$ErrorActionPreference = 'Stop'` which is a best practice
otherwise the code would have continued running even a statement/line
was failing. E.g. download failed, it would still try to install
- `$ms.DownloadFile` checks for the status code internally, so we are
safe regarding this, it will throw otherwise.

This won't fix https://github.com/microsoft/playwright/issues/26591 but
makes the code more safe and might be related.
2023-08-31 22:48:07 +02:00
Dmitry Gozman 741c649d56
fix(trace viewer): make sure target inside shadow dom is highlighted (#26823)
References #24532.
2023-08-31 12:46:49 -07:00
Andrey Lushnikov c92ad10f60 chore: fix issue template 2023-08-31 09:24:18 -07:00
Max Schmitt cb67427d56
chore: fix html-reporter/trace-viewer TSC errors (#26813) 2023-08-31 18:08:38 +02:00
Max Schmitt cc30d72b0b
test: roll android chromium to 1190572 (#26807) 2023-08-31 18:08:27 +02:00
Dawn Wages 0bada4b31b
docs: python installation code block update (#26818) 2023-08-31 17:42:32 +02:00
Playwright Service 6629b31a97
feat(webkit): roll to r1902 (#26812)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-31 17:31:13 +02:00
Playwright Service 51792c1417
feat(chromium-tip-of-tree): roll to r1147 (#26815)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-31 17:16:31 +02:00
Playwright Service 60e70c187d
feat(chromium): roll to r1078 (#26811)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-31 16:03:16 +02:00
Pavel Feldman 123ee9ddc1
chore: trace timeline ux (#26797) 2023-08-30 15:48:51 -07:00
Pavel Feldman fd31f5bc50
chore: fix har date types (#26783) 2023-08-30 12:40:46 -07:00
Debbie O'Brien d98e3a2bed
docs: move publish report to ci intro (#26791)
- move publish report section from sharding doc to github actions doc in
getting started guide
2023-08-30 11:03:00 -07:00
Pavel Feldman a34deffa43
chore: highlight actions and har entries in timeline (#26781) 2023-08-29 22:23:08 -07:00
Pavel Feldman c209d7e708
chore: more network panel polish (#26780) 2023-08-29 22:20:28 -07:00
Pavel Feldman 34c6197f9e
chore: include start/endTime and duration in onEnd report callback (#26760)
Fixes https://github.com/microsoft/playwright/issues/23637
2023-08-29 10:56:21 -07:00
Max Schmitt a9bc1a1707
fix(trace-viewer): SVG images were not loading (#26755)
Fixes https://github.com/microsoft/playwright/issues/26745

Drive-by: make Codemirror read-only.
2023-08-29 18:05:01 +02:00
Playwright Service f3ece09063
feat(chromium-tip-of-tree): roll to r1146 (#26770)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-29 16:42:49 +02:00
Pavel Feldman 99b8ca2be2
chore: flush har when recording tracing (#26746) 2023-08-28 17:44:48 -07:00
Dmitry Gozman 4bbd16d316
chore(test runner): decouple runJob from the Dispacther (#26756)
In preparation to extracting a class for it.
2023-08-28 15:41:14 -07:00
Pavel Feldman 38f1e62642
chore: use custom expect message in trace step (#26752) 2023-08-28 14:48:24 -07:00
Sander ee203b782c
feat(evaluate): serialize map and set (#26730)
closes: https://github.com/microsoft/playwright/issues/24040
2023-08-28 14:32:41 -07:00
Yury Semikhatsky 501ed32856
fix(fetch): update host header on redirect (#26750)
Fixes https://github.com/microsoft/playwright/issues/26743
2023-08-28 12:42:50 -07:00
Max Schmitt 5c72cbdb23
feat(webkit): roll WebKit to r1898 (#26738) 2023-08-28 19:44:52 +02:00
Max Schmitt 39f8f2ed8d
fix(trace-viewer): use sdkLanguage for Pick Locator (#26737)
Fixes https://github.com/microsoft/playwright/issues/26736
2023-08-28 17:39:02 +02:00
Dmitry Gozman 36347e7fea
feat: make playwright package not install browsers automatically (#26672)
Additionally introduce `@playwright/browser-<browser>` packages that
just download the respective browser, but do not export anything.

References #26614.
2023-08-27 07:24:35 -07:00
Playwright Service 72aef6bc1d
feat(chromium-tip-of-tree): roll to r1145 (#26726)
Fixes https://github.com/microsoft/playwright/issues/26713

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-26 12:36:05 +02:00
Max Schmitt 4aa714c75d
chore(contribution guidelines): add note about filing an issue (#26716) 2023-08-26 08:13:59 +02:00
Max Schmitt 1b30347ae5
fix: maxFailures reached follow-up (#26717) 2023-08-26 08:10:42 +02:00
Pavel Feldman eb9ef64e7d
fix(android): use domain socket suffix chrome can discover (#26724)
Fixes: https://github.com/microsoft/playwright/issues/26721
2023-08-25 19:30:09 -07:00
Pavel Feldman ee86b9bc94
chore: network panel ui polish (#26722) 2023-08-25 19:20:36 -07:00
Dmitry Gozman 8348f66107
feat: deprecate toMatchSnapshot for buffers (#26718)
These are usually used for screenshots instead of toHaveScreenshot.
String-based snapshots are left as is.

<img width="836" alt="deprecated"
src="https://github.com/microsoft/playwright/assets/9881434/d02818da-7eea-47fc-8ea8-4104b0dd49b5">

---

Also deemphasized toMatchSnapshot throughout all docs.

Fixes #26612.
2023-08-25 18:20:01 -07:00
Pavel Feldman bc1f6272d8
chore: deflate large web socket messages (#26720) 2023-08-25 16:13:46 -07:00
Max Schmitt feac31dbdc
test: mark 'should fire close event' as fixme in MSEdge (#26712)
https://github.com/microsoft/playwright/issues/26711

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
2023-08-25 23:57:56 +02:00
Steven Boutcher 4bf5b091d5
Fix run-on sentence in Best Practices docs (#26622) 2023-08-25 12:50:35 -07:00
Pavel Feldman 376f2850b3
chore: flaky tests fixes (#26714) 2023-08-25 12:43:50 -07:00
Pavel Feldman 0ecd561db2
chore: improve network panel rendering (#26708) 2023-08-25 12:10:28 -07:00
Pavel Feldman afb17b02a7
docs: remove outdated ct limitations (#26707) 2023-08-25 12:09:38 -07:00
Playwright Service ce446437fb
feat(chromium): roll to r1077 (#26709)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-25 19:31:19 +02:00
Max Schmitt 9ae77a71fd
feat: print message if maxFailures has reached (#26322)
Fixes https://github.com/microsoft/playwright/issues/24239
2023-08-25 19:06:49 +02:00
Max Schmitt 70dcaabdee
fix: pass sdkLanguage to service server (#26702) 2023-08-25 17:40:26 +02:00
Yury Semikhatsky 77f4f4d5de
fix: linkify report link in check output (#26696)
Fixes #26597
2023-08-24 17:45:18 -07:00
Pavel Feldman e7bd1864a8
chore: do not add plugins to config twice (#26670) 2023-08-24 16:19:57 -07:00
Yury Semikhatsky 39a6b23309
devops: create blob reports for all "tests 1" (#26694) 2023-08-24 16:06:41 -07:00
Dmitry Gozman c970179551
fix(resolver): allow importing packages with non-index main script (#26692)
Regressed in https://github.com/microsoft/playwright/pull/23254.

Fixes #26650.
2023-08-24 14:09:00 -07:00
Dmitry Gozman 0ecc13038f
fix(textContent): make it work for ShadowRoot (#26690)
It used to work, but regressed in v1.36.

Fixes #26636.
2023-08-24 12:59:42 -07:00
Pavel Feldman 6d4f937674
chore: fix installation tests (#26691) 2023-08-24 12:48:39 -07:00
Dmitry Gozman c90c943154
fix(test.fail): expect() failure should not skip future tests (#26663)
We used to stop the worker that would skip future tests. Regressed in
https://github.com/microsoft/playwright/pull/11850.

Fixes #26435.
2023-08-24 08:32:14 -07:00
Pavel Feldman 0406e45cf3
chore: render download progress in the host process (#26666) 2023-08-24 07:33:32 -07:00
Yury Semikhatsky 697429d222
docs: pageerror.error should return string in languages (#26664) 2023-08-23 14:31:18 -07:00
Dmitry Gozman 81cc39ea6e
feat(expect): narrow down available assertions for Page/Locator/APIResponse (#26658)
Fixes #26381.
2023-08-23 13:14:39 -07:00
Pavel Feldman 197f79c933
chore: show action on hover even if there is no film (#26655) 2023-08-23 12:55:01 -07:00
Dmitry Gozman 44d3770559
fix(selector generator): escape all tag names in css selectors (#26659)
Fixes #26657.
2023-08-23 12:32:08 -07:00
Pavel Feldman 46e33cd384
feat: allow installing browsers from ui (#26628) 2023-08-23 12:26:11 -07:00
Max Schmitt f41c862ac6
fix: process host early exit crash (#26642) 2023-08-23 18:03:24 +02:00
Max Schmitt d08b38013d
test: remove itest folders using rimraf (#26646)
This should fix:

Error: ENOTEMPTY: directory not empty, rmdir
'C:\Users\RUNNER~1\AppData\Local\Temp\pwt\workspaces\playwright-xyz-should-work-playwright-chromium-should-work-installation-tests\browsers\chromium-1076\chrome-win'
2023-08-23 17:59:19 +02:00
Max Schmitt 820611e3cc
test: fix electron test expectations (#26643)
This regressed in https://github.com/microsoft/playwright/pull/26423
since the certificate got changed.
2023-08-23 17:59:07 +02:00
Dmitry Gozman 218955c155
fix(test runner): make sure static annotations are reported for skipped tests (#26634)
Fixes #26397.
2023-08-23 08:40:12 -07:00
Pavel Feldman f4f9e526a2
chore: tolerate css imports (#26626)
Fixes https://github.com/microsoft/playwright/issues/24580
2023-08-23 08:32:23 -07:00
Pavel Feldman 91b784e15e
chore: update icon font (#26627) 2023-08-23 08:31:43 -07:00
Jack Li cfa8206a93
docs(chrome-extensions): remove conflict import (#26631) 2023-08-23 10:37:20 +02:00
Pavel Feldman 00e6540799
feat(ui): show test trace events live (#26619) 2023-08-22 15:46:41 -07:00
Dmitry Gozman c4e79eb6ed
feat: replace Locator.type with Locator.pressSequentially (#26624)
Also deprecate `Locator.type`, `Frame.type`, `Page.type` and
`ElementHandle.type`, but not `Keyboard.type`.

References #24614.
2023-08-22 15:21:00 -07:00
Pavel Feldman 65aa062ea1
fix(console): make format console message w/o args (#26620)
Fixes https://github.com/microsoft/playwright/issues/26600
2023-08-22 14:29:35 -07:00
Dmitry Gozman 5646875e5c
fix: make Request.frame throw when page is not ready yet (#26616)
Suggest to check `request.isNavigationRequest()` beforehand.

Fixes #24603.
2023-08-22 14:06:21 -07:00
Dmitry Gozman bb808ca964
docs: move PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD section to library-js (#26617)
Fixes #24607.
2023-08-22 13:22:38 -07:00
Pavel Feldman afc5ebe075
chore: give more time to polling matchers to print friendly error (#26595) 2023-08-22 09:01:42 -07:00
Tahanima Chowdhury cd07401d20
docs(test-runners-java.md): added testng implementation (#26537)
Resolves microsoft/playwright-java#1343
2023-08-22 08:57:12 -07:00
Max Schmitt c27317b6e5
feat(webkit): roll to r1893 (#26596)
This should make it into v1.38 and once its merged one day later it can
be tested in [Playwright
Canary](https://playwright.dev/docs/canary-releases).

Fixes https://github.com/microsoft/playwright/issues/22569
Fixes https://github.com/microsoft/playwright/issues/23259
2023-08-22 17:57:02 +02:00
Max Schmitt 18e03da445
docs: use absolute paths for file uploads (#26611)
Fixes https://github.com/microsoft/playwright/issues/26536

This makes it a bit harder for MJS customers, but I guess they know that
they can do

    const dirname = path.dirname(url.fileURLToPath(import.meta.url));
2023-08-22 17:38:23 +02:00
Max Schmitt bb3152738d
test: fix macOS WebKit signals test (#26603) 2023-08-22 16:51:34 +02:00
Max Schmitt 399f5383bc
chore: fix installation tests (#26602) 2023-08-22 16:48:52 +02:00
Max Schmitt e4366e59e2
chore: fix docs & lint check (#26598)
This broke after https://github.com/microsoft/playwright/pull/26594.
2023-08-22 16:45:41 +02:00
Pavel Feldman 1ceaa923ea
chore: create artifacts dir in the test runner (#26594) 2023-08-21 19:41:10 -07:00
Pavel Feldman fe7b956c3b
chore: allow toggling sidebar location (#26589) 2023-08-21 19:40:44 -07:00
Dmitry Gozman 72bdd43e69
fix(route): make sure Route.fetch works for popup main request (#26590)
References #24603.
2023-08-21 16:48:51 -07:00
Pavel Feldman c3c3c7f53c
chore: decorate console message sources (#26588) 2023-08-21 16:05:27 -07:00
Rainer Hahnekamp 1515d4efdc
docs(sharding): fix GitHub Actions example (#26586) 2023-08-21 23:13:36 +02:00
Max Schmitt 2edecd4244
test: add libsoup3 related tests (#26572)
https://github.com/microsoft/playwright/issues/22569
https://github.com/microsoft/playwright/issues/23259
2023-08-21 22:12:12 +02:00
Pavel Feldman 2b16860e06
chore: locator tab polish (#26568) 2023-08-21 10:59:49 -07:00
Pavel Feldman f83d81956d
chore: make console stream live in ui mode (#26562) 2023-08-21 10:59:37 -07:00
Dmitry Gozman 32a309ccb8
chore: install source map support lazily (#26445)
This way we allow importing from `@playwright/test` without affecting
stack traces.

Fixes #26346.
2023-08-21 10:54:42 -07:00
Richard Blažo bcc30bc71e
feat: add title for before and after hooks (#26523) 2023-08-21 09:50:22 -07:00
Max Schmitt 2f6148bcd1
chore: use SVG icons for web apps (#26564)
Signed-off-by: Max Schmitt <max@schmitt.mx>
2023-08-21 18:33:02 +02:00
Tmk fbe3ef92e5
feat: allow absolute ctTemplateDir (#26526) 2023-08-21 09:30:56 -07:00
Kevin Centeno ba4c242a82
docs(assertions): remove unneeded await in generic assertions example (#26569) 2023-08-21 18:13:25 +02:00
Sander 06d2e7d480
fix(ct): vue jsx mount options type (#26566) 2023-08-21 08:48:03 -07:00
Pavel Feldman 41c312cd04
chore: fix ui mode to show screenshots (#26563) 2023-08-20 14:47:18 -07:00
Max Schmitt 3ac61f5c49
feat(chromium-tip-of-tree): roll to r1144 (#26565)
Note: r1143 got skipped due to a Windows build failure.
2023-08-20 14:08:45 +02:00
Sander e2a11bed19
feat(ct): svelte vite context (#26554) 2023-08-19 16:26:06 -07:00
Marcin Strzyz 192b697488
chore: remove old webpack folder structure (#26560) 2023-08-19 16:16:44 -07:00
Pavel Feldman 09bb866333
chore: format console message from page (#26555) 2023-08-19 16:13:42 -07:00
Grant Timmerman d6956b88f8
docs: fix duplicate java release note metadata (#26561)
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-08-19 23:32:54 +02:00
Pavel Feldman 8f31191637
chore: pick locator tab (#26532) 2023-08-18 17:53:03 -07:00
Yury Semikhatsky 14a57a788b
test: screenshot of css transformation (#26533)
Failing tests for #26447.
2023-08-18 14:30:43 -07:00
Max Schmitt 22dacdb75f
fix: component testing types with moduleresolution: bundler (#26551)
Fixes https://github.com/microsoft/playwright/issues/24581
2023-08-18 22:44:05 +02:00
Yury Semikhatsky c344fce7b6
devops: simplify upload-blob-report action (#26548) 2023-08-18 12:16:26 -07:00
Yury Semikhatsky 31652bca59
devops: merge all "tests 2" reports (#26547) 2023-08-18 12:06:17 -07:00
Max Schmitt 3916e36976
devops: filter merged comments to hide better (#26546) 2023-08-18 21:05:03 +02:00
Yury Semikhatsky 4f9bf63259
docs: blob reporter options (#26508)
Fixes #26481
2023-08-18 10:50:59 -07:00
Max Schmitt 29fbcbee69
fix: warn if PWT commands get executed without PWT (#26542)
Fixes https://github.com/microsoft/playwright/issues/26541
2023-08-18 18:26:34 +02:00
uchagani e15db7993a
docs(java): Remove hardcoded params from SoftAssertions alias (#26531) 2023-08-17 17:55:33 -07:00
Max Schmitt 703f590146
feat(webkit): roll to r1887 (#26528) 2023-08-17 22:17:28 +02:00
Marcin Strzyz 6b2d93a890
chore: error on unused eslint disables (#26510) 2023-08-17 20:53:36 +02:00
uchagani 475c96d4c2
docs(java): Add SoftAssertions for Java (#26512)
This PR adds the `SoftAssertions` API for Java. Related PR:
https://github.com/microsoft/playwright-java/pull/1340

Note: https://github.com/microsoft/playwright.dev/pull/1135 needs to be
merged in order for the markdown in this PR to be rendered without
errors
2023-08-17 10:08:18 -07:00
Pavel Feldman 049f839b30
chore: use glass pane for dragging (#26513) 2023-08-17 09:36:59 -07:00
Max Schmitt 5bcd1fb65f
docs(extensibility): make selectors.register per worker (#26518)
Fixes https://github.com/microsoft/playwright/issues/26493
2023-08-17 09:16:57 -07:00
Vignesh Shanmugam adc9b2d390
feat: add support for browserContext.on('pageerror') (#24452)
+ fix #24466
+ Adds support for exposing the `pageerror` events via `browserContext`
API.
+ Helps with capturing the overall exceptions that are thrown outside of
the the current page and also captures the exceptions happens on other
windows/popups.
+ Keeps the API in sync with `context.on('request)',
context.on('console'), etc..`
2023-08-17 09:10:03 -07:00
Max Schmitt 2c4897094b
devops: hide previous Test results comments (#26516)
There is no REST call for it, so we need to use GraphQL.

References:
- https://github.com/actions/github-script#run-custom-graphql-queries
- https://docs.github.com/en/graphql/reference/mutations#minimizecomment
- https://github.com/isaacs/github/issues/1480
2023-08-17 17:56:32 +02:00
Jean-François Greffier dcab22c307
feat: display package manager in CLI help and tips (#26450)
Display `npx playwright`, `yarn playwright` or `pnpm exec playwright` in
CLI

Fixes #21425
2023-08-17 08:53:08 -07:00
Jonah 0c3703fda1
feat: add iPhone 14 family (#24570)
Fixes #24214
2023-08-17 11:05:40 +02:00
Max Schmitt 75ed251c9e
fix: download of attachments in UI Mode (#26407)
Fixes https://github.com/microsoft/playwright/issues/26326.
2023-08-17 10:57:28 +02:00
Marcin Strzyz 0e6deb7c8d
chore: Update to latest version of TS Eslint to get TS 5.1 support. (#26511)
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-08-17 10:57:13 +02:00
Marcin Strzyz 42543a48a7
fix: fixed PW_TEST_HTML_REPORT_OPEN + more type safe + doc (#24571)
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-08-17 09:48:59 +02:00
Pavel Feldman a705d68c8a
chore: filter actions, console and network based on the timeline window (#26509) 2023-08-16 16:30:17 -07:00
ggorlen 0149c7d56c
docs: fix typo in Reporter.onEnd (#26486)
Signed-off-by: ggorlen <gsgorlen@gmail.com>
2023-08-17 00:40:14 +02:00
Pavel Feldman 929a849265
chore: fix .only in dependent tests (#26503)
Fixes https://github.com/microsoft/playwright/issues/26492
2023-08-16 13:39:08 -07:00
Max Schmitt 1a1ff6c671
chore: move launchApp into separate function (#26499)
https://github.com/microsoft/playwright/pull/26407#discussion_r1290727547
2023-08-16 18:13:40 +02:00
Max Schmitt 4c4525c9e0
chore: make html report produce named attachments (#26421)
https://github.com/microsoft/playwright/issues/26326
2023-08-16 18:06:04 +02:00
Max Schmitt d2165f3e2d
feat(webkit): roll to 1886 (#26490) 2023-08-16 10:10:14 +02:00
Pavel Feldman 576608b69d
chore: revert #24598 (#26484) 2023-08-15 11:29:33 -07:00
Jean-François Greffier 10eb7e8bc1
docs: Java Gradle installation (#26418)
Docs update to install Playwright as a dependency with Gradle, also
introduce how to run Playwright CLI

```bash
./gradlew playwright --args="help"
```

Fixes [#571](https://github.com/microsoft/playwright-java/issues/571)
2023-08-15 11:19:24 -07:00
Yury Semikhatsky 6e51b95e2c
docs: terminate img tag (#26475) 2023-08-14 15:56:17 -07:00
Yury Semikhatsky f75295224a
docs(merge): add screenshot, print url, fix name (#26473)
* Renamed test job to `playwright-tests` to match docs and rererences
* Added screenshot with github jobs and artifacts
* Print Azure URL

Fixes: https://github.com/microsoft/playwright/issues/24451
2023-08-14 15:40:13 -07:00
Max Schmitt 2deabefa71
fix: Locator.evaluateHandle types (#26469)
Fixes https://github.com/microsoft/playwright/issues/26449
2023-08-14 18:27:25 +02:00
Max Schmitt 373a149a23
docs(test-sharding): fix GitHub workflow snippets (#26465) 2023-08-14 16:09:21 +02:00
Max Schmitt 5d875141c1
docs(release-notes): fix supported OSes table (#26466) 2023-08-14 15:58:46 +02:00
Jonas Claes d849c7c81d
docs(test-reporters): sorted alphabetically and added Testmo (#26452) 2023-08-14 11:33:44 +02:00
Playwright Service 04b71bf660
feat(chromium-tip-of-tree): roll to r1142 (#26441) 2023-08-12 20:00:16 +02:00
Playwright Service 96965cfbe9
feat(webkit): roll to r1885 (#26443)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-08-12 19:17:07 +02:00
Yury Semikhatsky c888e299e0
docs: language release notes (#26439)
Signed-off-by: Yury Semikhatsky <yurys@chromium.org>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-08-11 12:36:01 -07:00
Max Schmitt 2fa2d4756a
docs(release-notes): add 1.37 video (#26436) 2023-08-11 20:35:55 +02:00
Max Schmitt bd988b34a7
chore: allow calling spawnSync on Node.js file inside test (#26429)
Fixes https://github.com/microsoft/playwright/issues/24516

Relates https://github.com/microsoft/playwright/pull/16733
2023-08-11 18:37:14 +02:00
Dmitry Gozman b899d61a51
docs: examples that save download with suggested filename (#26425)
Fixes #26341.
2023-08-10 17:20:39 -07:00
Pavel Feldman d0fec20fe1
chore: update test certificates (#26423) 2023-08-10 17:06:03 -07:00
Dmitry Gozman 8e93515ab9
docs: add more details about deps execution order (#26424)
Fixes #26367.
2023-08-10 16:33:01 -07:00
Dmitry Gozman 050f26764e
docs: explain how to reset storage state (#26422)
References #26374.
2023-08-10 16:32:45 -07:00
Dmitry Gozman c37dfb379b
docs: make sure usage comes after description when templating (#26420) 2023-08-10 14:48:26 -07:00
Andrey Lushnikov 67962c58b4
chore: update browser patches as of July, 1 2023 (#26409)
Internal commit reference:
158dd8ada7
2023-08-10 14:41:33 -07:00
Andrey Lushnikov f8eb6a8ea7
docs: add release notes for js v1.37 (#26411) 2023-08-10 14:31:36 -07:00
Pavel Feldman f6563f1a90
chore: use header for service2 auth (#26419) 2023-08-10 13:43:16 -07:00
Yury Semikhatsky 00c8dd7ecc
chore(html): remove unused map (#26415) 2023-08-10 13:02:35 -07:00
Yury Semikhatsky ad9d20311a
fix(merge): allow reports with same name as input (#26413) 2023-08-10 12:47:31 -07:00
Pavel Feldman ba81a23256
chore: enable traces on service2 bots (#26414) 2023-08-10 12:20:52 -07:00
Playwright Service ca06aca161
feat(webkit): roll to r1884 (#26406)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-10 17:44:19 +02:00
Andrey Lushnikov 0bb4dac28f
tests: fix race condition in codegen tests (#26405)
The console message comes in once the page navigates, not in the
`page.setContent()` call below.
2023-08-10 07:51:38 -07:00
Playwright Service 167165d179
feat(chromium): roll to r1076 (#26400)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-10 15:16:10 +02:00
Playwright Service b252f8ba27
chore(driver): roll driver to recent Node.js LTS version (#26399) 2023-08-10 12:25:32 +02:00
Yury Semikhatsky d44a127014
chore: delete raw reporter (#26391)
Build HTML reporter using TeleReceiver's structures directly, this saves
us unnecessary memory allocation for the intermediate structures.
2023-08-09 22:01:44 -07:00
Pavel Feldman 7a250a960b
chore: roll grid deps for socks proxy (#26392) 2023-08-09 21:18:36 -07:00
Pavel Feldman 08d6abab4a
chore: allow merging defineConfig (#26390) 2023-08-09 17:23:34 -07:00
Dmitry Gozman cadc3153f7
fix(test runner): failed + skipped = flaky (#26385)
Fixes #17652.
2023-08-09 16:35:14 -07:00
Yury Semikhatsky fe5cb1603b
docs(merge): use azcopy for uploads (#26382) 2023-08-09 12:05:12 -07:00
Yury Semikhatsky 6f8f3dddf1
devops(merge): authorize service principal by using a client secret (#26380)
Pass all credentials via environment variable as described on [this
page](https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azcopy-authorize-azure-active-directory#authorize-a-service-principal-by-using-a-client-secret-1)
instead of using `azcopy login`.
2023-08-09 11:26:52 -07:00
Dmitry Gozman 71bcfac28a
test: add a test for android screenshots (#26377)
References #26342.
2023-08-09 10:40:33 -07:00
Max Schmitt 732ee1502c
docs(python): add note about pytest-playwright on Anaconda (#26372)
Fixes https://github.com/microsoft/playwright-pytest/issues/127
2023-08-09 15:43:02 +02:00
Andrey Lushnikov a61431f6bb
chore: cut 1.37.0 branch (#26357) 2023-08-09 01:46:29 -07:00
Yury Semikhatsky ff0aef37f8
devops: use azcopy for better upload performance (#26360)
The credentials are created with 
`az ad sp create-for-rbac --name "playwright-github-actions" --role
"Storage Blob Data Contributor" --scopes /subscriptions/<subscription
id>/resourceGroups/<resource
group>/providers/Microsoft.Storage/storageAccounts/<storage account>`

We cannot use `azure/login@v1` for login as it does not see to properly
propagate credentials to `azcopy` in the next step (there are some
reports about keyring problems on linux based actions).
2023-08-08 22:50:36 -07:00
Pavel Feldman 65ac0d5256
chore: add k8s grid deployments (#26359) 2023-08-08 18:46:32 -07:00
Andrey Lushnikov ffd6cf60eb
fix: eliminate race in compilation cache (#26353)
Fixes https://github.com/microsoft/playwright/issues/24569
2023-08-08 15:09:20 -07:00
Yury Semikhatsky 44f9b10ff2
docs: clarify --config option (#26356) 2023-08-08 14:47:27 -07:00
Yury Semikhatsky bc2c7946bb
fix: do not throw when merging into blob report (#26355)
We cannot import a Symbol to isomorphic code from config. Instead,
__projectId property is used.
2023-08-08 14:47:12 -07:00
Yury Semikhatsky 0f0045be94
docs: shard numbers in yaml (#26336) 2023-08-08 11:09:43 -07:00
Yury Semikhatsky 8fcb6383ce
chore(blob): store playwright user agent (#26337) 2023-08-08 10:39:48 -07:00
Yury Semikhatsky 0e20d352cf
chore(merge): read test events from one file at a time (#26333)
Reference https://github.com/microsoft/playwright/issues/24451
2023-08-07 17:39:32 -07:00
Yury Semikhatsky 7f1f62795d
chore(blob): add dash to report name (#26335)
This regressed in #25017
2023-08-07 17:22:31 -07:00
Yury Semikhatsky 7516d6a914
chore: roll stable runner to Aug 7 (#26334) 2023-08-07 16:27:08 -07:00
Dmitry Gozman 9509c300e4
fix(reuse): make sure newly created page is not "server-side-only" (#26332)
This page is going to be the "page for reuse", so it should not be
marked as "server-side-only" and should issue all required events.

Fixes #24574.
2023-08-07 16:26:30 -07:00
Dmitry Gozman 90c765d31c
chore(blob): split onBegin into multiple onProject events (#26329) 2023-08-07 14:33:18 -07:00
Dmitry Gozman 27c15b705d
fix(blob): replace projectSuffix with reportName (#25017)
Always ensure unique project/test ids across blobs.
Show `reportName` as a label in the html report.

References #24451.
2023-08-07 13:38:09 -07:00
Max Schmitt 1383844af8
docs: make --grep more clear (#26324)
Fixes https://github.com/microsoft/playwright/issues/24604
2023-08-07 17:40:30 +02:00
Playwright Service bddd4eadad
feat(webkit): roll to r1883 (#26318)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-07 16:09:37 +02:00
Andrey Lushnikov fa8f3f6454
fix: use snapshotPath instead of expectedPath for image diffs (#24567)
This opens a road to the "accept new screenshot" button in
Playwright tools.

References https://github.com/microsoft/playwright/issues/24310
2023-08-07 04:42:35 -07:00
Marcin Strzyz 53fd4bedb4
chore: ensure the file operations are async in the junit reporter (#24577) 2023-08-07 10:03:01 +02:00
Yury Semikhatsky a0211924d3
devops: upload blob reports for headed and transport tests (#26313)
This will add another (3*4 + 2)*3k = 42k tests to the combined report
and should give us 100k+ tests in total per report.
2023-08-06 11:10:12 -07:00
Yury Semikhatsky 3eb59b873a
chore: roll stable test runner to Aug 6 (#26310) 2023-08-06 09:56:36 -07:00
Yury Semikhatsky f1f43c9ad1
chore(merger): internalize json strings after parse (#25801)
Reference: https://github.com/microsoft/playwright/issues/24451
2023-08-05 13:17:39 -07:00
Pavel Feldman 414a4c3ef0
chore: pass color through in web server commands (#24619) 2023-08-05 09:01:27 -07:00
Pavel Feldman 120de62798
chore(grid): add command line options (#24802) 2023-08-04 18:08:50 -07:00
Pavel Feldman ed83d04d3e chore: install deps for grid tests (3) 2023-08-04 18:05:32 -07:00
Pavel Feldman 1fdb8bdbe4 chore: install deps for grid tests (2) 2023-08-04 16:41:41 -07:00
Pavel Feldman fda578c14d chore: install deps for grid tests 2023-08-04 16:22:43 -07:00
Yury Semikhatsky 6c3142959d
fix(blob): store startTime as a number (#24620)
Turns out the Date objects have noticeable footprint on large suites and
storing them as umber is much cheaper, e.g.:


![image](https://github.com/microsoft/playwright/assets/9798949/539028d0-3ef8-46f7-be2b-752f24604d18)
2023-08-04 16:06:23 -07:00
Pavel Feldman aba6964bd1
chore: add grid tests (#24617) 2023-08-04 14:59:48 -07:00
Dmitry Gozman 1d4919cea4
docs: encourage using fill instead of type (#24616)
References #24614.
2023-08-04 14:19:57 -07:00
Yury Semikhatsky d62493f925
chore: intern test ids and abs paths (#24618)
Created named classes for TeleTestStep and TeleTestResult which makes it
easier to analyze in heap snapshot. Also changing `titlePath` from a
closure to a method on TeleTestStep saved ~100Mb out of 2300Mb.

Intern test ids and absolute paths which showed up a lot of duplicate
strings in heap snapshot.

Clear stepMap after processing onTestEnd.
2023-08-04 14:10:06 -07:00
Ben McCann 6ebee33857
chore: prefer import over require (#24568) 2023-08-04 13:21:41 -07:00
Pavel Feldman 8fde110c61
chore: allow web server w/o waiting (#24609) 2023-08-04 12:05:16 -07:00
Pavel Feldman b3ce913551
Revert "chore: allow calling spawnSync on Node.js file inside test" (#24611)
Reverts microsoft/playwright#24539
2023-08-04 09:01:38 -07:00
Pavel Feldman 6731f5b6d5
chore: grid placeholder (#24598) 2023-08-04 08:38:07 -07:00
Max Schmitt 1afa9d44fb
docs(debug): remove incorrect console APIs (#24602)
This got accidentally added in
54f7141877.

Fixes https://github.com/microsoft/playwright/issues/24562
2023-08-04 17:35:59 +02:00
Max Schmitt ec6d692e2e
docs: change :::tip to :::note (#24610)
Fixes https://github.com/microsoft/playwright/issues/24551
2023-08-04 17:35:51 +02:00
Playwright Service dfea18b588
feat(chromium): roll to r1075 (#24605)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-04 15:20:52 +02:00
Yury Semikhatsky 4494137814
devops: unique report names (#24596) 2023-08-03 15:34:40 -07:00
Yury Semikhatsky 8b18722181
chore: drop run_attempt from github artifact name (#24594) 2023-08-03 15:34:23 -07:00
Yury Semikhatsky d57a3bad39
devops: blob report is already zipped (#24595) 2023-08-03 15:31:39 -07:00
Yury Semikhatsky 9575867f1c
fix(blob): throw if blob report has newer version than the merger (#24593) 2023-08-03 15:11:34 -07:00
Max Schmitt 2193903d03
chore: allow calling spawnSync on Node.js file inside test (#24539)
Fixes https://github.com/microsoft/playwright/issues/24516 

Relates https://github.com/microsoft/playwright/pull/16733
2023-08-04 00:03:14 +02:00
Yury Semikhatsky 8e2f33673b
chore(blob): change file name to report{-suffix}{-shard}.zip (#24592) 2023-08-03 13:23:30 -07:00
Andrey Lushnikov be1e8e061e
docs: minor changes to the merge-reports documentation (#24585) 2023-08-03 10:17:01 -07:00
Playwright Service b4c9f5ab89
feat(webkit): roll to r1882 (#24584)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-03 17:40:54 +02:00
Yury Semikhatsky a867e738db
chore(merge): console status updates (#24559) 2023-08-02 14:49:06 -07:00
Max Schmitt b0473b71cd
chore: limit docs snippet length to 100 (#24563) 2023-08-02 11:23:47 +02:00
Yury Semikhatsky f5d069541d
chore(blob): add version to metadata (#24556) 2023-08-01 16:06:06 -07:00
Dmitry Gozman 29e63d1deb
docs: update sharding doc (#24558) 2023-08-01 16:03:36 -07:00
Yury Semikhatsky 8da37b364b
chore(blob): zip output directory by default (#24536)
Changed the logic to add attachment to the zip in onEnd rather than
onTestEnd because attachment files can be deleted if e.g. preserveOutput
option is specified. Instead we add files once all workers have been
shut down. On a simple run with 1000 tests each adding 1Mb attachment
the overall time difference is 49s (streaming attachments) v 1m9s
(attachments added in the end).
2023-08-01 15:21:23 -07:00
Debbie O'Brien f6d63f7c99
docs: update example test assertion (#24554)
uses different assertion to make test visually better when using trace
viewer etc and is more realistic example
2023-08-01 22:04:04 +02:00
Yury Semikhatsky ce341ae5b5
docs: clarify setContent semantics (#24553)
Fixes https://github.com/microsoft/playwright/issues/24503
2023-08-01 11:45:58 -07:00
Playwright Service 9d5d2c60bb
feat(firefox-beta): roll to r1422 (#24533)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-01 04:28:30 -07:00
Dmitry Gozman 578e8e01b7
docs: improve auto-retrying vs generic assertions (#24528)
Fixes #24460.
2023-07-31 20:20:27 -07:00
Sander 7c5d73a3c3
feat(ct): vue type safe mount props (#23151) 2023-07-31 17:45:34 -07:00
Sander 98cba15938
feat(ct): vue2 type safe mount props (#23194) 2023-07-31 17:44:43 -07:00
Playwright Service dc5e201611
feat(firefox): roll to r1422 (#24531)
Fixes https://github.com/microsoft/playwright/issues/24132

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-31 17:10:22 -07:00
Pavel Feldman 009f9994df
fix(html): mobile layout for filters (#24506) 2023-07-31 16:54:07 -07:00
Playwright Service 77b1ec4a53
feat(webkit): roll to r1881 (#24521)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-31 23:31:35 +02:00
Dmitry Gozman 57ab732fb8
chore: support npm run build -- --sourcemap (#24529) 2023-07-31 13:53:28 -07:00
Yury Semikhatsky 786cb4019d
docs: sharding and merging reports (#24338) 2023-07-31 11:50:57 -07:00
Pavel Feldman 744eb6823f
chore: fix s2 mode (#24525) 2023-07-31 11:24:04 -07:00
Andrey Lushnikov f135b5f7a8
fix: make sure monotonicTime() value is reasonable (#24518)
https://github.com/microsoft/playwright/issues/24432
2023-07-31 09:42:08 -07:00
Dmitry Gozman d92fe16b76
fix(blob report): default location relative to package.json (#24481)
Also:
- remove `blob-report` directory at the start;
- markdown's `report.md` next to package.json;
- use default location in playwright's workflows.

References #24451.
2023-07-28 15:49:31 -07:00
Dmitry Gozman a74101d98f
docs: document expect's asymmetric matchers (#24498)
References #24460, #24417.
2023-07-28 14:04:01 -07:00
Michael Seele c7beebb40f
fix api-testing example (#24407) 2023-07-28 13:19:01 -07:00
John Yeates e60d995e9b
docs: Add files to list of ways to include global.d.ts (#24484) 2023-07-28 12:53:05 -07:00
Playwright Service 947637d19f
feat(webkit): roll to r1880 (#24496) 2023-07-28 21:26:43 +02:00
Max Schmitt 83a98cccf3
test: skip tracing test on trace mode (#24483)
Thats like we do it here:
c8f2fc392a/tests/library/tracing.spec.ts (L26)
2023-07-28 18:48:34 +02:00
Max Schmitt c6a0e5d02c
devops: fix parameterised tests on flakiness dashboard (#24486)
Fixes https://github.com/microsoft/devops.playwright.dev/issues/2
2023-07-28 16:24:17 +02:00
Pavel Feldman 1277ec9900
chore: fix tracing test in s2 mode (#24480) 2023-07-27 20:20:31 -07:00
Pavel Feldman b5d49d0849
chore: do not pass access-key header into the redirects (#24478) 2023-07-27 19:03:14 -07:00
Dmitry Gozman 9c70a75d48
fix(merge): make sure testId from different blobs are unique (#24475)
Fixes a scenario where each shard runs the same setup project.

References #24451.
2023-07-27 18:54:00 -07:00
Pavel 0c253dafc7 chore: quote the zip pattern 2023-07-27 16:44:30 -07:00
Max Schmitt aede3c5ea9
devops: fix installation tests on low disk space machines (#24473)
Before all the browser downloads were stored in the workspace folder for
the corresponding test. After this change, we clean it up once the test
has finished to save disk space.

~800 MB per test before, now 30MB.
2023-07-27 22:43:20 +02:00
Dmitry Gozman 6c1723ca3e
test: rebaseline webkit signals.spec (#24471)
Fixes #22226.
2023-07-27 13:36:43 -07:00
Max Schmitt ad467446bb
devops: fix Selenium tests (#24472)
The issue was that it got unzipped under "chromedriver/chromedriver" and
not just under "chromedriver"
2023-07-27 22:25:57 +02:00
Pavel Feldman 335d5275cc chore: fix the zip paths in artifact upload 2023-07-27 13:14:33 -07:00
Pavel fba344d5ed chore: zip artifacts always 2023-07-27 11:31:13 -07:00
Pavel 58548640b3 chore: zip artifacts 2023-07-27 11:22:57 -07:00
Dmitry Gozman 1754755684
fix(tracing): make sure resetForReuse does not throw (#24415)
When trace chunk recording is in progress, calling `stop()` throws
`Error: Must stop trace file before stopping tracing`.
2023-07-27 08:06:42 -07:00
Dmitry Gozman 1b233a5ae2
fix(trace viewer): do not serve 304 responses (#24435)
These do not have any content, and we should server the original
response that was cached by the browser.

Fixes #24255.
2023-07-27 08:06:00 -07:00
Playwright Service 9b364f072d
feat(chromium-tip-of-tree): roll to r1136 (#24463)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-27 15:46:16 +02:00
Playwright Service b1ea9507a8
feat(chromium): roll to r1074 (#24461)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-27 15:02:40 +02:00
Andrey Lushnikov 4d38d84612
test: fix chromedriver download URL (#24464) 2023-07-27 05:53:45 -07:00
Playwright Service 7524894512
feat(firefox-beta): roll to r1421 (#24439)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-27 01:29:38 -07:00
Playwright Service 682a7f0227
feat(firefox): roll to r1421 (#24433)
Fixes https://github.com/microsoft/playwright/issues/22590

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-27 01:29:17 -07:00
Pavel Feldman dd7e53fcfe
chore: try running s2 with tracing (#24449) 2023-07-26 20:33:10 -07:00
Pavel Feldman 216d08ba94
chore: use shared test run id (#24448) 2023-07-26 18:36:33 -07:00
Dmitry Gozman c8f2fc392a
chore: move fs operation in trace recorder to a separate class (#24383) 2023-07-26 17:31:00 -07:00
Dmitry Gozman ea6d127f28
feat(connect): exposeNetwork option (#24436) 2023-07-26 17:29:31 -07:00
Pavel Feldman ececb6d19e
chore: use proper run_id (#24447) 2023-07-26 17:23:10 -07:00
Pavel Feldman 619d326f4b
chore: run os/browser matrix (#24445) 2023-07-26 17:06:09 -07:00
Dmitry Gozman e0cbb0882b
fix(launch): default to non-zero launch timeout (#24440)
When not specified, launch timeout is 3 minutes, taken from the
`DEFAULT_LAUNCH_TIMEOUT` constant.
Also, use the default launch timeout for `electron.launch()` instead of
default regular timeout.
2023-07-26 16:16:00 -07:00
Dmitry Gozman c8b45aa844
chore: validate markdown links in doclint (#24444)
Fixes #24421.
2023-07-26 16:15:07 -07:00
Dmitry Gozman 4be1e479ea
fix(artifacts): only attach screenshot when it succeeds (#24406)
Fixes #24378.
2023-07-26 15:22:04 -07:00
Pavel Feldman 517cc18c9b
chore: remove retries, skip tracing tests (#24443) 2023-07-26 14:56:38 -07:00
Pavel Feldman 0f5b4fc6f2
chore: lower workers from 20 to 10 (#24442) 2023-07-26 14:43:38 -07:00
Pavel Feldman 1ddfcf503d
chore: add yml for service2 test mode (#24441) 2023-07-26 14:32:48 -07:00
Pavel Feldman 4949cef09c
chore: save chrome trace on the client side (#24414) 2023-07-26 14:11:26 -07:00
Yury Semikhatsky e036603aa3
devops: upload blob report only for some bots in tests 2 (#24353)
For now merge-reports chokes on that many events and we end up with no
report at all.
2023-07-26 12:33:14 -07:00
Lev Chelyadinov 64deac85d2
docs(intro): update the pnpm installation method (#24397)
Signed-off-by: Lev Chelyadinov <leva181777@gmail.com>
2023-07-26 15:58:13 +02:00
Dmitry Gozman c33a32dc9e
test: unflake two tests (#24416) 2023-07-26 06:50:38 -07:00
Dmitry Gozman ed99ac7395
fix(sigint): make sure we do not add handler twice (#24413)
In the following scenario, we were adding SIGINT handler twice, but
removing it just once:
- Task runner starts testing, creates SigIntWatcher, installs SIGINT
handler.
- Press Ctrl+C, task runner interrupts, disarms SigIntWatcher, SIGINT
handler is not removed due to 1000ms cooldown.
- Task runner starts cleanup, creates SigIntWatcher, installs another
SIGINT handler.
- Cleanup finishes, SigIntWatcher disarms, could remove or not remove
SIGINT handler based on timing (same 1000ms cooldown). In any case, we
have one or two SIGINT handlers still on.
- HTML reporter hangs in onExit, while we still have SIGINT handler up,
so Ctrl+C does not exit.

Regressed in #24265.
2023-07-25 18:35:38 -07:00
Pavel Feldman b39fd7283f
chore: skip tests that fail in cross-machine service mode (#24412) 2023-07-25 16:47:04 -07:00
Dmitry Gozman ed14bf2103
test: replace sendSIGINTAfter with interactWithTestRunner (#24411)
This way we can send multiple SIGINTs in tests.
2023-07-25 15:46:39 -07:00
Dmitry Gozman 9d0bba9c99
fix(tracing): do not throw on missing attachments (#24409)
Fixes #24378.
2023-07-25 14:32:56 -07:00
Pavel Feldman 33d62d9a97
chore: do not use relative xpath when querying from document (#24405)
Fixes https://github.com/microsoft/playwright/issues/24399
2023-07-25 12:55:35 -07:00
Pavel Feldman d81b35b836
chore: fix docs typo (#24388) 2023-07-25 12:55:06 -07:00
Playwright Service afd6f7d342
feat(chromium-tip-of-tree): roll to r1135 (#24393)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-25 15:05:56 +02:00
Max Schmitt 5c41c6e799
chore: allow installing Google Chrome on Debian (#24386)
Fixes https://github.com/microsoft/playwright/issues/24357
2023-07-25 00:52:19 +02:00
Max Schmitt c4ecdcfc22
chore: lint code snippet languages (#24381)
Follow-up to https://github.com/microsoft/playwright/pull/24367.
2023-07-25 00:32:46 +02:00
Dmitry Gozman 4c8912f74e
chore: remove separate process that cleans up directories (#24376)
A separate process is `spawnSync`'ed on process exit to cleanup
temporary directories, introduced in #13769 that followed up after
#13343.

A separate process might stall for various fs-related issues, which
prevents the original process from exiting.

With the recent changes, we always gracefully close and cleanup after
all launched executables before calling `process.exit()`, and so it
should only be possible to leave temp directories when using Playwright
and calling `process.exit()` programmatically without closing browsers.

We can now drop the extra process and rely on `rimraf.sync` for
last-resort cleanup in these rare circumstances.
2023-07-24 15:24:29 -07:00
Sander 1abff78de2
fix(ct): remove json typechecking (#24114) 2023-07-24 15:22:20 -07:00
Marcin Strzyz 78a2b7237e
feat: add screen definitions for ipad gen 5 (#24355) 2023-07-24 14:57:12 -07:00
Pavel Feldman 4ba6d789bc
Revert "chore: refactor timeout manager to use scopes (1) (#24315)" (#24382)
This reverts commit f5df0940c9.
2023-07-24 14:09:20 -07:00
Playwright Service d144c5e6e3
feat(webkit): roll to r1879 (#24380)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-24 22:40:54 +02:00
Max Schmitt 1634ec8766
chore: introduce code snippet linting infra (#23960) 2023-07-24 22:27:44 +02:00
Max Schmitt 95fc194e71
docs(annotations): grep snippets follow-ups #24304 (#24367)
Follow-ups to #24304.

Wasn't rendered otherwise:
https://playwright.dev/docs/next/test-annotations
2023-07-24 20:10:39 +02:00
Max Schmitt b1ab6484da
docs(test-runner): add new playwright-features (#24368)
https://github.com/microsoft/playwright-pytest/pull/148
https://github.com/microsoft/playwright-pytest/pull/146
2023-07-24 20:09:09 +02:00
Andrey Lushnikov fee08a6d3b
fix: properly handle character sets in globs (#24371)
https://github.com/microsoft/playwright/issues/24316
2023-07-24 09:49:05 -07:00
Dmitry Gozman b4c412eb1f
chore: replace process.exit with graceful closure (#24242)
Everywhere we call `process.exit()`, we might actually need to
gracefully close all browsers.
2023-07-24 08:29:29 -07:00
Alex Ravenna b93b2a7155
docs: fix minor grammar and text issues (#24331) 2023-07-24 14:59:15 +02:00
Dmitry Gozman 2cb0622c39
chore: rename ScopedRace to LongStandingScope, preserve Error instance in reject() (#24361) 2023-07-23 21:00:07 -07:00
Marcin Strzyz 2070861807
chore: ensure the file operations are async in the json reporter. (#24356) 2023-07-23 09:26:32 +02:00
jaktestowac.pl f453a17ede
docs(test-annotations): add grep scripts examples for windows shells (#24304)
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-07-22 00:30:40 +02:00
Yury Semikhatsky 6a3721eb9c
chore: delete --attachments option from merge-reports command (#24350)
We recommend uploading all resources along with the generated report. If
need be we'll reconsider adding the option later.
2023-07-21 13:15:00 -07:00
Andrey Lushnikov d307c8e63a
fix(ssim-cie94): make sure a single off pixel yields diff in comparator (#24348)
This patch brings in antialiasing tests from `looks-same` project for
our experimental `ssim-cie94` comparator.

One of the new tests found a bug in our implementation.

References https://github.com/microsoft/playwright/issues/24312
2023-07-21 12:27:52 -07:00
Yury Semikhatsky c40a1dd418
devops: drop --attachments missing option (#24349)
Since all resources are uploaded in the separate workflow anyway there
is not much point in passing the options and uploading blob reports as a
separate step.
2023-07-21 11:34:59 -07:00
Playwright Service aa39f39bda
feat(webkit): roll to r1878 (#24340)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-21 09:55:30 +02:00
Pavel Feldman f5df0940c9
chore: refactor timeout manager to use scopes (1) (#24315) 2023-07-20 17:21:21 -07:00
Dmitry Gozman 767addec8c
chore: make sure to call task's teardown if it has ever started (#24317)
This way things like WebServerPlugin can cleanup after themselves even
if they failed to start or were interrupted mid-way.
2023-07-20 17:16:22 -07:00
Yury Semikhatsky 59d5198d17
fix(fetch): handle negative max-age and expires attributes (#24311)
Fixes #24221
2023-07-20 15:42:52 -07:00
Yury Semikhatsky b2965158d3
chore: roll stable test runner to July 19 (#24314) 2023-07-20 15:40:57 -07:00
Max Schmitt c7a5de6bb8
docs(ci): fix .NET AzDo snippet (#24333)
Fixes https://github.com/microsoft/playwright-dotnet/issues/2645

Signed-off-by: Max Schmitt <max@schmitt.mx>
2023-07-20 18:54:51 +02:00
Playwright Service 57305e985e
feat(webkit): roll to r1877 (#24330)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-20 17:47:21 +02:00
Playwright Service 80daf47d44
feat(chromium): roll to r1073 (#24326)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-20 16:15:56 +02:00
Playwright Service 7ba60ca91d
feat(chromium-tip-of-tree): roll to r1134 (#24325)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-20 16:15:40 +02:00
Playwright Service fdfe4ca275
chore(driver): roll driver to recent Node.js LTS version (#24321) 2023-07-20 12:15:16 +02:00
Yury Semikhatsky 8b454cb3c3
devops: merge reports fall pw tests in tests 2 (#24309) 2023-07-19 13:01:52 -07:00
Yury Semikhatsky e3ef358906
devops: merge reports on PRs only (#24307) 2023-07-19 12:03:31 -07:00
Playwright Service eac47ce913
feat(webkit): roll to r1876 (#24302)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-07-19 18:24:59 +02:00
Playwright Service 20fcd6b272
feat(webkit): roll to r1875 (#24299)
Since
99ff08340f
search event is disabled in cocoa.

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-07-19 18:24:21 +02:00
Max Schmitt 1288519915
fix(ui-mode): run teardown handlers with Command + C (#24267)
Fixes https://github.com/microsoft/playwright/issues/23907
2023-07-19 17:50:25 +02:00
Andrey Lushnikov 1fdd7541e0
chore: add firefox-asan for stress tests (#24049) 2023-07-19 05:53:52 -07:00
Playwright Service fbb384483b
feat(webkit): roll to r1874 (#24297)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-07-19 14:20:19 +02:00
Playwright Service a136763118
feat(webkit): roll to r1873 (#24296)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-19 14:19:05 +02:00
Max Schmitt 9af0c6d822
chore: remove glob dependency from utils bundle (#24291) 2023-07-19 05:17:34 +02:00
Pavel Feldman 879ddb73b0
chore: show last poller error on test timeout (#24292) 2023-07-18 17:03:26 -07:00
Marcin Strzyz d5e7b4f16f
chore: update rimraf package to version 4 to eliminate "promisify" (#24190)
Migrate to version 4 which returns a promise rather than leverages a
callback. -> https://www.npmjs.com/package/rimraf?activeTab=readme

- contains its own types, eliminate "@types/rimraf"
- Parameter `maxBusyTries` changed to `maxRetries`
2023-07-18 19:58:07 +02:00
Marcin Strzyz 0eb94aaa79
chore: refactored minimum Node Major version to variable (#24188) 2023-07-18 19:57:48 +02:00
John Harrington bca32f389b
docs(test-ui-mode): fix "it's" to possessive "its" (#24143) 2023-07-18 19:41:04 +02:00
Max Schmitt d2f581a19c
fix(test-runner): don't double emit SIGINT in long running test (#24265)
https://github.com/microsoft/playwright/issues/23907

This fixes the following scenario. You press Command + C during the
test-execution, then a global teardown will execute, which takes a long
time and before this on macOS did sometimes end up in an unwanted SIGINT
received inside the globalTeardown handler. After this change this won't
happen anymore.
2023-07-18 18:46:18 +02:00
Andrey Lushnikov 0b2516d71a
docs: explicitly set CI=true in Azure DevOps pipeline (#24278)
Fixes https://github.com/microsoft/playwright/issues/24274

---------

Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-07-18 09:39:14 -07:00
Yury Semikhatsky d0280ec8c7
chore(blob): drop shard number from report name (#24270)
We store shard number in the report metadata event and then sort shard
files by shard number. This guarantees that within each project sharded
events will always go in stable order.
2023-07-18 09:29:25 -07:00
Playwright Service b24ec33aa9
feat(chromium-tip-of-tree): roll to r1133 (#24280)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-18 15:11:01 +02:00
Playwright Service 57da4c200a
feat(chromium): roll to r1072 (#24279)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-18 15:10:30 +02:00
Yury Semikhatsky 91346c7012
chore: focus failed and flaky tests, no links in title (#24269)
Links don't work in the check titles:

<img width="503" alt="image"
src="https://github.com/microsoft/playwright/assets/9798949/6ad8f3d3-b96f-4f62-9d4e-cc3d473fd97a">
2023-07-17 17:48:40 -07:00
Pavel Feldman 5ff1fadd7b
chore: apply only filtration to deps (#24268) 2023-07-17 16:48:52 -07:00
Yury Semikhatsky f6540f89ea
chore(markdown): do not print details for flaky tests (#24264) 2023-07-17 16:09:59 -07:00
Yury Semikhatsky 15b9e5afdb
fix: print fatal and no snippet errors in markdown report (#24263) 2023-07-17 13:50:00 -07:00
Pavel Feldman af3e735147
chore: additional test for setup/teardown (#24261) 2023-07-17 12:29:16 -07:00
Yury Semikhatsky 896390d952
docs: merge report guide (#24246) 2023-07-17 10:18:05 -07:00
Raphi 2d9cdb6ab4
docs(java): add support for Chrome DevTools Protocol (#24150)
Implemented in https://github.com/microsoft/playwright-java/pull/1329
2023-07-17 10:12:04 -07:00
Pavel Feldman 49c1f9eb02
feat(ui): run deps in UI mode if dep projects are checked (#24245) 2023-07-15 15:11:31 -07:00
Yury Semikhatsky d92db9a513
devops: always create blob report on CI, write PR number within action (#24241) 2023-07-14 15:10:29 -07:00
Dmitry Gozman 41643d070f
docs: add a warning to selenium-grid.md (#24236) 2023-07-14 12:44:22 -07:00
Yury Semikhatsky 3616023cf6
chore: markdown report details (#24237) 2023-07-14 12:32:25 -07:00
Yury Semikhatsky b11fa7435b
fix: mergeWorkflowUrl initialization (#24238) 2023-07-14 12:24:58 -07:00
Dmitry Gozman 97d55e275d
fix(locator): locator(locator) method uses internal:chain instead of >> (#24235)
Usually, we can just chain two locators with `>>` to implement
`Locator.locator(locator)`. However, this does not play nicely with more
advanced inner locators like `or` and `and`:

```ts
const child = page.locator('input').or(page.locator('button'));
page.locator('parent').locator(child);
```

One would expect the above to locate "input or button" inside a
"parent". However, currently it locates "input inside a parent" or
"button", because it's translated to `parent >> input >>
internal:or="button"`.

To fix this, we have to wrap inner locator into `internal:chain` and
query it separately from the parent.

Fixes #23724.
2023-07-14 12:21:45 -07:00
Yury Semikhatsky 1b1cf87e0a
devops: add upload report action (#24222)
* Fix report downloading from Azure (reports are now zipped)
* Extracted upload logic into an action
* Extracted PR number file generation into its own job
2023-07-14 08:21:15 -07:00
Dmitry Gozman 98f3ca05b9
fix(tracing): only access tracing state on the API calls, not inside trace operations (#24212)
References #23387.
2023-07-14 06:19:54 -07:00
Pavel Feldman 5d799606c3
chore: resolve top-level vs dependency after cli filtering (#24216) 2023-07-13 17:54:08 -07:00
Yury Semikhatsky 5ccd4b0632
chore: linkify Test results title (#24220) 2023-07-13 16:46:17 -07:00
Pavel Feldman 33bab3652d
fix(ui): bump min sidebar size (#24193) 2023-07-13 15:14:49 -07:00
Max Schmitt 18dfe680f5
chore: remove heapdump dependency (#24218) 2023-07-13 21:31:58 +02:00
Max Schmitt 57cca1d96e
Revert "fix: do not collide with other tests when test names have special chars (#23414)" (#24213)
This reverts commit 4b1b4dc23b.

https://github.com/microsoft/playwright/issues/24184

Reopens https://github.com/microsoft/playwright/issues/23386
2023-07-13 20:03:02 +02:00
Yury Semikhatsky 15c6dad114
chore: test cleanup (#24211)
The functionality was fixed in
https://github.com/microsoft/playwright/pull/24201.

 Fixes #24201
2023-07-13 09:57:51 -07:00
Max Schmitt b483bf9fcc
feat: add support for Debian 12 for Firefox/WebKit (#24206)
https://github.com/microsoft/playwright/issues/23532

---------

Signed-off-by: Max Schmitt <max@schmitt.mx>
2023-07-13 12:56:44 +02:00
Andrey Lushnikov 615f5afb2b
feat(firefox): roll Firefox to 1420 (#24205)
Fixes https://github.com/microsoft/playwright/issues/22753
2023-07-13 03:54:47 -07:00
Playwright Service 7787988043
feat(webkit): roll to r1872 (#24201)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-07-13 11:07:33 +02:00
Playwright Service 04be72213b
feat(chromium-tip-of-tree): roll to r1132 (#24204)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-13 10:58:13 +02:00
Yury Semikhatsky cc51d13c36
test: request cookie order is same as in set-cookie (#24194) 2023-07-12 17:40:53 -07:00
Dmitry Gozman 53feeaf270
fix(tracing): avoid trace file name collisions (#24191)
We have been optionally adding `-<number>` in multiple places, and these
might collide in various circumstances, for example: two contexts at the
same time, one of them has the second trace chunk.

References #23387.
2023-07-12 17:20:25 -07:00
Pavel Feldman 53bf1995db
chore: do not leak internal page handles after closing page (#24169)
Partial fix for https://github.com/microsoft/playwright/issues/6319

After this fix, the following scenario won't leak and the context state
(cookies, storage, etc) can be reused by the new page sessions:

```js
  for (let i = 0; i < 1000; ++i) {
    const page = await context.newPage();
    await page.goto('...');
    await page.close('...');
  }
```
2023-07-12 14:51:13 -07:00
Yury Semikhatsky ea1ec112d8
fix: add missing fs import (#24185)
Fixes 

```
Notice: Report url: https://mspwblobreport.z1.web.core.windows.net/run-5533005176-1-a0b0752662f8af5f841ff7a65b04d02066474ff2/index.html
ReferenceError: fs is not defined
    at eval (eval at callAsyncFunction (/home/runner/work/_actions/actions/github-script/v6/dist/index.js:15143:16), <anonymous>:30:18)
    at callAsyncFunction (/home/runner/work/_actions/actions/github-script/v6/dist/index.js:15144:12)
    at main (/home/runner/work/_actions/actions/github-script/v6/dist/index.js:15236:26)
    at /home/runner/work/_actions/actions/github-script/v6/dist/index.js:15217:1
    at /home/runner/work/_actions/actions/github-script/v6/dist/index.js:15268:3
    at Object.<anonymous> (/home/runner/work/_actions/actions/github-script/v6/dist/index.js:152[71](https://github.com/microsoft/playwright/actions/runs/5533535965/jobs/10097205178#step:12:72):12)
    at Module._compile (node:internal/modules/cjs/loader:1105:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
```
2023-07-12 10:59:44 -07:00
Max Schmitt a0b0752662
fix: encode launch options correctly when reusing browser (#24174)
Fixes https://github.com/microsoft/playwright/issues/24157
2023-07-12 16:40:55 +02:00
Playwright Service 6e02fda2a0
feat(firefox-beta): roll to r1419 (#24165)
Fixes https://github.com/microsoft/playwright/issues/24081

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-12 03:28:20 -07:00
Dmitry Gozman 76d85c55cf
chore: remove unused code (#24167) 2023-07-11 15:08:05 -07:00
Yury Semikhatsky 8fbcffa43e
chore: publish markdown report as a comment (#23825) 2023-07-11 14:27:58 -07:00
Yury Semikhatsky 700a925565
test: simplify emulate media + connectOverCDP test (#24166) 2023-07-11 14:20:05 -07:00
Yury Semikhatsky ee9f9e3239
test: emulate media should be isolated between CDP sessions (#24110)
Failing test for #24109
2023-07-11 11:34:18 -07:00
Pavel Feldman 067faa50d7
chore: migrate Promise.race to scopes to prevent leaks (#24160) 2023-07-11 10:38:08 -07:00
Dmitry Gozman aeba083da0
fix(snapshots): match resources by method (#24145)
Fixes #24144.

Previously, we only matched by url, which confuses GET and HEAD requests
where the latter is usually zero-sized.

Also make sure that resources are sorted by their monotonicTime, since
that's not always the case in the trace file, where they are sorted by
the "response body retrieved" time.
2023-07-10 20:04:48 -07:00
Pavel Feldman 63915dc07a
feat(trace): render Node console messages in trace (#24139) 2023-07-10 18:36:28 -07:00
Pavel Feldman e234a6a037
chore: make tracing before/after test more robust (#24136) 2023-07-10 18:36:15 -07:00
dependabot[bot] 36588ba98e
chore(deps): bump semver and @babel/core in /packages/playwright-test/bundles/babel (#24082)
Fixes https://github.com/microsoft/playwright/issues/23903

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-07-10 23:40:28 +02:00
Max Schmitt 1c2313d641
chore: upgrade esbuild to 0.18.11 (#24123) 2023-07-10 22:35:05 +02:00
Pavel Feldman 67ad2c2bf4
feat(ui): render all console / network messages in trace (#24115) 2023-07-10 12:56:56 -07:00
Andrey Lushnikov 74cf869c03
docs: add release notes for 1.36 (#24135) 2023-07-10 11:58:52 -07:00
Andrey Lushnikov 94d6b1210b
fix: do not create empty directories for successful snapshot tests (#24127)
Fixes https://github.com/microsoft/playwright/issues/15600
2023-07-10 09:45:24 -07:00
Andrey Lushnikov 19474bef78
chore: update WebKit browser version to 17.0 (#24128) 2023-07-10 08:08:00 -07:00
Max Schmitt 6ab6cde929
docs(python): remove await in sync code snippet (#24124) 2023-07-10 16:08:39 +02:00
Playwright Service b4ffb848de
feat(webkit): roll to r1870 (#24119) 2023-07-10 08:09:08 +02:00
Max Schmitt 37b3531a11
docs(python): fix code snippet in emulation guide (#24108)
Fixes https://github.com/microsoft/playwright-python/issues/1997

Signed-off-by: Max Schmitt <max@schmitt.mx>
2023-07-08 10:08:10 +02:00
Pavel Feldman 50ba25e9a1
fix(trace): do not allow after w/o before (#24106)
Fixes https://github.com/microsoft/playwright/issues/24087,
https://github.com/microsoft/playwright/issues/23802
2023-07-07 17:16:26 -07:00
Andrey Lushnikov a9560253f8
chore: cut 1.36.0 (#24104) 2023-07-07 13:01:17 -07:00
Playwright Service 9bca9f1b4f
feat(chromium): roll to r1071 (#24098)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-07 16:51:03 +02:00
Playwright Service 90c92c5724
feat(firefox): roll to r1419 (#24091)
Fixes https://github.com/microsoft/playwright/issues/24080

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-06 22:43:03 -07:00
Andrey Lushnikov b9e68e22e0
feat: support Chromium installation on Debian 12 (#24090)
This adds Chromium support for both x86 and arm64 versions of Debian 12.

References https://github.com/microsoft/playwright/issues/24028
2023-07-06 22:41:36 -07:00
Andrey Lushnikov 9af2b518f2
fix: exclude tracesDir option from launchOptions fixture (#24086)
Fixes https://github.com/microsoft/playwright/issues/23645
2023-07-06 13:31:44 -07:00
Andrey Lushnikov 3536e81d77
chore: update browser patches as of May 26, 2023 (#23556) (#24079)
Internal commit reference:

2e6d52519c
2023-07-06 12:22:45 -07:00
Andrey Lushnikov 11dce8d127
feat(firefox): roll Firefox to 1417 (#24069)
Fixes https://github.com/microsoft/playwright/issues/23280
2023-07-06 12:18:02 -07:00
Pavel Feldman 0409bfca56
chore: ensure module deps in ct-core (#24056)
Fixes https://github.com/microsoft/playwright/issues/23823
2023-07-06 12:01:45 -07:00
Pavel Feldman 608e336dba
fix(error): create a step for raw runtime error (#24057)
Fix https://github.com/microsoft/playwright/issues/23850
2023-07-06 10:48:12 -07:00
Debbie O'Brien 88010333f3
docs: fix har example (#23982) 2023-07-06 15:04:03 +02:00
Pavel Feldman 566b277ce8
fix(steps): only propagate soft errors up the hierarchy (#24054)
Fixes https://github.com/microsoft/playwright/issues/23979
2023-07-05 15:30:53 -07:00
Andrey Lushnikov ea3a29eacd
feat(firefox): roll Firefox to 1415 (#24046)
Fixes https://github.com/microsoft/playwright/issues/23618
2023-07-05 11:58:38 -07:00
Pavel Feldman df57fb594c
fix(trace): render items under expect.toPass (#24016)
Fixes: https://github.com/microsoft/playwright/issues/23942
2023-07-05 11:20:28 -07:00
Playwright Service 9f1f737acb
feat(chromium): roll to r1070 (#23991)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-03 21:27:07 +00:00
Playwright Service b3c4f45759
feat(webkit): roll to r1869 (#24011)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-03 21:26:46 +00:00
Pavel Feldman 6343ea2795
feat(trace): allow scrolling the filmstrip (#24015)
Fixes https://github.com/microsoft/playwright/issues/23963
2023-07-03 13:03:33 -07:00
Patrick Shaw 6e78dcb7dc
fix: Allow portable bash paths for systems including NixOS (#23889)
Although very common, bash is not guaranteed to be located at
`/bin/bash`. NixOS is an example of this.

More commonly, `/bin/bash` can be quite out of date. An example of this
is MacOS's version of `bash`. This realistically won't affect Playwright
but it's worth noting. You can technically update MacOS's system version
of bash but you need elevated permissions to do so.

By using `/usr/bin/env bash` instead of `/bin/bash` we can execute
Playwright's bash scripts in like NixOS and generally improve the
selection behaviour for bash in other systems too.

Some discussion of why it's worth favouring `/usr/bin/env bash` over
`/bin/bash`:
- Discusses `/bin/bash` missing in NixOS:
https://discourse.nixos.org/t/add-bin-bash-to-avoid-unnecessary-pain/5673
- Some general commentary on why `/usr/bin/env bash` is favoured:
https://askubuntu.com/a/1402721
- Points out how old bash is in MacOS:
https://itnext.io/upgrading-bash-on-macos-7138bd1066ba

Improves situation at #5501
2023-07-03 06:27:06 -07:00
Dmitry Gozman 7e310f79af
chore: migrate builtin reporters to ReporterV2 (#23985)
This allows builtin reporters to handle stdio between onConfigure and
onBegin.

Fixes #23539.
2023-06-30 16:21:31 -07:00
Dmitry Gozman 86c1abd934
chore: introduce ReporterV2 interface (#23983) 2023-06-30 13:36:50 -07:00
Dmitry Gozman 92c738b14a
test: unflake some tests (#23984) 2023-06-30 13:08:18 -07:00
Dmitry Gozman e28312ba63
chore: call onEnd(result) on InternalReporter (#23972)
Drive-by: fix watch mode not running global teardown.
2023-06-29 17:03:10 -07:00
Max Schmitt a07626b804
feat(webkit): roll to r1868 (#23969)
GitHub had an outage so the PR didn't get created automatically.

Closes https://github.com/microsoft/playwright/pull/23931.
2023-06-29 23:27:48 +02:00
Max Schmitt f7b34e3172
fix(dotnet): generate bool? correctly in generated transport channel types (#23966)
https://github.com/microsoft/playwright-dotnet/issues/2581
2023-06-29 22:16:16 +02:00
Max Schmitt fef029e98e
docs: code snippet alignments (#23959) 2023-06-29 18:26:19 +02:00
Playwright Service c2127595b8
feat(chromium-tip-of-tree): roll to r1128 (#23956)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-29 15:17:16 +02:00
Dmitry Gozman 1d0b48f18b
fix(route): handle escapes in the glob pattern (#23932)
Fixes #23303.
2023-06-28 16:33:04 -07:00
Dmitry Gozman 1ab99fe1b8
feat(electron): support tracesDir option (#23947)
References #23620.
2023-06-28 16:32:16 -07:00
Dmitry Gozman b0b429fed0
feat: support bigint in evaluates (#23930)
Fixes #22719.
2023-06-28 08:55:45 -07:00
Debbie O'Brien c6a0f3e8a0
docs: improve example for mock API (#23759) 2023-06-27 19:01:39 +02:00
Playwright Service 2808f3700a
feat(chromium-tip-of-tree): roll to r1127 (#23923)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-27 15:25:01 +02:00
Max Schmitt 138e143030
docs: fix leftover broken Node.js code snippets (#23919) 2023-06-27 14:39:44 +02:00
Max Schmitt 9980f054bc
docs: align Node.js code snippets with ESLint (#23916) 2023-06-27 11:53:53 +02:00
Max Schmitt 71650f9bd1
docs(python): fix syntactically incorrect snippets (#23904) 2023-06-27 11:53:27 +02:00
Max Schmitt 4b1b4dc23b
fix: do not collide with other tests when test names have special chars (#23414)
Fixes https://github.com/microsoft/playwright/issues/23386
2023-06-27 10:34:31 +02:00
Max Schmitt dcdf38f119
chore: keep UI Mode running when used with browser mode (#23876)
This will keep UI Mode running in browser mode. When launched in normal
persistent context mode, we know when the persistent context closes, so
we can run the project teardown code.

Fixes https://github.com/microsoft/playwright/issues/23801
2023-06-26 22:21:44 +02:00
Max Schmitt 9a580af1e6
devops: disable npm audit on CI (#23902) 2023-06-26 20:00:43 +02:00
Max Schmitt 69ae8c1a28
docs(dotnet): fix syntactically incorrect code snippets (#23900) 2023-06-26 18:21:14 +02:00
Max Schmitt e1c220a37b
fix(trace-viewer): file path contains encoded characters (#23893)
This fixes:

```
npx playwright show-trace %20I%20Love%20Node.zip
```

Extracted from https://github.com/microsoft/playwright/pull/23414.
2023-06-26 18:13:40 +02:00
zhengjitf 6f67f6b52b
fix(chromium): can get correct orientation angle on non-mobile devices (#23796)
Fix #23772
2023-06-23 11:34:09 -07:00
Debbie O'Brien a18475eaab
docs: add release video to notes (#23880) 2023-06-23 20:04:59 +02:00
Playwright Service f85480a12e
feat(firefox-beta): roll to r1415 (#23866)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Andrey Lushnikov <aslushnikov@gmail.com>
2023-06-23 07:03:20 -07:00
Dmitry Gozman 5821c547aa
fix(selector generator): use the same label definition as getByLabel (#23846)
This extracts `getElementLabels` helper function to be used both for
generating and querying.
2023-06-22 08:34:08 -07:00
Moritz Horstmann bdac3e28a6
fix: best-effort support for TUXEDO OS (#23813)
TUXEDO OS is an Ubuntu based distribution built by the Linux computer
vendor TUXEDO.
2023-06-22 07:14:18 -07:00
Playwright Service ddc0278d81
feat(chromium-tip-of-tree): roll to r1126 (#23858)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-22 15:55:16 +02:00
Playwright Service f7ecb7094d
feat(chromium): roll to r1069 (#23856)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-22 15:54:56 +02:00
Playwright Service f7ae17db09
feat(webkit): roll to r1865 (#23847)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-22 12:07:49 +02:00
Playwright Service b15cdc8ce8
chore(driver): roll driver to recent Node.js LTS version (#23854)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-22 12:06:44 +02:00
Dmitry Gozman b154ff1190
fix(html reporter): do not print epilogue in list mode (#23822)
References #23817.
2023-06-21 17:53:52 -07:00
Max Schmitt 605dfde2be
chore: rename popout.html to snapshot.html in trace viewer (#23842)
Turns out its caused by a uBlockOrigin EasyList entry which thinks we
are an ad since we call ourselves "popout.html". See this entry:


e7883cfe74/easylist/easylist_general_block_popup.txt (L42)

Fixes https://github.com/microsoft/playwright/issues/23799
2023-06-21 21:10:50 +02:00
Ben Hofferber 752176fd23
feat(goto): better navigation error message (#23609)
While this log message is only a sanity check, it is still beneficial to
have a message that can better inform what is happening when this
occurs.
2023-06-21 11:10:35 -07:00
Max Schmitt a658c4fd05
docs: discourage from caching browsers (#23814)
As per https://github.com/epicweb-dev/epic-stack/pull/204 and
https://twitter.com/kentcdodds/status/1670857818604474368.
2023-06-21 14:04:15 +02:00
awatson-scottlogic 3777fc8b0f
docs(class-testoptions): fix launchOptions snippet (#23831) 2023-06-21 14:03:26 +02:00
Yury Semikhatsky 6a6ff9cf6a
feat: markdown report (#23819)
Simple markdown report generator. Can be used when posting updates to
GitHub PRs:

<img width="632" alt="image"
src="https://github.com/microsoft/playwright/assets/9798949/ea7e4bfa-477a-4cad-9cc3-00b1f8a314b1">
2023-06-20 12:11:32 -07:00
Andrey Lushnikov 1736479e41
fix: fix locator picker in Trace (#23820)
- make sure links are not clickable with enabled locator picker
- make sure locator picker state is preserved when switching actions
2023-06-20 11:39:21 -07:00
Playwright Service 270135faaf
feat(chromium-tip-of-tree): roll to r1125 (#23806)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-20 16:15:22 +02:00
Max Schmitt 5927b5e92b
test: unflake 'should return url with basic auth info' test (#23798)
On android there is no localhost. We should never use just localhost.
2023-06-20 11:06:30 +02:00
Playwright Service 7a060d13f0
feat(webkit): roll to r1864 (#23794)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-20 09:29:15 +02:00
Dmitry Gozman fe5c9dad4d
fix(locators): allow identical frameLocators inside and/or/has (#23740)
So, the following will work:

```
page.frameLocator('iframe').locator('span').or(page.frameLoactor('iframe').locator('div'))
```

The following will not work, because frame locators are not exactly the
same:

```
page.frameLocator('#iframe1').locator('span').or(page.frameLoactor('#iframe2').locator('div'))
```

Also improve the error message to be more readable and include the
locator.

Fixes #23697.
2023-06-19 15:22:26 -07:00
Dmitry Gozman fbb5d48283
feat(expect): roll to v29.5.0 (#23629)
There is a breaking in change in the `MatcherContext` that is passed to
matcher functions, so we now have `!!this.isNot` in a few places. The
same could happen to custom matcher in the wild.

```ts
// Old
{
  isNot: boolean;
  promise: string;
}
```

```ts
// New
{
  isNot?: boolean;
  promise?: string;
}
```

Fixes #23612.
2023-06-19 15:18:59 -07:00
Dmitry Gozman 2c8dd67b0e
fix(test runner): improve error message for non-stable test titles (#23792)
Fixes #23779.
2023-06-19 14:13:11 -07:00
Sander 9d3edb0aa3
fix(ct): vue3 fallthrough events & callbacks (#23649)
closes:
https://github.com/microsoft/playwright/issues/23526#issuecomment-1583074280

closes: https://github.com/microsoft/playwright/issues/23435
2023-06-19 11:20:37 -07:00
vemv 380209af37
chore: log when websockets are proactively closed (#23689)
Closes https://github.com/microsoft/playwright/issues/23566

n.b., while that issue describes a fairly specific "use case", this
logging is simple and generic. It seems very plausible that it can help
diagnose all sorts of issues.

Cheers - V
2023-06-19 11:12:02 -07:00
Max Schmitt 0f9f863183
fix(codegen): generate no Enter keyboard events for textareas (#23775)
Fixes https://github.com/microsoft/playwright/issues/23774
2023-06-19 17:07:37 +02:00
Andrey Lushnikov e171194c86
feat(firefox): roll Firefox to 1414 (#23768)
- roll Firefox stable to 1414
- roll Firefox beta to 1414

Fixes #23138
2023-06-17 12:10:20 -07:00
Dmitry Gozman 132a5a4bf5
fix(trace viewer): prefer latest resource with the same url (#23763)
When rendering snapshot, disregard earlier resources with the same url,
because it's most likely that the latest one was used for rendering.

An example would be reloading the page before the stylesheet has
finished loading. In this case, the stylesheet will be requested twice,
and the second copy that was not aborted should be used for the
snapshot.

Fixes #23709.
2023-06-17 06:58:16 -07:00
Yury Semikhatsky f6d86c20f3
chore: run more reporter tests through blob report, some fixes (#23765) 2023-06-16 21:30:55 -07:00
Dmitry Gozman 09b1e3ffa9
fix(chromium): response.body() for worker requests should work (#23764)
Previously, worker requests used page's session to call
`Network.getResponseBody`.

Fixes #23750.
2023-06-16 20:44:32 -07:00
Yury Semikhatsky 426d6dde0e
chore: dedup mergeReport fixture (#23762) 2023-06-16 16:40:55 -07:00
Max Schmitt ba9666bb0c
docs(intro): Python drop 3.7 support (#23748)
Python 3.7 is EOL with our next release, so we can drop it.

https://github.com/microsoft/playwright-python/pull/1980

Signed-off-by: Max Schmitt <max@schmitt.mx>
2023-06-16 21:50:29 +02:00
Max Schmitt b44723708c
chore: move extracting of browser out-of-process (#23739)
https://github.com/microsoft/playwright/issues/23729
2023-06-16 20:40:15 +02:00
Dmitry Gozman de422b5afb
chore: speedup multiple roleUtils calls (#23745)
When generating a selector, we tend to match by role and call various
roleUtils methods multiple times.

Apply the usual pattern for "nested operations counter" and aggressively
cache the results.
2023-06-16 11:39:39 -07:00
Yury Semikhatsky 11770156eb
feat(html): show number of filtered tests, update total time (#23743) 2023-06-16 09:22:57 -07:00
Machiel-B 0358f6c434
fix: make trace viewer not use 301 to redirect (#23757) 2023-06-16 18:16:01 +02:00
Playwright Service d92a648284
feat(chromium): roll to r1068 (#23756) 2023-06-16 17:57:45 +02:00
Max Schmitt 4d02aa1e52
chore: render locator in trace viewer timeline label (#23754) 2023-06-16 17:56:11 +02:00
Dmitriy Dudkevich fc8f0101c8
fix(selenium): send additional headers to delete session method (#23719)
In the process of completing the task -
https://github.com/microsoft/playwright/pull/23348, I didn't notice the
need to pass headers to the session deletion method. So I fixed it here.
And support headers for selenium@3.
2023-06-16 11:44:04 +02:00
Dmitry Gozman d11bc88784
chore(codegen): do not use accessible name for non-text selectors (#23717)
Accessible name usually includes text, so we don't want it for non-text
selectors, e.g. for `expect()` selectors.
2023-06-15 12:30:18 -07:00
Max Schmitt 8ed956e496
chore: move pw-core utilsBundleImpl into own directory (#23706)
https://github.com/microsoft/playwright/issues/23666
2023-06-15 20:16:47 +02:00
Playwright Service bad09acb87
feat(webkit): roll to r1863 (#23734)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-15 20:10:54 +02:00
Yury Semikhatsky fd49940d2b
docs: add missing expect import (#23737)
Fixes #23736
2023-06-15 11:10:03 -07:00
Max Schmitt 421872f130
test: rewrite 'should fulfill json' test (#23735) 2023-06-15 18:46:19 +02:00
Playwright Service 8602981d87
feat(chromium-tip-of-tree): roll to r1124 (#23733)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-15 17:08:53 +02:00
Yury Semikhatsky b032e10973
chore: roll stable test runner to jun-15-2023 (#23722) 2023-06-14 18:41:42 -07:00
Yury Semikhatsky 77d322028c
feat(blob): zip .jsonl report files (#23720)
For linux tests without tracing blob-report-1.zip takes 19M, while
unpacked size is 228 MB. That size is counted for GitHub artifact
billing:

<img width="434" alt="image"
src="https://github.com/microsoft/playwright/assets/9798949/5bc32511-6686-4581-a348-acb6a54cd99b">

We zip individual .jsonl reports so that they still have unique names
and can be easily uploaded into the same artifacts directory without
name collisions.
2023-06-14 17:10:39 -07:00
Max Schmitt 60de8308a8
chore: bundle open's xdg-open script (#23710) 2023-06-14 20:49:26 +02:00
Andrey Lushnikov dc81cfaf81
Revert "fix: scroll timeline with multiple pages in context (#23493)" (#23711)
This reverts commit a4d361379f.

Reason for revert: this breaks screencast preview (the image
that is shown when you hover over the screencast).
2023-06-14 11:41:42 -07:00
Andrey Lushnikov 3c0fab489b
chore: miscellaneous trace viewer fixes (#23695)
- properly annotate continued requests
- nest `attach` steps inside the related `expect` step
- fix primary-id-to-non-primary-id mapping
- make sure images in trace are not draggable

Fixes #23693

---------

Signed-off-by: Andrey Lushnikov <aslushnikov@gmail.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-06-14 09:37:19 -07:00
Max Schmitt 9e636687ea
chore: add more logging for browser install process (#23675) 2023-06-14 15:33:06 +02:00
Dmitry Gozman 5b2e8a6a7a
chore: optional root for generateSelector (#23692) 2023-06-13 21:25:39 -07:00
Yury Semikhatsky 51b8f609fb
Revert "devops: zip blob report artifact before uploading (#23667)" (#23687)
This reverts commit a1cdae6bff.

The problem with this approach is that each job overwrites the zip
artifact whereas previously it was merging all reports in the same
directory. We are going to zip .jsonl files instead.
2023-06-13 12:36:04 -07:00
Dmitry Gozman c80a23842b
fix(css): relative-to-scope selectors work (#23665)
Chained selectors where the second part starts with a scope did not work
before:

```ts
page.locator('div').locator(':scope + span')
page.locator('div >> +span')
```
2023-06-13 10:27:25 -07:00
Playwright Service 76532160d3
feat(chromium-tip-of-tree): roll to r1123 (#23682) 2023-06-13 19:17:57 +02:00
Max Schmitt e5b07d662c
docs(dotnet): add note about using assertions with library (#23642)
Common question.
2023-06-13 09:04:13 -07:00
Max Schmitt 460e7fcfa2
chore: fix language port 1.35 release notes (#23674) 2023-06-13 09:03:50 -07:00
Playwright Service 769b449d86
feat(webkit): roll to r1862 (#23678) 2023-06-13 14:55:22 +02:00
Yury Semikhatsky ea7e9822aa
docs: release notes for ports (#23670) 2023-06-12 17:18:15 -07:00
Yury Semikhatsky a1cdae6bff
devops: zip blob report artifact before uploading (#23667)
Compressed size for `tests 1` blob report is 19Mb whil uncompressed one
is 211Mb. Also according to [GitHub
policy](https://docs.github.com/en/actions/using-workflows/storing-workflow-data-as-artifacts
) it is uncompressed size that is used for billing:

"Artifacts are uploaded during a workflow run, and you can view an
artifact's name and size in the UI. When an artifact is downloaded using
the GitHub UI, all files that were individually uploaded as part of the
artifact get zipped together into a single file. This means that billing
is calculated based on the size of the uploaded artifact and not the
size of the zip file."
2023-06-12 14:03:22 -07:00
Andrey Lushnikov 2bc8cf2fc7
fix: drop expect.configure({ poll }) from types (#23661)
`poll` option is not actually supported as of June 12, 2023.

Fixes https://github.com/microsoft/playwright/issues/23622
2023-06-12 11:07:39 -07:00
Dmitry Gozman dd417d83d9
fix(locators): escape >> inside a regular expression (#23631)
To avoid selector being parsed as a chain.

Fixes #23540.
2023-06-12 10:34:37 -07:00
Yury Semikhatsky dd9a49690b
test: speculative fix for reporter-blob (#23630) 2023-06-09 17:16:45 -07:00
Yury Semikhatsky abdfe264fa
chore: run html reporter tests with merged report (#23626) 2023-06-09 15:41:15 -07:00
Yury Semikhatsky 400c7cd529
fix: serialize attachment to base64 in tele reporter (#23590) 2023-06-09 11:52:18 -07:00
Tyler Gould a4d361379f
fix: scroll timeline with multiple pages in context (#23493)
Fixes #23490 

Before:
<img width="500" alt="image"
src="https://github.com/microsoft/playwright/assets/4130722/faa1f7c3-9aeb-4e0c-aca3-0d9c24609628">

After:
<img width="500" alt="image"
src="https://github.com/microsoft/playwright/assets/4130722/6dfbc204-8ff2-49cb-a374-734750c6a385">

---------

Signed-off-by: Tyler Gould <4130722+scitech@users.noreply.github.com>
Co-authored-by: Andrey Lushnikov <aslushnikov@gmail.com>
2023-06-09 09:07:14 -07:00
Debbie O'Brien 0560a73ce9
docs: improve by adding teardown and examples (#23470) 2023-06-09 17:57:38 +02:00
Dmitry Gozman 734705e9b3
chore: elementHandle getters implemented through Frame (#23557)
This is a step towards not using handles for locator operations.
2023-06-09 07:18:13 -07:00
bmaupin c242dfac4c
docs: Make auth.setup.ts location clearer (#23572)
In the documentation, the directories of the other files are clearly
listed, making it clear where they should go, e.g.

- `playwright/fixtures.ts`
- `tests/example.spec.ts`

This applies the same principal to auth.setup.ts.
2023-06-08 21:38:54 -07:00
Yury Michurin 7513993c7a
docs: fix a comment typo (#23592)
Hi,
Just a small meaningless comment typo 🙃 

Have a great day!

Signed-off-by: Yury Michurin <yury.michurin@gmail.com>
2023-06-08 21:35:04 -07:00
Sander c9cedc78b1
chore(ct): inline reporter in ci (#23608) 2023-06-08 16:23:59 -07:00
Dmitry Gozman 11659ceb73
fix(role): handle display:contents elements (#23607)
Fixes #23521.
2023-06-08 16:00:48 -07:00
Andrey Lushnikov b92dc47665
docs: fix images for release notes (#23606)
The previous were uploaded to a private repository artifacts and
were not accessible for a general public.
2023-06-08 15:10:41 -07:00
Max Schmitt 42ad9e71cb
docs: enhance UI mode docs (#23582)
Signed-off-by: Max Schmitt <max@schmitt.mx>
2023-06-08 21:33:07 +02:00
Playwright Service befd188763
feat(chromium-tip-of-tree): roll to r1122 (#23594)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-08 20:35:04 +02:00
Dmitriy Dudkevich 187cfdc328
feat: ability to pass additional headers to selenium (#23348) 2023-06-08 10:41:36 -07:00
Dmitry Gozman 5cfd6d9fe9
fix(cr network): emit sw-handled requests when routing is enabled (#23589)
Previously, such requests were skipped because they never receive
`Fetch.requestPaused` as there was no real network.

Also cleanup some redundant tests and move them from chromium-only file.

Fixes #23424.
2023-06-08 10:33:28 -07:00
Playwright Service 54a35dd108
feat(chromium): roll to r1067 (#23593)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-08 19:03:48 +02:00
Playwright Service a40fa1d86c
feat(webkit): roll to r1861 (#23530)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-08 09:49:07 +02:00
Playwright Service fa3dd76cf8
feat(chromium-tip-of-tree): roll to r1121 (#23584) 2023-06-08 08:19:12 +02:00
Yury Semikhatsky ded4a294f4
fix(merge): populate TestResult.stdout/stderr when merging (#23587) 2023-06-07 23:00:57 -07:00
Pavel Feldman 83cf6cc1e8
chore: do not show select item when Show trace (#23583) 2023-06-07 16:11:57 -07:00
Yury Semikhatsky 843034d83d
chore: roll stable test runner to 1.35.0-alpha-jun-7-2023 (#23585)
This fixes following error in the merged reports:

```
(index):9825 TypeError: Cannot read properties of null (reading 'toFixed')
    at msToString ((index):18917:15)
    at TestFilesView ((index):19373:9)
    at Uh ((index):9372:7)
    at kj ((index):10444:7)
    at Uk ((index):12508:86)
    at Tk ((index):12134:11)
```
2023-06-07 15:54:14 -07:00
Kun Fan d279a8c242
docs(emulation): add a missing closing bracket (#23575) 2023-06-07 22:53:42 +02:00
Andrey Lushnikov c3bc8e0620
chore: cut 1.35.0 (#23579) 2023-06-07 12:41:56 -07:00
Andrey Lushnikov e0c4576e29
docs: add a note about CodeSpaces UI mode (#23580) 2023-06-07 12:41:36 -07:00
Dmitry Gozman 4f8680f7a3
fix(pause): revert timeouts after pause (#23578)
Fixes #23523.
2023-06-07 12:30:10 -07:00
Andrey Lushnikov eda109388e
docs: js release notes 1.35 (#23560)
Signed-off-by: Andrey Lushnikov <aslushnikov@gmail.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-06-07 11:05:05 -07:00
Yury Semikhatsky 7d2201561f
chore(devops): add check status for report merger to PRs (#23564)
The check summary has a link to the report and a link to the merge
workflow run. Otherwise it's very hard to tell which merge workflow
corresponds to given PR.
2023-06-06 22:45:57 -07:00
Pavel Feldman 0b30f2017c
chore: make trace server work over http (#23561) 2023-06-06 18:36:05 -07:00
Andrey Lushnikov 2e327c9d0c
fix: miscellaneous improvements for tracing UI (#23558)
- feat(tracing): mark API requests with "API" label
- feat(tracing): do not attribute any resources to `route.` API calls;
  otherwise, network traffic might get inside the `route.` actions.
- fix(tracing): map actionIds from primary contexts to actionIds from
  non-primary contexts
- fix(tracing): show leading `/` in URL path in network panel

This is a result of a pair-programming session with @pavelfeldman
2023-06-06 17:38:44 -07:00
Andrey Lushnikov 0f4090472c
feat: add maskColor option to the toHaveScreenshot method (#23555) 2023-06-06 17:15:55 -07:00
Pavel Feldman 7579572688
chore: unflake the network status test (#23551) 2023-06-06 16:55:53 -07:00
Pavel Feldman 1cd8f7543b
docs: fix the transpiler docs (#23550) 2023-06-06 16:16:06 -07:00
Andrey Lushnikov f9c3e1915b
chore: update browser patches as of Apr 26, 2023 (#23556)
Internal commit reference:

b71297a4b9
2023-06-06 15:08:23 -07:00
Pavel Feldman 294f5c965a
chore: fix a lint on win (#23554) 2023-06-06 14:50:44 -07:00
Pavel Feldman 037da65d83
chore: fix ui mode tests on windows (#23553) 2023-06-06 14:24:42 -07:00
Max Schmitt 85be65b07b
chore: update npx playwright uninstall docs (#23552) 2023-06-06 22:09:15 +02:00
Max Schmitt aab322f2a1
docs(best-practises): recommend no-floating-promises (#23487)
https://github.com/microsoft/playwright/issues/23339

Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Pavel Feldman <pavel.feldman@gmail.com>
2023-06-06 20:45:46 +02:00
Max Schmitt 8bc26a2b44
chore: wait for downloads getting removed on context.close() (#23500)
Before there was a race, that we ran into this code:


9cd49d5dd5/packages/playwright-core/src/server/browserContext.ts (L236-L237)

and then into this code:


9cd49d5dd5/packages/playwright-core/src/server/browserContext.ts (L429-L431)

which had the side effect, that the first call did not wait. Then
immediately clears the downloads Set and then the second call is a NOOP.
This ends up that the the removal of the downloads can happen after the
context is closed, hence the test is flaky.

Relates to https://github.com/microsoft/playwright/pull/6151 where it
got introduced. So something for @yury-s.

Fixes https://github.com/microsoft/playwright/issues/22525
2023-06-06 20:38:36 +02:00
Max Schmitt ce2f902c1f
chore: fix UI Mode on Codespaces (#23549) 2023-06-06 20:09:39 +02:00
Pavel Feldman 6351630af2
chore: do not show the open error (#23547) 2023-06-06 11:09:08 -07:00
Debbie O'Brien 5e0195f7c4
docs: Soft expect example + tobeAttached (#23475) 2023-06-06 20:06:55 +02:00
Pavel Feldman 93e6a2f679
chore: print listening on message in terminal for web trace modes (#23545) 2023-06-06 10:03:14 -07:00
Pavel Feldman d4349e5d6f
chore: print listening on message in terminal for web trace modes (#23546) 2023-06-06 09:36:49 -07:00
Pavel Feldman 699ac3a0f2
chore: allow opening ui mode over http (#23536) 2023-06-06 08:31:52 -07:00
Debbie O'Brien dfd1518327
docs: explain attachments in ui mode (#23472) 2023-06-06 16:30:29 +02:00
Debbie O'Brien dfe40de1fe
docs: add stderr and stdout to example (#23474) 2023-06-06 16:18:41 +02:00
dependabot[bot] 0feef340c9
chore(deps): bump vite from 4.3.3 to 4.3.9 (#23537) 2023-06-06 11:12:07 +02:00
Yury Semikhatsky 874f4525b4
fix(merger): total time is sum of shard total times (#23534) 2023-06-05 19:10:41 -07:00
Yury Semikhatsky ceaa29cec1
chore: clear message for no reports (#23492) 2023-06-05 17:20:54 -07:00
Andrey Lushnikov 3a00fc4edf
fix: call focus() twice to workaround firefox not focusing element (#23535)
When focus is moved from one tab to another, it might require calling
`focus()` twice to actually focus an element in Firefox.

Fixes https://github.com/microsoft/playwright/issues/23117
2023-06-05 16:46:52 -07:00
Pavel Feldman eacfff8127
chore: make trace viewer work over http (#23531) 2023-06-05 16:30:30 -07:00
Dmitry Gozman 6b687b6d69
fix(toHaveScreenshot): attach newly created missing expectations (#23528)
Fixes #23090.
2023-06-05 14:57:06 -07:00
Max Schmitt 0e12831a02
chore: hide 'Open in VSCode' for folders in UI Mode (#23499) 2023-06-05 22:09:45 +02:00
KotlinIsland afa531ef60
feat: Allow multiple trace uploads in the trace viewer (#23517) 2023-06-05 12:34:54 -07:00
Rui Figueira ba69de8c7c
fix(check-deps): normalize paths in posix (#23513) 2023-06-05 12:33:54 -07:00
Pavel Feldman def24c0a14
chore: propagate client-side instrumentation across connect (#23524)
Fixes https://github.com/microsoft/playwright/issues/23504
2023-06-05 12:28:20 -07:00
Pavel Feldman 2200892ac3
chore: unmute the console flush test (#23525)
Closes https://github.com/microsoft/playwright/issues/23107
2023-06-05 12:19:25 -07:00
Debbie O'Brien a7b3c773c4
docs: rework locators to improve visibility (#23473) 2023-06-05 19:23:45 +02:00
Playwright Service d95b6f40a4
feat(webkit): roll to r1860 (#23494)
Fixes https://github.com/microsoft/playwright/issues/20489
2023-06-05 09:51:39 -07:00
Dmitry Gozman b518d1f6da
chore: update error message when using wrong cli (#23512)
Now recommends uninstalling other packages. Fixes #23314.

Example messages:

```
Please install @playwright/test package before running "npx playwright show-report"
  npm uninstall playwright playwright-firefox
  npm install -D @playwright/test
```

```
Please install @playwright/test package before running "yarn playwright show-report"
  yarn remove playwright playwright-chromium playwright-firefox playwright-webkit
  yarn add -D @playwright/test
```

```
Please install @playwright/test package before running "pnpm exec playwright show-report"
  pnpm remove playwright
  pnpm add -D @playwright/test
```
2023-06-05 09:51:08 -07:00
Max Schmitt 80fe9748eb
chore: render plain class links in types (#23508) 2023-06-05 18:50:44 +02:00
Max Schmitt 75971af55b
feat(cli): introduce npx playwright uninstall (#23128)
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2023-06-05 18:50:21 +02:00
Kristo Jorgenson d5d155df1f
fix(typescript): allow directory imports (#23254)
This updates previous work in #22887 to align more fully with
`--moduleResolution=bundler`, allowing index files to be imported with
the /index extension

---------

Signed-off-by: Kristo Jorgenson <kristojorg@users.noreply.github.com>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2023-06-05 08:58:25 -07:00
Max Schmitt 24ac25212b
chore: enable no-floating-promises on playwright-test (#23484) 2023-06-05 17:45:56 +02:00
Yury Semikhatsky f15ea35bfb
fix(devops): remove 10 minutes timeout from merge workflow (#23515)
Downloading 457Mb of reports with traces (for tracing tests) takes >3
minutes, uploading it to Azure takes >5 minutes which easily exceeds 10
minutes budget.
2023-06-04 15:48:18 -07:00
Max Schmitt dcc998d58c
chore: fix broken ct-core require (#23507)
This broke after https://github.com/microsoft/playwright/pull/23449.
2023-06-04 18:07:42 +02:00
Gary McDonald 718ee69cb8
docs: fix various spelling mistakes in the docs project directory. (#23510)
Signed-off-by: Gary McDonald <mcdonagj@dukes.jmu.edu>
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-06-04 18:04:42 +02:00
Yury Semikhatsky 9cd49d5dd5
test: unflake "should stop tracing on requestContext.dispose()" (#23489)
Use Chromium instead of Firefox as it navigates faster and remove
timeout from the slow request handler, just make it hang.

Fixes #23116
2023-06-02 16:37:50 -07:00
Dmitry Gozman e4a1273afa
test: enable user agent override for download in Chromium (#23479)
Fixes #22843.
2023-06-02 15:02:54 -07:00
Max Schmitt 00f662531e
Revert "fix(tracing): workaround chromium scrollTop slowness" (#23486)
This commit reverts f6712ec43a

I manually ran
https://github.com/microsoft/playwright/issues/14037#issuecomment-1122256514
and made sure that the performance did not regress. ~same.

Fixes https://github.com/microsoft/playwright/issues/23455
2023-06-02 23:25:55 +02:00
Yury Semikhatsky 401fc4cb9e
fix(tracing): record available response headers without waiting for extra info (#23483)
Fixes #23115
2023-06-02 14:15:20 -07:00
Jan Molak dd3ca6907a
docs: added Serenity/JS to the list of third-party reporters (#23485) 2023-06-02 14:13:32 -07:00
Dmitry Gozman b1974961b0
docs: remove troubleshooting guide (#23454)
Signed-off-by: Dmitry Gozman <dgozman@gmail.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-06-02 14:13:02 -07:00
Sander e47b23e5d4
chore(ct): internal types (#23332) 2023-06-02 14:11:03 -07:00
Ivaylo Pavlov e3f91bbabf
Fix header to pass Selenium Grid Capabilities (#23346)
Fixes: #23345
2023-06-02 13:28:23 -07:00
Dmitriy Dudkevich 7ab754f5d5
fix: render actions in ui mode with browsers from selenium (#23382) 2023-06-02 13:24:21 -07:00
Francois La Cock 49c8c6fa33
Update best-practices-js.md (#23466) 2023-06-02 13:05:17 -07:00
Pavel Feldman 5a14619bab
chore: render route markers in the trace network panel (#23476)
Fixes https://github.com/microsoft/playwright/issues/23040


![net](https://github.com/microsoft/playwright/assets/883973/5191163e-63f9-4999-9197-d10dcd09a665)
2023-06-02 13:00:27 -07:00
Max Schmitt 3c2a8fa306
chore: enable no-floating-promises ESLint rule for tests (#23376)
https://github.com/microsoft/playwright/issues/23339
2023-06-02 21:59:12 +02:00
Max Schmitt af893a1019
chore: inherit apiRequestContext timeout from actionTimeout (#23481)
Fixes https://github.com/microsoft/playwright/issues/23344
2023-06-02 21:36:09 +02:00
Max Schmitt b21c81d344
devops: add bot for Chromium --headless=new (#23440)
https://github.com/microsoft/playwright/issues/23389
2023-06-02 20:40:12 +02:00
Max Schmitt a97bdd0016
chore: update typescript to 5.1.3 (#23461)
https://devblogs.microsoft.com/typescript/announcing-typescript-5-1/
2023-06-02 18:57:09 +02:00
Dmitry Gozman 835f14d7c9
fix(pause): ignore page.pause on the server (#23417)
Fixes #23051.
2023-06-02 08:32:30 -07:00
Playwright Service 82ecd692d1
feat(webkit): roll to r1859 (#23467)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-02 15:05:03 +02:00
Kristo Jorgenson a4a363f4f4
chore: upgrade @types/node to 16.x (#23429)
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-06-02 10:04:41 +02:00
Dmitry Gozman 1d5add6d99
test: fix should not fulfill with redirect status (#23459) 2023-06-01 23:11:03 -07:00
Pavel Feldman d1666d2dde
chore: include test-end-screenshot in a trace (#23457)
Fixes https://github.com/microsoft/playwright/issues/23222
2023-06-01 20:29:32 -07:00
Pavel Feldman 96b2247e28
chore: allow marking scripts as external for transform (#23449)
Fixes https://github.com/microsoft/playwright/issues/22874
2023-06-01 20:28:49 -07:00
Dmitry Gozman 14a1eaa474
chore: add Playwright to attribution (#23447)
This makes it easier to plumb all kinds of options around.
2023-06-01 17:54:43 -07:00
Yury Semikhatsky 2719f408b2
fix(devops): pass pr number in a file (#23456)
For some reason pull_requests field on workflow_run is empty for pull
requests created from branches in forked repositories, see
https://github.com/orgs/community/discussions/25220. As a workaround we
store triggering pull request number in a file.
2023-06-01 17:12:58 -07:00
Pavel Feldman b99c214b29
chore(trace): render drawer as a sidebar in the tv mode (#23451)
Fixes: https://github.com/microsoft/playwright/issues/23227
2023-06-01 15:49:48 -07:00
Yury Semikhatsky 0a6fe3fac5
fix(devops): Unexpected value 'read|write' (#23450) 2023-06-01 14:01:03 -07:00
Pavel Feldman 84942aa992
chore: render successful toPass as such (#23411)
Fixes https://github.com/microsoft/playwright/issues/23302
2023-06-01 13:22:08 -07:00
Yury Semikhatsky aca4afc3a9
fix(devops): report url and pr read permission (#23448)
Somehow for pull request event pull_requests array is empty. Extending
the permission is a speculative fix for it.

```json
...
  "jobs_url": "https://api.github.com/repos/microsoft/playwright/actions/runs/5148091193/jobs",
  "logs_url": "https://api.github.com/repos/microsoft/playwright/actions/runs/5148091193/logs",
  "name": "tests 1",
  "node_id": "WFR_kwLODTssw88AAAABMtmjOQ",
  "path": ".github/workflows/tests_primary.yml",
  "previous_attempt_url": null,
  "pull_requests": [],
...
```
2023-06-01 13:09:37 -07:00
Yury Semikhatsky dfe5f41d35
fix(devops): restore checks write permission (#23445)
This was lost in 972ad89af2
2023-06-01 13:02:01 -07:00
Yury Semikhatsky b8e93f840e
fix(devops): do not forget to build playwright (#23446) 2023-06-01 11:54:15 -07:00
Yury Semikhatsky 6cbcf18c48
fix(devops): path to blob report (#23444) 2023-06-01 10:17:34 -07:00
Yury Semikhatsky 8bebdefd71
fix(devops): connection string var name (#23443) 2023-06-01 09:38:27 -07:00
Daenam Kim 8b18bfcad1
docs: fix imports in auth.md (#23430)
While following instructions steps in the doc, I found some imports were
different as I expected. Correct me if I am wrong. :)
2023-06-01 09:23:22 -07:00
Yury Semikhatsky 972ad89af2
feat(devops): publish merged reports to pull requests (#23419)
* Moved report merging and publishing logic into create_test_report.yml
shared between all workflows
* Merged reports are now published for try jobs on pull requests too. In
order to achieve that the logic had to be extracted into a separate
workflow triggered by
[workflow_run](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run),
this way it can access secrets even if the original workflow was not
able to.
* The blob report data flow is different depending on whether the
workflow is triggered by a pull request or a push:
- For `pull_request` the workflow doesn't have access to the secrets it
uploads the blob report to the GitHub
artifact storage. Later on the merge workflow uploads that blob report
to Azure blob storage.
- Workflows triggered by `push` event can read secrets. They upload blob
report directly to Azure blob storage
and the merge workflow downloads the report from there rather than from
GitHub artifacts.
2023-06-01 08:40:43 -07:00
Playwright Service 3e73906027
feat(chromium): roll to r1066 (#23433)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-01 16:03:49 +02:00
Playwright Service fff4e048a8
feat(chromium-tip-of-tree): roll to r1120 (#23431)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-01 16:03:33 +02:00
Dmitry Gozman 5d5314e006
test: make sure trace is recorded for custom fixtures (#23418)
References #23220.
2023-05-31 21:50:20 -07:00
Yury Semikhatsky ce9892c694
fix(devops): azure conection string var name (#23416) 2023-05-31 16:54:44 -07:00
Max Schmitt 5701ff1e9b
chore: do not always return 200 on component testing network requests (#23408)
Fixes https://github.com/microsoft/playwright/issues/23364

See here about their AppTypes:
https://vitejs.dev/config/shared-options.html#apptype
2023-06-01 01:33:48 +02:00
Max Schmitt 92d650c317
devops: add missing workflow permission (#23413) 2023-06-01 01:19:23 +02:00
Max Schmitt 10ec3cfa2a
chore: generate docs versions in pw.dev (#23412)
https://github.com/microsoft/playwright/issues/23395
2023-06-01 01:14:00 +02:00
Yury Semikhatsky 90aa378e8f
chore: extract batch download action (#23410) 2023-05-31 16:07:29 -07:00
Max Schmitt 40581ed906
devops: post merged test results comment as GitHub Status Check (#23409) 2023-06-01 00:29:57 +02:00
Playwright Service 2c700b71ff
feat(webkit): roll to r1858 (#23403) 2023-05-31 23:28:19 +02:00
Dmitry Gozman 06318d52d6
chore: support import { type Foo } in check deps (#23405) 2023-05-31 14:08:59 -07:00
Dmitry Gozman 6bb5c0a549
fix: make evaluate not wait for scheduled navigations (#23402)
Fixes #23141.
2023-05-31 14:08:44 -07:00
Dmitry Gozman 2505d48b32
test: skip and unflake tests (#23399)
- `should respect tracesDir and name` does not work with service mode;
- `isVisible during navigation should not throw` had a short timeout.
2023-05-31 10:52:29 -07:00
Max Schmitt 4eeb4655e9
chore: add comment about async imports in babel (#23374)
https://github.com/microsoft/playwright/issues/23255
2023-05-31 18:32:09 +02:00
Max Schmitt 2582d3984b
docs(ci): have yaml snippets for each language (#23392)
Fixes https://github.com/microsoft/playwright/issues/23134
Fixes https://github.com/microsoft/playwright/issues/23292
2023-05-31 14:29:54 +02:00
Pavel Feldman 658b1dfea3
chore: trace viewer server for vscode (#23383) 2023-05-30 18:31:15 -07:00
Andrey Lushnikov 5cd271a2a7
docs: add option clarifications (#23384)
Fixes https://github.com/microsoft/playwright/issues/23355
2023-05-30 17:19:48 -07:00
João Neves 7e6e5f0706
feat: Support React forwards refs and memo (#23262)
This PR fixes the react selector behavior to support components that are
wrapped by the memo or forwardRef React builtin functions.

Previously these components couldn't be selected. This PR fixes that
behavior, enabling selecting those components.

Current behavior:
```
const Foo = memo(() => <div id="foo_component" />);
Foo.displayName = "Foo";
...
playwright.$("_react=Foo") -> undefined
```

Fixed behavior:
```
const Foo = memo(() => <div id="foo_component" />);
Foo.displayName = "Foo";
...
playwright.$("_react=Foo") -> <div id ="foo_component" />
```
2023-05-30 17:14:47 -07:00
Yury Semikhatsky 38c89df330
chore: replace "blob download-batch" with a bash script (#23381)
`az storage blob download-batch` has been timing out over the last few
days, see upstream issue
https://github.com/Azure/azure-cli/issues/26567. Replacing it with a
simple bash script that discovers blobs with a given prefix and then
downloads one-by-one.
2023-05-30 16:46:37 -07:00
Pavel Feldman 7ad03027fb
chore: remove output dir before each test (#23380) 2023-05-30 16:03:50 -07:00
retrowaver 7638b4bb76
docs: fix python example for Locator.last (#23378) 2023-05-31 00:52:51 +02:00
Dmitry Gozman 6db6498565
chore: replace sigint handler per browser with a single one (#23317)
Otherwise, multiple sigint handlers (one from each browser) would try to
`process.exit(130)` each.
2023-05-30 13:54:04 -07:00
Max Schmitt 13f70b6d89
chore: have type modifiers directly on file import (#23337) 2023-05-30 21:11:35 +02:00
Max Schmitt 2710fd8d6f
fix: should be able to upload multiple large files (#23360)
Fixes https://github.com/microsoft/playwright/issues/23258
2023-05-30 18:41:09 +02:00
Max Schmitt 1f7223eb21
chore: test on Node.js 20 (#22651)
Fixes https://github.com/microsoft/playwright/issues/22582
2023-05-30 18:16:34 +02:00
Max Schmitt d6e24fafe8
docs: specify assertion timeout type (#23333)
Fixes https://github.com/microsoft/playwright-dotnet/issues/2589
2023-05-30 18:13:14 +02:00
Debbie O'Brien 0c2ec4b7f6
docs: add release video (#23365)
add missing videos to release notes
2023-05-30 18:03:33 +02:00
Max Schmitt f819b1c72d
fix: trace viewer with global applied background-color (#23362)
Fixes https://github.com/microsoft/playwright/issues/23275
2023-05-30 17:58:29 +02:00
Max Schmitt 9e75b95153
fix: display testId as regex in trace-viewer (#23361)
Fixes https://github.com/microsoft/playwright/issues/23298
2023-05-30 17:45:48 +02:00
Playwright Service fda57978e8
feat(webkit): roll to r1857 (#23353)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-29 22:56:38 +02:00
Pavel Feldman ec972fb7c1
chore: make trace viewer self-desctruct on input disconnect (#23291) 2023-05-26 14:54:54 -07:00
Yury Semikhatsky 962c32ae10
docs: fix since version for the methods new in 1.34 (#23315) 2023-05-26 11:03:31 -07:00
keita hino f301ddfc7e
docs(class-locator.md): fix incorrect version of locator-and (#23216) 2023-05-26 09:47:19 -07:00
Playwright Service 4f3d4c41af
feat(webkit): roll to r1856 (#23310)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-26 09:47:03 -07:00
Yury Semikhatsky 624e88e504
chore: roll stable test runner to May 26 (#23308) 2023-05-26 09:19:23 -07:00
Yury Semikhatsky 57e496c978
test: use platform specific path separator (#23311)
The test has been failing recently
https://devops.playwright.dev/flakiness.html#filter_spec=should+list+files&timestamp=1685115453114
2023-05-26 09:18:53 -07:00
Dmitry Gozman fa86f2aee0
chore: createHttpServer that destroys sockets upon close (#23294)
This avoids the server hanging on close.
2023-05-26 07:03:41 -07:00
Yury Semikhatsky 0ef8832f56
fix: patch project names and ids when merging reports (#23295)
Project name is used in testId calculation, so patching it in the
reporter is too late. Instead we now save project suffix to the blob
report file and patch all project and test ids as well as project names
in the report merger
2023-05-25 23:02:23 -07:00
Yury Semikhatsky 6a2d07401e
chore: roll stable test runner to May 25 (#23289) 2023-05-25 15:39:51 -07:00
Pavel Feldman 1e95b6d906
chore: allow sending trace URLs over stdin (#23288) 2023-05-25 15:38:47 -07:00
Pavel Feldman f879ac7e44
chore: report output dir as a part of the list files (#23283) 2023-05-25 15:38:35 -07:00
Dmitry Gozman 00b34dddb2
chore: move TestServer under test/ (#23287) 2023-05-25 15:11:16 -07:00
Dmitry Gozman 4a9723df48
test: run extension tests in tests_primary (#23245) 2023-05-25 13:34:38 -07:00
Tomáš Hübelbauer e550df060e
Enhance the forbidOnly mode message to guide the user towards the configuration option (#23146)
Hi, I am putting this PR out as a feeler to see if there's interested in
improving this error message, but the copy is by no means final and I am
open to improvement suggestions.

My intention here is to:
- Explain what a "focused item" is - that we're talking about a test and
it being focused is most likely down it using `only`
  
Are there other types of "items"? Are there other ways to make them
focused other than `only`?

- Explain why we're even in focused mode and how to control it

The default scaffolded Playwright config file includes a forbidMode
expression driven by whether `CI=1` is set.
I ran into this when trying to reproduce a CI issue locally so I had it
set and unknowingly entered focus only mode.
I wasn't aware this mode was a thing because I was using the default
configuration from `npm init` and did not familiarize myself with all
the options in it.

Is there a way to tell if we're in a TypeScript or JavaScript project in
this function? I would use that to display the configuration file name
with the right extension.

---------

Signed-off-by: Tomáš Hübelbauer <tomas@hubelbauer.net>
2023-05-25 13:32:49 -07:00
Yury Semikhatsky 1e64fa4f7c
chore: no empty dash suffix in blob report (#23285) 2023-05-25 13:18:57 -07:00
Playwright Service c5c0b9a78b
feat(chromium): roll to r1065 (#23281)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-25 13:04:36 -07:00
Playwright Service af423d1bba
feat(chromium-tip-of-tree): roll to r1118 (#23284)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-25 13:04:21 -07:00
Yury Semikhatsky dce730c3be
fix: consider project suffix when computing id (#23270) 2023-05-25 10:36:34 -07:00
Yury Semikhatsky e0600f4799
test: enable passing request type test (#23273)
Fixes #22812
2023-05-25 09:43:41 -07:00
Pavel Feldman 342bae6c59
chore: support esm loader on Node 20 (#23269) 2023-05-24 20:17:44 -07:00
Yury Semikhatsky bf5cecc545
docs: release notes for language ports (#23272) 2023-05-24 16:39:47 -07:00
Yury Semikhatsky bcc711145e
feat(webkit): roll to r1855 (#23267) 2023-05-24 16:09:58 -07:00
Yury Semikhatsky 0a65a0b8e8
devops: post merged report URL to the PR (#23266)
Posting a comment to the PR using GITHUB_TOKEN requires elevated
permissions, see
https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs
2023-05-24 14:43:36 -07:00
Dmitry Gozman 70589c0113
test: unflake "beforeAll and afterAll should have a separate timeout" (#23263) 2023-05-24 13:46:28 -07:00
Dmitry Gozman 871032b411
test: unflake some reporter tests (#23264) 2023-05-24 13:28:40 -07:00
Pavel Feldman 64dde29788
chore: move to npx playwright-core install when using core (#23260) 2023-05-24 12:16:59 -07:00
Nour Z f9521a01ce
docs: updated documentation URLs to use Playwright Homepage (#23250) 2023-05-24 08:43:42 -07:00
Pavel Feldman 76b4b9dbaf
chore: move transform to its own folder (for loader worker) (#23247) 2023-05-23 21:05:33 -07:00
Dmitry Gozman 2858ca95d8
tet: unflake some test runner tests (#23240)
- `unhandled rejection during beforeAll should be reported and prevent
more tests` had timeout of 100ms that is too short on busy system;
- `runTSC` is always slow, so mark as such.
2023-05-23 13:31:23 -07:00
Pavel Feldman 5926c67703
chore: keep @playwright/test/cli exposed (#23241)
Fixes https://github.com/microsoft/playwright/issues/23225
2023-05-23 12:32:44 -07:00
Dmitry Gozman 848f1dff3f
feat(trace): instantiate consoleAPI in popout with correct testIdAttribute (#23238) 2023-05-23 12:17:26 -07:00
Dmitry Gozman b1db4a8191
test: skip connecting 20 times on non-linux (#23239) 2023-05-23 12:16:22 -07:00
Pavel Feldman fd75b85510 Revert "chore: more tree gardening (#23119)"
This reverts commit e6bc32b022.
2023-05-23 12:04:44 -07:00
Pavel Feldman 6cce93b697
chore: explicit server mode control (#23215) 2023-05-23 10:56:37 -07:00
Pavel Feldman b814e8a5f1
chore: bring back per test artifacts (#23153) 2023-05-23 09:36:35 -07:00
Andrey Lushnikov 8ebe4dc81a
devops: do not use NPX during docker container build (#23213)
The postmortem of the broken docker image:
- We use `playwright-core` package when bootstrapping our docker
container.
- Due to accidental removal of `bin` entry in the `playwright-core` (see
  https://github.com/microsoft/playwright/issues/23206), the `npx
  playwright install --with-deps` was using the last published
  Playwright version instead of a locally-built playwright binary

This patch starts using `npx exec --no` to make sure that we never call
remote commands during docker image build.
2023-05-22 19:21:09 -07:00
Jasiel Guillén 700062c836
feat(screenshot): Add customizable color option for masked elements (#23185)
I added a new option to the screenshot method to customize the color of
the box when we want to mask some elements for the screenshot.

The default color is pink `#FF00FF`, but with this new option you can
specify the color you like the most, like a nice green `#00FF00`:

```js
await page.screenshot({
  mask: [page.locator('div').nth(5)],
  maskColor: "#00FF00",
})
```


![ss](https://github.com/microsoft/playwright/assets/23271049/05f754de-0ba6-47a3-ae3e-769720d3da3b)

---------

Signed-off-by: Jasiel Guillén <darkensses@gmail.com>
2023-05-22 18:44:44 -07:00
Yury Semikhatsky 10b7cb3979
chore: blob report project suffix (#23212) 2023-05-22 17:54:37 -07:00
Andrey Lushnikov 5f36a2946e
fix: add missing webkit deps on ubuntu 20.04 (#23209)
Fixes https://github.com/microsoft/playwright/issues/23186
2023-05-22 15:43:09 -07:00
Pavel Feldman b9e7a91368
fix(html): fix the filter to respect status (#23208) 2023-05-22 15:35:19 -07:00
Pavel Feldman ee3864913a
chore: allow stub JSX instances in type module (#23211)
Fixes https://github.com/microsoft/playwright/issues/23207
2023-05-22 15:34:50 -07:00
Sander e872a2b286
docs(ct): rephrase how to get started (#23195) 2023-05-22 13:26:08 -07:00
Sander bb84d42d67
feat(ct): svelte partial update (#23193) 2023-05-22 13:18:56 -07:00
Pavel Feldman 144f8b1495
chore: fix playwright-core cli (#23203)
Fixes https://github.com/microsoft/playwright/issues/23206
2023-05-22 12:37:08 -07:00
Sam Adams c0bfbea395
docs: fix example for globalSetup/globalTeardown (#23085)
Signed-off-by: Sam Adams <107990625+sam-super@users.noreply.github.com>
2023-05-22 11:13:52 -07:00
Daniel Eisterhold 6173014a75
docs: fix link to MSTest section on test-runner page (#23200)
Signed-off-by: Daniel Eisterhold <deisterhold@users.noreply.github.com>
2023-05-22 11:02:30 -07:00
Tianzhen Lin (Tangent) 86b49993dc
doc: Fix typo in 1.34.0 release notes (#23188)
Fix a typo found in 1.34.0 release notes

Signed-off-by: Tianzhen Lin (Tangent) <tangent@usa.net>
2023-05-22 10:16:46 -07:00
Pavel Feldman 631edc9744
chore(internal): generate code in jsonl (#23124) 2023-05-20 10:15:33 -07:00
Yury Semikhatsky 33f3a6002d
test: xhr request type for main resource url (#23174) 2023-05-19 17:59:17 -07:00
Pavel Feldman 0e1aeaaecf
chore: do not show stale source in the trace (#23163) 2023-05-19 15:18:18 -07:00
Pavel Feldman bd090e67df
lint: prevent object string concatenation (#23172) 2023-05-19 15:17:43 -07:00
Dmitry Gozman bd33e5f8c0
fix(tracing): when zipping remotely, use correct file name (#23171)
Fixes #23108.
2023-05-19 14:42:01 -07:00
Pavel Feldman 8fee175896
test(filter): add a filter by location test (#23170) 2023-05-19 13:35:11 -07:00
Yury Semikhatsky c8a42af11f
devops: merged report for tracing tests (#23167) 2023-05-19 13:31:37 -07:00
Yury Semikhatsky 5004f908d9
devops: do not upload test-results artifacts (#23168) 2023-05-19 13:06:42 -07:00
Pavel Feldman 49370cb6fd
chore: fix file view padding (#23166) 2023-05-19 11:07:49 -07:00
Andrey Lushnikov def82d1d27
docs: update release notes (#23165)
Signed-off-by: Andrey Lushnikov <aslushnikov@gmail.com>
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-05-19 10:36:42 -07:00
Pavel Feldman 2697e93663
chore: do not annotate actions after failed ones as timed out (#23148) 2023-05-18 15:52:44 -07:00
Max Schmitt 9b4f9b1136
docs: add dialog/consoleMessage helper methods for language bindings (#23140)
https://github.com/microsoft/playwright-dotnet/issues/2565

---------

Co-authored-by: Yury Semikhatsky <yurys@chromium.org>
2023-05-18 23:47:28 +02:00
Dmitry Gozman 422b65eeae
feat(connect): pw:server:channel and pw:socks debug logs (#23144)
Fixes #23081.
2023-05-18 13:44:48 -07:00
Dmitry Gozman ab7e794bf7
feat(shard): introduce mode: 'default' (#23023)
This mode allows a suite to opt-out from parallelism. Useful to setup
multiple suites running in parallel, with each suite not being sharded.

References #22891.
2023-05-18 13:07:22 -07:00
Pavel Feldman 969e5ff1aa
test: add attachment tests (#23143) 2023-05-18 11:48:53 -07:00
Pavel Feldman 2501bbb715
test(ui-mode): make retries (#23136) 2023-05-18 11:28:28 -07:00
Pavel Feldman 3395a28181
chore: opt out of trace attachments (#23139)
Fixes: https://github.com/microsoft/playwright/issues/23137
2023-05-18 11:27:45 -07:00
Yury Semikhatsky a1fc8ff07d
fix: preserve steps in merged report (#23120) 2023-05-18 09:38:49 -07:00
Max Schmitt acdb71878e
test: unskip selenium driver test (#23129)
Issue is that [when `stop()` is
called](28504f6dc7/tests/library/browsertype-launch-selenium.spec.ts (L202)),
`onExit()` gets called and then it throws an unhandled rejection.

This regressed in https://github.com/microsoft/playwright/pull/23028.

I didn't find a reason to keep onExit, so removed it for now since
transport should handle these scenarios.

Fixes https://github.com/microsoft/playwright/issues/23110
2023-05-18 18:33:11 +02:00
Max Schmitt 0c032eb7be
chore: do not read browserslist file (#23127)
Fixes https://github.com/microsoft/playwright/issues/23125
2023-05-18 18:11:08 +02:00
Playwright Service 595c4cb855
feat(chromium-tip-of-tree): roll to r1116 (#23131)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-18 16:31:08 +02:00
Playwright Service 5957d8f306
feat(chromium): roll to r1064 (#23130)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-18 15:52:45 +02:00
Playwright Service 28504f6dc7
feat(chromium-tip-of-tree): roll to r1115 (#23109)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-05-18 11:49:35 +02:00
Andrey Lushnikov b31511e0c9
chore: cut v1.34.0 (#23121) 2023-05-17 19:05:38 -07:00
Andrey Lushnikov e6bc32b022
chore: more tree gardening (#23119)
https://github.com/microsoft/playwright/issues/23114
https://github.com/microsoft/playwright/issues/23115
https://github.com/microsoft/playwright/issues/23116
https://github.com/microsoft/playwright/issues/23117
https://github.com/microsoft/playwright/issues/23118
2023-05-17 18:57:35 -07:00
Andrey Lushnikov 6963483c47
docs: release notes for node.js 1.34 (#23113) 2023-05-17 18:33:36 -07:00
Andrey Lushnikov 7ff82760de
chore: tree gardening (#23111)
https://github.com/microsoft/playwright/issues/23107
https://github.com/microsoft/playwright/issues/23108
https://github.com/microsoft/playwright/issues/23110
2023-05-17 17:54:34 -07:00
Max Schmitt 7b1b2dd741
docs(assertions): add note for setting global python expect timeout (#23106)
Fixes https://github.com/microsoft/playwright-python/issues/1358
2023-05-17 17:51:36 -07:00
Andrey Lushnikov f3a1058b38
chore: update browser patches as of Apr 5, 2023 (#23112)
Internal commit reference:
f7e6794188
2023-05-17 17:50:43 -07:00
Dmitry Gozman be7984bdc9
fix(unroute): do not compare regexp instances (#23101)
References #23092.
2023-05-17 16:27:32 -07:00
Playwright Service f1e0aed03c
feat(chromium): roll to r1063 (#23104)
Fixes https://github.com/microsoft/playwright/issues/22967

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-18 00:49:13 +02:00
Yury Semikhatsky 27403dcbb4
devops: remove explicit npm@8 installation (#23096)
Node 16+ comes with npm 8+ by default.
2023-05-17 14:32:38 -07:00
Yury Semikhatsky 0318b85216
chore: build playwright before running merge-reports (#23095) 2023-05-17 10:42:51 -07:00
Yury Semikhatsky 735b1290d4
chore: fix shard numbers for test_test_runner (#23091) 2023-05-17 09:42:40 -07:00
Max Schmitt e80ff0df77
chore: don't install gstreamer for WebKit Ubuntu 20 (#23062) 2023-05-17 18:31:24 +02:00
Yury Semikhatsky 52feff39b3
chore: run primary tests with blob reporter (#23076) 2023-05-17 09:10:31 -07:00
Debbie O'Brien 94f928600d
docs: add workers for ci (#23046) 2023-05-17 17:38:03 +02:00
Adrien Fichet 2e5ddd4361
docs: maxDiffPixelRatio example value should be between 0 and 1 (#23048) 2023-05-17 10:58:16 +02:00
Adrien Fichet ae930910ad
docs: permissions example should be an array (#23052) 2023-05-17 10:55:39 +02:00
Pavel Feldman 04070a59e1
chore: remove expect.configure({poll}) (#23060) 2023-05-16 18:45:03 -07:00
Pavel Feldman fbc461ede0
chore(trace): do not flush console events (#23073)
Fixes https://github.com/microsoft/playwright/issues/20626
2023-05-16 18:44:27 -07:00
Dmitry Gozman fc2e0e76bd
feat(teardown): allow the same project to be a teardown for multiple (#23074) 2023-05-16 18:26:06 -07:00
Yury Semikhatsky 2d3ab74d22
chore: roll stable test runner (#23075) 2023-05-16 18:02:53 -07:00
Dmitry Gozman fec5059fee
feat(connect): print debug log when remote connection failed (#23069) 2023-05-16 16:46:02 -07:00
Max Schmitt 3cd21cb6d4
chore: ignore SIGINT inside driver process (#23028)
https://github.com/microsoft/playwright-python/issues/1843

Almost reverts https://github.com/microsoft/playwright/pull/11826 since
this is not used by VSCode anymore and was legacy.
2023-05-17 01:44:17 +02:00
Max Schmitt 89aa02228f
devops: add macOS 13 coverage (#23065)
Coverage https://github.com/microsoft/playwright/issues/22226
2023-05-17 01:13:09 +02:00
Max Schmitt 89f1940509
chore: be able to hide webServer stderr (#23063)
Follow-up to https://github.com/microsoft/playwright/pull/22564.
2023-05-17 00:46:59 +02:00
Yury Semikhatsky ed19e5403b
feat: merge config properties (#23071) 2023-05-16 15:15:11 -07:00
Pavel Feldman 37b2853b7b
chore: fix the test view mobile layout (#23061)
Fixes https://github.com/microsoft/playwright/issues/23036
2023-05-16 12:47:37 -07:00
Dmitry Gozman 62146b946c
fix(codegen): ignore previously hovered detached nodes (#23057)
Fixes #23043.
2023-05-16 11:13:19 -07:00
Pavel Feldman 2fc6341841
chore: remove node version checks from esm tests (#23031) 2023-05-16 11:07:34 -07:00
Max Schmitt 137aaf0ea2
docs: update minimal OS versions (#23041)
https://support.google.com/chrome/a/answer/7100626?hl=en
2023-05-16 08:58:41 -07:00
Sam Adams 5fe0a2f5ab
docs(test-configuration): fix testConfig.testMatch markdown escaping (#23044) 2023-05-16 14:00:25 +02:00
Playwright Service aa6eb41466
feat(webkit): roll to r1848 (#23032)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-05-16 12:13:58 +02:00
Dmitry Gozman 73f9f81db4
feat(locators): allow ambiguous locators when parsing (#23034)
This supports locators like `nth(0)` and `locator('div', { hasText:
'foo' })` that are not canonical, but still work.

Fixes #22990, #22965.
2023-05-15 19:42:51 -07:00
Dmitry Gozman f469e4b1eb
fix(expect): mark step as failed when async custom matcher throws (#23035)
Fixes #23021.
2023-05-15 19:37:12 -07:00
Pavel Feldman bf1df9678f
chore: do not load code for babeling twice (#23025) 2023-05-15 15:12:10 -07:00
Max Schmitt edd003c230
chore: validate expected image buffer when comparing images (#23030)
Fixes https://github.com/microsoft/playwright/issues/23012
2023-05-15 23:32:16 +02:00
Yury Semikhatsky 6c75095896
chore: blob report does not print to console (#23027) 2023-05-15 12:46:17 -07:00
Debbie O'Brien d2ea6588d7
docs(best-practises): improve soft assertions (#22909)
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-05-15 20:08:26 +02:00
Max Schmitt 17ab777db5
chore: set min viewport for WK on Win to 250x240 (#22969)
Follow-up for https://github.com/microsoft/playwright/pull/22956.
2023-05-14 16:59:15 +02:00
Dmitry Leonov aef7a2817d
docs: fix function name mismatch in python route example (#23010) 2023-05-14 16:52:11 +02:00
John Gachihi 4664156511
docs(auth): minor update to add cross link reference (#22991)
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-05-14 16:33:03 +02:00
Pavel Feldman c9d5b05440
docs: document subdomain cookie matching (#23007)
Fixes https://github.com/microsoft/playwright/issues/22977
2023-05-12 19:15:51 -07:00
Pavel Feldman 4c4085e105
chore: partially hide built-in fixture steps (#23005) 2023-05-12 19:15:31 -07:00
Yury Semikhatsky 576d91fe80
fix: unique resource names between shards (#23004) 2023-05-12 18:21:43 -07:00
Pavel Feldman 083d13a13d
chore: surface syntax error in ui mode (#22982)
Fixes https://github.com/microsoft/playwright/issues/22863
2023-05-12 14:23:22 -07:00
Dmitry Gozman 9472f79d32
fix(reuse): reset mouse position in Firefox (#22973)
Otherwise, Firefox sometimes keeps the current position and triggers
unexpected hover effects.

Fixes #22432.
2023-05-12 13:21:49 -07:00
Andrey Lushnikov bf1aba885b chore: fix lint 2023-05-12 13:04:11 -07:00
Andrey Lushnikov eea7a8e638
browser(firefox): roll Firefoxes (#22998)
Fixes https://github.com/microsoft/playwright/issues/15405
Fixes https://github.com/microsoft/playwright/issues/22618
2023-05-12 11:27:19 -07:00
Playwright Service ba0c4951c3
feat(firefox-beta): roll to r1408 (#22978)
Fixes https://github.com/microsoft/playwright/issues/21760

---------

Signed-off-by: Andrey Lushnikov <aslushnikov@gmail.com>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Andrey Lushnikov <aslushnikov@gmail.com>
2023-05-12 09:27:08 -07:00
Yury Semikhatsky 3ccec7eae5
feat(merge): generate html report with links to remote resources (#22968) 2023-05-12 09:26:04 -07:00
Playwright Service f96309776c
feat(firefox-beta): roll to r1407 (#22976)
Fixes https://github.com/microsoft/playwright/issues/22581

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-12 07:39:42 -07:00
Pavel Feldman e6d8cf9693
chore: include plugin list into the cache digest (#22946)
Fixes https://github.com/microsoft/playwright/issues/22931
2023-05-11 21:09:15 -07:00
Dmitry Gozman 9ffe33fae8
feat(test runner): support tsconfig.extends array (#22975)
Fixes #22151.
2023-05-11 19:18:13 -07:00
Pavel Feldman 59b9a39740
chore: add string attachments to trace (#22921) 2023-05-11 16:32:32 -07:00
Pavel Feldman 49f647ca57
chore: opt out from the compact mode in babel (#22974) 2023-05-11 16:31:28 -07:00
Dmitry Gozman 44a934c160
feat(test runner): support .cjs and .cts files (#22971)
Fixes #22579.
2023-05-11 15:41:50 -07:00
Andrey Lushnikov d7f5f1f5fe
feat: default screenshot jpeg quality to 80 (#22966)
Fixes https://github.com/microsoft/playwright/issues/22436
2023-05-11 11:09:19 -07:00
Yury Semikhatsky 8a09d6dc0b
test: enable requestFullscreen test in webkit (#22940)
Fixes #22832
2023-05-11 10:00:22 -07:00
Pavel Feldman e41b21dc7b
chore: update navigation and timers docs (#22941) 2023-05-11 09:56:48 -07:00
Andrey Lushnikov 4d41535081
feat(ff-beta): roll Firefox beta to 1406 (#22963) 2023-05-11 09:37:08 -07:00
Max Schmitt 00187172f2
chore: introduce minimal viewport for WebKit/Windows/headed (#22956)
Fixes https://github.com/microsoft/playwright/issues/22616
2023-05-11 17:54:05 +02:00
Max Schmitt a2bfbd9a0f
docs: rework CI guide (#22957)
Fixes https://github.com/microsoft/playwright/issues/22951
2023-05-11 17:52:51 +02:00
Playwright Service d17d43c4fa
feat(firefox): roll to r1406 (#22962)
Fixes https://github.com/microsoft/playwright/issues/22580

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-11 08:18:51 -07:00
Dmitry Gozman f2ad5bbfbb
fix(isVisible): return false during navigation (#22943)
Instead of throwing "Execution context was destroyed" error.

Drive-by: improve internal error messages for `ScopedRace` errors.

Fixes #22925.
2023-05-10 16:56:59 -07:00
Yury Semikhatsky c9dad439cd
chore: write uncompressed blob report (#22945) 2023-05-10 15:08:53 -07:00
Debbie O'Brien 759d14b881
docs: add titles for remaining examples (#22939)
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-05-10 23:30:51 +02:00
Playwright Service 7e2a35ead4
feat(webkit): roll to r1847 (#22920) 2023-05-10 12:11:42 -07:00
Yury Semikhatsky e8d994836e
chore: move fetch proxy tests in its own file (#22936)
The browser has to be launch with `proxy: 'per-context'` option for the
tests to work on Windows.

Fixes the following:
```
Error: browser.newContext: Browser needs to be launched with the global proxy. If all contexts override the proxy, global proxy will be never used and can be any string, for example "launch({ proxy: { server: 'http://per-context' } })"
    at D:\a\playwright\playwright\tests\library\browsercontext-fetch.spec.ts:382:19
```
2023-05-10 10:47:40 -07:00
Dmitry Gozman 80f46892cd
fix(getByLabel): ignore empty aria-label (#22935)
Accessible name computation ignores empty aria-label, and so should
getByLabel.

Fixes #22915.
2023-05-10 10:38:46 -07:00
Debbie O'Brien 7a8eb15820
docs: add titles to config snippets (#22910)
Docs PR: https://github.com/microsoft/playwright.dev/pull/1039

---------

Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-05-10 18:38:12 +02:00
Yury Semikhatsky c579345610
test: requestFullscreen API is supported (#22889)
https://github.com/microsoft/playwright/issues/22832
2023-05-10 09:31:20 -07:00
Ruben f9eeaa2b75
docs: update import in code example (#22591) 2023-05-10 15:18:20 +02:00
Alexander Sorokin cbf4f39957
fix: React selectors should work after unmount (#22750)
Fixes #22729
2023-05-10 06:18:01 -07:00
Andrey Lushnikov 3b2d247c74
fix: avoid using os.userInfo() (#22826)
The `os.userInfo()` call might throw on POSIX if there is no
user info for the current `uid`. This might happen, if the docker
is launched like this:

```
docker run --rm -u 1234:1234  -it mcr.microsoft.com/playwright:v1.32.0 node -e 'console.log(os.userInfo().username)'
```

So instead of using `os.userInfo()`, rely on effective user id.

Fixes https://github.com/microsoft/playwright/issues/22721
2023-05-10 05:13:04 -07:00
Max Schmitt 1541206482
test: use custom browser binary for connnect tests (#22900)
Fixes https://github.com/microsoft/playwright/issues/22898
2023-05-10 09:30:56 +02:00
Pavel Feldman 5e0574dc44
chore: list attachments in the trace (#22919)
Fixes https://github.com/microsoft/playwright/issues/22736
2023-05-09 17:53:01 -07:00
Dmitry Gozman cd49f5c466
feat(typescript): align with --moduleResolution=bundler (#22887)
This relaxes import requirements and allows importing `.ts` files
without an extension in CJS and ESM modes.

Fixes #22169.
2023-05-09 16:26:29 -07:00
Kevin Brotcke 852f1d7881
docs: add examples to run intersection or combination of tags (#22913) 2023-05-09 14:52:48 -07:00
Yury Semikhatsky 75e106745f
fix(fetch): support proxy.bypass (#22914)
Fixes #21916
2023-05-09 14:51:49 -07:00
Pavel Feldman 0bf297f523
fix(trace): merge step hierarchies (#22916) 2023-05-09 14:50:28 -07:00
Max Schmitt 7c76258972
docs: add missing POM classes to fixture guide (#22902) 2023-05-09 23:28:11 +02:00
Yury Semikhatsky 2e61a389d9
test: unskip loading in HTMLImageElement.prototype in WebKit (#22907)
It was fixed by roll to r1841.

Fixes https://github.com/microsoft/playwright/issues/22738
2023-05-09 10:39:44 -07:00
Pavel Feldman 2ead6e530f
docs: remove the networkidle mentions (#22906)
Fixes https://github.com/microsoft/playwright/issues/22897
2023-05-09 09:34:57 -07:00
Playwright Service 2704601d0c
feat(webkit): roll to r1845 (#22895)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-09 10:47:17 +02:00
richthornton c6b972983a
docs: add currents test reporter (#22797) 2023-05-08 19:00:54 -07:00
Mahtab Nejad d4ac75bcb6
docs: fixed typo in test-parallel-js.md (#22817) 2023-05-08 19:00:24 -07:00
Alex Neo 5bd5cea705
feat(html): describe labels (#22870) 2023-05-08 18:59:01 -07:00
Pavel Feldman b10cc03314
chore: render parse errors in the UI mode (#22888)
Fixes: https://github.com/microsoft/playwright/issues/22863
2023-05-08 18:51:27 -07:00
Pavel Feldman 5fb426e7db
fix(webkit): do not update console counter on unhandled rejections (#22890)
Fixes https://github.com/microsoft/playwright/issues/22886
2023-05-08 18:50:40 -07:00
Ricardo Melo Joia 1f209204cd
docs(ci): updated language ports container images (#22852)
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-05-08 12:58:38 +02:00
Pavel Feldman 9771b1ee74
chore: show steps for fixtures (#22860)
Fixes https://github.com/microsoft/playwright/issues/22565
2023-05-06 10:25:32 -07:00
Yury Semikhatsky 21ffa0b6ad
test: custom user agent for download request (#22859)
Failing test for #22843
2023-05-05 17:45:30 -07:00
Dmitry Gozman 03616e976e
fix(deps): --repeat-each should not apply to dependencies (#22858)
Fixes #21778.
2023-05-05 16:59:39 -07:00
Pavel Feldman efad19b332
chore: render test steps in the trace (#22837) 2023-05-05 15:12:18 -07:00
Dmitry Gozman 641e223ca8
fix(server): explicit allowlist for launch options (#22855)
Some options, usually paths, do not make sense when running remotely.

Fixes #22844.
2023-05-05 13:07:06 -07:00
Yury Semikhatsky 02a1a2e6a9
fix(webkit): define window.GestureEvent (#22768)
Polyfill GestureEvent so that Safari detection works.

Fixes #22735
2023-05-05 11:37:28 -07:00
Dmitry Gozman 160888df99
feat(locators): reland locator.and(locator) (#22850)
Removed in #22223.
Fixes #22585.
2023-05-05 11:14:01 -07:00
Dmitry Gozman 42328478ea
feat: make console/dialog events based on subscription (#22835)
This way we do not send events from the server unless the client is
interested.

Fixes #22621.
2023-05-05 11:12:33 -07:00
Dmitry Gozman 2393602e8c
fix(reuse): ignore late bindings after dispatchers were disposed (#22838)
When reusing the context, we first dispose all dispatchers, and then
reset the page/context. If bindings are triggered during the reset, they
try to send messages on disposed dispatchers.

Since there is no way to unregister bindings, just ignore them after
disposal.

Fixes #22803.
2023-05-05 11:10:53 -07:00
Dmitry Gozman 236c329ea9
feat: browserContext.on('dialog'/'console') (#22805)
Relanding #22033 and #21943.
2023-05-04 15:11:46 -07:00
Playwright Service ae3398d404
feat(webkit): roll to r1843 (#22831)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-04 23:14:38 +02:00
Pavel Feldman 9c25a04267
chore: use custom JSX runtime to stub-out erroneous JSX usage (#22827)
Fixes https://github.com/microsoft/playwright/issues/22789
2023-05-04 11:44:59 -07:00
Playwright Service 7e3f011824
feat(webkit): roll to r1842 (#22825)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-04 20:02:39 +02:00
Playwright Service 600bcc223f
feat(chromium-tip-of-tree): roll to r1111 (#22821)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-04 17:07:08 +02:00
Pavel Feldman 78203bf48d
chore: ensure error location is present (#22804)
Partial fix for https://github.com/microsoft/playwright/issues/22782
2023-05-03 18:45:33 -07:00
Dmitry Gozman ca3629186c
fix(role): fix native controls text alternative when aria-labelledby is present (#22800)
Fixes #22779.
2023-05-03 16:09:08 -07:00
Dmitry Gozman 4edd023644
fix(tsconfig): fallback to default *:* path mapping when baseUrl is present (#22802)
According to
https://www.typescriptlang.org/docs/handbook/module-resolution.html#base-url,
`baseUrl` affects all non-relative imports. Additional `paths` mapping
can be specified for more control. However, if none of the `paths`
matches, it still falls back to the default `*:*` mapping. Confirmed by
invoking `tsc` with different configs.

Fixes #22663.
2023-05-03 16:08:06 -07:00
Pavel Feldman 9a61a55ea1
chore: nest api steps by time (#22801)
Fixes https://github.com/microsoft/playwright/issues/22786
2023-05-03 16:04:20 -07:00
Sander 7fce2df391
fix(ct): solid typecheck (#22799)
partial fix for: https://github.com/microsoft/playwright/issues/22795
related to: https://github.com/ryansolid/dom-expressions/pull/244
2023-05-03 13:53:46 -07:00
Pavel Feldman b868f3a9d0
chore: extend raw stack (#22794) 2023-05-03 13:53:02 -07:00
Yury Semikhatsky 2233b352b6
fix(merger): pass onError to the reporter (#22775) 2023-05-03 09:08:09 -07:00
Andrey Lushnikov ff3275eb3e
chore: add report UUID (#22785) 2023-05-03 05:58:16 -07:00
Max Schmitt 6968b61fdc
docs: fix release notes snippets (#22778) 2023-05-03 14:53:27 +02:00
Dmitry Gozman 10ce7af411
fix(steps): step should not get an unrelated error (#22773)
Previously, we would use any error that was added during the step
execution as an error for this particular step.

This produces false positives, for example failing `page.click` call
that happened during `context` teardown was producing an error and
marking teardown is failed. However, in reality, the test itself has
failed, while teardown has not.

New approach uses test step hierarchy to inherit errors from child steps
to the parent step. This does not regress the original fix where
`expect.soft` errors are surfaced in the parent step.

See also #19973 that introduced the original logic.
2023-05-02 18:50:00 -07:00
Dmitry Gozman 3c724c2498
fix: do not crash upon download in unknown page (#22774)
Fixes #22551.
2023-05-02 18:49:04 -07:00
Dmitry Gozman dee0f2791e
test: unflake "should give enough time for fixture teardown" (#22763) 2023-05-02 17:40:10 -07:00
Yury Semikhatsky 5e02022dff
docs: set docker version to 1.33 in release notes (#22765) 2023-05-02 13:46:03 -07:00
Yury Semikhatsky b771a24f2c
docs: release notes for language ports (#22762) 2023-05-02 11:07:33 -07:00
Dmitry Gozman 8f09935e81
fix(test runner): separate test fixture scope for beforeAll/afterAll hooks (#22746)
There was a single test fixture scope that covers all hooks, modifiers
and test function. Now beforeAll-like modifiers, beforeAll and afterAll
hooks get a scope each.

Fixes #22256.
2023-05-02 11:04:51 -07:00
Pavel Feldman 5ad75f92f7
test: unflake basic timeout test (#22745) 2023-05-02 09:14:57 -07:00
Playwright Service 57db2a0734
feat(chromium-tip-of-tree): roll to r1110 (#22757)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-02 17:11:06 +02:00
Sander 79408ff7a4
test(ct): update child (#22712) 2023-05-01 15:20:46 -07:00
Sander 5b69c4cf52
chore: bump vite to 4.3.3 (#22711) 2023-05-01 15:19:49 -07:00
Pavel Feldman 70011c82f7
chore: unflake ui tests (3) (#22741) 2023-05-01 15:18:34 -07:00
Yury Semikhatsky a68cc161dc
test: HTMLImageElement.prototype.loading is present (#22744)
Failing test for https://github.com/microsoft/playwright/issues/22738
2023-05-01 14:55:20 -07:00
Yury Semikhatsky a4e90f20dc
fix(runner): do not hang on worker exit before tests (#22742) 2023-05-01 14:54:48 -07:00
Dmitry Gozman fcd966c4e5
chore: make _setupArtifacts a worker-scoped fixture (#22739)
This should unblock having separate test-fixture scopes for hooks and
test.
2023-05-01 13:53:15 -07:00
Yury Semikhatsky 59079d94ca
fix: call onExit when merging reports (#22718) 2023-05-01 12:58:40 -07:00
Pavel Feldman 297fea0826
chore: purify the junit reporter (#22624) 2023-05-01 09:15:08 -07:00
Alex Neo 26cad0b31f
feat(html): matching labels with dash&spec symbol (#22709)
Fixes #22700
2023-05-01 09:13:30 -07:00
Playwright Service 1168525c07
feat(chromium-tip-of-tree): roll to r1109 (#22725)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-30 14:17:30 +02:00
Dmitry Gozman a1842cc708
chore: extract ArtifactsRecorder from built-in fixtures (#22717) 2023-04-29 14:34:45 -07:00
Pavel Feldman 116fb349ce
chore: allow configuring test id attribute for codegen (#22716)
Fixes: https://github.com/microsoft/playwright/issues/22653
2023-04-29 12:04:33 -07:00
Pavel Feldman a01df2ff5b
chore: render live trace for the serial mode (#22715)
Fixes https://github.com/microsoft/playwright/issues/22655
2023-04-28 17:47:57 -07:00
Pavel Feldman 9c29f24c65
chore: poll test result along with the live trace (#22714)
Fixes: https://github.com/microsoft/playwright/issues/22656
2023-04-28 16:56:28 -07:00
Dmitry Gozman ffc00566b9
chore: separate options fixture vs artifacts fixture (#22713)
Later on, artifacts fixture can be made worker-scoped.
2023-04-28 16:54:52 -07:00
Dmitry Gozman dbb218a9d5
feat: project.teardown that runs after all dependents have finished (#22696)
This replicates globalTeardown in the deps world.

Fixes #21914.
2023-04-28 14:27:08 -07:00
Pavel Feldman 2a675026de
chore: add image diff test to ui mode (#22637) 2023-04-28 14:18:46 -07:00
Pavel Feldman e9373dfb6e
chore: make client-side instrumentation non-nullable (#22694) 2023-04-28 08:57:43 -07:00
Pavel Feldman b555d33e38
chore: roll the stable test runner (#22701) 2023-04-28 08:57:19 -07:00
Sander 66edffff85
chore(ct): optional framework plugin factory (#22685) 2023-04-27 20:26:02 -07:00
Alex Neo 7937699b28
fix(html): label not matched if first with describe (#22680) 2023-04-27 20:04:54 -07:00
Yury Semikhatsky 16f664e22c
chore: write blob report to the config dir by default (#22697) 2023-04-27 17:25:29 -07:00
Yury Semikhatsky f08caea8f2
chore: split merge and blob reporter (#22695) 2023-04-27 16:38:45 -07:00
Yury Semikhatsky f37f5fc61c
chore: comma separated reporter names, reporter arg from config (#22693) 2023-04-27 15:16:18 -07:00
Dmitry Gozman 223baa3393
fix(html): keep tests in the declaration order (#22690)
Fixes #22143.
2023-04-27 13:54:15 -07:00
Yury Semikhatsky 82670147b4
chore: support multiple merged reports (#22672) 2023-04-27 09:15:24 -07:00
Playwright Service e50e2e6bc9
feat(webkit): roll to r1840 (#22686)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-27 17:37:19 +02:00
Playwright Service 5043648762
feat(webkit): roll to r1839 (#22664)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-27 10:40:09 +02:00
Doug Harris bbf8d33113
docs(test-runners): improve slowmo param for python (#22669) 2023-04-27 10:38:57 +02:00
Playwright Service 13061a9bba
feat(ffmpeg): roll to r1009 (#22670)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-27 10:37:39 +02:00
Andrey Lushnikov ec76ac8d28
devops: fix workflow publishing (#22673)
The release workflow is failing with the [following
error](https://github.com/microsoft/playwright/actions/runs/4814866583):

<img width="949" alt="image"
src="https://user-images.githubusercontent.com/746130/234735651-204acaea-324b-410e-b030-4c56aabdd653.png">

This was regressed in
https://github.com/microsoft/playwright/pull/22232/
2023-04-26 18:25:43 -07:00
Yury Semikhatsky 51aca72c35
chore: split InternalReporter and Multiplexer (#22671)
The multiplexer will be reused in the blob report merger.
2023-04-26 17:55:58 -07:00
Yury Semikhatsky e809ecdc5d
test: relax event location expectation (#22668)
The actual pageX/pageY values vary between browsers, os versions and
headed/headless. Relaxing the expectation to ensure that the result is
sensible after the pixel conversions.
2023-04-26 17:22:01 -07:00
Max Schmitt c5880f9994
chore(chromium): remove --disable-sync CLI switch (#22667)
Fixes https://github.com/microsoft/playwright/pull/22583
Fixes https://github.com/microsoft/playwright/issues/22560

Not relevant anymore, it only takes effect when profiles is signed in.

See https://bugs.chromium.org/p/chromium/issues/detail?id=1439737.
2023-04-26 15:34:47 -07:00
Max Schmitt 7b27d70d8a
feat(web-server): add stdout: "pipe"|"ignore" option (#22564)
Fixes https://github.com/microsoft/playwright/issues/22454
2023-04-26 23:39:42 +02:00
Adrien Clerbois b7656e605a
docs(trace-viewer-intro): fix code snippet for C# (#22648) 2023-04-26 22:20:45 +02:00
Andrey Lushnikov f3852d4511
test: tree herding (#22660)
Disable tests according to the filed bugs.

https://github.com/microsoft/playwright/issues/22616
https://github.com/microsoft/playwright/issues/22617
https://github.com/microsoft/playwright/issues/22618
2023-04-26 13:11:02 -07:00
Andrey Lushnikov 286428fda9
docs: release notes 1.33 (#22615) 2023-04-26 13:00:36 -07:00
Yury Semikhatsky 4d6092fc8f
test: check os version only on mac (#22658) 2023-04-26 12:59:21 -07:00
jase 60afcc9c6c
docs(auth.md): JavaScript writeFileSync/readFileSync usage not async (#22649) 2023-04-26 12:42:24 -07:00
Yury Semikhatsky 9ad9b6b316
chore: reuse createReporters in the merger (#22636)
#10437
2023-04-26 11:48:19 -07:00
Pavel Feldman 7fdd7a20fb
chore: fix soft after poll (#22642) 2023-04-26 08:50:10 -07:00
Sander 44e56d2404
feat(ct): code split for better performance and isolation (#22494) 2023-04-25 18:08:34 -07:00
Pavel Feldman d34c4e99f5
chore: add step attachments into the expect trace event (#22543) 2023-04-25 17:38:12 -07:00
Pavel Feldman 6b487ff49d
chore: remove cli from playwright-core (#22612)
Fixes https://github.com/microsoft/playwright/issues/22599
2023-04-25 11:19:37 -07:00
Yury Semikhatsky f0fb4b67c6
docs(java): clarify how to configure souce location (#22613) 2023-04-25 11:11:47 -07:00
Debbie O'Brien ec5f7d5491
docs: add UI mode doc (#22628) 2023-04-25 20:09:52 +02:00
Pavel Feldman a1007bbe2c
chore: introduce expect.configure (#22533) 2023-04-25 10:29:56 -07:00
dependabot[bot] 76a2afc836
chore(deps-dev): bump yaml from 1.10.2 to 2.2.2 (#22601) 2023-04-25 09:36:42 +02:00
Yury Semikhatsky 59678fdea7
chore: create list reporter for watch mode directly (#22614) 2023-04-24 18:32:32 -07:00
Yury Semikhatsky 24478be565
feat: preserve attachments in blob reports (#22605)
Attachments with `path` are stored as `resources/sha1.ext` zip entries
and extracted under `report-dir/tmp` when merging. This way normal
fs.readFile keeps working as before even thought the file path is
different. The clients should rely on `attachment.name` instead of
`attachment.path` when deriving user visible titles in the UI. If this
turns out not to be the case we can reconsider later.

#10437
2023-04-24 17:34:09 -07:00
Pavel Feldman 78acb5ef58
chore: do not layer box shadows on top of one another in image diff (#22604) 2023-04-24 15:23:01 -07:00
Pavel Feldman 5120e7d541
chore: fix list-files (#22609) 2023-04-24 15:13:59 -07:00
Andrey Lushnikov 0c4bed191f
chore: update browser patches as of Mar 14, 2023 (#22603)
Internal commit reference:
e994525a6d
2023-04-24 14:28:08 -07:00
Andrey Lushnikov e6dfaa312e
chore: roll browser patches from upstream repository (#22608) 2023-04-24 14:26:36 -07:00
Andrey Lushnikov 4408738d9c
chore: cut 1.33.0 (#22600) 2023-04-24 12:48:02 -07:00
Playwright Service eed6c33283
feat(webkit): roll to r1837 (#22566)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-24 15:12:54 +02:00
Dmitry Gozman 05b113f050
docs: add warning to locator.all (#22537)
References #22517.
2023-04-23 21:18:46 -07:00
Andrey Lushnikov 62bd41912d
chore: cleanup bandaid firefox pref (#22570)
This patch removes the bandaid preferences that got migrated
to the build.
2023-04-23 19:58:00 -07:00
Andrey Lushnikov 99d4887053
feat(firefox): roll to r1403 (#22540)
Fixes https://github.com/microsoft/playwright/issues/22082
Fixes https://github.com/microsoft/playwright/issues/20993
2023-04-21 21:45:41 -07:00
Pavel Feldman 17df03c043
chore: better zone stack preservation in expect (#22563) 2023-04-21 16:13:35 -07:00
Pavel Feldman becb072703
chore: fix leaking event listeners (#22562)
Fixes https://github.com/microsoft/playwright/issues/22348
2023-04-21 12:38:39 -07:00
Max Schmitt f6aa9f49ce
chore: make evaluate work with busted Array.prototype.map/push (#22528)
Fixes https://github.com/microsoft/playwright/issues/22460

Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2023-04-21 19:52:13 +02:00
Pavel Feldman bbc47ba315
chore: ensure web assertions are merged in trace (#22544) 2023-04-21 10:07:23 -07:00
Andrey Lushnikov a919f5f66f
chore: attempt to fix firefox-beta WebGL tests on MacOS 12.6 (#22548)
Looks like https://phabricator.services.mozilla.com/D164016
disabled software rendering.

If Firefox-beta passes on MacOS, then this bandaid setting will be
migrated to the firefox-beta default settings.
2023-04-21 09:54:25 -07:00
Playwright Service b45e3556e5
feat(chromium-tip-of-tree): roll to r1106 (#22542)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-21 11:08:15 +02:00
Andrey Lushnikov a56f97fcef
Revert "fix(inspector): fix leaking event listeners (#22535)" (#22545)
This reverts commit 58b3c31f3e.

Reason for revert: UI rendering hits an infinite tight loop.
Reproduces locally with `npm run ctest pause.spec:357` (test hangs)
Also observed on dashboard:

<img width="1467" alt="image"
src="https://user-images.githubusercontent.com/746130/233541521-1f30338d-dd83-405c-bb0d-c890611c33e3.png">


https://github.com/microsoft/playwright/issues/22348
2023-04-20 21:35:01 -07:00
Pavel Feldman d95268ffc0
chore: remove refined title (#22541) 2023-04-20 20:34:07 -07:00
Pavel Feldman d9a7aa584c
chore: bump timeouts in ui mode tests (#22526) 2023-04-20 16:47:08 -07:00
Max Schmitt 7c89572a53
test: fix ct-vue-vite typechecks (#22538) 2023-04-21 00:31:00 +02:00
Max Schmitt 58b3c31f3e
fix(inspector): fix leaking event listeners (#22535)
Fixes https://github.com/microsoft/playwright/issues/22348
2023-04-20 22:42:34 +02:00
Andrey Lushnikov 2b9b46e260
test: add test for viewport scaling (#22532)
This test makes sure that the viewport scaling approach we tried in
Firefox doesn't work since coordinates are rounded to integers
internally before being dispatched to the renderer.

https://github.com/microsoft/playwright/issues/22082
2023-04-20 10:24:33 -07:00
Yury Semikhatsky 9ea9adf8ff
test: mark reporter-blob tests as slow (#22530)
They run several playwright instances for each shard and then open
merged html report which takes considerable time
2023-04-20 09:36:38 -07:00
Playwright Service 94b36a3805
feat(chromium): roll to r1060 (#22529)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-20 18:21:29 +02:00
☃ Elliot Shepherd 106fa45f50
feat(route): accept timeout to fetch (#22475)
Fixes: #22474
2023-04-20 08:41:33 -07:00
Pavel Feldman 0c70f6900e
chore: fix ui mode w/ multiple contexts (#22514)
Fixes: https://github.com/microsoft/playwright/issues/21895
2023-04-20 08:19:00 -07:00
Pavel Feldman cdaccdeaf7
chore: speculative change to fix the ui mode tests stress (#22510) 2023-04-20 08:18:09 -07:00
Playwright Service 1b9e594b40
feat(webkit): roll to r1835 (#22513)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-20 16:07:15 +02:00
Pavel Feldman 8f14517de2
chore: allow collapsing all (#22512)
Fixes https://github.com/microsoft/playwright/issues/21915
2023-04-19 18:16:18 -07:00
Dmitry Gozman 957ec0067f
chore: separate concerns of testinfo helpers (#22491) 2023-04-19 17:31:07 -07:00
Pavel Feldman a45f04568b
chore: rename watchmode to uimode tsx (#22511) 2023-04-19 16:51:42 -07:00
Yury Semikhatsky b8b929fdea
chore: hide merge-reports command (#22509) 2023-04-19 15:36:17 -07:00
Pavel Feldman ba8aed9dea
chore: move mount implementation to ct-core (#22506) 2023-04-19 15:32:33 -07:00
Pavel Feldman e7b9c08833
chore: should not spill toPass between tests (#22473) 2023-04-19 14:45:58 -07:00
Pavel Feldman 3c495c5590
chore: only transpile tsx for components (#22504) 2023-04-19 14:20:53 -07:00
Dmitry Gozman bf0fab4927
fix(ui mode): ignore repeatEach (#22505)
Fixes #22498.
2023-04-19 14:16:12 -07:00
Pavel Feldman 320b9d5dbb
chore: speculative attempt to unflake ui mode tests (#22476) 2023-04-19 07:29:28 -07:00
Sander 060979ef86
feat(ct): vue2 throw when updating a native html element (#22407)
Related to: https://github.com/microsoft/playwright/issues/22328.
2023-04-19 07:28:21 -07:00
Sander b3b624b0c9
feat(ct): vue throw when updating a native html element (#22392)
Related to: https://github.com/microsoft/playwright/issues/22328.
2023-04-19 07:28:00 -07:00
Max Schmitt 49c9284bc7
Revert "feat(html reporter): render multiple annotations of the same type together (#21580)" (#22466)
Fixes https://github.com/microsoft/playwright/issues/22323
2023-04-18 20:43:07 +02:00
mindaugasm be79ee0450
feat(html-report): add attachmentsBaseURL option (#22212)
Fixes https://github.com/microsoft/playwright/issues/21636
2023-04-18 11:25:11 -07:00
Pavel Feldman d45efe881f
chore: don't leak from waitFor (#22465)
Fixes https://github.com/microsoft/playwright/issues/22458
2023-04-18 11:11:46 -07:00
Playwright Service 4e9faba34d
feat(webkit): roll to r1834 (#22462)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-18 19:41:56 +02:00
Debbie O'Brien 3a0f49acab
docs: add options snippets to api docs (#22098) 2023-04-18 19:04:13 +02:00
Yury Semikhatsky e69d3d976f
test: remove fixme for webkit video on linux (#22461)
Fixes https://github.com/microsoft/playwright/issues/22411
2023-04-18 09:21:20 -07:00
Yury Semikhatsky 2ea214d6f0
fix: preserve trace if context if closed manually during test run (#22442)
Reference #22122, #22120
2023-04-18 09:02:33 -07:00
Debbie O'Brien d9e7a4fffd
docs: remove test advanced guide (#22028) 2023-04-18 10:47:32 +02:00
Pavel Feldman 9f661b710a
chore: bump the trace packet size to be 1Mb (#22446) 2023-04-17 18:36:08 -07:00
Pavel Feldman 00df08b3cf
chore: explicitly control actions with slow mo (#22445)
Fixes https://github.com/microsoft/playwright/issues/22273
2023-04-17 16:19:30 -07:00
Pavel Feldman 8d69fbacf7
chore: introduce ct-core to hard-depend on vite (#22437)
Fixes https://github.com/microsoft/playwright/issues/22233
2023-04-17 16:19:21 -07:00
Playwright Service 5b48df36b3
feat(webkit): roll to r1832 (#22420) 2023-04-17 12:58:05 -07:00
Dmitry Gozman bf661535a6
fix(testMatch): do not count test.ts and spec.ts as test files by default (#22440) 2023-04-17 12:57:33 -07:00
Yury Semikhatsky 1fecc20238
feat(webkit): roll to r1830 (#22412)
https://github.com/microsoft/playwright/issues/22411
Fixes https://github.com/microsoft/playwright/issues/21892
2023-04-14 13:32:50 -07:00
Playwright Service 7f856a65c4
feat(firefox): roll to r1399 (#22409)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-14 12:04:14 -07:00
Playwright Service da8672711b
feat(firefox): roll to r1398 (#22397)
Fixes https://github.com/microsoft/playwright/issues/22343

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-14 07:24:54 -07:00
dependabot[bot] b20bd09f5e
chore(deps-dev): bump xml2js from 0.4.23 to 0.5.0 (#22320) 2023-04-14 12:03:40 +02:00
Playwright Service 66972636ad
feat(chromium-tip-of-tree): roll to r1104 (#22380)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-14 12:03:27 +02:00
Playwright Service 53a8fa2743
feat(firefox-beta): roll to r1400 (#22394)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-14 00:42:41 -07:00
Andrey Lushnikov da87a0af76
test: update selenium server and try to reenable tests (#22391)
This patch updates selenium server to 4.8.3, hoping that it
fixed the issue.

Fixes https://github.com/microsoft/playwright/issues/21733
2023-04-13 14:15:09 -07:00
Andrey Lushnikov 60aba4d394
chore: support browser aliases in roll_browser.js (#22389) 2023-04-13 13:57:47 -07:00
Playwright Service b55b3eae00
feat(firefox-beta): roll to r1399 (#22385)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-13 13:37:35 -07:00
Andrey Lushnikov b7d06d4d24
test: worker network attribution is still not fixed in Firefox 113 (#22390)
We'll need to wait until it is fixed upstream.

References https://github.com/microsoft/playwright/issues/21760
2023-04-13 13:36:17 -07:00
Playwright Service 0c3c6ed683
chore(driver): roll driver to recent Node.js LTS version (#22378)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-13 12:24:10 +02:00
Andrey Lushnikov 90182a319d
test: fix android test (#22370)
For some reason, Android model changed from `sdk_gphone64_x86_64` to
`sdk_gphone_x86_64`.

Relax the test to test the model name & architecture.
2023-04-12 15:19:35 -07:00
Andrey Lushnikov 9411790712
test: skip new tests that don't work in non-default mode (#22369)
The tests were added in
5cd9f83c7b
2023-04-12 15:15:34 -07:00
Andrey Lushnikov 1962b5be3c
test: make sure process killing logic works without ps on Linux (#22366)
The bare-bones `debian` distribution we use for testing doesn't have
`ps`. This patch switches to reading `/proc` file system directly on
Linux instead of relying on `ps`.

Performance measurements for the 20000 active processes on Debian Docker
container, tested on my M1 Max Mac:
- the `ps -eo pid,ppid,pgid` call + parsing takes 293ms
- the manual synchronous `/proc` traversal + parsing takes 326ms

So this is ~10% perf penalty.

Drive-by: rename `pgid` into `pgrp` so that it stands out from `pid`
(process ID) and `ppid` (parent process ID).
2023-04-12 13:16:42 -07:00
Max Schmitt 336d2114c8
chore: have Ubuntu 22 Docker image by default (#22356)
Fixes https://github.com/microsoft/playwright-python/issues/1858
2023-04-12 19:40:23 +02:00
Andrey Lushnikov 2977c2b539
test: refer to the upstream Firefox bug (#22364)
There's no action on our side to fix this.

Fixes https://github.com/microsoft/playwright/issues/21550
2023-04-12 10:37:21 -07:00
Andrey Lushnikov 8bb708be70
test: unflake inspector-cli tests (#22347)
This patch:
- changes the `childProcess` fixture to reliably SIGKILL all descendants
  (children and grand-children, regardless of their process group).
This is achieved using the `ps` command to build the process tree, and
then send
  `SIGKILL` to the descendant process groups.
- changes the `runCLI` fixture to **not** auto-close codegen by default;
  the `childProcess` fixture will clean up all processes. This makes
sure that all `runCLI.waitFor()` commands actually wait until the
necessary
  output.
- for a handful of tests that do actually want to auto-close codegen,
  introduce an optional `autoCloseWhen` flag for the `runCLI` fixture
that makes sure to close the codegen once a certain output was reached.
2023-04-12 09:37:24 -07:00
Max Schmitt 56dcab844a
docs: rename api testing (#22362)
https://github.com/microsoft/playwright.dev/issues/1010
2023-04-12 17:17:36 +02:00
dependabot[bot] 635d180251
chore(deps): bump xml2js from 0.4.23 to 0.5.0 in /utils/flakiness-dashboard (#22346) 2023-04-12 09:55:17 +02:00
Playwright Service a5749c033d
feat(firefox): roll to r1396 (#22327)
Fixes https://github.com/microsoft/playwright/issues/21995
2023-04-11 08:49:44 -07:00
Playwright Service b256bd4e4c
feat(chromium-tip-of-tree): roll to r1103 (#22335)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-11 15:31:02 +01:00
Andrey Lushnikov 15c6803880
test: add test for clicking in large viewports (#22322)
Right now we cannot click on the boundaries of the viewports
that are larger than screen size in headed firefox.

https://github.com/microsoft/playwright/issues/22082
2023-04-11 01:47:47 -07:00
Andrey Lushnikov 8b8385b6cb
test: remove faulty test (#22321)
Turns out we cannot guarantee order of events in Firefox: it might
close the page before we get a response from renderer.

Thus removing a faulty test.

References https://github.com/microsoft/playwright/issues/20093
2023-04-10 20:12:39 -07:00
Pavel Feldman c5aeab4d7e
revert(20509, 20596): expect.toPass is broken with these (#22254)
Reverts https://github.com/microsoft/playwright/pull/20509 and
https://github.com/microsoft/playwright/pull/20596
Fixes #22215
2023-04-10 17:39:49 -07:00
Yury Semikhatsky 1e9668f8bd
test: download link with data url (#22312)
References #21892
2023-04-10 14:15:06 -07:00
Andrey Lushnikov 2d1c736091
doc: fix typo in docs (#22314)
Fixes https://github.com/microsoft/playwright/issues/22288
2023-04-10 14:11:19 -07:00
Yury Semikhatsky 2af3f486c4
fix: do not load trace data for passing tests (#22311)
Fixes #22122
Fixes #22120
2023-04-10 13:29:55 -07:00
Playwright Service 2573dff5e9
feat(webkit): roll to r1827 (#22291) 2023-04-10 13:10:34 -07:00
Sander 2b32d05175
test(ct): react17 coverage (#22297) 2023-04-09 15:11:31 -07:00
Sander ec2dc92336
fix(ct): component type import path (#22296) 2023-04-09 15:04:46 -07:00
Yury Semikhatsky 5cd9f83c7b
fix(webkit): properly set user agent in persistent context (#22283)
Fixes https://github.com/microsoft/playwright/issues/22274
2023-04-07 19:50:49 -07:00
Pavel Feldman 635a2dac16
chore: remove FullProjectInternal.from (#22280) 2023-04-07 19:12:20 -07:00
Yury Semikhatsky 1efa8de526
test: fix reporter blob tests on bots (#22281) 2023-04-07 17:48:54 -07:00
Pavel Feldman 3b94bb6740
chore: simplify full config and full project building (#22278) 2023-04-07 17:46:47 -07:00
Yury Semikhatsky 8d2502ee62
test: make page-leaks tests pass in electron (#22277)
They've been failing
https://devops.playwright.dev/flakiness.html#filter_spec=page%2Fpage-leaks.spec.ts&test_parameter_filters=%5B%5D&timestamp=1680901928195
2023-04-07 17:20:49 -07:00
Playwright Service 26bbf8ca1b
feat(chromium): roll to r1058 (#22264) 2023-04-07 14:11:18 -07:00
Valentín Costa 93e020d483
docs(class-test.md): add missing R in the word returned (#22252) 2023-04-07 13:57:28 -07:00
Playwright Service 12da068249
feat(webkit): roll to r1825 (#22258) 2023-04-07 13:56:22 -07:00
任跃兵 2b1a121133
Update class-consolemessage.md (#22261) 2023-04-07 13:51:46 -07:00
Pavel Feldman eed5b4c83b
chore: process stdio buffers (#22270)
Fixes https://github.com/microsoft/playwright/issues/22265
2023-04-07 13:50:15 -07:00
Yury Semikhatsky d59e0e10ce
feat: blob reporter (#22244)
#10437
2023-04-07 13:47:52 -07:00
Pavel Feldman a42567d549
chore: inside out the config & project internal (#22260) 2023-04-07 09:54:01 -07:00
Pavel Feldman 02ca63b381
chore: use separator when printing titles in the list mode (#22269)
Fixes https://github.com/microsoft/playwright/issues/22267
2023-04-07 09:52:04 -07:00
Yury Semikhatsky 1ea9f02944
chore: add configDir to reporter options (#22250) 2023-04-06 14:23:47 -07:00
Playwright Service c36b96fd8c
feat(webkit): roll to r1824 (#22251)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-06 22:46:26 +02:00
Pavel Feldman 3400d62a7a
chore: discourage networkidle (#22247) 2023-04-06 13:00:34 -07:00
Pavel Feldman 09f072de09
chore: introduce the concept of a test run (#22243) 2023-04-06 11:20:24 -07:00
Pavel Feldman 9ced1e278d
chore: remove the legacy webServer accessor from the config (#22245) 2023-04-06 11:20:11 -07:00
Max Schmitt 2df0f0738d
test: report and kill child processes which are leaking after test (#22237) 2023-04-06 20:09:19 +02:00
Max Schmitt 44b63b042e
devops: do not download electron on non-electron workflows (#22232) 2023-04-06 19:49:29 +02:00
Sander cea382015f
chore(ct): rename component.d.ts (#22234) 2023-04-06 08:40:49 -07:00
Yury Semikhatsky fc23d35697
chore: clear previous test results optionally (#22224) 2023-04-06 08:33:17 -07:00
Playwright Service 13c7ddb883
feat(chromium-tip-of-tree): roll to r1102 (#22235)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-06 15:33:11 +02:00
Playwright Service f610577a18
feat(webkit): roll to r1823 (#22227)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-06 11:52:48 +02:00
Dmitry Gozman 08cef43e82
feat(locator): remove locator.and and locator.not (#22223)
Not shipping for now, after API review.
2023-04-05 16:28:13 -07:00
Yury Semikhatsky b5195122d9
chore: return promise from tele receiver dispatch (#22218) 2023-04-05 14:23:06 -07:00
Dmitry Gozman 35afb056ea
feat(locator): filter({ hasNotText }) (#22222)
The opposite of `filter({ hasText })`.
2023-04-05 14:13:28 -07:00
Andrey Lushnikov 29643a7bff
test: add regression tests for clicking (#22221)
https://github.com/microsoft/playwright/issues/21995
2023-04-05 13:20:39 -07:00
Dmitry Gozman 5734f11a69
docs: update Locator.or example (#22220) 2023-04-05 13:13:10 -07:00
Sébastien Richert 88544d537b
docs(class-request.md): rephrase definition of request timing responseStart (#22170) 2023-04-05 13:11:38 -07:00
Sander 789d8b24c0
chore(ct): dedupe json object (#22138) 2023-04-05 13:10:00 -07:00
Pavel Feldman 159e71982e
chore: render failed steps in the basic reporters (#22200)
Fixes #20532
2023-04-05 13:03:42 -07:00
Pavel Feldman 0d31d69d65
chore(trace): improve loading progress bar (#22201)
Fixes: https://github.com/microsoft/playwright/issues/22118
2023-04-05 13:03:25 -07:00
Dmitry Gozman bc1de5f28d
feat(locator): filter({ hasNot }) (#22219)
This is the opposite of `filter({ has })`.
2023-04-05 12:45:46 -07:00
Playwright Service 8dd431745d
feat(firefox): roll to r1394 (#22199)
Fixes https://github.com/microsoft/playwright/issues/21621

---------

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Andrey Lushnikov <aslushnikov@gmail.com>
2023-04-05 11:39:23 -07:00
Playwright Service 3f7eeafc90
feat(firefox-beta): roll to r1396 (#22198)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-05 09:33:57 -07:00
Johannes Loher bd698efaef
fix(webServer): follow relative redirects when checking the url (#22035)
Fixes https://github.com/microsoft/playwright/issues/22144
2023-04-05 10:39:35 +02:00
Dmitry Gozman d7b3836752
chore: revert console and dialog events on BrowserContext (#22195)
This reverts #22033 and #21943, since there will be no immediate
benefits in v1.33.
2023-04-04 13:13:52 -07:00
Pavel Feldman 3608425d57
chore: allow reusing browser between the tests (#22191) 2023-04-04 12:31:42 -07:00
Pavel Feldman f8f9ee6a25
chore: introduce Reporter.onExit (#22176)
Fixes https://github.com/microsoft/playwright/issues/22173
2023-04-04 10:50:40 -07:00
Rob Bayliss 966f2392a0
docs(test-configuration): fix missing reference to devices in snippet (#22162) 2023-04-04 15:43:51 +02:00
Playwright Service 464196f9e9
feat(chromium-tip-of-tree): roll to r1101 (#22187)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-04 15:43:19 +02:00
Pavel Feldman 87acda74ff
chore: respect source map sources when filtering in CLI (#22180)
Fixes #22123
2023-04-03 19:49:01 -07:00
Dmitry Gozman 8bc7ed0469
test: remove element being dragged before drop (#22177)
This scenario hangs in Firefox, waiting for response to `mouseup` event.

References #21621.
2023-04-03 18:42:29 -07:00
Dmitry Gozman ab85b23e67
fix(expect): report expect "Timed out" when it actually does (#22174)
Previously, it would say "Timed out" when page was closed at test
timeout, or not say "Timed out" when at least one element matched.

Fixes #21664.
2023-04-03 15:06:13 -07:00
Dmitry Gozman 26c00a97a5
fix(expect): do not produce logs twice (#22171) 2023-04-03 15:05:40 -07:00
Max Schmitt 590013e27b
docs(python): fix WebSocket types (#22155)
Fixes https://github.com/microsoft/playwright-python/issues/1841
2023-04-03 13:21:33 -07:00
Andrey Lushnikov df6888a251
test: add regression test for screencast bug (#22164)
Fixed firefox is already rolled in.

Fixes https://github.com/microsoft/playwright/issues/22069
2023-04-03 09:28:35 -07:00
Playwright Service babb2bc3ee
feat(webkit): roll to r1821 (#22141)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-03 10:32:51 +02:00
Playwright Service 41e4ca0257
feat(firefox-beta): roll to r1395 (#22137)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-01 01:21:06 -07:00
Playwright Service cebcb062b2
feat(firefox): roll to r1393 (#22135)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-04-01 01:20:14 -07:00
Pavel Feldman ee39af260d
chore: discourage waitForSelector (#22133) 2023-03-31 20:24:08 -07:00
Dmitry Gozman 82e52004c9
fix(ui mode): preserve manually selected action in live trace (#22131) 2023-03-31 18:34:51 -07:00
Pavel Feldman 3b9e62432d
chore: do not leak on clicks (#22129)
Fixes #22115
2023-03-31 18:18:45 -07:00
Dmitry Gozman 41e3e6d13f
fix(tracing): avoid clashing network file names (#22126)
With two contexts in the same test, we can get:
- `<testId>.network` and `<testId>-1.network` files;
- for export, we can copy `<testId>.network` into `<testId>-1.network`
and try to copy into a file when another trace is reading from it.

Fixes #22089.
2023-03-31 17:29:39 -07:00
Pavel Feldman 0d9ec60dc7
chore: implement jsHandle._objectCount in chromium (#22127) 2023-03-31 15:52:01 -07:00
Andrey Lushnikov 5223c1ba39
feat: add timeout to electron.firstWindow() method (#21863)
Fixes https://github.com/microsoft/playwright/issues/21846
2023-03-31 15:35:54 -07:00
Dmitry Gozman 1fbefa694f
fix(role): update accessible name calculation for native buttons (#22124)
There is a new section in the spec:

https://w3c.github.io/html-aam/#button-element-accessible-name-computation

Fixes #21808.
2023-03-31 14:17:18 -07:00
MarcNum fbdafc5fe3
feat: Adding trace option 'on-all-retries' (#21985)
Fixes: #21860
2023-03-31 13:04:24 -07:00
Yury Semikhatsky e86b0cf0ce
docs: discourage test lists (#22125)
Fixes https://github.com/microsoft/playwright/issues/22109
2023-03-31 11:10:13 -07:00
Max Schmitt 47c669caf2
test: fix service tests (#22111)
<img width="805" alt="image"
src="https://user-images.githubusercontent.com/17984549/229117984-1c70541b-7941-40e2-950d-a699e0fc4cc4.png">
2023-03-31 10:58:08 -07:00
Dmitry Gozman a95ced0fef
fix(waitFor): when frameLocator does not match, resolve hidden/detached states (#22119)
Fixes #21879.
2023-03-31 10:54:07 -07:00
Dmitry Gozman 37d1659508
feat(connect): support special headers for debug/attachments (#22106)
`x-playwright-debug-log: value` headers are printed to `pw:browser`
debug log.
`x-playwright-attachment: name=value` headers are attached to each test.

Fixes #21619.
2023-03-31 08:57:07 -07:00
Debbie O'Brien a567cf083f
docs: remove cli guide (#21997) 2023-03-31 10:48:05 +02:00
Sander b9f7cca0aa
fix(ct): optional hooks config type (#22100) 2023-03-30 21:09:05 -07:00
Pavel Feldman b1fdf0bcb6
chore: nest test steps based on zones (#22108)
Fixes: #21423
2023-03-30 21:05:07 -07:00
Pavel Feldman eacaf5fc89
chore(ui): update expected state on test end (#22104)
Fixes https://github.com/microsoft/playwright/issues/22096
2023-03-30 16:17:34 -07:00
Dmitry Gozman 539d9873c2
feat: rename Locator.filter(locator) to Locator.and (#22101) 2023-03-30 14:41:30 -07:00
Yury Semikhatsky ebcb37f61e
docs: add warning about browser policy (#22103)
Fixes https://github.com/microsoft/playwright/issues/22016
2023-03-30 13:09:57 -07:00
Sander 98051c7db2
fix(ct): solid type checking (#22102) 2023-03-30 12:31:39 -07:00
Dmitry Gozman e6148bb725
feat: Locator.not(locator) (#22066) 2023-03-30 08:52:30 -07:00
Playwright Service 9aaf2b028e
feat(chromium-tip-of-tree): roll to r1100 (#22095)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-30 16:13:03 +02:00
Playwright Service da3f2c042e
feat(chromium): roll to r1057 (#22093)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-30 15:36:15 +02:00
Debbie O'Brien 870abae9a1
docs: remove debug selectors (#22027) 2023-03-30 15:20:28 +02:00
Debbie O'Brien 2c9d65b5ed
docs: change port to url (#22029) 2023-03-30 15:18:59 +02:00
Playwright Service 896a03e776
feat(webkit): roll to r1820 (#22083) 2023-03-30 10:03:16 +02:00
Playwright Service f96b24b2c5
feat(webkit): roll to r1819 (#22081)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-30 09:31:37 +02:00
Pavel Feldman 968abd27d5
chore: do not use attributes for trace target annotation (#22075)
Fixes: https://github.com/microsoft/playwright/issues/22004
2023-03-29 23:17:17 -07:00
Pavel Feldman a4f67c64e3
chore: allow ts decorators (#22080) 2023-03-29 20:43:08 -07:00
Pavel Feldman d39ff3dc5a
chore: update typescript to 5.0.2 (#22079) 2023-03-29 17:13:09 -07:00
Dmitry Gozman 548e4a0c0f
fix(role): account for unslotted elements being hidden for aria (#22070)
When element is not assigned to any slot in the shadow root, it is not
rendered and is considered hidden for ARIA in all browsers.

In Chromium/Firefox we use `Element.checkVisibility` that already
handles this, but in WebKit we have to check it manually.

Fixes #21487.
2023-03-29 17:08:05 -07:00
Max Schmitt 0c4eedbabe
docs: support code block titles (#22068)
Fixes https://github.com/microsoft/playwright/issues/21461
2023-03-29 23:15:39 +02:00
Yury Semikhatsky 026e49b076
chore: add snippet to the error message (#21991) 2023-03-29 14:07:14 -07:00
Sander 8d6f7ad521
fix(ct): viteConfig commonjsOptions doesn't work (#22063) 2023-03-29 14:00:38 -07:00
Sander 2428ff8b8b
chore: bump vite to 4.2.1 (#22061) 2023-03-29 14:00:00 -07:00
Sander 9c0c5d6e2a
chore(ct): throw error when props are not json serializable (#22025) 2023-03-29 13:59:27 -07:00
Pavel Feldman 8b7dc2cf7a
test: add a ui teardown test (#22010) 2023-03-29 13:57:19 -07:00
Dmitry Gozman f7244a7e34
fix(tracing): allow disabling tracing through env (#22050)
We point `tracesDir` inside `test-results`, so it is removed between
test runs, while reused context is still writing there.
    To fix the issue, we can now pass `env.PW_TEST_REUSE_CONTEXT`.

References #21993.
2023-03-29 13:35:31 -07:00
Sander 81f3f987be
docs(readme): swap locator for getByText (#22059) 2023-03-29 20:13:55 +02:00
Dmitry Gozman 6929214dbf
feat(expect): expect(locator).toBeAttached() (#22067)
Fixes #13467.
2023-03-29 11:09:17 -07:00
Andrey Lushnikov 0b170ddc12
test: enable some of the previously disabled tests (#22047)
Fixes https://github.com/microsoft/playwright/issues/21549
2023-03-29 10:52:55 -07:00
Andrey Lushnikov bb6b4425f7
fix: per-user cache folders (#22046)
Fixes https://github.com/microsoft/playwright/issues/21859
2023-03-29 10:49:52 -07:00
Playwright Service 4f4a63096e
feat(firefox): roll to r1392 (#22056)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-29 10:48:16 -07:00
Playwright Service d8f5a3f2ce
feat(firefox-beta): roll to r1394 (#22052)
References https://github.com/microsoft/playwright/issues/21760

---------

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Andrey Lushnikov <aslushnikov@gmail.com>
2023-03-29 10:47:31 -07:00
Playwright Service 7f1de6568c
feat(webkit): roll to r1818, freeze webkit version on macos 11 (#21996) 2023-03-28 17:34:39 -07:00
Dmitry Gozman 6a2b4ed142
fix(role): use <title> for elements inside svg (#22043)
Follows svg-aam mapping:
https://www.w3.org/TR/svg-aam-1.0/#mapping_additional_nd

Fixes #21486.
2023-03-28 15:52:16 -07:00
Playwright Service 1ba07bcd81
feat(chromium-tip-of-tree): roll to r1099 (#22024)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-29 00:34:55 +02:00
Max Schmitt ddd7765ef4
test: fix Chromium headed credential tests (#22044) 2023-03-29 00:34:26 +02:00
Dmitry Gozman 3b359e27b7
feat: BrowserContext.on('dialog') (#22033)
Dialogs created early during page initialization are only reported on
the context, with `page()` being `null`.
2023-03-28 13:15:55 -07:00
Dmitry Gozman 00d98770ee
docs: improve "Parent element locator" section (#22040)
Recommending `Locator.filter`, with a fallback to `xpath=..`
2023-03-28 13:15:25 -07:00
Nathan Power 02db6882ec
fix(ct): update regex to cater for minified JS files (#22017) 2023-03-28 11:15:11 -07:00
Sander bfea952eef
fix(ct): vue revert json object as prop (#22005) 2023-03-27 17:44:40 -07:00
Dmitry Gozman f502c72f2b
feat: browserContext.on('console') (#21943) 2023-03-27 16:35:05 -07:00
Dmitry Gozman 525097d465
feat: Locator.filter(locator) (#21975)
Produces a locator that matches both locators.
Implemented through `internal:and` selector.

Fixes #19551.
2023-03-27 14:29:30 -07:00
Dmitry Gozman 47e5c02a21
fix(test runner): update default testMatch (#22006)
The intent of default test match is allowing `example.spec.ts` and
`example.test.ts` files. However, it was also matching `test.example.ts`
that should not be considered a test by default.

Fixes #21979.
2023-03-27 14:28:44 -07:00
Max Schmitt a64cdf87ee
test: skip 'should work with ip6 and port as the host' inside Docker (#21981) 2023-03-27 13:17:53 -07:00
Sébastien Richert 591e4ea976
feat: Restrain sending http credentials on a specific origin (#20374)
For security purpose, we would like to restrain sending HTTP credentials
to only the specified server. The idea is to give the ability to specify
a origin (scheme://host:port) additionally to current pair
username/password. When an authorization response is received from
servers, the credentials are sent only if the server origin in the
request matches case insensitive the specified origin.
2023-03-27 08:52:00 -07:00
Pavel Feldman c3d7ffb773
chore(ui): do not print global setup epilogue (#21976) 2023-03-24 20:56:45 -07:00
Pavel Feldman add948cdd0
chore: allow sibling describes with the same name (#21967)
Fixes https://github.com/microsoft/playwright/issues/21953
2023-03-24 17:09:11 -07:00
Pavel Feldman 79d55b959b
Revert "chore: remove legacy watch mode (#21944)" (#21973)
This reverts commit 86af908fa7.
2023-03-24 16:41:20 -07:00
Sander 5d3128a595
test(ct): remove locators (#21963) 2023-03-24 15:55:32 -07:00
Tim Deschryver 45faf0cd80
docs: add --ui to CLI options (#21966) 2023-03-24 15:19:02 -07:00
Dmitry Gozman 120aaa777e
fix(test runner): do not show TimeoutError for unhandled rejection (#21971)
Unhandled error/rejection interrupts current test and produces a
TimeoutError for it that should be ignored.
2023-03-24 15:03:49 -07:00
Andrey Lushnikov 97d2c4a635
doc: add missing commas in code snippets (#21965)
Fixes https://github.com/microsoft/playwright/issues/21957
2023-03-24 13:42:12 -07:00
Playwright Service 60ebea1e80
feat(chromium): roll to r1056 (#21956)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-24 15:07:37 +01:00
LongLiveY96 0293c26212
docs(locators): fixed a descriptive error about Chaining Locators (#21902) 2023-03-24 15:03:48 +01:00
Pavel Feldman 86af908fa7
chore: remove legacy watch mode (#21944) 2023-03-23 16:30:42 -07:00
Pavel Feldman 5ff8c5f782
chore: show global setup errors in ui mode (#21942)
Fixes: [21941](https://github.com/microsoft/playwright/issues/21941)
2023-03-23 15:46:24 -07:00
Yury Semikhatsky 900f9deb4f
chore: pass parent step id in tele reporter (#21934) 2023-03-23 15:15:58 -07:00
Pavel Feldman d4e0ef7f1a
chore: explicitly send route's requestUrl for tracing (#21940) 2023-03-23 14:57:03 -07:00
Max Schmitt 054fcd39ba
chore: remove Selenium jar files from repo (#21939) 2023-03-23 22:00:30 +01:00
Pavel Feldman 31e70c17be
chore: filter skipped tests (#21938)
Fixes https://github.com/microsoft/playwright/issues/21918
2023-03-23 13:29:52 -07:00
Pavel Feldman 6b83631f24
chore: fix trace viewer backwards compat (#21935) 2023-03-23 12:49:53 -07:00
Pavel Feldman f5bd236c7b
chore: install global watch late (#21927) 2023-03-23 11:30:28 -07:00
Max Schmitt e621e52f89
chore: support TypeScript 5 in TS transformer (#21925)
Fixes https://github.com/microsoft/playwright/issues/21900
2023-03-23 18:07:02 +01:00
Playwright Service 667ee45c32
feat(chromium-tip-of-tree): roll to r1098 (#21924)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-23 17:01:56 +01:00
Faisal Salman 086dec364b
docs(java): fix syntax error in Java example of JSHandle.getProperties (#21901) 2023-03-23 08:19:17 -07:00
Andrey Lushnikov 3477c89f20
fix(trace-viewer): survive broken selectors (#21866)
Fixes https://github.com/microsoft/playwright/issues/21832
2023-03-22 18:52:04 -07:00
Dmitry Gozman d10fac4f6a
feat: Locator.or(locator) (#21884) 2023-03-22 15:28:59 -07:00
Alex Neo 6947f47f05
feat(html): added labels to test cases and test files (#21468) 2023-03-22 14:35:58 -07:00
Yury Semikhatsky a2a2b78cc8
chore: relative paths in telereporter (#21887) 2023-03-22 13:59:57 -07:00
Andrey Lushnikov 65da1d2835
docs: do not use HTML tags (#21889) 2023-03-22 13:29:14 -07:00
Andrey Lushnikov 6bd002db27
docs: add release notes for js (#21886) 2023-03-22 13:05:46 -07:00
Dmitry Gozman a01fd04d63
chore: remove hierarchy of SnapshotStorage (#21853) 2023-03-22 09:32:21 -07:00
Yury Semikhatsky e7d670e27b
test: waitFor(hidden) should succeed when frame is not in dom (#21880)
Failing test for https://github.com/microsoft/playwright/issues/21879
2023-03-22 08:56:50 -07:00
Dmitry Gozman 295a8ec92b
chore(tracing): remove extra fs.access call (#21855) 2023-03-21 19:01:09 -07:00
Pavel Feldman d9a9bb5a8c
chore: pack codemirror on resize (#21856) 2023-03-21 18:20:48 -07:00
Playwright Service 45b675d7a0
feat(webkit): roll to r1816 (#21842)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-22 00:35:53 +01:00
Dmitry Gozman 80a37ec171
fix(socks): use happy-eyeballs to create a connection (#21847) 2023-03-21 14:12:24 -07:00
Dmitry Gozman 21e1c50bcd
fix(run-server): do not engage socks when not requested (#21848)
Fixes #21762.
2023-03-21 14:06:55 -07:00
Pavel Feldman 1cf53da82a
chore: lower the input name (#21850) 2023-03-21 13:48:59 -07:00
Yury Semikhatsky 1004e762aa
chore(fetch): host does not include port (#21845) 2023-03-21 13:14:50 -07:00
Pavel Feldman 1bbe2b4b6a
chore: update test locations when merging (#21844) 2023-03-21 12:13:20 -07:00
Pavel Feldman 7ce2b36489
chore(ui): show load errors (#21843) 2023-03-21 12:03:26 -07:00
Pavel Feldman 0bf406c8aa
chore: sort tracing actions by wall time (#21839) 2023-03-21 10:03:49 -07:00
Yury Semikhatsky 010cb16b5f
devops: replace slack with discord link in issue templates (#21825) 2023-03-21 17:19:51 +01:00
Playwright Service 5cad7bbaab
feat(chromium-tip-of-tree): roll to r1097 (#21834)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-21 16:38:43 +01:00
Dmitry Gozman bea6fa15b2
feat(snapshots): use double-buffer to avoid white flash on hover (#21828) 2023-03-21 07:40:54 -07:00
Playwright Service 04fd5435db
feat(webkit): roll to r1814 (#21829)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-21 09:06:30 +01:00
Pavel Feldman 13acbbd0a7
chore(ui): use test backlog when chaining (#21830) 2023-03-20 21:25:55 -07:00
Pavel Feldman 48eea13259
chore: update margins to align (#21826) 2023-03-20 20:45:32 -07:00
Andrey Lushnikov a6468b73b2
chore: update browser patches as of Feb 7, 2023 (#21824)
Internal SHA: 50b497cbfbdb567ecfaeb80f30942689b08db7c4
2023-03-20 18:23:12 -07:00
Pavel Feldman 6015dad9db
chore: remove npx playwright ui (#21823) 2023-03-20 17:12:17 -07:00
Pavel Feldman a33cf10696
chore(ui): decorate pending, add time spent (#21821) 2023-03-20 17:12:02 -07:00
Playwright Service 2dee3c4fc7
feat(webkit): roll to r1813 (#21819)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-03-20 23:56:03 +01:00
Pavel Feldman 543c812d2f
chore(ui): queue watch runs (#21809) 2023-03-20 13:45:35 -07:00
Max Schmitt 55df07fd60
test: force crash tests on new worker and keep launchOptions (#21818)
Fixes https://github.com/microsoft/playwright/issues/21810
2023-03-20 21:43:51 +01:00
Dmitry Gozman 73b20bc876
chore: roll stable-test-runner to 1.33.0-alpha-mar-20-2023 (#21817) 2023-03-20 13:42:22 -07:00
Dmitry Gozman 8accabdb59
test: gardening (#21814)
Notable changes:
- `page-event-crash` is not a page test, moving out of page/.
- One of the expect tests is directly covered by another, merging them.
2023-03-20 12:52:52 -07:00
Max Schmitt 4f43db686d
test: class properties with |this| don't work anymore (#21796)
https://github.com/microsoft/playwright/issues/21794
2023-03-20 16:38:51 +01:00
Max Schmitt d641caeb6a
Revert "feat(typescript): allow declare for class properties (#21281)" (#21805)
This reverts commit a1ba6757e0.

https://github.com/microsoft/playwright/issues/21794
2023-03-20 16:37:20 +01:00
Debbie O'Brien 93d20ffb52
docs: add images to dependencies (#21757) 2023-03-20 15:30:48 +01:00
Pavel Feldman 001df3a495
chore(ui): follow up to watch, fix win (#21792) 2023-03-19 22:52:48 -07:00
Pavel Feldman 754e6edb95
chore: show folders in the tree (#21789) 2023-03-19 18:51:09 -07:00
Pavel Feldman 294baaeb44
chore: allow watching all tests (#21787) 2023-03-19 14:50:09 -07:00
Pavel Feldman f151c45c91
chore: do not pass chromium args when running carlo-alike apps (#21782) 2023-03-19 12:04:45 -07:00
Pavel Feldman 8a65cf9aac
chore(ui): ui polish / nits (#21781) 2023-03-19 12:04:19 -07:00
Pavel Feldman 0728d0f7fb
chore(ui): show test source before running (#21776) 2023-03-17 21:34:40 -07:00
Pavel Feldman 22e11a12ab
chore: show snapshots for sync assertions (#21775) 2023-03-17 20:20:35 -07:00
Andrey Lushnikov 32d33cb8d5
chore: cut 1.32 (#21773) 2023-03-17 19:36:43 -07:00
Pavel Feldman d806c98009
chore(ct): do not clash internals with userland (#21774) 2023-03-17 18:08:28 -07:00
Andrey Lushnikov 36a1055524
test: selectively disable selenium tests (#21741)
https://github.com/microsoft/playwright/issues/21733
2023-03-17 17:48:45 -07:00
Pavel Feldman 50dd04ae61
chore(ui): bump xterm scrollback (#21772) 2023-03-17 16:14:21 -07:00
Dmitry Gozman 2a2d6c25a4
feat(deps): inherit environment changes from dependencies (#21771) 2023-03-17 15:46:52 -07:00
Pavel Feldman 6efb383433
chore: fix and test ui mode stop (#21769) 2023-03-17 14:10:25 -07:00
Dmitry Gozman e856344235
chore: increase timeout for flaky "should stop tracing on requestContext.dispose()" (#21767) 2023-03-17 13:33:44 -07:00
Yury Semikhatsky a61b544932
docs(java): add waitForCondition method (#21768)
https://github.com/microsoft/playwright-java/issues/1228
2023-03-17 13:02:59 -07:00
Dmitry Gozman f484b833ae
docs: update getByLabel docs to mention aria attributes (#21765)
References #21624.
2023-03-17 12:48:07 -07:00
Yury Semikhatsky 95e7d3aabc
chore: hide store from public (#21763) 2023-03-17 11:50:44 -07:00
Dmitry Gozman 3a80d119e0
chore: update routeFromHAR options for release (#21764) 2023-03-17 11:49:45 -07:00
Yury Semikhatsky 98befd8a16
test: run crash tests in separate worker (#21759)
Running crash tests in its own worker should ensure that the browser
logs from different tests are not interleaved:

<img width="1088" alt="image"
src="https://user-images.githubusercontent.com/9798949/225965857-9152a88e-a775-4935-955a-dd7e6b88409a.png">
2023-03-17 10:36:01 -07:00
Pavel Feldman 49ce561244
chore(ui): add hover-based run test (#21758) 2023-03-17 09:43:54 -07:00
Pavel Feldman b0bda92f9e
chore(ui): store selected projects in settings (#21737) 2023-03-17 09:41:23 -07:00
Playwright Service 403a194ac7
feat(chromium-tip-of-tree): roll to r1096 (#21756)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-17 17:11:44 +01:00
Max Schmitt 4a0dec6807
chore: do not leak recorder event registrations (#21751) 2023-03-17 16:16:08 +01:00
Max Schmitt 53d341be01
test: do not pollute stderr with trace-viewer wsEndpoint (#21748) 2023-03-17 16:15:20 +01:00
Max Schmitt 4a66cca124
docs(dotnet): remove note that there is no .NET Jammy Docker image (#21752)
Fixes https://github.com/microsoft/playwright-dotnet/issues/2515

Signed-off-by: Max Schmitt <max@schmitt.mx>
2023-03-17 16:14:35 +01:00
Max Schmitt 84a1368fa4
test: enable XMLHttpRequest upload events test on WK+Windows (#21727)
Fixes https://github.com/microsoft/playwright/issues/21489
2023-03-17 12:32:55 +01:00
Andrey Lushnikov f192a74c5d
test: reenable screenshot test on firefox (#21738)
Fixes #20522
2023-03-17 01:37:39 -07:00
Andrey Lushnikov 86de14965c
test: disable connect-to-selenium.spec.ts:20 (#21734)
https://github.com/microsoft/playwright/issues/21733
2023-03-17 00:13:33 -07:00
Debbie O'Brien 461723912f
docs: add missing option and change to table (#21711) 2023-03-17 07:50:50 +01:00
Pavel Feldman e066ca0713
chore: use test project output dir when showing live trace (#21735) 2023-03-16 20:09:09 -07:00
Playwright Service eac910db82
feat(firefox): roll to r1391 (#21732)
Fixes https://github.com/microsoft/playwright/issues/21668

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-16 18:49:01 -07:00
Pavel Feldman ecd0f927f4
chore: make stacks rendering live in ui mode (#21728)
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-03-16 18:17:07 -07:00
Dmitry Gozman f37f38e553
chore: decouple test groups from root suite as much as possible (#21731) 2023-03-16 17:11:15 -07:00
Pavel Feldman f47a8a677c
chore: verify chromium builds (#21730) 2023-03-16 16:56:25 -07:00
Dmitry Gozman 7879cf30f0
fix(reuse): serial mode with tracing should not throw (#21726)
Regressed in #19733.
Fixes #21113.
2023-03-16 14:32:12 -07:00
Max Schmitt a68201b491
test: fix component tests (#21725)
TypeScript in v5 emits a warning and this ends up in exit code 1. See
https://github.com/vuejs/tsconfig/issues/6 for more information. This CL
will make TypeScript still end up in exit code 0 even tho these warnings
are emitted until they fixed it upstream and released a new version of
their config.
2023-03-16 21:25:14 +01:00
Max Schmitt 771abe15fb
docs(node): consolidate JS/TS snippets for guides (#21710)
https://github.com/microsoft/playwright/issues/21385
2023-03-16 21:16:18 +01:00
Dmitry Gozman 2074a51299
docs: fix details about WorkerInfo vs TestInfo availability (#21699)
Fixes #21695.
2023-03-16 12:36:34 -07:00
Playwright Service 03a0f479d2
feat(chromium): roll to r1055 (#21721)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-16 19:25:59 +01:00
Max Schmitt b86395a54a
test: unflake 'serviceWorker should intercept document request' (#21722)
fixes https://github.com/microsoft/playwright/issues/21691
2023-03-16 19:24:13 +01:00
Dmitry Gozman 2518bfa8d3
Revert "feat(tracing): throttle trace event writes (#21694)" (#21718)
This reverts commit 3f20602735.
2023-03-16 11:15:57 -07:00
Max Schmitt 3ceac4bf53
docs: drop duplicate JS code snippets from test-api (#21466)
https://github.com/microsoft/playwright/issues/21385
2023-03-16 19:01:15 +01:00
Pavel Feldman 1ffe01b027
chore: render errors from all actions inline the source (#21702) 2023-03-16 10:01:17 -07:00
Max Schmitt 6c75c01fde
docs(dotnet): don't use C# option names (#21709)
Fixes https://github.com/microsoft/playwright-dotnet/issues/2513

Drive-by: hide C# option names
2023-03-16 09:23:31 -07:00
Dmitry Gozman 3f20602735
feat(tracing): throttle trace event writes (#21694) 2023-03-16 07:04:05 -07:00
Dmitry Gozman ea85242941
chore: improve client-side options plumbing (#21697) 2023-03-16 07:03:33 -07:00
Pavel Feldman c45d8749b0
chore: split trace events into phases (#21696) 2023-03-15 22:33:40 -07:00
Dmitry Gozman 40a6eff8f2
feat: support name option in tracing.startChunk() (#21692) 2023-03-15 17:34:56 -07:00
Dmitry Gozman bde2e90973
fix(selector generator): do not produce has-text="foo"s (#21679)
There is no locator counterpart for it. Instead, produce a regex.

Also fix locator generator to not produce incorrect locator in this
case.

Fixes #21649.
2023-03-15 13:43:42 -07:00
Dmitry Gozman b149d132a6
chore(test runner): split loadAllTests into parts (#21674) 2023-03-15 13:40:58 -07:00
Pavel Feldman 99d8f6e7de
chore(ui): show live trace (#21677) 2023-03-15 11:17:03 -07:00
Dmitry Gozman 69a94ed044
docs: update default timeouts in js to be zero and mention config (#21675)
Fixes #19018.
2023-03-14 16:34:30 -07:00
Pavel Feldman 27048adebe
chore: introduce testInfo.testId (#21670) 2023-03-14 15:58:55 -07:00
Pavel Feldman 7666894d77
chore(ui): minor trace viewer improvements (#21672) 2023-03-14 15:24:48 -07:00
Jonatas Emidio 910b963ca6
docs: Avoid third-party with Network API (#21629)
docs: Avoid third-party with Network API

On the [Avoid testing third-party
dependencies](https://playwright.dev/docs/best-practices#avoid-testing-third-party-dependencies).
Instead of only inform about third-party, this sesison is a good place
to share about Network API. Guiding them in not only inform about
avoiding third-party, but also explaining how to deal with this use
case.

Signed-off-by: Jonatas Emidio <jonatasemidio@gmail.com>
2023-03-14 11:40:03 -07:00
Drew Miller d8b6b988cd
docs: spelling fix (#21573) 2023-03-14 19:04:02 +01:00
Dmitry Gozman 455e11c1d9
fix(shards): shard test groups instead of files (#21638)
Fixes #21497.
2023-03-14 10:41:37 -07:00
Max Schmitt a2c96494e0
chore: throw pretty error if rest parameters is used inside fixtures (#21659)
Fixes https://github.com/microsoft/playwright/issues/21566
2023-03-14 17:35:52 +01:00
Yury Semikhatsky 716d451be5
test: use toHaveURL in the new test (#21667) 2023-03-14 09:23:00 -07:00
Max Schmitt ba6b41d017
docs(locator): fix Locator frameLocator params (#21662) 2023-03-14 17:15:43 +01:00
Playwright Service 7965a8f0bc
feat(chromium-tip-of-tree): roll to r1094 (#21658)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-14 15:04:08 +01:00
Pavel ec10308c1b chore: follow up to ui-mode style change, fix image style 2023-03-13 22:22:52 -07:00
Pavel Feldman f5fa18a279
chore: reimplement filters (#21647) 2023-03-13 22:19:31 -07:00
Dmitry Gozman ccd5d7fd10
fix(hit target): workaround webkit elementsFromPoint bug (#21642)
Fixes #21596.
2023-03-13 19:33:56 -07:00
Dmitry Gozman c9837dfcc7
docs: add flakiness note to locator.all (#21645) 2023-03-13 19:33:36 -07:00
Yury Semikhatsky c691d1f436
test: skip "should respect the drop effect" in headed (#21648)
https://github.com/microsoft/playwright/issues/21646
2023-03-13 19:04:09 -07:00
Yury Semikhatsky 555cea38e7
test: unskip setContent with js disabled (#21644)
Fixes #21574
2023-03-13 19:03:31 -07:00
Yury Semikhatsky 6b3e7faad5
test: url bar navigation vs js redirect (#21640)
The tests document current behavior when url bar navigation competes
with a js redirect.

Fixes #20749
2023-03-13 17:53:39 -07:00
Dmitry Gozman 809725e114
fix(reuse): only reuse the default browser, not explicitly launched ones (#21631)
Fixes #20399.
2023-03-13 16:50:51 -07:00
Playwright Service 4e807f9824
feat(firefox): roll to r1390 (#21591) 2023-03-13 16:43:49 -07:00
Playwright Service e6d13f1f2c
feat(webkit): roll to r1811 (#21637)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-13 22:34:34 +01:00
Alex Neo 9c8d0822d6
fix(html-reporter): annotations.size rendered 0 on UI (#21635)
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-03-13 21:23:17 +01:00
Dmitry Gozman 8e7ec88462
fix(electron): do not use loader for packaged apps (#21577)
References #21387, #21512.
2023-03-13 12:52:52 -07:00
Pavel Feldman 1d870ac407
chore(ui): start adding ui mode tests (2) (#21608) 2023-03-13 12:14:51 -07:00
Max Schmitt 17498c30dc
devops: bump docker/setup-qemu-action (#21627)
This fixes: 
<img width="1519" alt="image"
src="https://user-images.githubusercontent.com/17984549/224726302-95fc8ba1-08b3-4a78-8556-d7ea211b4427.png">
2023-03-13 10:38:09 -07:00
Debbie O'Brien c9007d952b
docs: remove youtube video for other langs (#21616) 2023-03-13 18:00:50 +01:00
Pavel Feldman a12e909a40
chore(ui): start adding ui mode tests (#21601) 2023-03-12 15:18:47 -07:00
Pavel Feldman 493171cb6b
chore: select files to watch explicitly (#21599) 2023-03-12 10:50:21 -07:00
Pavel Feldman 08a5922c4d
chore: select first failure (#21593) 2023-03-12 10:42:02 -07:00
Pavel Feldman b85d670491
chore(ui): show output on demand (#21592) 2023-03-11 11:43:33 -08:00
Pavel Feldman 428ea66578
chore: hide timeline bars and stack from ui mode (#21590) 2023-03-10 22:52:31 -08:00
Dmitry Gozman ea8aa63f1a
feat: support PWTEST_PROFILE_DIR in run-server (#21582)
This creates one profile per connection in the specified directory.
2023-03-10 19:07:40 -08:00
Andrey Lushnikov fa9edcbbc1
feat(firefox): roll Firefox to 1389 (#21584)
Fixes #20824
2023-03-10 17:43:59 -08:00
Pavel Feldman 0b9c037f36
chore(ui): do not add sources into the zip file (#21588) 2023-03-10 17:01:30 -08:00
Pavel Feldman 34efbea4c5
chore(ui): throttle tree updates (#21578) 2023-03-10 17:01:19 -08:00
Pavel Feldman e45a496850
chore(tv): render error in-line (#21586) 2023-03-10 16:22:19 -08:00
Dmitry Gozman 21950bc8ce
feat(html reporter): render multiple annotations of the same type together (#21580)
Multiple annotations are rendered as comma-separated lists. Fixes
#21253.

![IMAGE 2023-03-10
14:24:10](https://user-images.githubusercontent.com/9881434/224439435-3bf8e4f4-d874-4595-931d-ea5ff33ea374.jpg)
2023-03-10 15:26:02 -08:00
Dmitry Gozman 46f9fa005e
fix(tracing): do not double-zip entries in remote mode (#21579)
Fixes #21435.
2023-03-10 14:54:32 -08:00
Dmitry Gozman 6d27d2c029
fix(test runner): improved fixture teardown timeout error message (#21572)
The new message looks like this:

```
Test finished within timeout of 500ms, but tearing down "playwright configuration" ran out of time.
Please allow more time for the test, since teardown is attributed towards the test timeout budget.·
```

References #21259.
2023-03-10 13:45:47 -08:00
Pavel Feldman 1073e42686
chore: allow running failing (#21569) 2023-03-10 12:41:00 -08:00
Andrey Lushnikov 8abe9fcf22
tree gardening: disable & assign failing tests (#21575)
References https://github.com/microsoft/playwright/issues/21574
References https://github.com/microsoft/playwright/issues/21549
2023-03-10 12:04:25 -08:00
Andrey Lushnikov e202091ca3
feat(firefox): roll Firefox to 1388 (#21570)
Fixes #21393
2023-03-10 10:20:56 -08:00
Debbie O'Brien 0610705546
docs: add video to trace viewer docs (#21568) 2023-03-10 09:45:55 -08:00
Andrey Lushnikov 870edd1aae
feat(firefox): roll Firefox to 1387 (#21542)
Fixes #21109
Fixes #21430
2023-03-10 09:25:54 -08:00
Dmitry Gozman 58a23bc7a0
fix(test runner): allow worker-only dynamic imports (#21545)
Fixes #21409.
2023-03-10 08:58:26 -08:00
Dmitry Gozman 0794cb1486
fix(fetch): preserve case in header names (#21543)
Fixes #21492.
2023-03-10 08:58:12 -08:00
Playwright Service dab61df451
feat(chromium): roll to r1054 (#21559)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-10 15:09:36 +01:00
Pavel Feldman c3b4820f1e
chore: animate the running progress (#21554)
https://github.com/microsoft/playwright/issues/21541
2023-03-09 21:45:57 -08:00
Pavel Feldman 0106a54e6e
chore: ui mode fixes (#21546)
For https://github.com/microsoft/playwright/issues/21541
2023-03-09 20:02:42 -08:00
Pavel Feldman e737ff83b4
chore: migrate to useRef take 2 (#21552) 2023-03-09 19:34:05 -08:00
Andrey Lushnikov 7a1c5b2aa3
test: make the tree green (#21551)
References https://github.com/microsoft/playwright/issues/20522
References https://github.com/microsoft/playwright/issues/20993
References https://github.com/microsoft/playwright/issues/21435
References https://github.com/microsoft/playwright/issues/21512
References https://github.com/microsoft/playwright/issues/21549
References https://github.com/microsoft/playwright/issues/21550
2023-03-09 16:56:29 -08:00
Pavel a619ea4d68 Revert "chore: replace createRef with useRef in most of the places (#21536)"
This reverts commit 908c0462d5.
2023-03-09 16:46:31 -08:00
Pavel Feldman 908c0462d5
chore: replace createRef with useRef in most of the places (#21536) 2023-03-09 13:31:21 -08:00
Pavel Feldman e7b21425f7
chore: support both test --ui and ui clis (#21537) 2023-03-09 13:03:01 -08:00
Yury Semikhatsky c30d88a63a
test: setContent with disabled javascript (#21399)
Fixes https://github.com/microsoft/playwright/issues/21379
2023-03-09 10:45:19 -08:00
Pavel Feldman 47a71731f4
chore: add explicit command for gui runner (#21509) 2023-03-09 08:04:02 -08:00
Max Schmitt 9191c72a3f
test: XMLHttpRequest upload events (#21501)
https://github.com/microsoft/playwright/issues/21489
2023-03-09 16:21:01 +01:00
Max Schmitt 7746807d9f
docs(api-testing): fix broken snippet (#21499)
Fixes https://github.com/microsoft/playwright/issues/21476
2023-03-09 16:20:19 +01:00
Max Schmitt 2aeebc82d7
docs(test-parameterize): defineConfig is no type import (#21523)
https://github.com/microsoft/playwright/issues/21519
2023-03-09 16:19:56 +01:00
Playwright Service 45a97bb4f7
feat(chromium-tip-of-tree): roll to r1093 (#21526)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-09 16:18:01 +01:00
Playwright Service 644a17570f
chore(driver): roll driver to recent Node.js LTS version (#21520) 2023-03-09 12:55:22 +01:00
Pavel Feldman 5ef2edb9f7
chore: support suites in the tree (#21508) 2023-03-08 19:50:32 -08:00
Pavel Feldman 72c41db668
chore: propagate status along the tree (#21507) 2023-03-08 18:24:45 -08:00
Pavel Feldman adc895d31f
chore: introduce tree control (#21505) 2023-03-08 17:33:27 -08:00
Pavel Feldman a2490a8fc8
chore(ui): maintain test order when updating (#21478) 2023-03-07 20:34:57 -08:00
Pavel Feldman f5894ed089
chore: open location in vscode (#21472) 2023-03-07 17:20:41 -08:00
Pavel Feldman de0b66c888
chore: allow opt out from watch (#21471) 2023-03-07 15:07:52 -08:00
Pavel Feldman e9f94f0346
chore: add ui mode terminal (#21470) 2023-03-07 14:24:50 -08:00
Pavel Feldman 9e7abb2a76
chore: rearrange settings (#21467) 2023-03-07 12:43:16 -08:00
Max Schmitt c9eac69f2b
fix(types): accept string in expect().toMatch() (#21454)
Fixes https://github.com/microsoft/playwright/issues/21453
2023-03-07 17:53:50 +01:00
Max Schmitt 77c9641215
test: make Android bots green (#21450) 2023-03-07 17:53:39 +01:00
Max Schmitt 41dc45d471
test: add test for page.goto with hash at the end (#21437)
https://github.com/microsoft/playwright/issues/21430
2023-03-07 17:53:30 +01:00
Max Schmitt 68b351c603
docs(browsers): code snippet follow-ups (#21383)
Follow-up on
https://github.com/microsoft/playwright/pull/21051?notification_referrer_id=NT_kwDOARJsJbM1NjYxMzQ2ODgxOjE3OTg0NTQ5#event-8629388219.
2023-03-07 17:53:12 +01:00
Playwright Service 90d1f74dbf
feat(webkit): roll to r1808 (#21460)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-07 16:53:44 +01:00
Playwright Service 55df9e0029
feat(chromium-tip-of-tree): roll to r1092 (#21458)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-07 15:25:04 +01:00
Playwright Service 2b0a663dc2
feat(chromium): roll to r1053 (#21459)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-07 15:24:24 +01:00
Debbie O'Brien 2067d715ff
docs: screens codegen emulation (#21094) 2023-03-07 08:58:49 +01:00
Debbie O'Brien 135d68d8a9
docs: add video to release notes (#21441) 2023-03-07 08:57:36 +01:00
Debbie O'Brien e22c048276
docs: Config page name updates (#21440) 2023-03-07 08:57:13 +01:00
Pavel Feldman 041d0ab0d6
chore: create trace model off steps for progress (#21448) 2023-03-06 22:35:57 -08:00
Pavel Feldman 9e477a183e
chore: various trace viewer ui fixes (#21447) 2023-03-06 21:37:39 -08:00
Pavel Feldman 65117702e7
chore: consistent xterm naming (#21446) 2023-03-06 20:39:52 -08:00
Pavel Feldman cffb6ac269
chore: move sever/isomorphic to utils/ to use it in client (#21445) 2023-03-06 18:49:14 -08:00
Adi bdefaa9f9e
docs: added missing generic declaration (#21442) 2023-03-06 22:03:43 +01:00
Pavel Feldman 04b35089be
chore: extract shared trace viewer components (#21433) 2023-03-06 12:25:00 -08:00
Debbie O'Brien 7c44eab644
docs: add dependencies to global setup (#21438) 2023-03-06 21:04:04 +01:00
Debbie O'Brien f6095f6a5e
docs: fix title cases (#21439) 2023-03-06 20:52:58 +01:00
Pavel Feldman b6ff3bad98
chore: split code mirror and xterm modules (#21415) 2023-03-06 10:40:45 -08:00
Sander 99e736afc8
fix(ct): react17 primitive as slot (#21396) 2023-03-06 08:59:35 -08:00
Sander 872b8ddbdd
chore(ct): vue prop type of JsonObject (#21400) 2023-03-06 08:58:56 -08:00
Pavel Feldman 86ca7e3949
chore: introduce manual promise race (#21358)
Fixes https://github.com/microsoft/playwright/issues/21345
2023-03-06 08:50:03 -08:00
Debbie O'Brien 9e47c450c7
docs: Rework config (#21384) 2023-03-06 17:17:34 +01:00
Debbie O'Brien 948755226f
docs: add projects page (#21332) 2023-03-06 16:46:55 +01:00
Debbie O'Brien e305d207fe
docs: merge emulation config (#21340) 2023-03-06 16:43:32 +01:00
Debbie O'Brien 6d549320b1
docs: add doc on webserver (#21378) 2023-03-06 16:42:54 +01:00
Debbie O'Brien b6765862f1
docs: add network example from advanced config (#21380) 2023-03-06 16:42:19 +01:00
Pavel Feldman 47427e87ec
chore: do not use module.exports in the injected esm files (#21412)
Follow up to #17145
2023-03-05 20:01:35 -08:00
Pavel Feldman 5735752c65
chore: use xterm for test output in the ui mode (#21411) 2023-03-05 14:28:59 -08:00
Pavel Feldman bae9173208
chore: split ui mode toolbar into lines, show progress (#21403) 2023-03-05 13:46:21 -08:00
Pavel Feldman d8d410db6e
chore: implement project filter (#21402) 2023-03-04 19:39:55 -08:00
Pavel Feldman ec056a6312
chore: merge projects in the tree (#21401) 2023-03-04 16:28:30 -08:00
Pavel Feldman f0cd123a45
chore(ui): make ui-side drive things (#21398) 2023-03-04 15:05:41 -08:00
Yury Semikhatsky 0ebe090b8c
fix(har): do not hang on chunked response in har recorder (#21397)
Fixes #21182
2023-03-03 17:27:34 -08:00
Dmitry Gozman 0c5d46bb94
feat: allow chaining locators with Locator.locator(anotherLocator) (#21391) 2023-03-03 14:50:53 -08:00
Dmitry Gozman d904a6129f
chore: run check-deps for all packages (#21395) 2023-03-03 14:50:43 -08:00
Sebastian Silbermann fbaf56a13f
feat(ct-react): Support React 18 only (#19814)
BREAKING CHANGE: Drop support for React 17 and earlier
Support for React 17 an earlier is provided by
`@playwright/experimental-ct-react-17`

Closes #19923
2023-03-03 14:28:33 -08:00
Yury Semikhatsky be259dac7c
fix: expose window.safari in webkit (#21361)
The actual API of the object is not implemented because those who want
to test it will likely need their own mock and for the browser detection
logic (as described in the bug) just having the property on window
should be sufficient.

Fixes #21037
2023-03-03 13:38:13 -08:00
Yury Semikhatsky 26fa0eeae8
test: har does not hang on slow chunked response (#21392)
#21182
2023-03-03 11:32:21 -08:00
Playwright Service 0af8c0169e
feat(webkit): roll to r1807 (#21389) 2023-03-03 11:28:05 -08:00
Debbie O'Brien a8b5f51be1
docs: add page for global setup teardown (#21376) 2023-03-03 11:27:21 -08:00
Pavel Feldman 7f8db8f3c0
test(electron): extend args test (#21388) 2023-03-03 09:25:18 -08:00
Pavel Feldman fc91e6086b
chore: minor trace viewer ui fixes (#21368) 2023-03-03 09:17:40 -08:00
Pavel Feldman c17eea7a3c
chore: fix xpath-in-iframe (#21367)
Fixes https://github.com/microsoft/playwright/issues/21364
2023-03-03 09:13:25 -08:00
Debbie O'Brien e29a6e7bb0
docs: update test reporters (#21337) 2023-03-03 07:52:28 -08:00
Dmitry Gozman eb3f8bfba8
fix(test runner): do not optimize filtering when sourcemap is present (#21359)
Fixes #21204.
2023-03-03 07:49:19 -08:00
Playwright Service 00c34a83ef
feat(chromium-tip-of-tree): roll to r1091 (#21356)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-03 13:38:32 +01:00
Max Schmitt 778f8e65d2
chore: do not cache between reused context (#20052)
Fixes https://github.com/microsoft/playwright/issues/19926
2023-03-03 12:37:44 +01:00
Dmitry Gozman 6769a311ed
feat(test runner): error out when one test file imports another (#21357)
This situation is not supported, and we can now detect it by looking at
collected file dependencies.

Fixes #21270.
2023-03-02 15:09:50 -08:00
Pavel Feldman 09ff7eaaf2
chore: throw on context.close() if it was closed externally (#21347) 2023-03-02 13:46:54 -08:00
Pavel Feldman 57624bc01b
chore: ui mode ui improvements (#21325) 2023-03-02 13:45:15 -08:00
Sander 2cbde9b8ef
chore(ct): vue2 import h from vue (#21035) 2023-03-02 13:43:08 -08:00
Sander d58d833daf
fix(ct): solid and react JS as child (#20125) 2023-03-02 13:40:51 -08:00
Dmitry Gozman 0b300f455c
fix(test runner): empty dependency should not skip other projects (#21354)
References #21270.
2023-03-02 13:32:23 -08:00
Playwright Service b7dd226edd
feat(chromium): roll to r1052 (#21353)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-02 22:07:20 +01:00
Playwright Service 0ce5651975
feat(webkit): roll to r1805 (#21349)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-02 22:07:05 +01:00
Max Schmitt e1e69cbbcc
fix(cli): pdf/screenshot did not save artifacts (#21352)
As of today we support CLI argument wise `--save-storage` and
`--save-har` in pdf/screenshot CLI command. But they are not working,
since we just close the browser rather than the context where we take
care of saving the artifacts.

`launchContext` has 4 usages:

- open/codegen there closing the browser / `SIGINT` will close it
gracefully
- pdf/screenshot there we will now close the page which will then
[here](b00579edb7/packages/playwright-core/src/cli/cli.ts?q=cli.ts#L503)
close the browser.

I did not find any tests except the [installation
test](3e84ab4701/tests/installation/playwright-cli-screenshot-should-work.spec.ts),
I'm happy to add one for both command if requested.

Fixes https://github.com/microsoft/playwright/issues/20718
2023-03-02 22:05:39 +01:00
Yury Semikhatsky b00579edb7
fix(trace): do not show duration tooltip for events (#21342)
Fixes https://github.com/microsoft/playwright/issues/21255
2023-03-02 11:31:10 -08:00
Debbie O'Brien 744739a3d0
docs: improve config for test parallel (#21333) 2023-03-02 18:49:41 +01:00
Debbie O'Brien e10199fd5a
docs: retries update to add configuration (#21338) 2023-03-02 08:33:30 -08:00
Andrey Lushnikov bfc895787f
fix(firefox): fix reload with hash URLs (#21322)
Fixes #21145
2023-03-01 18:56:30 -08:00
Pavel Feldman e64d0ae556
chore: update trace every time it is loaded (#21323) 2023-03-01 17:42:50 -08:00
Yury Semikhatsky 3b800344b0
fix(oopif): get response body from adopting frame (#21324)
Fixes https://github.com/microsoft/playwright/issues/20809
2023-03-01 17:18:58 -08:00
Dmitry Gozman a1ba6757e0
feat(typescript): allow declare for class properties (#21281)
This enables `allowDeclareFields` flag that allows code like:

```ts
class Foo {
  declare prop: string;
}
```

Declaring is a workaround for inheritance vs property initialization
issues.
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#the-usedefineforclassfields-flag-and-the-declare-property-modifier

For `allowDeclareFields` to work, we have to run
plugin-transform-typescript before plugin-proposal-class-properties and
few others, so this change migrates from preset-typescript that always
runs last to individual plugin-transform-typescript, and reorders some
plugins.

References #21119.
2023-03-01 16:43:17 -08:00
Max Schmitt 6a7347f134
chore: have pretty error if CT config has no defineConfig (#21318)
Fixes https://github.com/microsoft/playwright/issues/21312
2023-03-02 00:47:05 +01:00
Dmitry Gozman d9b0c58b96
fix(trace viewer): force https requests from https snapshots (#21317)
Set 'Content-Security-Policy: upgrade-insecure-requests' header for
snapshots to force all `http` subresources into `https` and avoid
blocked resources because of mixed-content.

References #21263.
2023-03-01 15:32:39 -08:00
Pavel Feldman e222874445
chore: ui mode first cut (#21291) 2023-03-01 15:27:23 -08:00
Pavel Feldman c42a1205b1
chore: do not generate history entries on snapshot switch (#21283) 2023-03-01 13:44:58 -08:00
Pavel Feldman 2cbafd7adf
chore: mark waitForNavigation as deprecated consistently (#21309) 2023-03-01 12:40:50 -08:00
Pavel Feldman 54dfe5378d
chore: point to pwt cli, a direct dependency (#21311) 2023-03-01 12:17:43 -08:00
Andrey Lushnikov 4d3b056f27
test: add more tests for reload (#21296)
Make sure `page.reload()` doesn't reload a related popup and
only reloads target page.
2023-03-01 10:52:55 -08:00
Yury Semikhatsky f8100bbb25
fix: expect unquoted npde.exe path (#21307)
* It is more common to set env variable value without quotes on Windows
(see the bug)
* Use defined to check for string presence, it will work nicely with
strings that contain whitespaces

https://github.com/microsoft/playwright-java/issues/1213
2023-03-01 09:16:23 -08:00
Yury Semikhatsky 60e5a93832
fix(store): support text and binary values (#21006) 2023-03-01 08:49:31 -08:00
Playwright Service d12d35f124
feat(firefox): roll to r1384 (#21271)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-01 10:25:43 +01:00
Playwright Service c7df9e6bcb
feat(firefox-beta): roll to r1386 (#21276)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-01 00:40:22 -08:00
Dmitry Gozman b343d453bc
fix(trace viewer): allow http/https mismatch when deployed as https (#21289)
References #21263.
2023-02-28 17:08:46 -08:00
Pavel Feldman 933332ad97
chore: fix trace modernizer (#21286) 2023-02-28 16:49:14 -08:00
Andrey Lushnikov b607c92651
test: add a regression test for reload bug in firefox (#21282)
References https://github.com/microsoft/playwright/issues/20791
2023-02-28 16:05:12 -08:00
Pavel Feldman de3a5e2a91
chore(trace): include expect steps in a trace (#21199) 2023-02-28 13:26:23 -08:00
Dmitry Gozman 27027658dc
chore: fix all Proxy() to account for symbol properties (#21272)
Fixes #20940.
2023-02-28 12:45:14 -08:00
Debbie O'Brien 9b78b7151e
docs: improve running tests (#21266) 2023-02-28 20:58:24 +01:00
Debbie O'Brien d0d1d144f1
docs: Browsers page rework (#21051) 2023-02-28 18:09:44 +01:00
Pavel Feldman 0961c48313
Update bug.md
Strong-require repro steps.

Signed-off-by: Pavel Feldman <pavel.feldman@gmail.com>
2023-02-28 08:57:46 -08:00
Playwright Service 274939eaf8
feat(chromium-tip-of-tree): roll to r1090 (#21257)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-02-28 14:08:41 +01:00
Playwright Service c5c6d7afad
feat(firefox-beta): roll to r1385 (#21258)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-02-28 14:05:31 +01:00
Playwright Service f11febd232
feat(firefox): roll to r1383 (#21254)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-02-28 14:05:21 +01:00
Playwright Service daf914b398
feat(webkit): roll to r1803 (#21241)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-02-28 08:53:08 +01:00
Pavel Feldman 81bd637d94
chore: merge traces into a single zip file (#21242) 2023-02-27 22:31:47 -08:00
Everton Eckert Schneider cb5a4845b3
docs: delete the URI /wd/hub Selenium Grid addresses. (#20971)
Selenium 4 does not use `/wd/hub` as part of the Hub URI.

As seen in the example
https://www.selenium.dev/documentation/grid/getting_started/#metadata-in-tests,
it registers the Selenium Grid URL simply as `http://gridUrl:4444` (no
`/wd/hub`).

When trying to access the URL ending with `/wd/hub`, it returns the
message 'Unable to find handler for (GET) \u002fwd\u002fhub'.

Signed-off-by: Everton Eckert Schneider <everton.schneider@gmail.com>
2023-02-27 19:47:19 -08:00
Dmitry Gozman b4bfbb20f6
chore: update selenium 4 tests to not use /wd/hub (#21240) 2023-02-27 19:43:49 -08:00
Yury Semikhatsky cfdddcf9ba
fix(runner): finish dispatching if remaining tests were skipped (#21238)
Fixes #21226
2023-02-27 17:20:30 -08:00
Dmitry Gozman cabeb42c8c
chore: update selenium tests from 4.0.0-rc1 to 4.4.0 (#21235) 2023-02-27 16:58:08 -08:00
Pavel Feldman 22d82b6e1b
chore: flatten metadata in trace events (#21214) 2023-02-27 15:29:20 -08:00
NoamGaash e17e0e40f8
feat(routeFromHAR): add arguments (#21223) 2023-02-27 15:27:38 -08:00
Tarnay Kálmán e28801f6ef
fix(snapshot): render srcdoc iframe snapshots (#21003) 2023-02-27 13:34:39 -08:00
Sander 0cd39cf002
test(ct): vue cli slot tests (#21028) 2023-02-27 12:53:44 -08:00
Joel Einbinder eba86fcc53
fix(doc): electron evaluate evaluates in electron not worker (#20892) 2023-02-27 12:49:25 -08:00
Max Schmitt 960c7ebb7e
test: fix webview2 globalSetup (#21220) 2023-02-27 17:39:07 +01:00
Leo Sklyut 6c3d35fa58
fix(junit): use the JUnit schema's specified ISO format for timestamp (#21062)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-02-27 11:04:22 +01:00
Pavel Feldman 4d91248c1e
chore: simplify the trace collection fixtures (#21203) 2023-02-25 21:21:09 -08:00
Playwright Service 4b8f36dbed
feat(webkit): roll to r1802 (#21201)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-02-25 14:14:29 +01:00
Pavel Feldman 09f77c41dd
chore: migrate to protocol's StackFrame type (#21198) 2023-02-24 18:36:15 -08:00
Pavel Feldman ed41fd0643
chore: use listview to render stack trace (#21197) 2023-02-24 15:31:10 -08:00
Pavel Feldman 3fa19e80ad
chore: wrap expect call in a zone (#21191) 2023-02-24 12:17:03 -08:00
Playwright Service f585d75be7
feat(chromium): roll to r1051 (#21189)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-02-24 17:34:14 +01:00
Playwright Service 5affd333a7
feat(webkit): roll to r1801 (#21183)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2023-02-24 15:34:37 +01:00
Gonçalo Basto 7c6630b1a2
docs: add custom reporter options documentation (#21144) 2023-02-24 12:29:08 +01:00
Mateusz Burzyński 03da0609ba
chore: properly use primitive type over wrapper (#21178) 2023-02-24 11:50:06 +01:00
Playwright Service a031cec159
feat(chromium-tip-of-tree): roll to r1089 (#21153) 2023-02-24 07:00:21 +01:00
Dmitry Gozman f29d58e87f
chore: remove test that sends SIGTERM to the browser (#21171)
Fixes #21168.
2023-02-23 14:49:18 -08:00
Pavel Feldman d3e4fc6343
fix(trace): update snapshot on keyboard selection (#21169) 2023-02-23 14:40:07 -08:00
Pavel Feldman 8ccc02a9d3
chore: use client wall time in traces (#21163) 2023-02-23 14:37:53 -08:00
Max Schmitt f3ec29e6ad
devops: use default Android emulator gpu (#21170)
Signed-off-by: Max Schmitt <max@schmitt.mx>
2023-02-23 23:07:44 +01:00
Max Schmitt f3a46f7405
feat(html): render annotations as links if needed (#21165)
Fixes https://github.com/microsoft/playwright/issues/20584
2023-02-23 21:57:02 +01:00
Pavel Feldman 7626267ec5
fix(trace): do not access null content window (#21166) 2023-02-23 11:57:15 -08:00
Dmitry Gozman b735e136fe
chore: run non-concurrent steps in watch before everything else (#21164)
This prevents initial errors.
2023-02-23 11:46:20 -08:00
Pavel Feldman b61036d22a
chore(trace): dedupe filenames, not stack frames (#21160) 2023-02-23 09:10:09 -08:00
Pavel Feldman 0e93f1d511
chore(trace): render error background (#21135) 2023-02-23 09:09:21 -08:00
Playwright Service 46d70266db
feat(firefox): roll to r1382 (#21156)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-02-23 07:38:40 -08:00
Playwright Service eccf022cea
feat(firefox-beta): roll to r1384 (#21149)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-02-23 07:36:38 -08:00
Andrey Lushnikov dd9a8da901
test: fix retargeting test on firefox (#21157)
The test was regressed in
https://github.com/microsoft/playwright/pull/21124

Fixes #21141
2023-02-23 07:35:58 -08:00
Max Schmitt 78bc6f4d74
docs(python): add support for custom expect message (#21151)
https://github.com/microsoft/playwright-python/issues/1310
2023-02-23 13:25:00 +01:00
Max Schmitt 8b8444dacc
test: page.reload() on a page with a hash (#21152)
https://github.com/microsoft/playwright/issues/21145
2023-02-23 13:22:22 +01:00
Playwright Service 681d584442
chore(driver): roll driver to recent Node.js LTS version (#21143)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-02-23 11:09:10 +01:00
Dmitry Gozman 2718123d30
fix(snapshots): define dummy custom elements (#21131)
For all custom elements defined in the page, we preserve their names and
define them in the rendered snapshot.
This makes things like `:defined` css pseudo work.

Fixes #21030.
2023-02-22 21:53:27 -08:00
Pavel Feldman 55c95a4463
chore: do not send stacks as a part of the call metainfo (#21089) 2023-02-22 21:08:47 -08:00
Andrey Lushnikov 434fa470e3
test: fix page.goto test on Firefox (#21132)
Turns out Firefox can yield either of the two errors, depending
on the stage of the pending navigation.
2023-02-22 19:18:49 -08:00
Playwright Service c8f63c04cc
feat(chromium): roll to r1050 (#21118)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-02-22 19:17:55 -08:00
Playwright Service 2880198ef4
feat(firefox-beta): roll to r1382 (#21125)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-02-22 19:16:07 -08:00
Playwright Service e437d74589
feat(firefox): roll to r1380 (#21121)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-02-22 19:15:45 -08:00
Yury Semikhatsky f61d02e46f
test: update selection expectations after roll (#21124)
https://github.com/microsoft/playwright/issues/20820
2023-02-22 17:24:04 -08:00
Andrey Lushnikov 3ff3567c89
test: update context menu tests (#21126)
It turns out these new contextmenu-based tests do not work on
Chromium-based browsers on Windows.

We consider context menu support a best-effort, so we skip them
for now.
2023-02-22 17:22:56 -08:00
Yury Semikhatsky 2bb6bc7ad0
test: mark new test as failing in ff (#21122)
The test is failing for overridden Date in Firefox.

#21109
2023-02-22 16:36:39 -08:00
Yury Semikhatsky d6dae8ea1f
fix: eval serialization w/ overridden URL/RegExp/Date (#21112)
Fixes #21109
2023-02-22 15:45:42 -08:00
Nowell Strite 000583e048
fix(loader): experimentalLoader with node@18 (#21106)
There is currently a bug when running `node@18.14.2` when running with
experimentalLoader

```
TypeError: The URL must be of scheme file
  at new NodeError (node:internal/errors:399:5)
  at Object.fileURLToPath (node:internal/url:1492:11)
  at resolve (./node_modules/@playwright/test/lib/experimentalLoader.js:39:48)
  at nextResolve (node:internal/modules/esm/loader:163:22)
  at ESMLoader.resolve (node:internal/modules/esm/loader:838:24)
  at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:7)
  at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:79:21)
```

This came from my test `vrt.spec.ts` which had a non package import
inside of it

```ts
import fs from "node:fs/promises"
```

The test run failed due to node imports not returning fileUrls when
resolved.

---------

Co-authored-by: Nowell Strite <nstrite@nvidia.com>
2023-02-22 14:28:03 -08:00
Yury Semikhatsky a81ce3f13d
docs(auth): wait for the response with cookies (#21114)
Fixes #21096
2023-02-22 14:02:27 -08:00
Playwright Service 1dfc4c769d
feat(firefox): roll to r1379 (#21080)
Fixes #20259

---------

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Andrey Lushnikov <aslushnikov@gmail.com>
2023-02-22 09:52:35 -08:00
Max Schmitt 41d8f27d8f
docs: do not mention DockerHub anymore (#21101)
Fixes https://github.com/microsoft/playwright/issues/21095
2023-02-22 17:52:42 +01:00
Max Schmitt ae369144b6
chore: consolidate http/https fetching (#21104)
Fixes https://github.com/microsoft/playwright/issues/20784
Supersedes https://github.com/microsoft/playwright/pull/21076
2023-02-22 17:09:56 +01:00
Debbie O'Brien 135e9f8281
docs: add project info to running tests (#20995) 2023-02-22 09:47:19 +01:00
Pavel Feldman b07637a316
chore: roll chromium back to 1047 (#21092) 2023-02-22 00:08:54 -08:00
Pavel Feldman 3f8f2a0fdd
chore: do not use library stack capturer in test runner (#21075) 2023-02-21 19:24:17 -08:00
Andrey Lushnikov 07bb483156
test: add tests for input with open context menu (#21081)
These might be failing on certain platforms and browsers.

References #20823
2023-02-21 15:57:29 -08:00
Max Schmitt 1432c406ad
docs: fix toMatch code snippet typo (#21077)
Fixes https://github.com/microsoft/playwright/issues/21014
2023-02-22 00:38:30 +01:00
Max Schmitt 4efa9e5ea0
test: unskip WK tests (#21033)
Fixes https://github.com/microsoft/playwright/issues/20370
Fixes https://github.com/microsoft/playwright/issues/12353
2023-02-21 23:49:14 +01:00
Pavel Feldman 06fc72b6ed
revert(#12706): also fix related bugs it introduced (#21070) 2023-02-21 14:15:11 -08:00
Dmitry Gozman c69a7424b4
chore: split off FrameSelectors helper class (#21042)
This class manages everything related to querying selector for the
frame.
2023-02-21 14:08:51 -08:00
Andrey Lushnikov ce692830b3
fix: filter out comments inside fixture destructuring (#20989)
Fixes #20944
2023-02-21 12:51:40 -08:00
Andrey Lushnikov 1cf1f53076
chore: update browser patches as of Jan 11, 2023 (#21068) 2023-02-21 11:46:10 -08:00
Max Schmitt 147e388ec3
test: serviceWorker should intercept document request (#21031)
Not sure whats actually going on here, turns out this breaks the trace
viewer on firefox. -> all the iframes won't work.

Can't repro on stock firefox, so seems like something fishy on our end.

References #20259
2023-02-21 10:36:19 -08:00
Playwright Service 44eccc0add
feat(chromium): roll to r1049 (#21065)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-02-21 19:10:00 +01:00
Playwright Service 41904b2f03
feat(chromium-tip-of-tree): roll to r1088 (#21066)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-02-21 19:09:38 +01:00
Playwright Service f5b89ff9a9
chore(driver): roll driver to recent Node.js LTS version (#21056)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-02-21 14:32:52 +01:00
Max Schmitt 95dc8104e4 devops: fix roll Node.js version of driver workflow 2023-02-21 14:30:12 +01:00
Playwright Service cda830645d
feat(webkit): roll to r1799 (#21045) 2023-02-21 08:18:22 +01:00
Max Schmitt d0308d1924
docs: fix double code snippets (#21027)
Fixes https://github.com/microsoft/playwright/pull/20908
2023-02-20 18:13:01 +01:00
Playwright Service b3c4750547
feat(webkit): roll to r1798 (#20975)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-02-20 12:36:01 +01:00
Playwright Service 37323f4e46
feat(chromium-tip-of-tree): roll to r1087 (#20950)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2023-02-20 12:34:31 +01:00
Dmitry Gozman 24c8d45c70
chore: enable tsc for ttest sources (#21018) 2023-02-19 11:18:07 -08:00
Dmitry Gozman 595502ac46
chore: remove unnecessary args in ttest (#21012) 2023-02-18 13:08:17 -08:00
Dmitry Gozman 56dbd1fcb0
chore: remove usesCustomOutputDir from tests (#21011) 2023-02-18 11:41:41 -08:00
Dmitry Gozman ae05808f4b
chore: align js routing logic with other langs (#21010)
Mostly reverts #20353. This makes porting easier.
2023-02-18 11:41:24 -08:00
Dmitry Gozman 4c68829e39
docs: update auth docs to remove cross-run caching (#21008) 2023-02-18 09:15:16 -08:00
Pavel Feldman a22eaf8672
chore: disable navigating off trace snapshot on hrefs (#21005) 2023-02-17 18:13:45 -08:00
Pavel Feldman 55694a7bc4
chore: translate inspect mode controller to component (#21002) 2023-02-17 17:25:47 -08:00
Dmitry Gozman 55f4b670a9
fix(test runner types): allow sync step functions (#20996) 2023-02-17 14:26:40 -08:00
Dmitry Gozman 5483006499
chore: update release notes for 1.31 (#20997) 2023-02-17 14:25:57 -08:00
Andrey Lushnikov 1b441ef4f0
fix: stricter condition for Firefox codegen tests workaround (#20998)
This patch fixes the following tests on WebKit @ Darwin:
- library/inspector/cli-codegen-2.spec.ts:197:7 › cli codegen › should
download files
- library/inspector/cli-codegen-2.spec.ts:428:7 › cli codegen › should
update hover model on action
2023-02-17 12:19:46 -08:00
Pavel Feldman d7a0b3bb4e
chore: implement pick locator in trace viewer (#20965)
Fixes https://github.com/microsoft/playwright/issues/7853
2023-02-17 11:19:53 -08:00
Debbie O'Brien d96d3c3381
docs: fix release notes (#20994) 2023-02-17 20:03:22 +01:00
Debbie O'Brien c0d9aa2c49
docs: new screenshots for langs (#20149) 2023-02-17 19:16:49 +01:00
Pavel Feldman 41d7d432c8
chore: fix cli executable bits (#20973) 2023-02-16 19:49:44 -08:00
Dmitry Gozman 6fbb265a58
chore: release notes for 1.31 for java, python, csharp (#20969) 2023-02-16 18:11:01 -08:00
Yury Semikhatsky ba6d055bc5
docs: Route.fetch.maxRedirects in java (#20968) 2023-02-16 17:02:12 -08:00
Yury Semikhatsky 09be9d6425
feat: key value store backed by filesystem (#20932)
Keys are used as a relative file path without any sanitization assuming
that the underlying fs will throw on error.
2023-02-16 16:48:28 -08:00
Yury Semikhatsky eadcab6b9f
fix(docs): move callback of Worker.waitForClose to the end of param list (#20966) 2023-02-16 15:32:12 -08:00
Debbie O'Brien e444632dec
Improve debug doc (#20924) 2023-02-16 21:05:44 +01:00
Dmitry Gozman 0b7f9055a3
chore: fix docs for python and java (#20962) 2023-02-16 11:48:38 -08:00
Andrey Lushnikov 1db04f2839
fix: simplify protocol for toBeInViewport (#20960) 2023-02-16 11:02:19 -08:00
Dmitry Gozman ffc2477a00
chore: 1.31 release notes for js (#20933) 2023-02-16 09:35:01 -08:00
Debbie O'Brien 93b791d322
docs: update trace viewer video (#20925) 2023-02-16 17:10:56 +01:00
Pavel Feldman c9cc8478b3
chore: minor trace viewer UI tweaks (#20937) 2023-02-16 07:59:21 -08:00
Pavel Feldman 96050a260e
chore(junit): render project as an agent name / hostname (#20927) 2023-02-16 07:59:05 -08:00
Dmitry Gozman 6f140d79d4
chore: do not create dummy config file in tests (#20935) 2023-02-16 06:56:52 -08:00
Dmitry Gozman e77e2d8c7f
chore: mark 1.32.0-next (#20929) 2023-02-15 16:15:42 -08:00
2254 changed files with 241816 additions and 84270 deletions

View file

@ -1,11 +0,0 @@
{
"name": "Playwright",
"image": "mcr.microsoft.com/playwright:next",
"postCreateCommand": "npm install && npm run build && apt-get update && apt-get install -y software-properties-common && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\" && apt-get install -y docker-ce-cli",
"settings": {
"terminal.integrated.shell.linux": "/bin/bash"
},
"runArgs": [
"-v", "/var/run/docker.sock:/var/run/docker.sock"
]
}

View file

@ -1,19 +0,0 @@
test/assets/modernizr.js
/packages/*/lib/
*.js
/packages/playwright-core/src/generated/*
/packages/playwright-core/src/third_party/
/packages/playwright-core/types/*
/index.d.ts
utils/generate_types/overrides.d.ts
utils/generate_types/test/test.ts
node_modules/
browser_patches/*/checkout/
browser_patches/chromium/output/
**/*.d.ts
output/
test-results/
tests/components/
examples/
DEPS
.cache/

View file

@ -1,126 +0,0 @@
module.exports = {
parser: "@typescript-eslint/parser",
plugins: ["@typescript-eslint", "notice"],
parserOptions: {
ecmaVersion: 9,
sourceType: "module",
},
extends: [
"plugin:react-hooks/recommended"
],
/**
* ESLint rules
*
* All available rules: http://eslint.org/docs/rules/
*
* Rules take the following form:
* "rule-name", [severity, { opts }]
* Severity: 2 == error, 1 == warning, 0 == off.
*/
rules: {
"@typescript-eslint/no-unused-vars": [2, {args: "none"}],
"@typescript-eslint/consistent-type-imports": [2, {disallowTypeAnnotations: false}],
/**
* Enforced rules
*/
// syntax preferences
"object-curly-spacing": ["error", "always"],
"quotes": [2, "single", {
"avoidEscape": true,
"allowTemplateLiterals": true
}],
"no-extra-semi": 2,
"@typescript-eslint/semi": [2],
"comma-style": [2, "last"],
"wrap-iife": [2, "inside"],
"spaced-comment": [2, "always", {
"markers": ["*"]
}],
"eqeqeq": [2],
"accessor-pairs": [2, {
"getWithoutSet": false,
"setWithoutGet": false
}],
"brace-style": [2, "1tbs", {"allowSingleLine": true}],
"curly": [2, "multi-or-nest", "consistent"],
"new-parens": 2,
"arrow-parens": [2, "as-needed"],
"prefer-const": 2,
"quote-props": [2, "consistent"],
// anti-patterns
"no-var": 2,
"no-with": 2,
"no-multi-str": 2,
"no-caller": 2,
"no-implied-eval": 2,
"no-labels": 2,
"no-new-object": 2,
"no-octal-escape": 2,
"no-self-compare": 2,
"no-shadow-restricted-names": 2,
"no-cond-assign": 2,
"no-debugger": 2,
"no-dupe-keys": 2,
"no-duplicate-case": 2,
"no-empty-character-class": 2,
"no-unreachable": 2,
"no-unsafe-negation": 2,
"radix": 2,
"valid-typeof": 2,
"no-implicit-globals": [2],
"no-unused-expressions": [2, { "allowShortCircuit": true, "allowTernary": true, "allowTaggedTemplates": true}],
"no-proto": 2,
// es2015 features
"require-yield": 2,
"template-curly-spacing": [2, "never"],
// spacing details
"space-infix-ops": 2,
"space-in-parens": [2, "never"],
"array-bracket-spacing": [2, "never"],
"comma-spacing": [2, { "before": false, "after": true }],
"keyword-spacing": [2, "always"],
"space-before-function-paren": [2, {
"anonymous": "never",
"named": "never",
"asyncArrow": "always"
}],
"no-whitespace-before-property": 2,
"keyword-spacing": [2, {
"overrides": {
"if": {"after": true},
"else": {"after": true},
"for": {"after": true},
"while": {"after": true},
"do": {"after": true},
"switch": {"after": true},
"return": {"after": true}
}
}],
"arrow-spacing": [2, {
"after": true,
"before": true
}],
"@typescript-eslint/func-call-spacing": 2,
"@typescript-eslint/type-annotation-spacing": 2,
// file whitespace
"no-multiple-empty-lines": [2, {"max": 2}],
"no-mixed-spaces-and-tabs": 2,
"no-trailing-spaces": 2,
"linebreak-style": [ process.platform === "win32" ? 0 : 2, "unix" ],
"indent": [2, 2, { "SwitchCase": 1, "CallExpression": {"arguments": 2}, "MemberExpression": 2 }],
"key-spacing": [2, {
"beforeColon": false
}],
// copyright
"notice/notice": [2, {
"mustMatch": "Copyright",
"templateFile": require("path").join(__dirname, "utils", "copyright.js"),
}],
}
};

View file

@ -1,49 +0,0 @@
---
name: Bug Report
about: Something doesn't work like it should? Tell us!
title: "[BUG]"
labels: ''
assignees: ''
---
**Context:**
- Playwright Version: [what Playwright version do you use?]
- Operating System: [e.g. Windows, Linux or Mac]
- Node.js version: [e.g. 12.22, 14.6]
- Browser: [e.g. All, Chromium, Firefox, WebKit]
- Extra: [any specific details about your environment]
<!-- CLI to auto-capture this info -->
<!-- npx envinfo --preset playwright --markdown -->
**Code Snippet**
Help us help you! Put down a short code snippet that illustrates your bug and
that we can run and debug locally. For example:
```javascript
const {chromium, webkit, firefox} = require('playwright');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext();
const page = await context.newPage();
// Please include a snippet of HTML that shows an example of the content
// you are testing.
await page.setContent(`
<div>
</div>
`);
// Alternatively, if you are testing a public application, include the URL:
// await page.goto('https://example.com/')
await page.locator(…);
})();
```
**Describe the bug**
Add any other details about the problem here.

101
.github/ISSUE_TEMPLATE/bug.yml vendored Normal file
View file

@ -0,0 +1,101 @@
name: Bug Report 🪲
description: Create a bug report to help us improve
title: '[Bug]: '
body:
- type: markdown
attributes:
value: |
# Please follow these steps first:
- type: markdown
attributes:
value: |
## Troubleshoot
If Playwright is not behaving the way you expect, we'd ask you to look at the [documentation](https://playwright.dev/docs/intro) and search the issue tracker for evidence supporting your expectation.
Please make reasonable efforts to troubleshoot and rule out issues with your code, the configuration, or any 3rd party libraries you might be using.
Playwright offers [several debugging tools](https://playwright.dev/docs/debug) that you can use to troubleshoot your issues.
- type: markdown
attributes:
value: |
## Ask for help through appropriate channels
If you feel unsure about the cause of the problem, consider asking for help on for example [StackOverflow](https://stackoverflow.com/questions/ask) or our [Discord channel](https://aka.ms/playwright/discord) before posting a bug report. The issue tracker is not a help forum.
- type: markdown
attributes:
value: |
## Make a minimal reproduction
To file the report, you will need a GitHub repository with a minimal (but complete) example and simple/clear steps on how to reproduce the bug.
The simpler you can make it, the more likely we are to successfully verify and fix the bug. You can create a new project with `npm init playwright@latest new-project` and then add the test code there.
Please make sure you only include the code and the dependencies absolutely necessary for your repro. Due to the security considerations, we can only run the code we trust. Major web frameworks are Ok to use, but smaller convenience libraries are not.
- type: markdown
attributes:
value: |
> [!IMPORTANT]
> Bug reports without a minimal reproduction will be rejected.
---
- type: input
id: version
attributes:
label: Version
description: |
The version of Playwright you are using.
Is it the [latest](https://github.com/microsoft/playwright/releases)? Test and see if the bug has already been fixed.
placeholder: ex. 1.41.1
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: Steps to reproduce
description: Please link to a repository with a minimal reproduction and describe accurately how we can reproduce/verify the bug.
placeholder: |
Example steps (replace with your own):
1. Clone my repo at https://github.com/<myuser>/example
2. npm install
3. npm run test
4. You should see the error come up
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected behavior
description: A description of what you expect to happen.
placeholder: I expect to see X or Y
validations:
required: true
- type: textarea
id: what-happened
attributes:
label: Actual behavior
description: |
A clear and concise description of the unexpected behavior.
Please include any relevant output here, especially any error messages.
placeholder: A bug happened!
validations:
required: true
- type: textarea
id: context
attributes:
label: Additional context
description: Anything else that might be relevant
validations:
required: false
- type: textarea
id: envinfo
attributes:
label: Environment
description: |
Please paste the output of running `npx envinfo --preset playwright`.
This will be automatically formatted as a code block, so no need for backticks.
placeholder: |
System:
OS: Linux 6.2 Ubuntu 22.04.3 LTS 22.04.3 LTS (Jammy Jellyfish)
CPU: (8) arm64
Binaries:
Node: 18.19.0 - ~/.nvm/versions/node/v18.19.0/bin/node
npm: 10.2.3 - ~/.nvm/versions/node/v18.19.0/bin/npm
npmPackages:
@playwright/test: 1.41.1 => 1.41.1
render: shell
validations:
required: true

View file

@ -1,4 +1,5 @@
blank_issues_enabled: false
contact_links: contact_links:
- name: Join our GitHub Discussions community - name: Join our Discord Server
url: https://github.com/microsoft/playwright/discussions url: https://aka.ms/playwright/discord
about: Ask questions and discuss with other community members about: Ask questions and discuss with other community members

View file

@ -0,0 +1,29 @@
name: Documentation 📖
description: Submit a request to add or update documentation
title: '[Docs]: '
labels: ['Documentation :book:']
body:
- type: markdown
attributes:
value: |
### Thank you for helping us improve our documentation!
Please be sure you are looking at [the Next version of the documentation](https://playwright.dev/docs/next/intro) before opening an issue here.
- type: textarea
id: links
attributes:
label: Page(s)
description: |
Links to one or more documentation pages that should be modified.
If you are reporting an issue with a specific section of a page, try to link directly to the nearest anchor.
If you are suggesting that a new page be created, link to the parent of the proposed page.
validations:
required: true
- type: textarea
id: description
attributes:
label: Description
description: |
Describe the change you are requesting.
If the issue pertains to a single function or matcher, be sure to specify the entire call signature.
validations:
required: true

30
.github/ISSUE_TEMPLATE/feature.yml vendored Normal file
View file

@ -0,0 +1,30 @@
name: Feature Request 🚀
description: Submit a proposal for a new feature
title: '[Feature]: '
body:
- type: markdown
attributes:
value: |
### Thank you for taking the time to suggest a new feature!
- type: textarea
id: description
attributes:
label: '🚀 Feature Request'
description: A clear and concise description of what the feature is.
validations:
required: true
- type: textarea
id: example
attributes:
label: Example
description: Describe how this feature would be used.
validations:
required: false
- type: textarea
id: motivation
attributes:
label: Motivation
description: |
Outline your motivation for the proposal. How will it make Playwright better?
validations:
required: true

View file

@ -1,11 +0,0 @@
---
name: Feature request
about: Request new features to be added
title: "[Feature]"
labels: ''
assignees: ''
---
Let us know what functionality you'd like to see in Playwright and what your use case is.
Do you think others might benefit from this as well?

27
.github/ISSUE_TEMPLATE/question.yml vendored Normal file
View file

@ -0,0 +1,27 @@
name: 'Questions / Help 💬'
description: If you have questions, please check StackOverflow or Discord
title: '[Please read the message below]'
labels: [':speech_balloon: Question']
body:
- type: markdown
attributes:
value: |
## Questions and Help 💬
This issue tracker is reserved for bug reports and feature requests.
For anything else, such as questions or getting help, please see:
- [The Playwright documentation](https://playwright.dev)
- [Our Discord server](https://aka.ms/playwright/discord)
- type: checkboxes
id: no-post
attributes:
label: |
Please do not submit this issue.
description: |
> [!IMPORTANT]
> This issue will be closed.
options:
- label: I understand
required: true

View file

@ -1,32 +0,0 @@
---
name: Report regression
about: Functionality that used to work and does not any more
title: "[REGRESSION]: "
labels: ''
assignees: ''
---
**Context:**
- GOOD Playwright Version: [what Playwright version worked nicely?]
- BAD Playwright Version: [what Playwright version doesn't work any more?]
- Operating System: [e.g. Windows, Linux or Mac]
- Extra: [any specific details about your environment]
**Code Snippet**
Help us help you! Put down a short code snippet that illustrates your bug and
that we can run and debug locally. For example:
```javascript
const {chromium, webkit, firefox} = require('playwright');
(async () => {
const browser = await chromium.launch();
// ...
})();
```
**Describe the bug**
Add any other details about the problem here.

96
.github/ISSUE_TEMPLATE/regression.yml vendored Normal file
View file

@ -0,0 +1,96 @@
name: Report regression
description: Functionality that used to work and does not any more
title: "[Regression]: "
body:
- type: markdown
attributes:
value: |
# Please follow these steps first:
- type: markdown
attributes:
value: |
## Make a minimal reproduction
To file the report, you will need a GitHub repository with a minimal (but complete) example and simple/clear steps on how to reproduce the regression.
The simpler you can make it, the more likely we are to successfully verify and fix the regression.
- type: markdown
attributes:
value: |
> [!IMPORTANT]
> Regression reports without a minimal reproduction will be rejected.
---
- type: input
id: goodVersion
attributes:
label: Last Good Version
description: |
Last version of Playwright where the feature was working.
placeholder: ex. 1.40.1
validations:
required: true
- type: input
id: badVersion
attributes:
label: First Bad Version
description: |
First version of Playwright where the feature was broken.
Is it the [latest](https://github.com/microsoft/playwright/releases)? Test and see if the regression has already been fixed.
placeholder: ex. 1.41.1
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: Steps to reproduce
description: Please link to a repository with a minimal reproduction and describe accurately how we can reproduce/verify the bug.
placeholder: |
Example steps (replace with your own):
1. Clone my repo at https://github.com/<myuser>/example
2. npm install
3. npm run test
4. You should see the error come up
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected behavior
description: A description of what you expect to happen.
placeholder: I expect to see X or Y
validations:
required: true
- type: textarea
id: what-happened
attributes:
label: Actual behavior
description: A clear and concise description of the unexpected behavior.
placeholder: A bug happened!
validations:
required: true
- type: textarea
id: context
attributes:
label: Additional context
description: Anything else that might be relevant
validations:
required: false
- type: textarea
id: envinfo
attributes:
label: Environment
description: |
Please paste the output of running `npx envinfo --preset playwright`.
This will be automatically formatted as a code block, so no need for backticks.
placeholder: |
System:
OS: Linux 6.2 Ubuntu 22.04.3 LTS 22.04.3 LTS (Jammy Jellyfish)
CPU: (8) arm64
Binaries:
Node: 18.19.0 - ~/.nvm/versions/node/v18.19.0/bin/node
npm: 10.2.3 - ~/.nvm/versions/node/v18.19.0/bin/npm
npmPackages:
@playwright/test: 1.41.1 => 1.41.1
render: shell
validations:
required: true

View file

@ -1,26 +0,0 @@
---
name: VSCode extension bug
about: Something doesn't work like it should inside the Visual Studio Code extension or you have a feature request? Tell us!
title: "[BUG]"
labels: ''
assignees: ''
---
**Context:**
- Playwright Version: [what Playwright version do you use?]
- Operating System: [e.g. Windows, Linux or Mac]
- Node.js version: [e.g. 12.22, 14.6]
- Visual Studio Code version: [e.g. 1.65]
- Playwright for VSCode extension version: [e.g. 1.2.3]
- Browser: [e.g. All, Chromium, Firefox, WebKit]
- Extra: [any specific details about your environment]
**Code Snippet**
Help us help you! Put down a short code snippet that illustrates your bug and
that we can run and debug locally. For example:
**Describe the bug**
Add any other details about the problem here.

View file

@ -0,0 +1,44 @@
name: 'Download artifacts'
description: 'Download artifacts from GitHub'
inputs:
namePrefix:
description: 'Name prefix of the artifacts to download'
required: true
default: 'blob-report'
path:
description: 'Directory with downloaded artifacts'
required: true
default: '.'
runs:
using: "composite"
steps:
- name: Create temp downloads dir
shell: bash
run: mkdir -p '${{ inputs.path }}/artifacts'
- name: Download artifacts
uses: actions/github-script@v7
with:
script: |
console.log(`downloading artifacts for workflow_run: ${context.payload.workflow_run.id}`);
console.log(`workflow_run: ${JSON.stringify(context.payload.workflow_run, null, 2)}`);
const allArtifacts = await github.paginate(github.rest.actions.listWorkflowRunArtifacts, {
...context.repo,
run_id: context.payload.workflow_run.id
});
console.log('total = ', allArtifacts.length);
const artifacts = allArtifacts.filter(a => a.name.startsWith('${{ inputs.namePrefix }}'));
const fs = require('fs');
for (const artifact of artifacts) {
const result = await github.rest.actions.downloadArtifact({
...context.repo,
artifact_id: artifact.id,
archive_format: 'zip'
});
console.log(`Downloaded ${artifact.name}.zip (${result.data.byteLength} bytes)`);
fs.writeFileSync(`${{ inputs.path }}/artifacts/${artifact.name}.zip`, Buffer.from(result.data));
}
- name: Unzip artifacts
shell: bash
run: |
unzip -n '${{ inputs.path }}/artifacts/*.zip' -d ${{ inputs.path }}
rm -rf '${{ inputs.path }}/artifacts'

View file

@ -0,0 +1,25 @@
name: Enable Microphone Access (macOS)
description: 'Allow microphone access to all apps on macOS'
runs:
using: composite
steps:
# https://github.com/actions/runner-images/issues/9330
- name: Allow microphone access to all apps
shell: bash
run: |
if [[ "$(uname)" != "Darwin" ]]; then
echo "Not macOS, exiting"
exit 0
fi
echo "Allowing microphone access to all apps"
version=$(sw_vers -productVersion | cut -d. -f1)
if [[ "$version" == "14" || "$version" == "15" ]]; then
sqlite3 $HOME/Library/Application\ Support/com.apple.TCC/TCC.db "INSERT OR IGNORE INTO access VALUES ('kTCCServiceMicrophone','/usr/local/opt/runner/provisioner/provisioner',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1687786159,NULL,NULL,'UNUSED',1687786159);"
elif [[ "$version" == "12" || "$version" == "13" ]]; then
sqlite3 $HOME/Library/Application\ Support/com.apple.TCC/TCC.db "INSERT OR REPLACE INTO access VALUES('kTCCServiceMicrophone','/usr/local/opt/runner/provisioner/provisioner',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1687786159);"
else
echo "Skipping unsupported macOS version $version"
exit 0
fi
echo "Successfully allowed microphone access"

93
.github/actions/run-test/action.yml vendored Normal file
View file

@ -0,0 +1,93 @@
name: 'Run browser tests'
description: 'Run browser tests'
inputs:
command:
description: 'Command to run tests'
required: true
node-version:
description: 'Node.js version to use'
required: false
default: '18'
browsers-to-install:
description: 'Browser to install. Default is all browsers.'
required: false
default: ''
bot-name:
description: 'Bot name'
required: true
shell:
description: 'Shell to use'
required: false
default: 'bash'
flakiness-client-id:
description: 'Azure Flakiness Dashboard Client ID'
required: false
flakiness-tenant-id:
description: 'Azure Flakiness Dashboard Tenant ID'
required: false
flakiness-subscription-id:
description: 'Azure Flakiness Dashboard Subscription ID'
required: false
runs:
using: composite
steps:
- uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node-version }}
- uses: ./.github/actions/enable-microphone-access
- run: |
echo "::group::npm ci"
npm ci
echo "::endgroup::"
shell: bash
env:
DEBUG: pw:install
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: '1'
- run: |
echo "::group::npm run build"
npm run build
echo "::endgroup::"
shell: bash
- run: |
echo "::group::npx playwright install --with-deps"
npx playwright install --with-deps ${{ inputs.browsers-to-install }}
echo "::endgroup::"
shell: bash
- name: Run tests
if: inputs.shell == 'bash'
run: |
if [[ "$(uname)" == "Linux" ]]; then
xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- ${{ inputs.command }}
else
${{ inputs.command }}
fi
shell: bash
env:
PWTEST_BOT_NAME: ${{ inputs.bot-name }}
- name: Run tests
if: inputs.shell != 'bash'
run: ${{ inputs.command }}
shell: ${{ inputs.shell }}
env:
PWTEST_BOT_NAME: ${{ inputs.bot-name }}
- name: Azure Login
uses: azure/login@v2
if: ${{ !cancelled() && github.event_name == 'push' && github.repository == 'microsoft/playwright' }}
with:
client-id: ${{ inputs.flakiness-client-id }}
tenant-id: ${{ inputs.flakiness-tenant-id }}
subscription-id: ${{ inputs.flakiness-subscription-id }}
- run: |
echo "::group::./utils/upload_flakiness_dashboard.sh"
./utils/upload_flakiness_dashboard.sh ./test-results/report.json
echo "::endgroup::"
if: ${{ !cancelled() }}
shell: bash
- name: Upload blob report
# We only merge reports for PRs as per .github/workflows/create_test_report.yml.
if: ${{ !cancelled() && github.event_name == 'pull_request' }}
uses: ./.github/actions/upload-blob-report
with:
report_dir: blob-report
job_name: ${{ inputs.bot-name }}

View file

@ -0,0 +1,34 @@
name: 'Upload blob report'
description: 'Upload blob report to GitHub artifacts (for pull requests)'
inputs:
report_dir:
description: 'Directory containing blob report'
required: true
default: 'test-results/blob-report'
job_name:
description: 'Unique job name'
required: true
default: ''
runs:
using: "composite"
steps:
- name: Integrity check
shell: bash
run: find "${{ inputs.report_dir }}" -name "*.zip" -exec unzip -t {} \;
- name: Upload blob report to GitHub
if: ${{ !cancelled() && github.event_name == 'pull_request' }}
uses: actions/upload-artifact@v4
with:
name: blob-report-${{ inputs.job_name }}
path: ${{ inputs.report_dir }}/**
retention-days: 7
- name: Write triggering pull request number in a file
if: ${{ !cancelled() && github.event_name == 'pull_request' }}
shell: bash
run: echo '${{ github.event.number }}' > pull_request_number.txt;
- name: Upload artifact with the pull request number
if: ${{ !cancelled() && github.event_name == 'pull_request' }}
uses: actions/upload-artifact@v4
with:
name: pull-request-${{ inputs.job_name }}
path: pull_request_number.txt

14
.github/dependabot.yml vendored Normal file
View file

@ -0,0 +1,14 @@
version: 2
updates:
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
groups:
actions:
patterns:
- "*"

View file

@ -1,7 +0,0 @@
{
"name": "playwright-chromium",
"version": "1.0.0",
"description": "A high-level API to automate web browsers",
"repository": "github:Microsoft/playwright",
"license": "Apache-2.0"
}

View file

@ -1,7 +0,0 @@
{
"name": "playwright-core",
"version": "1.0.0",
"description": "A high-level API to automate web browsers",
"repository": "github:Microsoft/playwright",
"license": "Apache-2.0"
}

View file

@ -1,7 +0,0 @@
{
"name": "playwright-firefox",
"version": "1.0.0",
"description": "A high-level API to automate web browsers",
"repository": "github:Microsoft/playwright",
"license": "Apache-2.0"
}

View file

@ -1,7 +0,0 @@
{
"name": "@playwright/test",
"version": "1.0.0",
"description": "A high-level API to automate web browsers",
"repository": "github:Microsoft/playwright",
"license": "Apache-2.0"
}

View file

@ -1,7 +0,0 @@
{
"name": "playwright-webkit",
"version": "1.0.0",
"description": "A high-level API to automate web browsers",
"repository": "github:Microsoft/playwright",
"license": "Apache-2.0"
}

View file

@ -1,7 +0,0 @@
{
"name": "playwright",
"version": "1.0.0",
"description": "A high-level API to automate web browsers",
"repository": "github:Microsoft/playwright",
"license": "Apache-2.0"
}

View file

@ -12,6 +12,9 @@ on:
description: Comma-separated list of commit hashes to cherry-pick description: Comma-separated list of commit hashes to cherry-pick
required: true required: true
permissions:
contents: write
jobs: jobs:
roll: roll:
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
@ -23,7 +26,7 @@ jobs:
echo "Version is not a two digit semver version" echo "Version is not a two digit semver version"
exit 1 exit 1
fi fi
- uses: actions/checkout@v3 - uses: actions/checkout@v4
with: with:
ref: release-${{ github.event.inputs.version }} ref: release-${{ github.event.inputs.version }}
fetch-depth: 0 fetch-depth: 0
@ -57,7 +60,7 @@ jobs:
git checkout -b "$BRANCH_NAME" git checkout -b "$BRANCH_NAME"
git push origin $BRANCH_NAME git push origin $BRANCH_NAME
- name: Create Pull Request - name: Create Pull Request
uses: actions/github-script@v6 uses: actions/github-script@v7
with: with:
github-token: ${{ secrets.REPOSITORY_DISPATCH_PERSONAL_ACCESS_TOKEN }} github-token: ${{ secrets.REPOSITORY_DISPATCH_PERSONAL_ACCESS_TOKEN }}
script: | script: |

123
.github/workflows/create_test_report.yml vendored Normal file
View file

@ -0,0 +1,123 @@
name: Publish Test Results
on:
workflow_run:
workflows: ["tests 1", "tests 2", "tests others"]
types:
- completed
jobs:
merge-reports:
permissions:
pull-requests: write
checks: write
id-token: write # This is required for OIDC login (azure/login) to succeed
contents: read # This is required for actions/checkout to succeed
if: ${{ github.event.workflow_run.event == 'pull_request' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
- run: npm ci
env:
DEBUG: pw:install
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
- run: npm run build
- name: Download blob report artifact
uses: ./.github/actions/download-artifact
with:
namePrefix: 'blob-report'
path: 'all-blob-reports'
- name: Merge reports
run: |
npx playwright merge-reports --config .github/workflows/merge.config.ts ./all-blob-reports
env:
NODE_OPTIONS: --max-old-space-size=8192
- name: Azure Login
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_BLOB_REPORTS_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_BLOB_REPORTS_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_BLOB_REPORTS_SUBSCRIPTION_ID }}
- name: Upload HTML report to Azure
run: |
REPORT_DIR='run-${{ github.event.workflow_run.id }}-${{ github.event.workflow_run.run_attempt }}-${{ github.sha }}'
azcopy cp --recursive "./playwright-report/*" "https://mspwblobreport.blob.core.windows.net/\$web/$REPORT_DIR"
echo "Report url: https://mspwblobreport.z1.web.core.windows.net/$REPORT_DIR/index.html"
env:
AZCOPY_AUTO_LOGIN_TYPE: AZCLI
- name: Read pull request number
uses: ./.github/actions/download-artifact
with:
namePrefix: 'pull-request'
path: '.'
- name: Comment on PR
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const fs = require('fs');
let prNumber;
if (context.payload.workflow_run.event === 'pull_request') {
const prs = context.payload.workflow_run.pull_requests;
if (prs.length) {
prNumber = prs[0].number;
} else {
prNumber = parseInt(fs.readFileSync('pull_request_number.txt').toString());
console.log('Read pull request number from file: ' + prNumber);
}
} else {
core.error('Unsupported workflow trigger event: ' + context.payload.workflow_run.event);
return;
}
if (!prNumber) {
core.error('No pull request found for commit ' + context.sha + ' and workflow triggered by: ' + context.payload.workflow_run.event);
return;
}
{
// Mark previous comments as outdated by minimizing them.
const { data: comments } = await github.rest.issues.listComments({
...context.repo,
issue_number: prNumber,
});
for (const comment of comments) {
if (comment.user.login === 'github-actions[bot]' && /\[Test results\]\(https:\/\/.+?\) for "${{ github.event.workflow_run.name }}"/.test(comment.body)) {
await github.graphql(`
mutation {
minimizeComment(input: {subjectId: "${comment.node_id}", classifier: OUTDATED}) {
clientMutationId
}
}
`);
}
}
}
const reportDir = 'run-${{ github.event.workflow_run.id }}-${{ github.event.workflow_run.run_attempt }}-${{ github.sha }}';
const reportUrl = `https://mspwblobreport.z1.web.core.windows.net/${reportDir}/index.html#?q=s%3Afailed%20s%3Aflaky`;
core.notice('Report url: ' + reportUrl);
const mergeWorkflowUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`;
const reportMd = await fs.promises.readFile('report.md', 'utf8');
function formatComment(lines) {
let body = lines.join('\n');
if (body.length > 65535)
body = body.substring(0, 65000) + `... ${body.length - 65000} more characters`;
return body;
}
const { data: response } = await github.rest.issues.createComment({
...context.repo,
issue_number: prNumber,
body: formatComment([
`### [Test results](${reportUrl}) for "${{ github.event.workflow_run.name }}"`,
reportMd,
'',
`Merge [workflow run](${mergeWorkflowUrl}).`
]),
});
core.info('Posted comment: ' + response.html_url);

View file

@ -10,16 +10,18 @@ on:
- main - main
- release-* - release-*
env:
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
jobs: jobs:
doc-and-lint: doc-and-lint:
name: "docs & lint" name: "docs & lint"
runs-on: ubuntu-20.04 runs-on: ubuntu-24.04
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: actions/setup-node@v4
with: with:
node-version: 16 node-version: 18
- run: npm i -g npm@8
- run: npm ci - run: npm ci
- run: npm run build - run: npm run build
- run: npx playwright install-deps - run: npx playwright install-deps
@ -33,4 +35,27 @@ jobs:
exit 1 exit 1
fi fi
- name: Audit prod NPM dependencies - name: Audit prod NPM dependencies
run: npm audit --omit dev run: node utils/check_audit.js
lint-snippets:
name: "Lint snippets"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
- uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '21'
- run: npm ci
- run: pip install -r utils/doclint/linting-code-snippets/python/requirements.txt
- run: mvn package
working-directory: utils/doclint/linting-code-snippets/java
- run: node utils/doclint/linting-code-snippets/cli.js

4
.github/workflows/merge.config.ts vendored Normal file
View file

@ -0,0 +1,4 @@
export default {
testDir: '../../tests',
reporter: [[require.resolve('../../packages/playwright/lib/reporters/markdown')], ['html']]
};

View file

@ -4,30 +4,39 @@ on:
branches: branches:
- main - main
paths: paths:
- 'docs/src/api/**/*'
- 'packages/playwright-core/src/client/**/*' - 'packages/playwright-core/src/client/**/*'
- 'packages/playwright-test/src/matchers/matchers.ts' - 'packages/playwright-core/src/utils/isomorphic/**/*'
- 'packages/playwright/src/matchers/matchers.ts'
- 'packages/protocol/src/protocol.yml'
jobs: jobs:
check: check:
name: Check name: Check
runs-on: ubuntu-20.04 runs-on: ubuntu-24.04
if: github.repository == 'microsoft/playwright' if: github.repository == 'microsoft/playwright'
steps: steps:
- uses: actions/checkout@v4
- name: Create GitHub issue - name: Create GitHub issue
uses: actions/github-script@v6 uses: actions/github-script@v7
with: with:
github-token: ${{ secrets.REPOSITORY_DISPATCH_PERSONAL_ACCESS_TOKEN }} github-token: ${{ secrets.REPOSITORY_DISPATCH_PERSONAL_ACCESS_TOKEN }}
script: | script: |
const currentPlaywrightVersion = require('./package.json').version.match(/\d+\.\d+/)[0];
const { data } = await github.rest.git.getCommit({ const { data } = await github.rest.git.getCommit({
owner: context.repo.owner, owner: context.repo.owner,
repo: context.repo.repo, repo: context.repo.repo,
commit_sha: context.sha, commit_sha: context.sha,
}); });
const commitHeader = data.message.split('\n')[0]; const commitHeader = data.message.split('\n')[0];
const prMatch = commitHeader.match(/#(\d+)/);
const formattedCommit = prMatch
? `https://github.com/microsoft/playwright/pull/${prMatch[1]}`
: `https://github.com/${context.repo.owner}/${context.repo.repo}/commit/${context.sha} (${commitHeader})`;
const title = '[Ports]: Backport client side changes'; const title = '[Ports]: Backport client side changes for ' + currentPlaywrightVersion;
for (const repo of ['playwright-python', 'playwright-java', 'playwright-dotnet']) { for (const repo of ['playwright-python', 'playwright-java', 'playwright-dotnet']) {
const { data: issuesData } = await github.rest.search.issuesAndPullRequests({ const { data: issuesData } = await github.rest.search.issuesAndPullRequests({
q: `is:issue is:open repo:microsoft/${repo} in:title "${title}"` q: `is:issue is:open repo:microsoft/${repo} in:title "${title}" author:playwrightmachine`
}) })
let issueNumber = null; let issueNumber = null;
let issueBody = ''; let issueBody = '';
@ -45,7 +54,7 @@ jobs:
issueBody = issueCreateData.body; issueBody = issueCreateData.body;
} }
const newBody = issueBody.trimEnd() + ` const newBody = issueBody.trimEnd() + `
- [ ] https://github.com/${context.repo.owner}/${context.repo.repo}/commit/${context.sha} (${commitHeader})`; - [ ] ${formattedCommit}`;
const data = await github.rest.issues.update({ const data = await github.rest.issues.update({
owner: context.repo.owner, owner: context.repo.owner,
repo: repo, repo: repo,

View file

@ -8,18 +8,24 @@ on:
branches: branches:
- release-* - release-*
env:
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
jobs: jobs:
publish-canary: publish-canary:
name: "publish canary NPM & Publish canary Docker" name: "publish canary NPM"
runs-on: ubuntu-20.04 runs-on: ubuntu-24.04
if: github.repository == 'microsoft/playwright' if: github.repository == 'microsoft/playwright'
permissions:
id-token: write # This is required for OIDC login (azure/login) to succeed
contents: read # This is required for actions/checkout to succeed
environment: allow-publish-driver-to-cdn # This is required for OIDC login (azure/login)
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: actions/setup-node@v4
with: with:
node-version: 16 node-version: 18
registry-url: 'https://registry.npmjs.org' registry-url: 'https://registry.npmjs.org'
- run: npm i -g npm@8
- run: npm ci - run: npm ci
- run: npm run build - run: npm run build
- run: npx playwright install-deps - run: npx playwright install-deps
@ -44,36 +50,28 @@ jobs:
utils/publish_all_packages.sh --beta utils/publish_all_packages.sh --beta
env: env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Azure Login
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_PW_CDN_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_PW_CDN_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_PW_CDN_SUBSCRIPTION_ID }}
- name: build & publish driver - name: build & publish driver
env: env:
AZ_UPLOAD_FOLDER: driver/next AZ_UPLOAD_FOLDER: driver/next
AZ_ACCOUNT_KEY: ${{ secrets.AZ_ACCOUNT_KEY }}
AZ_ACCOUNT_NAME: ${{ secrets.AZ_ACCOUNT_NAME }}
run: | run: |
utils/build/build-playwright-driver.sh utils/build/build-playwright-driver.sh
utils/build/upload-playwright-driver.sh utils/build/upload-playwright-driver.sh
- uses: azure/docker-login@v1
with:
login-server: playwright.azurecr.io
username: playwright
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Set up Docker QEMU for arm64 docker builds
uses: docker/setup-qemu-action@v1
with:
platforms: arm64
- name: publish docker canary
run: ./utils/docker/publish_docker.sh canary
publish-trace-viewer: publish-trace-viewer:
name: "publish Trace Viewer to trace.playwright.dev" name: "publish Trace Viewer to trace.playwright.dev"
runs-on: ubuntu-20.04 runs-on: ubuntu-24.04
if: github.repository == 'microsoft/playwright' if: github.repository == 'microsoft/playwright'
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: actions/setup-node@v4
with: with:
node-version: 16 node-version: 18
- run: npm i -g npm@8
- name: Deploy Canary - name: Deploy Canary
run: bash utils/build/deploy-trace-viewer.sh --canary run: bash utils/build/deploy-trace-viewer.sh --canary
if: contains(github.ref, 'main') if: contains(github.ref, 'main')

View file

@ -2,40 +2,40 @@ name: "publish release - Docker"
on: on:
workflow_dispatch: workflow_dispatch:
inputs:
is_release:
required: true
type: boolean
description: "Is this a release image?"
release: release:
types: [published] types: [published]
env:
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
jobs: jobs:
publish-docker-release: publish-docker-release:
name: "publish to DockerHub" name: "publish to DockerHub"
runs-on: ubuntu-20.04 runs-on: ubuntu-22.04
permissions:
id-token: write # This is required for OIDC login (azure/login) to succeed
contents: read # This is required for actions/checkout to succeed
if: github.repository == 'microsoft/playwright' if: github.repository == 'microsoft/playwright'
environment: allow-publishing-docker-to-acr
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: actions/setup-node@v4
with: with:
node-version: 16 node-version: 18
registry-url: 'https://registry.npmjs.org' registry-url: 'https://registry.npmjs.org'
- uses: azure/docker-login@v1
with:
login-server: playwright.azurecr.io
username: playwright
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Set up Docker QEMU for arm64 docker builds - name: Set up Docker QEMU for arm64 docker builds
uses: docker/setup-qemu-action@v1 uses: docker/setup-qemu-action@v3
with: with:
platforms: arm64 platforms: arm64
- run: npm i -g npm@8
- run: npm ci - run: npm ci
- run: npm run build - run: npm run build
- run: npx playwright install-deps - run: npx playwright install-deps
- name: Azure Login
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_DOCKER_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_DOCKER_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_DOCKER_SUBSCRIPTION_ID }}
- name: Login to ACR via OIDC
run: az acr login --name playwright
- run: ./utils/docker/publish_docker.sh stable - run: ./utils/docker/publish_docker.sh stable
if: (github.event_name != 'workflow_dispatch' && !github.event.release.prerelease) || (github.event_name == 'workflow_dispatch' && github.event.inputs.is_release == 'true')
- run: ./utils/docker/publish_docker.sh canary
if: (github.event_name != 'workflow_dispatch' && github.event.release.prerelease) || (github.event_name == 'workflow_dispatch' && github.event.inputs.is_release != 'true')

View file

@ -4,24 +4,34 @@ on:
release: release:
types: [published] types: [published]
env:
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
jobs: jobs:
publish-driver-release: publish-driver-release:
name: "publish playwright driver to CDN" name: "publish playwright driver to CDN"
runs-on: ubuntu-20.04 runs-on: ubuntu-24.04
if: github.repository == 'microsoft/playwright' if: github.repository == 'microsoft/playwright'
permissions:
id-token: write # This is required for OIDC login (azure/login) to succeed
contents: read # This is required for actions/checkout to succeed
environment: allow-publish-driver-to-cdn # This is required for OIDC login (azure/login)
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: actions/setup-node@v4
with: with:
node-version: 16 node-version: 18
registry-url: 'https://registry.npmjs.org' registry-url: 'https://registry.npmjs.org'
- run: npm i -g npm@8
- run: npm ci - run: npm ci
- run: npm run build - run: npm run build
- run: npx playwright install-deps - run: npx playwright install-deps
- run: utils/build/build-playwright-driver.sh - run: utils/build/build-playwright-driver.sh
- name: Azure Login
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_PW_CDN_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_PW_CDN_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_PW_CDN_SUBSCRIPTION_ID }}
- run: utils/build/upload-playwright-driver.sh - run: utils/build/upload-playwright-driver.sh
env: env:
AZ_UPLOAD_FOLDER: driver AZ_UPLOAD_FOLDER: driver
AZ_ACCOUNT_KEY: ${{ secrets.AZ_ACCOUNT_KEY }}
AZ_ACCOUNT_NAME: ${{ secrets.AZ_ACCOUNT_NAME }}

View file

@ -4,26 +4,31 @@ on:
release: release:
types: [published] types: [published]
env:
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
jobs: jobs:
publish-npm-release: publish-npm-release:
name: "publish to NPM" name: "publish to NPM"
runs-on: ubuntu-20.04 runs-on: ubuntu-24.04
if: github.repository == 'microsoft/playwright' if: github.repository == 'microsoft/playwright'
permissions:
contents: read
id-token: write
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: actions/setup-node@v4
with: with:
node-version: 16 node-version: 18
registry-url: 'https://registry.npmjs.org' registry-url: 'https://registry.npmjs.org'
- run: npm i -g npm@8
- run: npm ci - run: npm ci
- run: npm run build - run: npm run build
- run: npx playwright install-deps - run: npx playwright install-deps
- run: utils/publish_all_packages.sh --release-candidate - run: utils/publish_all_packages.sh --release-candidate
if: "github.event.release.prerelease" if: ${{ github.event.release.prerelease }}
env: env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- run: utils/publish_all_packages.sh --release - run: utils/publish_all_packages.sh --release
if: "!github.event.release.prerelease" if: ${{ !github.event.release.prerelease }}
env: env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

View file

@ -7,14 +7,13 @@ on:
jobs: jobs:
publish-trace-viewer: publish-trace-viewer:
name: "publish Trace Viewer to trace.playwright.dev" name: "publish Trace Viewer to trace.playwright.dev"
runs-on: ubuntu-20.04 runs-on: ubuntu-24.04
if: github.repository == 'microsoft/playwright' if: github.repository == 'microsoft/playwright'
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: actions/setup-node@v4
with: with:
node-version: 16 node-version: 18
- run: npm i -g npm@8
- name: Deploy Stable - name: Deploy Stable
run: bash utils/build/deploy-trace-viewer.sh --stable run: bash utils/build/deploy-trace-viewer.sh --stable
env: env:

View file

@ -3,37 +3,54 @@ name: Roll Browser into Playwright
on: on:
repository_dispatch: repository_dispatch:
types: [roll_into_pw] types: [roll_into_pw]
workflow_dispatch:
inputs:
browser:
description: 'Browser name, e.g. chromium'
required: true
type: string
revision:
description: 'Browser revision without v prefix, e.g. 1234'
required: true
type: string
env:
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
BROWSER: ${{ github.event.client_payload.browser || github.event.inputs.browser }}
REVISION: ${{ github.event.client_payload.revision || github.event.inputs.revision }}
permissions:
contents: write
jobs: jobs:
roll: roll:
runs-on: ubuntu-20.04 runs-on: ubuntu-24.04
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: actions/setup-node@v4
with: with:
node-version: 16 node-version: 18
- run: npm i -g npm@8
- run: npm ci - run: npm ci
- run: npm run build - run: npm run build
- name: Install dependencies - name: Install dependencies
run: npx playwright install-deps run: npx playwright install-deps
- name: Roll to new revision - name: Roll to new revision
run: | run: |
./utils/roll_browser.js ${{ github.event.client_payload.browser }} ${{ github.event.client_payload.revision }} ./utils/roll_browser.js $BROWSER $REVISION
npm run build npm run build
- name: Prepare branch - name: Prepare branch
id: prepare-branch id: prepare-branch
run: | run: |
BRANCH_NAME="roll-into-pw-${{ github.event.client_payload.browser }}/${{ github.event.client_payload.revision }}" BRANCH_NAME="roll-into-pw-${BROWSER}/${REVISION}"
echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_OUTPUT echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_OUTPUT
git config --global user.name github-actions git config --global user.name github-actions
git config --global user.email 41898282+github-actions[bot]@users.noreply.github.com git config --global user.email 41898282+github-actions[bot]@users.noreply.github.com
git checkout -b "$BRANCH_NAME" git checkout -b "$BRANCH_NAME"
git add . git add .
git commit -m "feat(${{ github.event.client_payload.browser }}): roll to r${{ github.event.client_payload.revision }}" git commit -m "feat(${BROWSER}): roll to r${REVISION}"
git push origin $BRANCH_NAME git push origin $BRANCH_NAME --force
- name: Create Pull Request - name: Create Pull Request
uses: actions/github-script@v6 uses: actions/github-script@v7
with: with:
github-token: ${{ secrets.REPOSITORY_DISPATCH_PERSONAL_ACCESS_TOKEN }} github-token: ${{ secrets.REPOSITORY_DISPATCH_PERSONAL_ACCESS_TOKEN }}
script: | script: |
@ -42,7 +59,7 @@ jobs:
repo: 'playwright', repo: 'playwright',
head: 'microsoft:${{ steps.prepare-branch.outputs.BRANCH_NAME }}', head: 'microsoft:${{ steps.prepare-branch.outputs.BRANCH_NAME }}',
base: 'main', base: 'main',
title: 'feat(${{ github.event.client_payload.browser }}): roll to r${{ github.event.client_payload.revision }}', title: 'feat(${{ env.BROWSER }}): roll to r${{ env.REVISION }}',
}); });
await github.rest.issues.addLabels({ await github.rest.issues.addLabels({
owner: 'microsoft', owner: 'microsoft',

View file

@ -9,9 +9,11 @@ jobs:
name: Trigger Roll name: Trigger Roll
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
if: github.repository == 'microsoft/playwright' if: github.repository == 'microsoft/playwright'
permissions:
contents: write
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: actions/setup-node@v4
with: with:
node-version: 18 node-version: 18
- run: node utils/build/update-playwright-driver-version.mjs - run: node utils/build/update-playwright-driver-version.mjs
@ -33,8 +35,9 @@ jobs:
git push origin $BRANCH_NAME git push origin $BRANCH_NAME
- name: Create Pull Request - name: Create Pull Request
if: ${{ steps.prepare-branch.outputs.HAS_CHANGES == '1' }} if: ${{ steps.prepare-branch.outputs.HAS_CHANGES == '1' }}
uses: actions/github-script@v6 uses: actions/github-script@v7
with: with:
github-token: ${{ secrets.REPOSITORY_DISPATCH_PERSONAL_ACCESS_TOKEN }}
script: | script: |
await github.rest.pulls.create({ await github.rest.pulls.create({
owner: 'microsoft', owner: 'microsoft',

71
.github/workflows/tests_bidi.yml vendored Normal file
View file

@ -0,0 +1,71 @@
name: tests BiDi
on:
workflow_dispatch:
pull_request:
branches:
- main
paths:
- .github/workflows/tests_bidi.yml
- packages/playwright-core/src/server/bidi/**
- tests/bidi/**
schedule:
# Run every day at midnight
- cron: '0 0 * * *'
env:
FORCE_COLOR: 1
jobs:
test_bidi:
name: BiDi
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
runs-on: ubuntu-24.04
permissions:
id-token: write # This is required for OIDC login (azure/login) to succeed
contents: read # This is required for actions/checkout to succeed
strategy:
fail-fast: false
matrix:
channel: [bidi-chromium, bidi-firefox-nightly]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: '1'
- run: npm run build
- run: npx playwright install --with-deps chromium
if: matrix.channel == 'bidi-chromium'
- run: npx -y @puppeteer/browsers install firefox@nightly
if: matrix.channel == 'bidi-firefox-nightly'
- name: Run tests
run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run biditest -- --project=${{ matrix.channel }}*
env:
PWTEST_USE_BIDI_EXPECTATIONS: '1'
- name: Upload csv report to GitHub
if: ${{ !cancelled() }}
uses: actions/upload-artifact@v4
with:
name: csv-report-${{ matrix.channel }}
path: test-results/report.csv
retention-days: 7
- name: Azure Login
if: ${{ !cancelled() && github.ref == 'refs/heads/main' }}
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_BLOB_REPORTS_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_BLOB_REPORTS_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_BLOB_REPORTS_SUBSCRIPTION_ID }}
- name: Upload report.csv to Azure
if: ${{ !cancelled() && github.ref == 'refs/heads/main' }}
run: |
REPORT_DIR='bidi-reports'
azcopy cp "./test-results/report.csv" "https://mspwblobreport.blob.core.windows.net/\$web/$REPORT_DIR/${{ matrix.channel }}.csv"
echo "Report url: https://mspwblobreport.z1.web.core.windows.net/$REPORT_DIR/${{ matrix.channel }}.csv"
env:
AZCOPY_AUTO_LOGIN_TYPE: AZCLI

View file

@ -15,22 +15,27 @@ on:
env: env:
FORCE_COLOR: 1 FORCE_COLOR: 1
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
jobs: jobs:
test_components: test_components:
name: ${{ matrix.os }} name: ${{ matrix.os }} - Node.js ${{ matrix.node-version }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ubuntu-latest, macos-latest, windows-latest] os: [ubuntu-latest, macos-latest, windows-latest]
node-version: [18]
include:
- os: ubuntu-latest
node-version: 20
- os: ubuntu-latest
node-version: 22
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: actions/setup-node@v4
with: with:
# Component tests require Node.js 16+ (they require ESM via TS) node-version: ${{ matrix.node-version }}
node-version: 16
- run: npm i -g npm@8
- run: npm ci - run: npm ci
- run: npm run build - run: npm run build
- run: npx playwright install --with-deps - run: npx playwright install --with-deps

View file

@ -1,54 +0,0 @@
name: "electron"
on:
push:
branches:
- main
- release-*
pull_request:
paths-ignore:
- 'browser_patches/**'
- 'docs/**'
types: [ labeled ]
branches:
- main
- release-*
env:
# Force terminal colors. @see https://www.npmjs.com/package/colors
FORCE_COLOR: 1
FLAKINESS_CONNECTION_STRING: ${{ secrets.FLAKINESS_CONNECTION_STRING }}
jobs:
test_electron:
name: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm i -g npm@8
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- run: npx playwright install --with-deps chromium
- run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run etest
if: matrix.os == 'ubuntu-latest'
- run: npm run etest
if: matrix.os != 'ubuntu-latest'
- run: node tests/config/checkCoverage.js electron
if: always() && matrix.os == 'ubuntu-latest'
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: always() && matrix.os == 'ubuntu-latest'
with:
name: electron-linux-test-results
path: test-results

166
.github/workflows/tests_others.yml vendored Normal file
View file

@ -0,0 +1,166 @@
name: tests others
on:
push:
branches:
- main
- release-*
pull_request:
paths-ignore:
- 'browser_patches/**'
- 'docs/**'
types: [ labeled ]
branches:
- main
- release-*
env:
FORCE_COLOR: 1
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
jobs:
test_stress:
name: Stress - ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm run build
- run: npx playwright install --with-deps
- run: npm run stest contexts -- --project=chromium
if: ${{ !cancelled() }}
- run: npm run stest browsers -- --project=chromium
if: ${{ !cancelled() }}
- run: npm run stest frames -- --project=chromium
if: ${{ !cancelled() }}
- run: npm run stest contexts -- --project=webkit
if: ${{ !cancelled() }}
- run: npm run stest browsers -- --project=webkit
if: ${{ !cancelled() }}
- run: npm run stest frames -- --project=webkit
if: ${{ !cancelled() }}
- run: npm run stest contexts -- --project=firefox
if: ${{ !cancelled() }}
- run: npm run stest browsers -- --project=firefox
if: ${{ !cancelled() }}
- run: npm run stest frames -- --project=firefox
if: ${{ !cancelled() }}
- run: npm run stest heap -- --project=chromium
if: ${{ !cancelled() }}
test_webview2:
name: WebView2
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
runs-on: windows-2022
permissions:
id-token: write # This is required for OIDC login (azure/login) to succeed
contents: read # This is required for actions/checkout to succeed
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- run: dotnet build
working-directory: tests/webview2/webview2-app/
- name: Update to Evergreen WebView2 Runtime
shell: pwsh
run: |
# See here: https://developer.microsoft.com/en-us/microsoft-edge/webview2/
Invoke-WebRequest -Uri 'https://go.microsoft.com/fwlink/p/?LinkId=2124703' -OutFile 'setup.exe'
Start-Process -FilePath setup.exe -Verb RunAs -Wait
- uses: ./.github/actions/run-test
with:
node-version: 20
browsers-to-install: chromium
command: npm run webview2test
bot-name: "webview2-chromium-windows"
flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
test_clock_frozen_time_linux:
name: time library - ${{ matrix.clock }}
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
permissions:
id-token: write # This is required for OIDC login (azure/login) to succeed
contents: read # This is required for actions/checkout to succeed
strategy:
fail-fast: false
matrix:
clock: [frozen, realtime]
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/run-test
with:
node-version: 20
browsers-to-install: chromium
command: npm run test -- --project=chromium-*
bot-name: "${{ matrix.clock }}-time-library-chromium-linux"
flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
env:
PW_CLOCK: ${{ matrix.clock }}
test_clock_frozen_time_test_runner:
name: time test runner - ${{ matrix.clock }}
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
runs-on: ubuntu-22.04
permissions:
id-token: write # This is required for OIDC login (azure/login) to succeed
contents: read # This is required for actions/checkout to succeed
strategy:
fail-fast: false
matrix:
clock: [frozen, realtime]
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/run-test
with:
node-version: 20
command: npm run ttest
bot-name: "${{ matrix.clock }}-time-runner-chromium-linux"
flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
env:
PW_CLOCK: ${{ matrix.clock }}
test_electron:
name: Electron - ${{ matrix.os }}
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
permissions:
id-token: write # This is required for OIDC login (azure/login) to succeed
contents: read # This is required for actions/checkout to succeed
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Setup Ubuntu Binary Installation # TODO: Remove when https://github.com/electron/electron/issues/42510 is fixed
if: ${{ runner.os == 'Linux' }}
run: |
if grep -q "Ubuntu 24" /etc/os-release; then
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
fi
shell: bash
- uses: ./.github/actions/run-test
with:
browsers-to-install: chromium
command: npm run etest
bot-name: "electron-${{ matrix.os }}"
flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
env:
ELECTRON_SKIP_BINARY_DOWNLOAD:

View file

@ -22,133 +22,183 @@ concurrency:
env: env:
# Force terminal colors. @see https://www.npmjs.com/package/colors # Force terminal colors. @see https://www.npmjs.com/package/colors
FORCE_COLOR: 1 FORCE_COLOR: 1
FLAKINESS_CONNECTION_STRING: ${{ secrets.FLAKINESS_CONNECTION_STRING }} ELECTRON_SKIP_BINARY_DOWNLOAD: 1
jobs: jobs:
test_linux: test_linux:
name: ${{ matrix.os }} (${{ matrix.browser }} - Node.js ${{ matrix.node-version }}) name: ${{ matrix.os }} (${{ matrix.browser }} - Node.js ${{ matrix.node-version }})
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
browser: [chromium, firefox, webkit] browser: [chromium, firefox, webkit]
os: [ubuntu-22.04] os: [ubuntu-22.04]
node-version: [14] node-version: [18]
include: include:
- os: ubuntu-22.04 - os: ubuntu-22.04
node-version: 16 node-version: 20
browser: chromium browser: chromium
- os: ubuntu-22.04 - os: ubuntu-22.04
node-version: 18 node-version: 22
browser: chromium browser: chromium
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
permissions:
id-token: write # This is required for OIDC login (azure/login) to succeed
contents: read # This is required for actions/checkout to succeed
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: ./.github/actions/run-test
with: with:
node-version: ${{ matrix.node-version }} node-version: ${{ matrix.node-version }}
- run: npm i -g npm@8 browsers-to-install: ${{ matrix.browser }} chromium
- run: npm ci command: npm run test -- --project=${{ matrix.browser }}-*
env: bot-name: "${{ matrix.browser }}-${{ matrix.os }}-node${{ matrix.node-version }}"
DEBUG: pw:install flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- run: npm run build flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- run: npx playwright install --with-deps ${{ matrix.browser }} chromium
- run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run test -- --project=${{ matrix.browser }}
- run: node tests/config/checkCoverage.js ${{ matrix.browser }}
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: always()
with:
name: ${{ matrix.browser }}-${{ matrix.os }}-test-results
path: test-results
test_linux_chromium_tot: test_linux_chromium_tot:
name: ${{ matrix.os }} (chromium tip-of-tree) name: ${{ matrix.os }} (chromium tip-of-tree)
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ubuntu-20.04] os: [ubuntu-20.04]
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
permissions:
id-token: write # This is required for OIDC login (azure/login) to succeed
contents: read # This is required for actions/checkout to succeed
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: ./.github/actions/run-test
with: with:
node-version: 16 browsers-to-install: chromium-tip-of-tree
- run: npm i -g npm@8 command: npm run test -- --project=chromium-*
- run: npm ci bot-name: "${{ matrix.os }}-chromium-tip-of-tree"
env: flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
DEBUG: pw:install flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- run: npm run build
- run: npx playwright install --with-deps chromium-tip-of-tree
- run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run test -- --project=chromium
env: env:
PWTEST_CHANNEL: chromium-tip-of-tree PWTEST_CHANNEL: chromium-tip-of-tree
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: always()
with:
name: ${{ matrix.browser }}-chromium-tip-of-tree-test-results
path: test-results
test_test_runner: test_test_runner:
name: Test Runner name: Test Runner
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ubuntu-latest, windows-latest, macos-latest] os: [ubuntu-latest, windows-latest, macos-latest]
node-version: [16] node-version: [18]
shardIndex: [1, 2]
shardTotal: [2]
include: include:
- os: ubuntu-latest - os: ubuntu-latest
node-version: 14 node-version: 20
shardIndex: 1
shardTotal: 2
- os: ubuntu-latest - os: ubuntu-latest
node-version: 18 node-version: 20
shardIndex: 2
shardTotal: 2
- os: ubuntu-latest
node-version: 22
shardIndex: 1
shardTotal: 2
- os: ubuntu-latest
node-version: 22
shardIndex: 2
shardTotal: 2
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
permissions:
id-token: write # This is required for OIDC login (azure/login) to succeed
contents: read # This is required for actions/checkout to succeed
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: ./.github/actions/run-test
with: with:
node-version: ${{matrix.node-version}} node-version: ${{matrix.node-version}}
- run: npm i -g npm@8 command: npm run ttest -- --shard ${{ matrix.shardIndex }}/${{ matrix.shardTotal }}
- run: npm ci bot-name: "${{ matrix.os }}-node${{ matrix.node-version }}-${{ matrix.shardIndex }}"
flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
env: env:
DEBUG: pw:install PWTEST_CHANNEL: firefox-beta
- run: npm run build
- run: npx playwright install --with-deps
- run: npm run ttest
if: matrix.os != 'ubuntu-latest'
- run: xvfb-run npm run ttest
if: matrix.os == 'ubuntu-latest'
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
test_web_components: test_web_components:
name: Web Components name: Web Components
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: actions/setup-node@v4
with: with:
# Component tests require Node.js 16+ (they require ESM via TS) node-version: 18
node-version: 16
- run: npm i -g npm@8
- run: npm ci - run: npm ci
env: env:
DEBUG: pw:install DEBUG: pw:install
- run: npm run build - run: npm run build
- run: npx playwright install --with-deps - run: npx playwright install --with-deps
- run: npm run test-html-reporter - run: npm run test-html-reporter
- run: npm run test-web env:
if: always() PWTEST_BOT_NAME: "web-components-html-reporter"
- name: Upload blob report
if: ${{ !cancelled() }}
uses: ./.github/actions/upload-blob-report
with:
report_dir: packages/html-reporter/blob-report
job_name: "web-components-html-reporter"
test-package-installations: - run: npm run test-web
name: "Installation Test ${{ matrix.os }} (${{ matrix.node_version }})" if: ${{ !cancelled() }}
runs-on: ${{ matrix.os }} env:
PWTEST_BOT_NAME: "web-components-web"
- name: Upload blob report
if: ${{ !cancelled() }}
uses: ./.github/actions/upload-blob-report
with:
report_dir: packages/web/blob-report
job_name: "web-components-web"
test_vscode_extension:
name: VSCode Extension
runs-on: ubuntu-latest
env:
PWTEST_BOT_NAME: "vscode-extension"
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
- run: npm ci
env:
DEBUG: pw:install
- run: npm run build
- run: npx playwright install chromium
- name: Checkout extension
run: git clone https://github.com/microsoft/playwright-vscode.git
- name: Print extension revision
run: git rev-parse HEAD
working-directory: ./playwright-vscode
- name: Remove @playwright/test from extension dependencies
run: node -e "const p = require('./package.json'); delete p.devDependencies['@playwright/test']; fs.writeFileSync('./package.json', JSON.stringify(p, null, 2));"
working-directory: ./playwright-vscode
- name: Build extension
run: npm install && npm run build
working-directory: ./playwright-vscode
- name: Run extension tests
run: npm run test -- --workers=1
working-directory: ./playwright-vscode
- name: Upload blob report
if: ${{ !cancelled() }}
uses: ./.github/actions/upload-blob-report
with:
report_dir: playwright-vscode/blob-report
job_name: ${{ env.PWTEST_BOT_NAME }}
test_package_installations:
name: "Installation Test ${{ matrix.os }}"
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
@ -156,25 +206,27 @@ jobs:
- ubuntu-latest - ubuntu-latest
- macos-latest - macos-latest
- windows-latest - windows-latest
node_version: runs-on: ${{ matrix.os }}
- "^14.1.0" # pre 14.1, zip extraction was broken (https://github.com/microsoft/playwright/issues/1988)
timeout-minutes: 30 timeout-minutes: 30
permissions:
id-token: write # This is required for OIDC login (azure/login) to succeed
contents: read # This is required for actions/checkout to succeed
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - run: npm install -g yarn@1
with: - run: npm install -g pnpm@8
node-version: ${{ matrix.node_version }} - name: Setup Ubuntu Binary Installation # TODO: Remove when https://github.com/electron/electron/issues/42510 is fixed
- run: npm i -g npm@8 if: ${{ runner.os == 'Linux' }}
- run: npm ci run: |
env: if grep -q "Ubuntu 24" /etc/os-release; then
DEBUG: pw:install sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
- run: npm run build fi
- run: npx playwright install-deps
- run: npm run itest
if: matrix.os != 'ubuntu-latest'
- run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run itest
if: matrix.os == 'ubuntu-latest'
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash shell: bash
- uses: ./.github/actions/run-test
with:
command: npm run itest
bot-name: "package-installations-${{ matrix.os }}"
shell: ${{ matrix.os == 'windows-latest' && 'pwsh' || 'bash' }}
flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}

View file

@ -17,197 +17,162 @@ on:
env: env:
# Force terminal colors. @see https://www.npmjs.com/package/colors # Force terminal colors. @see https://www.npmjs.com/package/colors
FORCE_COLOR: 1 FORCE_COLOR: 1
FLAKINESS_CONNECTION_STRING: ${{ secrets.FLAKINESS_CONNECTION_STRING }} ELECTRON_SKIP_BINARY_DOWNLOAD: 1
permissions:
id-token: write # This is required for OIDC login (azure/login) to succeed
contents: read # This is required for actions/checkout to succeed
jobs: jobs:
test_linux: test_linux:
name: ${{ matrix.os }} (${{ matrix.browser }}) name: ${{ matrix.os }} (${{ matrix.browser }})
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
browser: [chromium, firefox, webkit] browser: [chromium, firefox, webkit]
os: [ubuntu-20.04, ubuntu-22.04] os: [ubuntu-20.04, ubuntu-24.04]
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: ./.github/actions/run-test
with: with:
node-version: 16 browsers-to-install: ${{ matrix.browser }} chromium
- run: npm i -g npm@8 command: npm run test -- --project=${{ matrix.browser }}-*
- run: npm ci bot-name: "${{ matrix.browser }}-${{ matrix.os }}"
env: flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
DEBUG: pw:install flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- run: npm run build
- run: npx playwright install --with-deps ${{ matrix.browser }} chromium
- run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run test -- --project=${{ matrix.browser }}
- run: node tests/config/checkCoverage.js ${{ matrix.browser }}
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: always()
with:
name: ${{ matrix.browser }}-${{ matrix.os }}-test-results
path: test-results
test_mac: test_mac:
name: ${{ matrix.os }} (${{ matrix.browser }}) name: ${{ matrix.os }} (${{ matrix.browser }})
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [macos-11, macos-12] # Intel: *-large
# Arm64: *-xlarge
os: [macos-13-large, macos-13-xlarge, macos-14-large, macos-14-xlarge]
browser: [chromium, firefox, webkit] browser: [chromium, firefox, webkit]
include:
- os: macos-15-large
browser: webkit
- os: macos-15-xlarge
browser: webkit
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: ./.github/actions/run-test
with: with:
node-version: 16 browsers-to-install: ${{ matrix.browser }} chromium
- run: npm i -g npm@8 command: npm run test -- --project=${{ matrix.browser }}-*
- run: npm ci bot-name: "${{ matrix.browser }}-${{ matrix.os }}"
env: flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
DEBUG: pw:install flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- run: npm run build
- run: npx playwright install --with-deps ${{ matrix.browser }} chromium
- run: npm run test -- --project=${{ matrix.browser }}
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: ${{ matrix.browser }}-${{ matrix.os }}-test-results
path: test-results
test_win: test_win:
name: "Windows" name: "Windows"
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
browser: [chromium, firefox, webkit] browser: [chromium, firefox, webkit]
runs-on: windows-latest runs-on: windows-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: ./.github/actions/run-test
with: with:
node-version: 16 browsers-to-install: ${{ matrix.browser }} chromium
- run: npm i -g npm@8 command: npm run test -- --project=${{ matrix.browser }}-* ${{ matrix.browser == 'firefox' && '--workers 1' || '' }}
- run: npm ci bot-name: "${{ matrix.browser }}-windows-latest"
env: flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
DEBUG: pw:install flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- run: npm run build
- run: npx playwright install --with-deps ${{ matrix.browser }} chromium
- run: npm run test -- --project=${{ matrix.browser }}
shell: bash
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: ${{ matrix.browser }}-win-test-results
path: test-results
test-package-installations-other-node-versions: test-package-installations-other-node-versions:
name: "Installation Test ${{ matrix.os }} (${{ matrix.node_version }})" name: "Installation Test ${{ matrix.os }} (${{ matrix.node_version }})"
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
include: include:
- os: ubuntu-latest - os: ubuntu-latest
node_version: "^18.0.0" node_version: 20
- os: ubuntu-latest - os: ubuntu-latest
node_version: "^16.0.0" node_version: 22
timeout-minutes: 30 timeout-minutes: 30
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - run: npm install -g yarn@1
- run: npm install -g pnpm@8
- name: Setup Ubuntu Binary Installation # TODO: Remove when https://github.com/electron/electron/issues/42510 is fixed
if: ${{ runner.os == 'Linux' }}
run: |
if grep -q "Ubuntu 24" /etc/os-release; then
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
fi
shell: bash
- uses: ./.github/actions/run-test
with: with:
node-version: ${{ matrix.node_version }} node-version: ${{ matrix.node_version }}
- run: npm i -g npm@8 command: npm run itest
- run: npm ci bot-name: "package-installations-${{ matrix.os }}-node${{ matrix.node_version }}"
env: flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
DEBUG: pw:install flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- run: npm run build flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- run: npx playwright install-deps
- run: npm run itest
if: matrix.os != 'ubuntu-latest'
- run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run itest
if: matrix.os == 'ubuntu-latest'
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
headed_tests: headed_tests:
name: "headed ${{ matrix.browser }} (${{ matrix.os }})" name: "headed ${{ matrix.browser }} (${{ matrix.os }})"
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
browser: [chromium, firefox, webkit] browser: [chromium, firefox, webkit]
os: [ubuntu-20.04, ubuntu-22.04, macos-latest, windows-latest] os: [ubuntu-24.04, macos-14-xlarge, windows-latest]
include:
# We have different binaries per Ubuntu version for WebKit.
- browser: webkit
os: ubuntu-20.04
- browser: webkit
os: ubuntu-22.04
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: ./.github/actions/run-test
with: with:
node-version: 16 browsers-to-install: ${{ matrix.browser }} chromium
- run: npm i -g npm@8 command: npm run test -- --project=${{ matrix.browser }}-* --headed
- run: npm ci bot-name: "${{ matrix.browser }}-headed-${{ matrix.os }}"
env: flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
DEBUG: pw:install flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- run: npm run build
- run: npx playwright install --with-deps ${{ matrix.browser }} chromium
- run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run test -- --project=${{ matrix.browser }} --headed
if: always() && startsWith(matrix.os, 'ubuntu-')
- run: npm run test -- --project=${{ matrix.browser }} --headed
if: always() && !startsWith(matrix.os, 'ubuntu-')
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: always() && startsWith(matrix.os, 'ubuntu-')
with:
name: headful-${{ matrix.browser }}-linux-test-results
path: test-results
transport_linux: transport_linux:
name: "Transport" name: "Transport"
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
mode: [driver, service] mode: [driver, service]
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: ./.github/actions/run-test
with: with:
node-version: 16 browsers-to-install: chromium
- run: npm i -g npm@8 command: npm run ctest
- run: npm ci bot-name: "${{ matrix.mode }}"
env: flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
DEBUG: pw:install flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- run: npm run build
- run: npx playwright install --with-deps chromium
- run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run ctest
env: env:
PWTEST_MODE: ${{ matrix.mode }} PWTEST_MODE: ${{ matrix.mode }}
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: mode-${{ matrix.mode }}-linux-test-results
path: test-results
tracing_linux: tracing_linux:
name: Tracing ${{ matrix.browser }} ${{ matrix.channel }} name: Tracing ${{ matrix.browser }} ${{ matrix.channel }}
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
@ -219,581 +184,137 @@ jobs:
channel: chromium-tip-of-tree channel: chromium-tip-of-tree
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: ./.github/actions/run-test
with: with:
node-version: 16 browsers-to-install: ${{ matrix.browser }} chromium ${{ matrix.channel }}
- run: npm i -g npm@8 command: npm run test -- --project=${{ matrix.browser }}-*
- run: npm ci bot-name: "tracing-${{ matrix.channel || matrix.browser }}"
env: flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
DEBUG: pw:install flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- run: npm run build
- run: npx playwright install --with-deps ${{ matrix.browser }} chromium ${{ matrix.channel }}
- run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run test -- --project=${{ matrix.browser }}
env: env:
PWTEST_TRACE: 1 PWTEST_TRACE: 1
PWTEST_CHANNEL: ${{ matrix.channel }} PWTEST_CHANNEL: ${{ matrix.channel }}
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
chrome_stable_linux: test_chromium_channels:
name: "Chrome Stable (Linux)" name: Test ${{ matrix.channel }} on ${{ matrix.runs-on }}
runs-on: ubuntu-20.04 environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
runs-on: ${{ matrix.runs-on }}
strategy:
fail-fast: false
matrix:
channel: [chrome, chrome-beta, msedge, msedge-beta, msedge-dev]
runs-on: [ubuntu-20.04, macos-latest, windows-latest]
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: ./.github/actions/run-test
with: with:
node-version: 16 browsers-to-install: ${{ matrix.channel }}
- run: npm i -g npm@8 command: npm run ctest
- run: npm ci bot-name: ${{ matrix.channel }}-${{ matrix.runs-on }}
flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
env: env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 PWTEST_CHANNEL: ${{ matrix.channel }}
- run: npm run build
- run: npx playwright install --with-deps chrome
- run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run ctest
env:
PWTEST_CHANNEL: chrome
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: chrome-stable-linux-test-results
path: test-results
chrome_stable_win:
name: "Chrome Stable (Win)"
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm i -g npm@8
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- run: npx playwright install --with-deps chrome
- run: npm run ctest
shell: bash
env:
PWTEST_CHANNEL: chrome
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: chrome-stable-win-test-results
path: test-results
chrome_stable_mac:
name: "Chrome Stable (Mac)"
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm i -g npm@8
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- run: npx playwright install --with-deps chrome
- run: npm run ctest
env:
PWTEST_CHANNEL: chrome
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: chrome-stable-mac-test-results
path: test-results
chromium_tot: chromium_tot:
name: Chromium TOT ${{ matrix.os }} name: Chromium tip-of-tree ${{ matrix.os }}${{ matrix.headed }}
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ubuntu-20.04, macos-12, windows-latest] os: [ubuntu-20.04, macos-13, windows-latest]
headed: ['--headed', '']
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: ./.github/actions/run-test
with: with:
node-version: 16 browsers-to-install: chromium-tip-of-tree
- run: npm i -g npm@8 command: npm run ctest -- ${{ matrix.headed }}
- run: npm ci bot-name: "chromium-tip-of-tree-${{ matrix.os }}${{ matrix.headed }}"
env: flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- run: npm run build flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- run: npx playwright install --with-deps chromium-tip-of-tree
- run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run ctest
if: matrix.os == 'ubuntu-20.04'
env: env:
PWTEST_CHANNEL: chromium-tip-of-tree PWTEST_CHANNEL: chromium-tip-of-tree
- run: npm run ctest
if: matrix.os != 'ubuntu-20.04'
env:
PWTEST_CHANNEL: chromium-tip-of-tree
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: always()
with:
name: chromium-tot-${{ matrix.os }}-test-results
path: test-results
chromium_tot_headed: chromium_tot_headless_shell:
name: Chromium TOT headed ${{ matrix.os }} name: Chromium tip-of-tree headless-shell-${{ matrix.os }}
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ubuntu-latest, macos-latest, windows-latest] os: [ubuntu-20.04]
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: ./.github/actions/run-test
with: with:
node-version: 16 browsers-to-install: chromium-tip-of-tree-headless-shell
- run: npm i -g npm@8 command: npm run ctest
- run: npm ci bot-name: "chromium-tip-of-tree-headless-shell-${{ matrix.os }}"
flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
env: env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 PWTEST_CHANNEL: chromium-tip-of-tree-headless-shell
- run: npm run build
- run: npx playwright install --with-deps chromium-tip-of-tree
- run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run ctest -- --headed
if: matrix.os == 'ubuntu-latest'
env:
PWTEST_CHANNEL: chromium-tip-of-tree
- run: npm run ctest -- --headed
if: matrix.os != 'ubuntu-latest'
env:
PWTEST_CHANNEL: chromium-tip-of-tree
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: always()
with:
name: chromium-tot-headed-${{ matrix.os }}-test-results
path: test-results
firefox_beta_linux: firefox_beta:
name: "Firefox Beta (Linux)" name: Firefox Beta ${{ matrix.os }}
runs-on: ubuntu-20.04 environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-20.04, windows-latest, macos-latest]
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: ./.github/actions/run-test
with: with:
node-version: 16 browsers-to-install: firefox-beta chromium
- run: npm i -g npm@8 command: npm run ftest
- run: npm ci bot-name: "firefox-beta-${{ matrix.os }}"
env: flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
- run: npm run build flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- run: npx playwright install --with-deps firefox-beta chromium
- run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run ftest
env: env:
PWTEST_CHANNEL: firefox-beta PWTEST_CHANNEL: firefox-beta
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: firefox-beta-linux-test-results
path: test-results
firefox_beta_win:
name: "Firefox Beta (Win)"
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm i -g npm@8
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- run: npx playwright install --with-deps firefox-beta chromium
- run: npm run ftest
shell: bash
env:
PWTEST_CHANNEL: firefox-beta
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: firefox-beta-win-test-results
path: test-results
firefox_beta_mac:
name: "Firefox Beta (Mac)"
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm i -g npm@8
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- run: npx playwright install --with-deps firefox-beta chromium
- run: npm run ftest
env:
PWTEST_CHANNEL: firefox-beta
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: firefox-beta-mac-test-results
path: test-results
edge_stable_mac:
name: "Edge Stable (Mac)"
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm i -g npm@8
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- run: npx playwright install --with-deps msedge
- run: npm run ctest
env:
PWTEST_CHANNEL: msedge
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: msedge-stable-mac-test-results
path: test-results
edge_stable_win:
name: "Edge Stable (Win)"
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm i -g npm@8
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- run: npx playwright install --with-deps msedge
- run: npm run ctest
shell: bash
env:
PWTEST_CHANNEL: msedge
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: edge-stable-win-test-results
path: test-results
edge_stable_linux:
name: "Edge Stable (Linux)"
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm i -g npm@8
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- run: npx playwright install --with-deps msedge
- run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run ctest
env:
PWTEST_CHANNEL: msedge
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: edge-stable-linux-test-results
path: test-results
edge_beta_mac:
name: "Edge Beta (Mac)"
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm i -g npm@8
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- run: npx playwright install --with-deps msedge-beta
- run: npm run ctest
env:
PWTEST_CHANNEL: msedge-beta
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: msedge-beta-mac-test-results
path: test-results
edge_beta_win:
name: "Edge Beta (Win)"
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm i -g npm@8
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- run: npx playwright install --with-deps msedge-beta
- run: npm run ctest
shell: bash
env:
PWTEST_CHANNEL: msedge-beta
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: edge-beta-win-test-results
path: test-results
edge_beta_linux:
name: "Edge Beta (Linux)"
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm i -g npm@8
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- run: npx playwright install --with-deps msedge-beta
- run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run ctest
env:
PWTEST_CHANNEL: msedge-beta
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: edge-beta-linux-test-results
path: test-results
edge_dev_mac:
name: "Edge Dev (Mac)"
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm i -g npm@8
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- run: npx playwright install --with-deps msedge-dev
- run: npm run ctest
env:
PWTEST_CHANNEL: msedge-dev
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: msedge-dev-mac-test-results
path: test-results
edge_dev_win:
name: "Edge Dev (Win)"
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm i -g npm@8
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- run: npx playwright install --with-deps msedge-dev
- run: npm run ctest
shell: bash
env:
PWTEST_CHANNEL: msedge-dev
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: edge-dev-win-test-results
path: test-results
edge_dev_linux:
name: "Edge Dev (Linux)"
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm i -g npm@8
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- run: npx playwright install --with-deps msedge-dev
- run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run ctest
env:
PWTEST_CHANNEL: msedge-dev
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: edge-dev-linux-test-results
path: test-results
chrome_beta_linux:
name: "Chrome Beta (Linux)"
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm i -g npm@8
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- run: npx playwright install --with-deps chrome-beta
- run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run ctest
env:
PWTEST_CHANNEL: chrome-beta
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: chrome-beta-linux-test-results
path: test-results
chrome_beta_win:
name: "Chrome Beta (Win)"
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm i -g npm@8
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- run: npx playwright install --with-deps chrome-beta
- run: npm run ctest
shell: bash
env:
PWTEST_CHANNEL: chrome-beta
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: chrome-beta-win-test-results
path: test-results
chrome_beta_mac:
name: "Chrome Beta (Mac)"
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm i -g npm@8
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- run: npx playwright install --with-deps chrome-beta
- run: npm run ctest
env:
PWTEST_CHANNEL: chrome-beta
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: chrome-beta-mac-test-results
path: test-results
build-playwright-driver: build-playwright-driver:
name: "build-playwright-driver" name: "build-playwright-driver"
runs-on: ubuntu-20.04 runs-on: ubuntu-24.04
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: actions/setup-node@v4
with: with:
node-version: 16 node-version: 18
- run: npm i -g npm@8
- run: npm ci - run: npm ci
- run: npm run build - run: npm run build
- run: npx playwright install-deps - run: npx playwright install-deps
- run: utils/build/build-playwright-driver.sh - run: utils/build/build-playwright-driver.sh
test_channel_chromium:
name: Test channel=chromium
environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }}
strategy:
fail-fast: false
matrix:
runs-on: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.runs-on }}
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/run-test
with:
# TODO: this should pass --no-shell.
# However, codegen tests do not inherit the channel and try to launch headless shell.
browsers-to-install: chromium
command: npm run ctest
bot-name: "channel-chromium-${{ matrix.runs-on }}"
flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
env:
PWTEST_CHANNEL: chromium

70
.github/workflows/tests_service.yml vendored Normal file
View file

@ -0,0 +1,70 @@
name: "tests service"
on:
workflow_dispatch:
env:
FORCE_COLOR: 1
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
jobs:
test:
name: "Service"
strategy:
fail-fast: false
matrix:
service-os: [linux, windows]
browser: [chromium, firefox, webkit]
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run test -- --project=${{ matrix.browser }}-* --workers=10 --retries=0
env:
PWTEST_MODE: service2
PWTEST_TRACE: 1
PWTEST_BOT_NAME: "${{ matrix.browser }}-${{ matrix.service-os }}-service"
PLAYWRIGHT_SERVICE_ACCESS_KEY: ${{ secrets.PLAYWRIGHT_SERVICE_ACCESS_KEY }}
PLAYWRIGHT_SERVICE_URL: ${{ secrets.PLAYWRIGHT_SERVICE_URL }}
PLAYWRIGHT_SERVICE_OS: ${{ matrix.service-os }}
PLAYWRIGHT_SERVICE_RUN_ID: ${{ github.run_id }}-${{ github.run_attempt }}-${{ github.sha }}
- name: Upload blob report to GitHub
if: ${{ !cancelled() }}
uses: actions/upload-artifact@v4
with:
name: all-blob-reports
path: blob-report
retention-days: 2
merge_reports:
name: "Merge reports"
needs: [test]
if: ${{ !cancelled() }}
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- name: Download blob report artifact
uses: actions/download-artifact@v4
with:
name: all-blob-reports
path: all-blob-reports
- run: npx playwright merge-reports --reporter markdown,html ./all-blob-reports
- name: Upload HTML report to Azure
run: |
REPORT_DIR='run-service-${{ github.run_id }}-${{ github.run_attempt }}-${{ github.sha }}'
azcopy cp --recursive "./playwright-report/*" "https://mspwblobreport.blob.core.windows.net/\$web/$REPORT_DIR"
echo "Report url: https://mspwblobreport.z1.web.core.windows.net/$REPORT_DIR/index.html#?q=s:failed"
env:
AZCOPY_AUTO_LOGIN_TYPE: SPN
AZCOPY_SPA_APPLICATION_ID: '${{ secrets.AZCOPY_SPA_APPLICATION_ID }}'
AZCOPY_SPA_CLIENT_SECRET: '${{ secrets.AZCOPY_SPA_CLIENT_SECRET }}'
AZCOPY_TENANT_ID: '${{ secrets.AZCOPY_TENANT_ID }}'

View file

@ -1,46 +0,0 @@
name: "stress"
on:
push:
branches:
- main
- release-*
pull_request:
paths-ignore:
- 'browser_patches/**'
- 'docs/**'
types: [ labeled ]
branches:
- main
- release-*
env:
FORCE_COLOR: 1
jobs:
test_components:
name: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- run: npm i -g npm@8
- run: npm ci
- run: npm run build
- run: npx playwright install --with-deps
- run: npm run stest contexts -- --project=chromium
if: always()
- run: npm run stest browsers -- --project=chromium
if: always()
- run: npm run stest contexts -- --project=webkit
if: always()
- run: npm run stest browsers -- --project=webkit
if: always()
- run: npm run stest contexts -- --project=firefox
if: always()
- run: npm run stest browsers -- --project=firefox
if: always()

View file

@ -9,37 +9,30 @@ on:
env: env:
# Force terminal colors. @see https://www.npmjs.com/package/colors # Force terminal colors. @see https://www.npmjs.com/package/colors
FORCE_COLOR: 1 FORCE_COLOR: 1
FLAKINESS_CONNECTION_STRING: ${{ secrets.FLAKINESS_CONNECTION_STRING }} ELECTRON_SKIP_BINARY_DOWNLOAD: 1
jobs: jobs:
video_linux: video_linux:
name: "Video Linux" name: "Video Linux"
environment: allow-uploading-flakiness-results
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
browser: [chromium, firefox, webkit] browser: [chromium, firefox, webkit]
os: [ubuntu-20.04, ubuntu-22.04] os: [ubuntu-20.04, ubuntu-22.04]
permissions:
id-token: write # This is required for OIDC login (azure/login) to succeed
contents: read # This is required for actions/checkout to succeed
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: ./.github/actions/run-test
with: with:
node-version: 16 browsers-to-install: ${{ matrix.browser }} chromium
- run: npm i -g npm@8 command: npm run test -- --project=${{ matrix.browser }}-*
- run: npm ci bot-name: "${{ matrix.browser }}-${{ matrix.os }}"
env: flakiness-client-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_CLIENT_ID }}
DEBUG: pw:install flakiness-tenant-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_TENANT_ID }}
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 flakiness-subscription-id: ${{ secrets.AZURE_FLAKINESS_DASHBOARD_SUBSCRIPTION_ID }}
- run: npm run build
- run: npx playwright install --with-deps ${{ matrix.browser }} chromium
- run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run test -- --project=${{ matrix.browser }}
env: env:
PWTEST_VIDEO: 1 PWTEST_VIDEO: 1
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: video-${{ matrix.browser }}-linux-test-results
path: test-results

View file

@ -1,49 +0,0 @@
name: "WebView2 Tests"
on:
push:
branches:
- main
- release-*
pull_request:
paths-ignore:
- 'browser_patches/**'
- 'docs/**'
types: [ labeled ]
branches:
- main
- release-*
env:
# Force terminal colors. @see https://www.npmjs.com/package/colors
FORCE_COLOR: 1
FLAKINESS_CONNECTION_STRING: ${{ secrets.FLAKINESS_CONNECTION_STRING }}
jobs:
test_webview2:
name: WebView2
runs-on: windows-2022
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
- uses: actions/setup-dotnet@v2
with:
dotnet-version: '6.0.x'
- run: npm i -g npm@8
- run: npm ci
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: npm run build
- run: dotnet build
working-directory: tests/webview2/webview2-app/
- run: npm run webview2test
- run: ./utils/upload_flakiness_dashboard.sh ./test-results/report.json
if: always()
shell: bash
- uses: actions/upload-artifact@v1
if: always()
with:
name: webview2-test-results
path: test-results

View file

@ -1,30 +0,0 @@
name: "Trigger: Chromium with Symbols Builds"
on:
workflow_dispatch:
release:
types: [published]
jobs:
trigger:
name: "trigger"
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '16'
- name: Get Chromium revision
id: chromium-version
run: |
REVISION=$(node -e "console.log(require('./packages/playwright-core/browsers.json').browsers.find(b => b.name === 'chromium-with-symbols').revision)")
echo "REVISION=$REVISION" >> $GITHUB_OUTPUT
- run: |
curl -X POST \
-H "Accept: application/vnd.github.v3+json" \
-H "Authorization: token ${GH_TOKEN}" \
--data "{\"event_type\": \"build_chromium_with_symbols\", \"client_payload\": {\"revision\": \"${CHROMIUM_REVISION}\"}}" \
https://api.github.com/repos/microsoft/playwright-browsers/dispatches
env:
GH_TOKEN: ${{ secrets.REPOSITORY_DISPATCH_PERSONAL_ACCESS_TOKEN }}
CHROMIUM_REVISION: ${{ steps.chromium-version.outputs.REVISION }}

View file

@ -9,7 +9,7 @@ on:
jobs: jobs:
trigger: trigger:
name: "trigger" name: "trigger"
runs-on: ubuntu-20.04 runs-on: ubuntu-24.04
steps: steps:
- run: | - run: |
curl -X POST \ curl -X POST \

8
.gitignore vendored
View file

@ -7,9 +7,11 @@ node_modules/
*.swp *.swp
*.pyc *.pyc
.vscode .vscode
.mono
.idea .idea
yarn.lock yarn.lock
/packages/playwright-core/src/generated/* /packages/playwright-core/src/generated
/packages/playwright-ct-core/src/generated
packages/*/lib/ packages/*/lib/
drivers/ drivers/
.android-sdk/ .android-sdk/
@ -18,15 +20,19 @@ nohup.out
.trace .trace
.tmp .tmp
allure* allure*
blob-report
playwright-report playwright-report
test-results test-results
/demo/ /demo/
/packages/*/LICENSE /packages/*/LICENSE
/packages/*/NOTICE /packages/*/NOTICE
/packages/playwright/README.md /packages/playwright/README.md
/packages/playwright-test/README.md
/packages/playwright-core/api.json /packages/playwright-core/api.json
.env .env
/tests/installation/output/ /tests/installation/output/
/tests/installation/.registry.json /tests/installation/.registry.json
.cache/ .cache/
.eslintcache .eslintcache
playwright.env
/firefox/

View file

@ -1,86 +1,87 @@
# Contributing # Contributing
- [How to Contribute](#how-to-contribute) ## Choose an issue
* [Getting Code](#getting-code)
* [Code reviews](#code-reviews)
* [Code Style](#code-style)
* [API guidelines](#api-guidelines)
* [Commit Messages](#commit-messages)
* [Writing Documentation](#writing-documentation)
* [Adding New Dependencies](#adding-new-dependencies)
* [Running & Writing Tests](#running--writing-tests)
* [Public API Coverage](#public-api-coverage)
- [Contributor License Agreement](#contributor-license-agreement)
* [Code of Conduct](#code-of-conduct)
## How to Contribute Playwright **requires an issue** for every contribution, except for minor documentation updates. We strongly recommend to pick an issue labeled `open-to-a-pull-request` for your first contribution to the project.
### Getting Code If you are passioned about a bug/feature, but cannot find an issue describing it, **file an issue first**. This will facilitate the discussion and you might get some early feedback from project maintainers before spending your time on creating a pull request.
Make sure you're running Node.js 14+ and NPM 8+, to verify and upgrade NPM do: ## Make a change
Make sure you're running Node.js 20 or later.
```bash ```bash
node --version node --version
npm --version
npm i -g npm@latest
``` ```
1. Clone this repository Clone the repository. If you plan to send a pull request, it might be better to [fork the repository](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) first.
```bash ```bash
git clone https://github.com/microsoft/playwright git clone https://github.com/microsoft/playwright
cd playwright cd playwright
``` ```
2. Install dependencies Install dependencies and run the build in watch mode.
```bash ```bash
npm ci npm ci
npm run watch
npx playwright install
``` ```
3. Build Playwright **Experimental dev mode with Hot Module Replacement for recorder/trace-viewer/UI Mode**
```
PW_HMR=1 npm run watch
PW_HMR=1 npx playwright show-trace
PW_HMR=1 npm run ctest -- --ui
PW_HMR=1 npx playwright codegen
PW_HMR=1 npx playwright show-report
```
Playwright is a multi-package repository that uses npm workspaces. For browser APIs, look at [`packages/playwright-core`](https://github.com/microsoft/playwright/blob/main/packages/playwright-core). For test runner, see [`packages/playwright`](https://github.com/microsoft/playwright/blob/main/packages/playwright).
Note that some files are generated by the build, so the watch process might override your changes if done in the wrong file. For example, TypeScript types for the API are generated from the [`docs/src`](https://github.com/microsoft/playwright/blob/main/docs/src).
Coding style is fully defined in [.eslintrc](https://github.com/microsoft/playwright/blob/main/.eslintrc.js). Before creating a pull request, or at any moment during development, run linter to check all kinds of things:
```bash ```bash
npm run build npm run lint
``` ```
4. Run all Playwright tests locally. For more information about tests, read [Running & Writing Tests](#running--writing-tests). Comments should have an explicit purpose and should improve readability rather than hinder it. If the code would not be understood without comments, consider re-writing the code to make it self-explanatory.
### Write documentation
Every part of the public API should be documented in [`docs/src`](https://github.com/microsoft/playwright/blob/main/docs/src), in the same change that adds/changes the API. We use markdown files with custom structure to specify the API. Take a look around for an example.
Various other files are generated from the API specification. If you are running `npm run watch`, these will be re-generated automatically.
Larger changes will require updates to the documentation guides as well. This will be made clear during the code review.
## Add a test
Playwright requires a test for almost any new or modified functionality. An exception would be a pure refactoring, but chances are you are doing more than that.
There are multiple [test suites](https://github.com/microsoft/playwright/blob/main/tests) in Playwright that will be executed on the CI. The two most important that you need to run locally are:
- Library tests cover APIs not related to the test runner.
```bash ```bash
npm test # fast path runs all tests in Chromium
npm run ctest
# slow path runs all tests in three browsers
npm run test
``` ```
### Code reviews - Test runner tests.
All submissions, including submissions by project members, require review. We
use GitHub pull requests for this purpose. Consult
[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
information on using pull requests.
### Code Style
- Coding style is fully defined in [.eslintrc](https://github.com/microsoft/playwright/blob/main/.eslintrc.js)
- Comments should be generally avoided. If the code would not be understood without comments, consider re-writing the code to make it self-explanatory.
To run code linter, use:
```bash ```bash
npm run eslint npm run ttest
``` ```
### API guidelines Since Playwright tests are using Playwright under the hood, everything from our documentation applies, for example [this guide on running and debugging tests](https://playwright.dev/docs/running-tests#running-tests).
When authoring new API methods, consider the following: Note that tests should be *hermetic*, and not depend on external services. Tests should work on all three platforms: macOS, Linux and Windows.
- Expose as little information as needed. When in doubt, dont expose new information. ## Write a commit message
- Methods are used in favor of getters/setters.
- The only exception is namespaces, e.g. `page.keyboard` and `page.coverage`
- All string literals must be lowercase. This includes event names and option values.
- Avoid adding "sugar" API (API that is trivially implementable in user-space) unless they're **very** common.
### Commit Messages Commit messages should follow the [Semantic Commit Messages](https://www.conventionalcommits.org/en/v1.0.0/) format:
Commit messages should follow the Semantic Commit Messages format:
``` ```
label(namespace): title label(namespace): title
@ -91,134 +92,57 @@ footer
``` ```
1. *label* is one of the following: 1. *label* is one of the following:
- `fix` - playwright bug fixes. - `fix` - bug fixes
- `feat` - playwright features. - `feat` - new features
- `docs` - changes to docs, e.g. `docs(api.md): ..` to change documentation. - `docs` - documentation-only changes
- `test` - changes to playwright tests infrastructure. - `test` - test-only changes
- `devops` - build-related work, e.g. CI related patches and general changes to the browser build infrastructure - `devops` - changes to the CI or build
- `chore` - everything that doesn't fall under previous categories - `chore` - everything that doesn't fall under previous categories
2. *namespace* is put in parenthesis after label and is optional. Must be lowercase. 1. *namespace* is put in parenthesis after label and is optional. Must be lowercase.
3. *title* is a brief summary of changes. 1. *title* is a brief summary of changes.
4. *description* is **optional**, new-line separated from title and is in present tense. 1. *description* is **optional**, new-line separated from title and is in present tense.
5. *footer* is **optional**, new-line separated from *description* and contains "fixes" / "references" attribution to github issues. 1. *footer* is **optional**, new-line separated from *description* and contains "fixes" / "references" attribution to github issues.
Example: Example:
``` ```
fix(firefox): make sure session cookies work feat(trace viewer): network panel filtering
This patch fixes session cookies in the firefox browser. This patch adds a filtering toolbar to the network panel.
<link to a screenshot>
Fixes #123, fixes #234 Fixes #123, references #234.
``` ```
### Writing Documentation ## Send a pull request
All API classes, methods, and events should have a description in [`docs/src`](https://github.com/microsoft/playwright/blob/main/docs/src). There's a [documentation linter](https://github.com/microsoft/playwright/tree/main/utils/doclint) which makes sure documentation is aligned with the codebase. All submissions, including submissions by project members, require review. We use GitHub pull requests for this purpose. Consult [GitHub Help](https://help.github.com/articles/about-pull-requests/) for more information on using pull requests.
To run the documentation linter, use: After a successful code review, one of the maintainers will merge your pull request. Congratulations!
```bash ## More details
npm run doc
```
To build the documentation site locally and test how your changes will look in practice: **No new dependencies**
1. Clone the [microsoft/playwright.dev](https://github.com/microsoft/playwright.dev) repo There is a very high bar for new dependencies, including updating to a new version of an existing dependency. We recommend to explicitly discuss this in an issue and get a green light from a maintainer, before creating a pull request that updates dependencies.
1. Follow [the playwright.dev README instructions to "roll docs"](https://github.com/microsoft/playwright.dev/#roll-docs) against your local `playwright` repo with your changes in progress
1. Follow [the playwright.dev README instructions to "run dev server"](https://github.com/microsoft/playwright.dev/#run-dev-server) to view your changes
### Adding New Dependencies **Custom browser build**
For all dependencies (both installation and development):
- **Do not add** a dependency if the desired functionality is easily implementable.
- If adding a dependency, it should be well-maintained and trustworthy.
A barrier for introducing new installation dependencies is especially high:
- **Do not add** installation dependency unless it's critical to project success.
### Running & Writing Tests
- Every feature should be accompanied by a test.
- Every public api event/method should be accompanied by a test.
- Tests should be *hermetic*. Tests should not depend on external services.
- Tests should work on all three platforms: Mac, Linux and Win. This is especially important for screenshot tests.
Playwright tests are located in [`tests`](https://github.com/microsoft/playwright/blob/main/tests) and use `@playwright/test` test runner.
These are integration tests, making sure public API methods and events work as expected.
- To run all tests:
```bash
npm run test
```
- To run all tests in Chromium
```bash
npm run ctest # also `ftest` for firefox and `wtest` for WebKit
```
- To run a specific test, substitute `it` with `it.only`, or use the `--grep 'My test'` CLI parameter:
```js
...
// Using "it.only" to run a specific test
it.only('should work', async ({server, page}) => {
const response = await page.goto(server.EMPTY_PAGE);
expect(response.ok).toBe(true);
});
// or
playwright test --config=xxx --grep 'should work'
```
- To disable a specific test, substitute `it` with `it.skip`:
```js
...
// Using "it.skip" to skip a specific test
it.skip('should work', async ({server, page}) => {
const response = await page.goto(server.EMPTY_PAGE);
expect(response.ok).toBe(true);
});
```
- To run tests in non-headless (headed) mode:
```bash
npm run ctest -- --headed
```
- To run tests with custom browser executable, specify `CRPATH`, `WKPATH` or `FFPATH` env variable that points to browser executable:
To run tests with custom browser executable, specify `CRPATH`, `WKPATH` or `FFPATH` env variable that points to browser executable:
```bash ```bash
CRPATH=<path-to-executable> npm run ctest CRPATH=<path-to-executable> npm run ctest
``` ```
- To run tests in slow-mode: You will also find `DEBUG=pw:browser` useful for debugging custom builds.
```bash **Building documentation site**
SLOW_MO=500 npm run wtest -- --headed
```
- When should a test be marked with `skip` or `fail`? The [playwright.dev](https://playwright.dev/) documentation site lives in a separate repository, and documentation from [`docs/src`](https://github.com/microsoft/playwright/blob/main/docs/src) is frequently rolled there.
- **`skip(condition)`**: This test *should ***never*** work* for `condition` Most of the time this should not concern you. However, if you are doing something unusual in the docs, you can build locally and test how your changes will look in practice:
where `condition` is usually a certain browser like `FFOX` (for Firefox), 1. Clone the [microsoft/playwright.dev](https://github.com/microsoft/playwright.dev) repo.
`WEBKIT` (for WebKit), and `CHROMIUM` (for Chromium). 1. Follow [the playwright.dev README instructions to "roll docs"](https://github.com/microsoft/playwright.dev/#roll-docs) against your local `playwright` repo with your changes in progress.
1. Follow [the playwright.dev README instructions to "run dev server"](https://github.com/microsoft/playwright.dev/#run-dev-server) to view your changes.
For example, the [alt-click downloads test](https://github.com/microsoft/playwright/blob/471ccc72d3f0847caa36f629b394a028c7750d93/test/download.spec.js#L86) is marked
with `skip(FFOX)` since an alt-click in Firefox will not produce a download
even if a person was driving the browser.
- **`fail(condition)`**: This test *should ***eventually*** work* for `condition`
where `condition` is usually a certain browser like `FFOX` (for Firefox),
`WEBKIT` (for WebKit), and `CHROMIUM` (for Chromium).
For example, the [alt-click downloads test](https://github.com/microsoft/playwright/blob/471ccc72d3f0847caa36f629b394a028c7750d93/test/download.spec.js#L86) is marked
with `fail(CHROMIUM || WEBKIT)` since Playwright performing these actions
currently diverges from what a user would experience driving a Chromium or
WebKit.
## Contributor License Agreement ## Contributor License Agreement

35
FILING_ISSUES.md Normal file
View file

@ -0,0 +1,35 @@
# How to File a Bug Report That Actually Gets Resolved
Make sure youre on the latest Playwright release before filing. Check existing GitHub issues to avoid duplicates.
## Use the Template
Follow the **Bug Report** template. It guides you step-by-step:
- Fill it out thoroughly.
- Clearly list the steps needed to reproduce the bug.
- Provide what you expected to see versus what happened in reality.
- Include system info from `npx envinfo --preset playwright`.
## Keep Your Repro Minimal
We can't parse your entire code base. Reduce it down to the absolute essentials:
- Start a fresh project (`npm init playwright@latest new-project`).
- Add only the code/DOM needed to show the problem.
- Only use major frameworks if necessary (React, Angular, static HTTP server, etc.).
- Avoid adding extra libraries unless absolutely necessary. Note that we won't install any suspect dependencies.
## Why This Matters
- Most issues that lack a repro turn out to be misconfigurations or usage errors.
- We can't fix problems if we cant reproduce them ourselves.
- We cant debug entire private projects or handle sensitive credentials.
- Each confirmed bug will have a test in our repo, so your repro must be as clean as possible.
## More Help
- [Stack Overflows Minimal Reproducible Example Guide](https://stackoverflow.com/help/minimal-reproducible-example)
- [Playwright Debugging Tools](https://playwright.dev/docs/debug)
## Bottom Line
A well-isolated bug speeds up verification and resolution. Minimal, public repro or its unlikely we can assist.

View file

@ -1,6 +1,6 @@
# 🎭 Playwright # 🎭 Playwright
[![npm version](https://img.shields.io/npm/v/playwright.svg)](https://www.npmjs.com/package/playwright) <!-- GEN:chromium-version-badge -->[![Chromium version](https://img.shields.io/badge/chromium-111.0.5563.19-blue.svg?logo=google-chrome)](https://www.chromium.org/Home)<!-- GEN:stop --> <!-- GEN:firefox-version-badge -->[![Firefox version](https://img.shields.io/badge/firefox-109.0-blue.svg?logo=firefoxbrowser)](https://www.mozilla.org/en-US/firefox/new/)<!-- GEN:stop --> <!-- GEN:webkit-version-badge -->[![WebKit version](https://img.shields.io/badge/webkit-16.4-blue.svg?logo=safari)](https://webkit.org/)<!-- GEN:stop --> [![npm version](https://img.shields.io/npm/v/playwright.svg)](https://www.npmjs.com/package/playwright) <!-- GEN:chromium-version-badge -->[![Chromium version](https://img.shields.io/badge/chromium-134.0.6998.35-blue.svg?logo=google-chrome)](https://www.chromium.org/Home)<!-- GEN:stop --> <!-- GEN:firefox-version-badge -->[![Firefox version](https://img.shields.io/badge/firefox-135.0-blue.svg?logo=firefoxbrowser)](https://www.mozilla.org/en-US/firefox/new/)<!-- GEN:stop --> <!-- GEN:webkit-version-badge -->[![WebKit version](https://img.shields.io/badge/webkit-18.2-blue.svg?logo=safari)](https://webkit.org/)<!-- GEN:stop --> [![Join Discord](https://img.shields.io/badge/join-discord-infomational)](https://aka.ms/playwright/discord)
## [Documentation](https://playwright.dev) | [API reference](https://playwright.dev/docs/api/class-playwright) ## [Documentation](https://playwright.dev) | [API reference](https://playwright.dev/docs/api/class-playwright)
@ -8,11 +8,11 @@ Playwright is a framework for Web Testing and Automation. It allows testing [Chr
| | Linux | macOS | Windows | | | Linux | macOS | Windows |
| :--- | :---: | :---: | :---: | | :--- | :---: | :---: | :---: |
| Chromium <!-- GEN:chromium-version -->111.0.5563.19<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: | | Chromium <!-- GEN:chromium-version -->134.0.6998.35<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| WebKit <!-- GEN:webkit-version -->16.4<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: | | WebKit <!-- GEN:webkit-version -->18.2<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Firefox <!-- GEN:firefox-version -->109.0<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: | | Firefox <!-- GEN:firefox-version -->135.0<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: |
Headless execution is supported for all browsers on all platforms. Check out [system requirements](https://playwright.dev/docs/troubleshooting#system-requirements) for details. Headless execution is supported for all browsers on all platforms. Check out [system requirements](https://playwright.dev/docs/intro#system-requirements) for details.
Looking for Playwright for [Python](https://playwright.dev/python/docs/intro), [.NET](https://playwright.dev/dotnet/docs/intro), or [Java](https://playwright.dev/java/docs/intro)? Looking for Playwright for [Python](https://playwright.dev/python/docs/intro), [.NET](https://playwright.dev/dotnet/docs/intro), or [Java](https://playwright.dev/java/docs/intro)?
@ -46,7 +46,6 @@ npx playwright install
You can optionally install only selected browsers, see [install browsers](https://playwright.dev/docs/cli#install-browsers) for more details. Or you can install no browsers at all and use existing [browser channels](https://playwright.dev/docs/browsers). You can optionally install only selected browsers, see [install browsers](https://playwright.dev/docs/cli#install-browsers) for more details. Or you can install no browsers at all and use existing [browser channels](https://playwright.dev/docs/browsers).
* [Getting started](https://playwright.dev/docs/intro) * [Getting started](https://playwright.dev/docs/intro)
* [Installation configuration](https://playwright.dev/docs/installation)
* [API reference](https://playwright.dev/docs/api/class-playwright) * [API reference](https://playwright.dev/docs/api/class-playwright)
## Capabilities ## Capabilities
@ -91,13 +90,13 @@ To learn how to run these Playwright Test examples, check out our [getting start
#### Page screenshot #### Page screenshot
This code snippet navigates to whatsmyuseragent.org and saves a screenshot. This code snippet navigates to Playwright homepage and saves a screenshot.
```TypeScript ```TypeScript
import { test } from '@playwright/test'; import { test } from '@playwright/test';
test('Page Screenshot', async ({ page }) => { test('Page Screenshot', async ({ page }) => {
await page.goto('http://whatsmyuseragent.org/'); await page.goto('https://playwright.dev/');
await page.screenshot({ path: `example.png` }); await page.screenshot({ path: `example.png` });
}); });
``` ```
@ -118,7 +117,7 @@ test.use({
test('Mobile and geolocation', async ({ page }) => { test('Mobile and geolocation', async ({ page }) => {
await page.goto('https://maps.google.com'); await page.goto('https://maps.google.com');
await page.locator('text="Your location"').click(); await page.getByText('Your location').click();
await page.waitForRequest(/.*preview\/pwa/); await page.waitForRequest(/.*preview\/pwa/);
await page.screenshot({ path: 'colosseum-iphone.png' }); await page.screenshot({ path: 'colosseum-iphone.png' });
}); });
@ -163,7 +162,7 @@ test('Intercept network requests', async ({ page }) => {
## Resources ## Resources
* [Documentation](https://playwright.dev/docs/intro) * [Documentation](https://playwright.dev)
* [API reference](https://playwright.dev/docs/api/class-playwright/) * [API reference](https://playwright.dev/docs/api/class-playwright/)
* [Contribution guide](CONTRIBUTING.md) * [Contribution guide](CONTRIBUTING.md)
* [Changelog](https://github.com/microsoft/playwright/releases) * [Changelog](https://github.com/microsoft/playwright/releases)

View file

@ -1,18 +1,18 @@
<!-- BEGIN MICROSOFT SECURITY.MD V0.0.3 BLOCK --> <!-- BEGIN MICROSOFT SECURITY.MD V0.0.9 BLOCK -->
## Security ## Security
Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet) and [Xamarin](https://github.com/xamarin).
If you believe you have found a security vulnerability in any Microsoft-owned repository that meets Microsoft's [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)) of a security vulnerability, please report it to us as described below. If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/security.md/definition), please report it to us as described below.
## Reporting Security Issues ## Reporting Security Issues
**Please do not report security vulnerabilities through public GitHub issues.** **Please do not report security vulnerabilities through public GitHub issues.**
Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/security.md/msrc/create-report).
If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/security.md/msrc/pgp).
You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc).
@ -28,7 +28,7 @@ Please include the requested information listed below (as much as you can provid
This information will help us triage your report more quickly. This information will help us triage your report more quickly.
If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs. If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/security.md/msrc/bounty) page for more details about our active programs.
## Preferred Languages ## Preferred Languages
@ -36,6 +36,6 @@ We prefer all communications to be in English.
## Policy ## Policy
Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd). Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/security.md/cvd).
<!-- END MICROSOFT SECURITY.MD BLOCK --> <!-- END MICROSOFT SECURITY.MD BLOCK -->

17
SUPPORT.md Normal file
View file

@ -0,0 +1,17 @@
# Support
## How to file issues and get help
This project uses GitHub issues to track bugs and feature requests. Please search the [existing issues][gh-issues] before filing new ones to avoid duplicates. For new issues, file your bug or feature request as a new issue using corresponding template.
For help and questions about using this project, please see the [docs site for Playwright][docs].
Join our community [Discord Server][discord-server] to connect with other developers using Playwright and ask questions in our 'help-playwright' forum.
## Microsoft Support Policy
Support for Playwright is limited to the resources listed above.
[gh-issues]: https://github.com/microsoft/playwright/issues/
[docs]: https://playwright.dev/
[discord-server]: https://aka.ms/playwright/discord

View file

@ -4,11 +4,11 @@
}, },
"plugins": [ "plugins": [
["@babel/plugin-transform-typescript", { "allowDeclareFields": true } ], ["@babel/plugin-transform-typescript", { "allowDeclareFields": true } ],
"@babel/plugin-proposal-export-namespace-from", "@babel/plugin-transform-export-namespace-from",
"@babel/plugin-proposal-class-properties", "@babel/plugin-transform-class-properties",
"@babel/plugin-proposal-logical-assignment-operators", "@babel/plugin-transform-logical-assignment-operators",
"@babel/plugin-proposal-nullish-coalescing-operator", "@babel/plugin-transform-nullish-coalescing-operator",
"@babel/plugin-proposal-optional-chaining", "@babel/plugin-transform-optional-chaining",
"@babel/plugin-transform-modules-commonjs" "@babel/plugin-transform-modules-commonjs"
], ],
"ignore": [ "ignore": [

View file

@ -1,3 +1,3 @@
REMOTE_URL="https://github.com/mozilla/gecko-dev" REMOTE_URL="https://github.com/mozilla/gecko-dev"
BASE_BRANCH="release" BASE_BRANCH="release"
BASE_REVISION="e2956def6c181ca7375897992c5c821a5a6c886d" BASE_REVISION="5cfa81898f6eef8fb1abe463e5253cea5bc17f3f"

View file

@ -3,7 +3,6 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
const uuidGen = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator); const uuidGen = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator);
const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
class Helper { class Helper {
decorateAsEventEmitter(objectToDecorate) { decorateAsEventEmitter(objectToDecorate) {
@ -17,6 +16,27 @@ class Helper {
objectToDecorate.emit = emitter.emit.bind(emitter); objectToDecorate.emit = emitter.emit.bind(emitter);
} }
collectAllBrowsingContexts(rootBrowsingContext, allBrowsingContexts = []) {
allBrowsingContexts.push(rootBrowsingContext);
for (const child of rootBrowsingContext.children)
this.collectAllBrowsingContexts(child, allBrowsingContexts);
return allBrowsingContexts;
}
awaitTopic(topic) {
return new Promise(resolve => {
const listener = () => {
Services.obs.removeObserver(listener, topic);
resolve();
}
Services.obs.addObserver(listener, topic);
});
}
toProtocolNavigationId(loadIdentifier) {
return `nav-${loadIdentifier}`;
}
addObserver(handler, topic) { addObserver(handler, topic) {
Services.obs.addObserver(handler, topic); Services.obs.addObserver(handler, topic);
return () => Services.obs.removeObserver(handler, topic); return () => Services.obs.removeObserver(handler, topic);
@ -27,15 +47,15 @@ class Helper {
return () => receiver.removeMessageListener(eventName, handler); return () => receiver.removeMessageListener(eventName, handler);
} }
addEventListener(receiver, eventName, handler) { addEventListener(receiver, eventName, handler, options) {
receiver.addEventListener(eventName, handler); receiver.addEventListener(eventName, handler, options);
return () => { return () => {
try { try {
receiver.removeEventListener(eventName, handler); receiver.removeEventListener(eventName, handler, options);
} catch (e) { } catch (e) {
// This could fail when window has navigated cross-process // This could fail when window has navigated cross-process
// and we remove the listener from WindowProxy. // and we remove the listener from WindowProxy.
dump(`WARNING: removeEventListener throws ${e} at ${new Error().stack}\n`); // Nothing we can do here - so ignore the error.
} }
}; };
} }
@ -49,11 +69,11 @@ class Helper {
}); });
} }
on(receiver, eventName, handler) { on(receiver, eventName, handler, options) {
// The toolkit/modules/EventEmitter.jsm dispatches event name as a first argument. // The toolkit/modules/EventEmitter.jsm dispatches event name as a first argument.
// Fire event listeners without it for convenience. // Fire event listeners without it for convenience.
const handlerWrapper = (_, ...args) => handler(...args); const handlerWrapper = (_, ...args) => handler(...args);
receiver.on(eventName, handlerWrapper); receiver.on(eventName, handlerWrapper, options);
return () => receiver.off(eventName, handlerWrapper); return () => receiver.off(eventName, handlerWrapper);
} }
@ -144,10 +164,76 @@ class Helper {
browsingContextToFrameId(browsingContext) { browsingContextToFrameId(browsingContext) {
if (!browsingContext) if (!browsingContext)
return undefined; return undefined;
return 'frame-' + browsingContext.id; if (!browsingContext.parent)
return 'mainframe-' + browsingContext.browserId;
return 'subframe-' + browsingContext.id;
} }
} }
var EXPORTED_SYMBOLS = [ "Helper" ]; const helper = new Helper();
class EventWatcher {
constructor(receiver, eventNames, pendingEventWatchers = new Set()) {
this._pendingEventWatchers = pendingEventWatchers;
this._pendingEventWatchers.add(this);
this._events = [];
this._pendingPromises = [];
this._eventListeners = eventNames.map(eventName =>
helper.on(receiver, eventName, this._onEvent.bind(this, eventName)),
);
}
_onEvent(eventName, eventObject) {
this._events.push({eventName, eventObject});
for (const promise of this._pendingPromises)
promise.resolve();
this._pendingPromises = [];
}
async ensureEvent(aEventName, predicate) {
if (typeof aEventName !== 'string')
throw new Error('ERROR: ensureEvent expects a "string" as its first argument');
while (true) {
const result = this.getEvent(aEventName, predicate);
if (result)
return result;
await new Promise((resolve, reject) => this._pendingPromises.push({resolve, reject}));
}
}
async ensureEvents(eventNames, predicate) {
if (!Array.isArray(eventNames))
throw new Error('ERROR: ensureEvents expects an array of event names as its first argument');
return await Promise.all(eventNames.map(eventName => this.ensureEvent(eventName, predicate)));
}
async ensureEventsAndDispose(eventNames, predicate) {
if (!Array.isArray(eventNames))
throw new Error('ERROR: ensureEventsAndDispose expects an array of event names as its first argument');
const result = await this.ensureEvents(eventNames, predicate);
this.dispose();
return result;
}
getEvent(aEventName, predicate = (eventObject) => true) {
return this._events.find(({eventName, eventObject}) => eventName === aEventName && predicate(eventObject))?.eventObject;
}
hasEvent(aEventName, predicate) {
return !!this.getEvent(aEventName, predicate);
}
dispose() {
this._pendingEventWatchers.delete(this);
for (const promise of this._pendingPromises)
promise.reject(new Error('EventWatcher is being disposed'));
this._pendingPromises = [];
helper.removeListeners(this._eventListeners);
}
}
var EXPORTED_SYMBOLS = [ "Helper", "EventWatcher" ];
this.Helper = Helper; this.Helper = Helper;
this.EventWatcher = EventWatcher;

View file

@ -15,6 +15,13 @@ class JugglerFrameParent extends JSWindowActorParent {
receiveMessage() { } receiveMessage() { }
async actorCreated() { async actorCreated() {
// Actors are registered per the WindowGlobalParent / WindowGlobalChild pair. We are only
// interested in those WindowGlobalParent actors that are matching current browsingContext
// window global.
// See https://github.com/mozilla/gecko-dev/blob/cd2121e7d83af1b421c95e8c923db70e692dab5f/testing/mochitest/BrowserTestUtils/BrowserTestUtilsParent.sys.mjs#L15
if (!this.manager?.isCurrentGlobal)
return;
// Only interested in main frames for now. // Only interested in main frames for now.
if (this.browsingContext.parent) if (this.browsingContext.parent)
return; return;

View file

@ -5,7 +5,6 @@
"use strict"; "use strict";
const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js'); const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
const {NetUtil} = ChromeUtils.import('resource://gre/modules/NetUtil.jsm'); const {NetUtil} = ChromeUtils.import('resource://gre/modules/NetUtil.jsm');
const { ChannelEventSinkFactory } = ChromeUtils.import("chrome://remote/content/cdp/observers/ChannelEventSink.jsm"); const { ChannelEventSinkFactory } = ChromeUtils.import("chrome://remote/content/cdp/observers/ChannelEventSink.jsm");
@ -31,6 +30,8 @@ const pageNetworkSymbol = Symbol('PageNetwork');
class PageNetwork { class PageNetwork {
static forPageTarget(target) { static forPageTarget(target) {
if (!target)
return undefined;
let result = target[pageNetworkSymbol]; let result = target[pageNetworkSymbol];
if (!result) { if (!result) {
result = new PageNetwork(target); result = new PageNetwork(target);
@ -105,21 +106,12 @@ class NetworkRequest {
this.httpChannel = httpChannel; this.httpChannel = httpChannel;
const loadInfo = this.httpChannel.loadInfo; const loadInfo = this.httpChannel.loadInfo;
let browsingContext = loadInfo?.frameBrowsingContext || loadInfo?.browsingContext; const browsingContext = loadInfo?.frameBrowsingContext || loadInfo?.workerAssociatedBrowsingContext || loadInfo?.browsingContext;
// TODO: Unfortunately, requests from web workers don't have frameBrowsingContext or
// browsingContext.
//
// We fail to attribute them to the original frames on the browser side, but we
// can use load context top frame to attribute them to the top frame at least.
if (!browsingContext) {
const loadContext = helper.getLoadContext(this.httpChannel);
browsingContext = loadContext?.topFrameElement?.browsingContext;
}
this._frameId = helper.browsingContextToFrameId(browsingContext); this._frameId = helper.browsingContextToFrameId(browsingContext);
this.requestId = httpChannel.channelId + ''; this.requestId = httpChannel.channelId + '';
this.navigationId = httpChannel.isMainDocumentChannel ? this.requestId : undefined; this.navigationId = httpChannel.isMainDocumentChannel && loadInfo ? helper.toProtocolNavigationId(loadInfo.jugglerLoadIdentifier) : undefined;
this._redirectedIndex = 0; this._redirectedIndex = 0;
if (redirectedFrom) { if (redirectedFrom) {
@ -145,12 +137,21 @@ class NetworkRequest {
throw new Error(`Internal Error: invariant is broken for _channelToRequest map`); throw new Error(`Internal Error: invariant is broken for _channelToRequest map`);
this._networkObserver._channelToRequest.set(this.httpChannel, this); this._networkObserver._channelToRequest.set(this.httpChannel, this);
this._pageNetwork = redirectedFrom ? redirectedFrom._pageNetwork : networkObserver._findPageNetwork(httpChannel); if (redirectedFrom) {
this._pageNetwork = redirectedFrom._pageNetwork;
} else if (browsingContext) {
const target = this._networkObserver._targetRegistry.targetForBrowserId(browsingContext.browserId);
this._pageNetwork = PageNetwork.forPageTarget(target);
}
this._expectingInterception = false; this._expectingInterception = false;
this._expectingResumedRequest = undefined; // { method, headers, postData } this._expectingResumedRequest = undefined; // { method, headers, postData }
this._overriddenHeadersForRedirect = redirectedFrom?._overriddenHeadersForRedirect;
this._sentOnResponse = false; this._sentOnResponse = false;
this._fulfilled = false;
if (this._pageNetwork) if (this._overriddenHeadersForRedirect)
overrideRequestHeaders(httpChannel, this._overriddenHeadersForRedirect);
else if (this._pageNetwork)
appendExtraHTTPHeaders(httpChannel, this._pageNetwork.combinedExtraHTTPHeaders()); appendExtraHTTPHeaders(httpChannel, this._pageNetwork.combinedExtraHTTPHeaders());
this._responseBodyChunks = []; this._responseBodyChunks = [];
@ -197,6 +198,7 @@ class NetworkRequest {
// Public interception API. // Public interception API.
fulfill(status, statusText, headers, base64body) { fulfill(status, statusText, headers, base64body) {
this._fulfilled = true;
this._interceptedChannel.synthesizeStatus(status, statusText); this._interceptedChannel.synthesizeStatus(status, statusText);
for (const header of headers) { for (const header of headers) {
this._interceptedChannel.synthesizeHeader(header.name, header.value); this._interceptedChannel.synthesizeHeader(header.name, header.value);
@ -231,16 +233,13 @@ class NetworkRequest {
if (!this._expectingResumedRequest) if (!this._expectingResumedRequest)
return; return;
const { method, headers, postData } = this._expectingResumedRequest; const { method, headers, postData } = this._expectingResumedRequest;
this._overriddenHeadersForRedirect = headers;
this._expectingResumedRequest = undefined; this._expectingResumedRequest = undefined;
if (headers) { if (headers)
for (const header of requestHeaders(this.httpChannel)) overrideRequestHeaders(this.httpChannel, headers);
this.httpChannel.setRequestHeader(header.name, '', false /* merge */); else if (this._pageNetwork)
for (const header of headers)
this.httpChannel.setRequestHeader(header.name, header.value, false /* merge */);
} else if (this._pageNetwork) {
appendExtraHTTPHeaders(this.httpChannel, this._pageNetwork.combinedExtraHTTPHeaders()); appendExtraHTTPHeaders(this.httpChannel, this._pageNetwork.combinedExtraHTTPHeaders());
}
if (method) if (method)
this.httpChannel.requestMethod = method; this.httpChannel.requestMethod = method;
if (postData !== undefined) if (postData !== undefined)
@ -300,6 +299,9 @@ class NetworkRequest {
} }
if (!credentials) if (!credentials)
return false; return false;
const origin = aChannel.URI.scheme + '://' + aChannel.URI.hostPort;
if (credentials.origin && origin.toLowerCase() !== credentials.origin.toLowerCase())
return false;
authInfo.username = credentials.username; authInfo.username = credentials.username;
authInfo.password = credentials.password; authInfo.password = credentials.password;
// This will produce a new request with respective auth header set. // This will produce a new request with respective auth header set.
@ -362,13 +364,6 @@ class NetworkRequest {
return; return;
} }
const browserContext = pageNetwork._target.browserContext();
if (browserContext.crossProcessCookie.settings.onlineOverride === 'offline') {
// Implement offline.
this.abort(Cr.NS_ERROR_OFFLINE);
return;
}
// Ok, so now we have intercepted the request, let's issue onRequest. // Ok, so now we have intercepted the request, let's issue onRequest.
// If interception has been disabled while we were intercepting, resume and forget. // If interception has been disabled while we were intercepting, resume and forget.
const interceptionEnabled = this._shouldIntercept(); const interceptionEnabled = this._shouldIntercept();
@ -458,15 +453,15 @@ class NetworkRequest {
const browserContext = pageNetwork._target.browserContext(); const browserContext = pageNetwork._target.browserContext();
if (browserContext.requestInterceptionEnabled) if (browserContext.requestInterceptionEnabled)
return true; return true;
if (browserContext.crossProcessCookie.settings.onlineOverride === 'offline')
return true;
return false; return false;
} }
_fallThroughInterceptController() { _fallThroughInterceptController() {
if (!this._previousCallbacks || !(this._previousCallbacks instanceof Ci.nsINetworkInterceptController)) try {
return this._previousCallbacks?.getInterface(Ci.nsINetworkInterceptController);
} catch (e) {
return undefined; return undefined;
return this._previousCallbacks.getInterface(Ci.nsINetworkInterceptController); }
} }
_sendOnRequest(isIntercepted) { _sendOnRequest(isIntercepted) {
@ -556,7 +551,11 @@ class NetworkRequest {
_sendOnRequestFinished() { _sendOnRequestFinished() {
const pageNetwork = this._pageNetwork; const pageNetwork = this._pageNetwork;
if (pageNetwork) { // Undefined |responseEndTime| means there has been no response yet.
// This happens when request interception API is used to redirect
// the request to a different URL.
// In this case, we should not emit "requestFinished" event.
if (pageNetwork && this.httpChannel.responseEndTime !== undefined) {
let protocolVersion = undefined; let protocolVersion = undefined;
try { try {
protocolVersion = this.httpChannel.protocolVersion; protocolVersion = this.httpChannel.protocolVersion;
@ -599,6 +598,8 @@ class NetworkObserver {
proxyFilter.onProxyFilterResult(defaultProxyInfo); proxyFilter.onProxyFilterResult(defaultProxyInfo);
return; return;
} }
if (this._targetRegistry.shouldBustHTTPAuthCacheForProxy(proxy))
Services.obs.notifyObservers(null, "net:clear-active-logins");
proxyFilter.onProxyFilterResult(protocolProxyService.newProxyInfo( proxyFilter.onProxyFilterResult(protocolProxyService.newProxyInfo(
proxy.type, proxy.type,
proxy.host, proxy.host,
@ -654,16 +655,6 @@ class NetworkObserver {
} }
} }
_findPageNetwork(httpChannel) {
let loadContext = helper.getLoadContext(httpChannel);
if (!loadContext)
return;
const target = this._targetRegistry.targetForBrowser(loadContext.topFrameElement);
if (!target)
return;
return PageNetwork.forPageTarget(target);
}
_onRequest(channel, topic) { _onRequest(channel, topic) {
if (!(channel instanceof Ci.nsIHttpChannel)) if (!(channel instanceof Ci.nsIHttpChannel))
return; return;
@ -734,6 +725,7 @@ function readRequestPostData(httpChannel) {
if (!iStream) if (!iStream)
return undefined; return undefined;
const isSeekableStream = iStream instanceof Ci.nsISeekableStream; const isSeekableStream = iStream instanceof Ci.nsISeekableStream;
const isTellableStream = iStream instanceof Ci.nsITellableStream;
// For some reason, we cannot rewind back big streams, // For some reason, we cannot rewind back big streams,
// so instead we should clone them. // so instead we should clone them.
@ -742,7 +734,9 @@ function readRequestPostData(httpChannel) {
iStream = iStream.clone(); iStream = iStream.clone();
let prevOffset; let prevOffset;
if (isSeekableStream) { // Surprisingly, stream might implement `nsITellableStream` without
// implementing the `tell` method.
if (isSeekableStream && isTellableStream && iStream.tell) {
prevOffset = iStream.tell(); prevOffset = iStream.tell();
iStream.seek(Ci.nsISeekableStream.NS_SEEK_SET, 0); iStream.seek(Ci.nsISeekableStream.NS_SEEK_SET, 0);
} }
@ -775,6 +769,20 @@ function requestHeaders(httpChannel) {
return headers; return headers;
} }
function clearRequestHeaders(httpChannel) {
for (const header of requestHeaders(httpChannel)) {
// We cannot remove the "host" header.
if (header.name.toLowerCase() === 'host')
continue;
httpChannel.setRequestHeader(header.name, '', false /* merge */);
}
}
function overrideRequestHeaders(httpChannel, headers) {
clearRequestHeaders(httpChannel);
appendExtraHTTPHeaders(httpChannel, headers);
}
function causeTypeToString(causeType) { function causeTypeToString(causeType) {
for (let key in Ci.nsIContentPolicy) { for (let key in Ci.nsIContentPolicy) {
if (Ci.nsIContentPolicy[key] === causeType) if (Ci.nsIContentPolicy[key] === causeType)
@ -807,7 +815,8 @@ class ResponseStorage {
return; return;
} }
let encodings = []; let encodings = [];
if ((request.httpChannel instanceof Ci.nsIEncodedChannel) && request.httpChannel.contentEncodings && !request.httpChannel.applyConversion) { // Note: fulfilled request comes with decoded body right away.
if ((request.httpChannel instanceof Ci.nsIEncodedChannel) && request.httpChannel.contentEncodings && !request.httpChannel.applyConversion && !request._fulfilled) {
const encodingHeader = request.httpChannel.getResponseHeader("Content-Encoding"); const encodingHeader = request.httpChannel.getResponseHeader("Content-Encoding");
encodings = encodingHeader.split(/\s*\t*,\s*\t*/); encodings = encodingHeader.split(/\s*\t*,\s*\t*/);
} }

View file

@ -9,29 +9,7 @@
const SIMPLE_CHANNEL_MESSAGE_NAME = 'juggler:simplechannel'; const SIMPLE_CHANNEL_MESSAGE_NAME = 'juggler:simplechannel';
class SimpleChannel { class SimpleChannel {
static createForActor(actor) { constructor(name, uid) {
const channel = new SimpleChannel('');
channel.bindToActor(actor);
return channel;
}
static createForMessageManager(name, mm) {
const channel = new SimpleChannel(name);
const messageListener = {
receiveMessage: message => channel._onMessage(message.data)
};
mm.addMessageListener(SIMPLE_CHANNEL_MESSAGE_NAME, messageListener);
channel.setTransport({
sendMessage: obj => mm.sendAsyncMessage(SIMPLE_CHANNEL_MESSAGE_NAME, obj),
dispose: () => mm.removeMessageListener(SIMPLE_CHANNEL_MESSAGE_NAME, messageListener),
});
return channel;
}
constructor(name) {
this._name = name; this._name = name;
this._messageId = 0; this._messageId = 0;
this._connectorId = 0; this._connectorId = 0;
@ -43,7 +21,15 @@ class SimpleChannel {
dispose: () => {}, dispose: () => {},
}; };
this._ready = false; this._ready = false;
this._paused = false;
this._disposed = false; this._disposed = false;
this._bufferedResponses = new Map();
// This is a "unique" identifier of this end of the channel. Two SimpleChannel instances
// on the same end of the channel (e.g. two content processes) must not have the same id.
// This way, the other end can distinguish between the old peer with a new transport and a new peer.
this._uid = uid;
this._connectedToUID = undefined;
} }
bindToActor(actor) { bindToActor(actor) {
@ -72,12 +58,29 @@ class SimpleChannel {
// 1. There are two channel ends in different processes. // 1. There are two channel ends in different processes.
// 2. Both ends start in the `ready = false` state, meaning that they will // 2. Both ends start in the `ready = false` state, meaning that they will
// not send any messages over transport. // not send any messages over transport.
// 3. Once channel end is created, it sends `READY` message to the other end. // 3. Once channel end is created, it sends { ack: `READY` } message to the other end.
// 4. Eventually, at least one of the ends receives `READY` message and responds with // 4. Eventually, at least one of the ends receives { ack: `READY` } message and responds with
// `READY_ACK`. We assume at least one of the ends will receive "READY" event from the other, since // { ack: `READY_ACK` }. We assume at least one of the ends will receive { ack: "READY" } event from the other, since
// channel ends have a "parent-child" relation, i.e. one end is always created before the other one. // channel ends have a "parent-child" relation, i.e. one end is always created before the other one.
// 5. Once channel end receives either `READY` or `READY_ACK`, it transitions to `ready` state. // 5. Once channel end receives either { ack: `READY` } or { ack: `READY_ACK` }, it transitions to `ready` state.
this.transport.sendMessage('READY'); this.transport.sendMessage({ ack: 'READY', uid: this._uid });
}
pause() {
this._paused = true;
}
resumeSoon() {
if (!this._paused)
return;
this._paused = false;
this._setTimeout(() => this._deliverBufferedIncomingMessages(), 0);
}
_setTimeout(cb, timeout) {
// Lazy load on first call.
this._setTimeout = ChromeUtils.import('resource://gre/modules/Timer.jsm').setTimeout;
this._setTimeout(cb, timeout);
} }
_markAsReady() { _markAsReady() {
@ -121,13 +124,16 @@ class SimpleChannel {
if (this._handlers.has(namespace)) if (this._handlers.has(namespace))
throw new Error('ERROR: double-register for namespace ' + namespace); throw new Error('ERROR: double-register for namespace ' + namespace);
this._handlers.set(namespace, handler); this._handlers.set(namespace, handler);
// Try to re-deliver all pending messages. this._deliverBufferedIncomingMessages();
return () => this.unregister(namespace);
}
_deliverBufferedIncomingMessages() {
const bufferedRequests = this._bufferedIncomingMessages; const bufferedRequests = this._bufferedIncomingMessages;
this._bufferedIncomingMessages = []; this._bufferedIncomingMessages = [];
for (const data of bufferedRequests) { for (const data of bufferedRequests) {
this._onMessage(data); this._onMessage(data);
} }
return () => this.unregister(namespace);
} }
unregister(namespace) { unregister(namespace) {
@ -154,23 +160,47 @@ class SimpleChannel {
return promise; return promise;
} }
async _onMessage(data) { _onMessage(data) {
if (data === 'READY') { if (data?.ack === 'READY') {
this.transport.sendMessage('READY_ACK'); // The "READY" and "READY_ACK" messages are a part of initialization sequence.
// This sequence happens when:
// 1. A new SimpleChannel instance is getting initialized on the other end.
// In this case, it will have a different UID and we must clear
// `this._bufferedResponses` since they are no longer relevant.
// 2. A new transport is assigned to communicate between 2 SimpleChannel instances.
// In this case, we MUST NOT clear `this._bufferedResponses` since they are used
// to address the double-dispatch issue.
if (this._connectedToUID !== data.uid)
this._bufferedResponses.clear();
this._connectedToUID = data.uid;
this.transport.sendMessage({ ack: 'READY_ACK', uid: this._uid });
this._markAsReady(); this._markAsReady();
return; return;
} }
if (data === 'READY_ACK') { if (data?.ack === 'READY_ACK') {
if (this._connectedToUID !== data.uid)
this._bufferedResponses.clear();
this._connectedToUID = data.uid;
this._markAsReady(); this._markAsReady();
return; return;
} }
if (data?.ack === 'RESPONSE_ACK') {
this._bufferedResponses.delete(data.responseId);
return;
}
if (this._paused)
this._bufferedIncomingMessages.push(data);
else
this._onMessageInternal(data);
}
async _onMessageInternal(data) {
if (data.responseId) { if (data.responseId) {
this.transport.sendMessage({ ack: 'RESPONSE_ACK', responseId: data.responseId });
const message = this._pendingMessages.get(data.responseId); const message = this._pendingMessages.get(data.responseId);
if (!message) { if (!message) {
// During corss-process navigation, we might receive a response for // During cross-process navigation, we might receive a response for
// the message sent by another process. // the message sent by another process.
// TODO: consider events that are marked as "no-response" to avoid
// unneeded responses altogether.
return; return;
} }
this._pendingMessages.delete(data.responseId); this._pendingMessages.delete(data.responseId);
@ -179,6 +209,17 @@ class SimpleChannel {
else else
message.resolve(data.result); message.resolve(data.result);
} else if (data.requestId) { } else if (data.requestId) {
// When the underlying transport gets replaced, some responses might
// not get delivered. As a result, sender will repeat the same request once
// a new transport gets set.
//
// If this request was already processed, we can fulfill it with the cached response
// and fast-return.
if (this._bufferedResponses.has(data.requestId)) {
this.transport.sendMessage(this._bufferedResponses.get(data.requestId));
return;
}
const namespace = data.namespace; const namespace = data.namespace;
const handler = this._handlers.get(namespace); const handler = this._handlers.get(namespace);
if (!handler) { if (!handler) {
@ -190,12 +231,20 @@ class SimpleChannel {
this.transport.sendMessage({responseId: data.requestId, error: `error in channel "${this._name}": No method "${data.methodName}" in namespace "${namespace}"`}); this.transport.sendMessage({responseId: data.requestId, error: `error in channel "${this._name}": No method "${data.methodName}" in namespace "${namespace}"`});
return; return;
} }
let response;
const connectedToUID = this._connectedToUID;
try { try {
const result = await method.call(handler, ...data.params); const result = await method.call(handler, ...data.params);
this.transport.sendMessage({responseId: data.requestId, result}); response = {responseId: data.requestId, result};
} catch (error) { } catch (error) {
this.transport.sendMessage({responseId: data.requestId, error: `error in channel "${this._name}": exception while running method "${data.methodName}" in namespace "${namespace}": ${error.message} ${error.stack}`}); response = {responseId: data.requestId, error: `error in channel "${this._name}": exception while running method "${data.methodName}" in namespace "${namespace}": ${error.message} ${error.stack}`};
return; }
// The connection might have changed during the ASYNCHRONOUS handler execution.
// We only need to buffer & send response if we are connected to the same
// end.
if (connectedToUID === this._connectedToUID) {
this._bufferedResponses.set(data.requestId, response);
this.transport.sendMessage(response);
} }
} else { } else {
dump(`WARNING: unknown message in channel "${this._name}": ${JSON.stringify(data)}\n`); dump(`WARNING: unknown message in channel "${this._name}": ${JSON.stringify(data)}\n`);

View file

@ -4,12 +4,10 @@
const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js'); const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
const {SimpleChannel} = ChromeUtils.import('chrome://juggler/content/SimpleChannel.js'); const {SimpleChannel} = ChromeUtils.import('chrome://juggler/content/SimpleChannel.js');
const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
const {Preferences} = ChromeUtils.import("resource://gre/modules/Preferences.jsm"); const {Preferences} = ChromeUtils.import("resource://gre/modules/Preferences.jsm");
const {ContextualIdentityService} = ChromeUtils.import("resource://gre/modules/ContextualIdentityService.jsm"); const {ContextualIdentityService} = ChromeUtils.import("resource://gre/modules/ContextualIdentityService.jsm");
const {NetUtil} = ChromeUtils.import('resource://gre/modules/NetUtil.jsm'); const {NetUtil} = ChromeUtils.import('resource://gre/modules/NetUtil.jsm');
const {AppConstants} = ChromeUtils.import("resource://gre/modules/AppConstants.jsm"); const {AppConstants} = ChromeUtils.import("resource://gre/modules/AppConstants.jsm");
const {OS} = ChromeUtils.import("resource://gre/modules/osfile.jsm");
const Cr = Components.results; const Cr = Components.results;
@ -23,6 +21,8 @@ const ALL_PERMISSIONS = [
'desktop-notification', 'desktop-notification',
]; ];
let globalTabAndWindowActivationChain = Promise.resolve();
class DownloadInterceptor { class DownloadInterceptor {
constructor(registry) { constructor(registry) {
this._registry = registry this._registry = registry
@ -116,6 +116,7 @@ class TargetRegistry {
this._browserToTarget = new Map(); this._browserToTarget = new Map();
this._browserIdToTarget = new Map(); this._browserIdToTarget = new Map();
this._proxiesWithClashingAuthCacheKeys = new Set();
this._browserProxy = null; this._browserProxy = null;
// Cleanup containers from previous runs (if any) // Cleanup containers from previous runs (if any)
@ -141,15 +142,6 @@ class TargetRegistry {
} }
}, 'oop-frameloader-crashed'); }, 'oop-frameloader-crashed');
helper.addObserver((browsingContext, topic, why) => {
if (why === 'replace') {
// Top-level browsingContext is replaced on cross-process navigations.
const target = this._browserIdToTarget.get(browsingContext.browserId);
if (target)
target.replaceTopBrowsingContext(browsingContext);
}
}, 'browsing-context-attached');
const onTabOpenListener = (appWindow, window, event) => { const onTabOpenListener = (appWindow, window, event) => {
const tab = event.target; const tab = event.target;
const userContextId = tab.userContextId; const userContextId = tab.userContextId;
@ -194,7 +186,7 @@ class TargetRegistry {
domWindow = appWindow; domWindow = appWindow;
appWindow = null; appWindow = null;
} }
if (!(domWindow instanceof Ci.nsIDOMChromeWindow)) if (!domWindow.isChromeWindow)
return; return;
// In persistent mode, window might be opened long ago and might be // In persistent mode, window might be opened long ago and might be
// already initialized. // already initialized.
@ -222,7 +214,7 @@ class TargetRegistry {
const onCloseWindow = window => { const onCloseWindow = window => {
const domWindow = window.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowInternal || Ci.nsIDOMWindow); const domWindow = window.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowInternal || Ci.nsIDOMWindow);
if (!(domWindow instanceof Ci.nsIDOMChromeWindow)) if (!domWindow.isChromeWindow)
return; return;
if (!domWindow.gBrowser) if (!domWindow.gBrowser)
return; return;
@ -243,12 +235,50 @@ class TargetRegistry {
onOpenWindow(win); onOpenWindow(win);
} }
// Firefox uses nsHttpAuthCache to cache authentication to the proxy.
// If we're provided with a single proxy with a multiple different authentications, then
// we should clear the nsHttpAuthCache on every request.
shouldBustHTTPAuthCacheForProxy(proxy) {
return this._proxiesWithClashingAuthCacheKeys.has(proxy);
}
_updateProxiesWithSameAuthCacheAndDifferentCredentials() {
const proxyIdToCredentials = new Map();
const allProxies = [...this._browserContextIdToBrowserContext.values()].map(bc => bc._proxy).filter(Boolean);
if (this._browserProxy)
allProxies.push(this._browserProxy);
const proxyAuthCacheKeyAndProxy = allProxies.map(proxy => [
JSON.stringify({
type: proxy.type,
host: proxy.host,
port: proxy.port,
}),
proxy,
]);
this._proxiesWithClashingAuthCacheKeys.clear();
proxyAuthCacheKeyAndProxy.sort(([cacheKey1], [cacheKey2]) => cacheKey1 < cacheKey2 ? -1 : 1);
for (let i = 0; i < proxyAuthCacheKeyAndProxy.length - 1; ++i) {
const [cacheKey1, proxy1] = proxyAuthCacheKeyAndProxy[i];
const [cacheKey2, proxy2] = proxyAuthCacheKeyAndProxy[i + 1];
if (cacheKey1 !== cacheKey2)
continue;
if (proxy1.username === proxy2.username && proxy1.password === proxy2.password)
continue;
// `proxy1` and `proxy2` have the same caching key, but serve different credentials.
// We have to bust HTTP Auth Cache everytime there's a request that will use either of the proxies.
this._proxiesWithClashingAuthCacheKeys.add(proxy1);
this._proxiesWithClashingAuthCacheKeys.add(proxy2);
}
}
async cancelDownload(options) { async cancelDownload(options) {
this._downloadInterceptor.cancelDownload(options.uuid); this._downloadInterceptor.cancelDownload(options.uuid);
} }
setBrowserProxy(proxy) { setBrowserProxy(proxy) {
this._browserProxy = proxy; this._browserProxy = proxy;
this._updateProxiesWithSameAuthCacheAndDifferentCredentials();
} }
getProxyInfo(channel) { getProxyInfo(channel) {
@ -359,11 +389,12 @@ class PageTarget {
this._openerId = opener ? opener.id() : undefined; this._openerId = opener ? opener.id() : undefined;
this._actor = undefined; this._actor = undefined;
this._actorSequenceNumber = 0; this._actorSequenceNumber = 0;
this._channel = new SimpleChannel(`browser::page[${this._targetId}]`); this._channel = new SimpleChannel(`browser::page[${this._targetId}]`, 'target-' + this._targetId);
this._videoRecordingInfo = undefined; this._videoRecordingInfo = undefined;
this._screencastRecordingInfo = undefined; this._screencastRecordingInfo = undefined;
this._dialogs = new Map(); this._dialogs = new Map();
this.forcedColors = 'no-override'; this.forcedColors = 'none';
this.disableCache = false;
this.mediumOverride = ''; this.mediumOverride = '';
this.crossProcessCookie = { this.crossProcessCookie = {
initScripts: [], initScripts: [],
@ -376,9 +407,10 @@ class PageTarget {
onLocationChange: (aWebProgress, aRequest, aLocation) => this._onNavigated(aLocation), onLocationChange: (aWebProgress, aRequest, aLocation) => this._onNavigated(aLocation),
}; };
this._eventListeners = [ this._eventListeners = [
helper.addObserver(this._updateModalDialogs.bind(this), 'tabmodal-dialog-loaded'), helper.addObserver(this._updateModalDialogs.bind(this), 'common-dialog-loaded'),
helper.addProgressListener(tab.linkedBrowser, navigationListener, Ci.nsIWebProgress.NOTIFY_LOCATION), helper.addProgressListener(tab.linkedBrowser, navigationListener, Ci.nsIWebProgress.NOTIFY_LOCATION),
helper.addEventListener(this._linkedBrowser, 'DOMModalDialogClosed', event => this._updateModalDialogs()), helper.addEventListener(this._linkedBrowser, 'DOMModalDialogClosed', event => this._updateModalDialogs()),
helper.addEventListener(this._linkedBrowser, 'WillChangeBrowserRemoteness', event => this._willChangeBrowserRemoteness()),
]; ];
this._disposed = false; this._disposed = false;
@ -389,6 +421,34 @@ class PageTarget {
this._registry.emit(TargetRegistry.Events.TargetCreated, this); this._registry.emit(TargetRegistry.Events.TargetCreated, this);
} }
async activateAndRun(callback = () => {}, { muteNotificationsPopup = false } = {}) {
const ownerWindow = this._tab.linkedBrowser.ownerGlobal;
const tabBrowser = ownerWindow.gBrowser;
// Serialize all tab-switching commands per tabbed browser
// to disallow concurrent tab switching.
const result = globalTabAndWindowActivationChain.then(async () => {
this._window.focus();
if (tabBrowser.selectedTab !== this._tab) {
const promise = helper.awaitEvent(ownerWindow, 'TabSwitchDone');
tabBrowser.selectedTab = this._tab;
await promise;
}
const notificationsPopup = muteNotificationsPopup ? this._linkedBrowser?.ownerDocument.getElementById('notification-popup') : null;
notificationsPopup?.style.setProperty('pointer-events', 'none');
try {
await callback();
} finally {
notificationsPopup?.style.removeProperty('pointer-events');
}
});
globalTabAndWindowActivationChain = result.catch(error => { /* swallow errors to keep chain running */ });
return result;
}
frameIdToBrowsingContext(frameId) {
return helper.collectAllBrowsingContexts(this._linkedBrowser.browsingContext).find(bc => helper.browsingContextToFrameId(bc) === frameId);
}
nextActorSequenceNumber() { nextActorSequenceNumber() {
return ++this._actorSequenceNumber; return ++this._actorSequenceNumber;
} }
@ -407,14 +467,9 @@ class PageTarget {
this._channel.resetTransport(); this._channel.resetTransport();
} }
replaceTopBrowsingContext(browsingContext) { _willChangeBrowserRemoteness() {
if (this._actor && this._actor.browsingContext !== browsingContext) {
// Disconnect early to avoid receiving protocol messages from the old actor.
this.removeActor(this._actor); this.removeActor(this._actor);
} }
this.emit(PageTarget.Events.TopBrowsingContextReplaced);
this.updateOverridesForBrowsingContext(browsingContext);
}
dialog(dialogId) { dialog(dialogId) {
return this._dialogs.get(dialogId); return this._dialogs.get(dialogId);
@ -445,6 +500,25 @@ class PageTarget {
this.updateColorSchemeOverride(browsingContext); this.updateColorSchemeOverride(browsingContext);
this.updateReducedMotionOverride(browsingContext); this.updateReducedMotionOverride(browsingContext);
this.updateForcedColorsOverride(browsingContext); this.updateForcedColorsOverride(browsingContext);
this.updateForceOffline(browsingContext);
this.updateCacheDisabled(browsingContext);
}
updateForceOffline(browsingContext = undefined) {
(browsingContext || this._linkedBrowser.browsingContext).forceOffline = this._browserContext.forceOffline;
}
setCacheDisabled(disabled) {
this.disableCache = disabled;
this.updateCacheDisabled();
}
updateCacheDisabled(browsingContext = this._linkedBrowser.browsingContext) {
const enableFlags = Ci.nsIRequest.LOAD_NORMAL;
const disableFlags = Ci.nsIRequest.LOAD_BYPASS_CACHE |
Ci.nsIRequest.INHIBIT_CACHING;
browsingContext.defaultLoadFlags = (this._browserContext.disableCache || this.disableCache) ? disableFlags : enableFlags;
} }
updateTouchOverride(browsingContext = undefined) { updateTouchOverride(browsingContext = undefined) {
@ -464,7 +538,7 @@ class PageTarget {
} }
_updateModalDialogs() { _updateModalDialogs() {
const prompts = new Set(this._linkedBrowser.tabModalPromptBox ? this._linkedBrowser.tabModalPromptBox.listPrompts() : []); const prompts = new Set(this._linkedBrowser.tabDialogBox.getContentDialogManager().dialogs.map(dialog => dialog.frameContentWindow.Dialog));
for (const dialog of this._dialogs.values()) { for (const dialog of this._dialogs.values()) {
if (!prompts.has(dialog.prompt())) { if (!prompts.has(dialog.prompt())) {
this._dialogs.delete(dialog.id()); this._dialogs.delete(dialog.id());
@ -483,6 +557,9 @@ class PageTarget {
} }
async updateViewportSize() { async updateViewportSize() {
await waitForWindowReady(this._window);
this.updateDPPXOverride();
// Viewport size is defined by three arguments: // Viewport size is defined by three arguments:
// 1. default size. Could be explicit if set as part of `window.open` call, e.g. // 1. default size. Could be explicit if set as part of `window.open` call, e.g.
// `window.open(url, title, 'width=400,height=400')` // `window.open(url, title, 'width=400,height=400')`
@ -493,14 +570,37 @@ class PageTarget {
// Otherwise, explicitly set page viewport prevales over browser context // Otherwise, explicitly set page viewport prevales over browser context
// default viewport. // default viewport.
const viewportSize = this._viewportSize || this._browserContext.defaultViewportSize; const viewportSize = this._viewportSize || this._browserContext.defaultViewportSize;
const actualSize = await setViewportSizeForBrowser(viewportSize, this._linkedBrowser, this._window); if (viewportSize) {
this.updateDPPXOverride(); const {width, height} = viewportSize;
this._linkedBrowser.style.setProperty('width', width + 'px');
this._linkedBrowser.style.setProperty('height', height + 'px');
this._linkedBrowser.style.setProperty('box-sizing', 'content-box');
this._linkedBrowser.closest('.browserStack').style.setProperty('overflow', 'auto');
this._linkedBrowser.closest('.browserStack').style.setProperty('contain', 'size');
this._linkedBrowser.closest('.browserStack').style.setProperty('scrollbar-width', 'none');
this._linkedBrowser.browsingContext.inRDMPane = true;
const stackRect = this._linkedBrowser.closest('.browserStack').getBoundingClientRect();
const toolbarTop = stackRect.y;
this._window.resizeBy(width - this._window.innerWidth, height + toolbarTop - this._window.innerHeight);
await this._channel.connect('').send('awaitViewportDimensions', { width, height });
} else {
this._linkedBrowser.style.removeProperty('width');
this._linkedBrowser.style.removeProperty('height');
this._linkedBrowser.style.removeProperty('box-sizing');
this._linkedBrowser.closest('.browserStack').style.removeProperty('overflow');
this._linkedBrowser.closest('.browserStack').style.removeProperty('contain');
this._linkedBrowser.closest('.browserStack').style.removeProperty('scrollbar-width');
this._linkedBrowser.browsingContext.inRDMPane = false;
const actualSize = this._linkedBrowser.getBoundingClientRect();
await this._channel.connect('').send('awaitViewportDimensions', { await this._channel.connect('').send('awaitViewportDimensions', {
width: actualSize.width, width: actualSize.width,
height: actualSize.height, height: actualSize.height,
deviceSizeIsPageSize: !!this._browserContext.deviceScaleFactor,
}); });
} }
}
setEmulatedMedia(mediumOverride) { setEmulatedMedia(mediumOverride) {
this.mediumOverride = mediumOverride || ''; this.mediumOverride = mediumOverride || '';
@ -535,7 +635,8 @@ class PageTarget {
} }
updateForcedColorsOverride(browsingContext = undefined) { updateForcedColorsOverride(browsingContext = undefined) {
(browsingContext || this._linkedBrowser.browsingContext).forcedColorsOverride = (this.forcedColors !== 'no-override' ? this.forcedColors : this._browserContext.forcedColors) || 'no-override'; const isActive = this.forcedColors === 'active' || this._browserContext.forcedColors === 'active';
(browsingContext || this._linkedBrowser.browsingContext).forcedColorsOverride = isActive ? 'active' : 'none';
} }
async setInterceptFileChooserDialog(enabled) { async setInterceptFileChooserDialog(enabled) {
@ -615,7 +716,7 @@ class PageTarget {
// NSWindow.windowNumber may be -1, so we wait until the window is known // NSWindow.windowNumber may be -1, so we wait until the window is known
// to be initialized and visible. // to be initialized and visible.
await this.windowReady(); await this.windowReady();
const file = OS.Path.join(dir, helper.generateId() + '.webm'); const file = PathUtils.join(dir, helper.generateId() + '.webm');
if (width < 10 || width > 10000 || height < 10 || height > 10000) if (width < 10 || width > 10000 || height < 10 || height > 10000)
throw new Error("Invalid size"); throw new Error("Invalid size");
@ -694,7 +795,23 @@ class PageTarget {
screencastService.stopVideoRecording(screencastId); screencastService.stopVideoRecording(screencastId);
} }
ensureContextMenuClosed() {
// Close context menu, if any, since it might capture mouse events on Linux
// and prevent browser shutdown on MacOS.
const doc = this._linkedBrowser.ownerDocument;
const contextMenu = doc.getElementById('contentAreaContextMenu');
if (contextMenu)
contextMenu.hidePopup();
const autocompletePopup = doc.getElementById('PopupAutoComplete');
if (autocompletePopup)
autocompletePopup.hidePopup();
const selectPopup = doc.getElementById('ContentSelectDropdown')?.menupopup;
if (selectPopup)
selectPopup.hidePopup()
}
dispose() { dispose() {
this.ensureContextMenuClosed();
this._disposed = true; this._disposed = true;
if (this._videoRecordingInfo) if (this._videoRecordingInfo)
this._stopVideoRecording(); this._stopVideoRecording();
@ -721,7 +838,6 @@ PageTarget.Events = {
Crashed: Symbol('PageTarget.Crashed'), Crashed: Symbol('PageTarget.Crashed'),
DialogOpened: Symbol('PageTarget.DialogOpened'), DialogOpened: Symbol('PageTarget.DialogOpened'),
DialogClosed: Symbol('PageTarget.DialogClosed'), DialogClosed: Symbol('PageTarget.DialogClosed'),
TopBrowsingContextReplaced: Symbol('PageTarget.TopBrowsingContextReplaced'),
}; };
function fromProtocolColorScheme(colorScheme) { function fromProtocolColorScheme(colorScheme) {
@ -743,8 +859,8 @@ function fromProtocolReducedMotion(reducedMotion) {
function fromProtocolForcedColors(forcedColors) { function fromProtocolForcedColors(forcedColors) {
if (forcedColors === 'active' || forcedColors === 'none') if (forcedColors === 'active' || forcedColors === 'none')
return forcedColors; return forcedColors;
if (forcedColors === null) if (!forcedColors)
return undefined; return 'none';
throw new Error('Unknown forced colors: ' + forcedColors); throw new Error('Unknown forced colors: ' + forcedColors);
} }
@ -775,8 +891,10 @@ class BrowserContext {
this.defaultUserAgent = null; this.defaultUserAgent = null;
this.defaultPlatform = null; this.defaultPlatform = null;
this.touchOverride = false; this.touchOverride = false;
this.forceOffline = false;
this.disableCache = false;
this.colorScheme = 'none'; this.colorScheme = 'none';
this.forcedColors = 'no-override'; this.forcedColors = 'none';
this.reducedMotion = 'none'; this.reducedMotion = 'none';
this.videoRecordingOptions = undefined; this.videoRecordingOptions = undefined;
this.crossProcessCookie = { this.crossProcessCookie = {
@ -828,12 +946,14 @@ class BrowserContext {
} }
this._registry._browserContextIdToBrowserContext.delete(this.browserContextId); this._registry._browserContextIdToBrowserContext.delete(this.browserContextId);
this._registry._userContextIdToBrowserContext.delete(this.userContextId); this._registry._userContextIdToBrowserContext.delete(this.userContextId);
this._registry._updateProxiesWithSameAuthCacheAndDifferentCredentials();
} }
setProxy(proxy) { setProxy(proxy) {
// Clear AuthCache. // Clear AuthCache.
Services.obs.notifyObservers(null, "net:clear-active-logins"); Services.obs.notifyObservers(null, "net:clear-active-logins");
this._proxy = proxy; this._proxy = proxy;
this._registry._updateProxiesWithSameAuthCacheAndDifferentCredentials();
} }
setIgnoreHTTPSErrors(ignoreHTTPSErrors) { setIgnoreHTTPSErrors(ignoreHTTPSErrors) {
@ -870,6 +990,18 @@ class BrowserContext {
page.updateTouchOverride(); page.updateTouchOverride();
} }
setForceOffline(forceOffline) {
this.forceOffline = forceOffline;
for (const page of this.pages)
page.updateForceOffline();
}
setCacheDisabled(disabled) {
this.disableCache = disabled;
for (const page of this.pages)
page.updateCacheDisabled();
}
async setDefaultViewport(viewport) { async setDefaultViewport(viewport) {
this.defaultViewportSize = viewport ? viewport.viewportSize : undefined; this.defaultViewportSize = viewport ? viewport.viewportSize : undefined;
this.deviceScaleFactor = viewport ? viewport.deviceScaleFactor : undefined; this.deviceScaleFactor = viewport ? viewport.deviceScaleFactor : undefined;
@ -1097,26 +1229,6 @@ async function waitForWindowReady(window) {
await helper.awaitEvent(window, 'load'); await helper.awaitEvent(window, 'load');
} }
async function setViewportSizeForBrowser(viewportSize, browser, window) {
await waitForWindowReady(window);
if (viewportSize) {
const {width, height} = viewportSize;
const rect = browser.getBoundingClientRect();
window.resizeBy(width - rect.width, height - rect.height);
browser.style.setProperty('min-width', width + 'px');
browser.style.setProperty('min-height', height + 'px');
browser.style.setProperty('max-width', width + 'px');
browser.style.setProperty('max-height', height + 'px');
} else {
browser.style.removeProperty('min-width');
browser.style.removeProperty('min-height');
browser.style.removeProperty('max-width');
browser.style.removeProperty('max-height');
}
const rect = browser.getBoundingClientRect();
return { width: rect.width, height: rect.height };
}
TargetRegistry.Events = { TargetRegistry.Events = {
TargetCreated: Symbol('TargetRegistry.Events.TargetCreated'), TargetCreated: Symbol('TargetRegistry.Events.TargetCreated'),
TargetDestroyed: Symbol('TargetRegistry.Events.TargetDestroyed'), TargetDestroyed: Symbol('TargetRegistry.Events.TargetDestroyed'),

View file

@ -6,7 +6,6 @@ var EXPORTED_SYMBOLS = ["Juggler", "JugglerFactory"];
const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm"); const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
const {ComponentUtils} = ChromeUtils.import("resource://gre/modules/ComponentUtils.jsm"); const {ComponentUtils} = ChromeUtils.import("resource://gre/modules/ComponentUtils.jsm");
const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
const {Dispatcher} = ChromeUtils.import("chrome://juggler/content/protocol/Dispatcher.js"); const {Dispatcher} = ChromeUtils.import("chrome://juggler/content/protocol/Dispatcher.js");
const {BrowserHandler} = ChromeUtils.import("chrome://juggler/content/protocol/BrowserHandler.js"); const {BrowserHandler} = ChromeUtils.import("chrome://juggler/content/protocol/BrowserHandler.js");
const {NetworkObserver} = ChromeUtils.import("chrome://juggler/content/NetworkObserver.js"); const {NetworkObserver} = ChromeUtils.import("chrome://juggler/content/NetworkObserver.js");
@ -35,6 +34,8 @@ ActorManagerParent.addJSWindowActors({
DOMDocElementInserted: {}, DOMDocElementInserted: {},
// Also, listening to DOMContentLoaded. // Also, listening to DOMContentLoaded.
DOMContentLoaded: {}, DOMContentLoaded: {},
DOMWillOpenModalDialog: {},
DOMModalDialogClosed: {},
}, },
}, },
allFrames: true, allFrames: true,
@ -104,7 +105,10 @@ class Juggler {
}; };
// Force create hidden window here, otherwise its creation later closes the web socket! // Force create hidden window here, otherwise its creation later closes the web socket!
// Since https://phabricator.services.mozilla.com/D219834, hiddenDOMWindow is only available on MacOS.
if (Services.appShell.hasHiddenWindow) {
Services.appShell.hiddenDOMWindow; Services.appShell.hiddenDOMWindow;
}
let pipeStopped = false; let pipeStopped = false;
let browserHandler; let browserHandler;
@ -131,13 +135,13 @@ class Juggler {
}; };
pipe.init(connection); pipe.init(connection);
const dispatcher = new Dispatcher(connection); const dispatcher = new Dispatcher(connection);
browserHandler = new BrowserHandler(dispatcher.rootSession(), dispatcher, targetRegistry, () => { browserHandler = new BrowserHandler(dispatcher.rootSession(), dispatcher, targetRegistry, browserStartupFinishedPromise, () => {
if (this._silent) if (this._silent)
Services.startup.exitLastWindowClosingSurvivalArea(); Services.startup.exitLastWindowClosingSurvivalArea();
connection.onclose(); connection.onclose();
pipe.stop(); pipe.stop();
pipeStopped = true; pipeStopped = true;
}, () => browserStartupFinishedPromise); });
dispatcher.rootSession().setHandler(browserHandler); dispatcher.rootSession().setHandler(browserHandler);
loadStyleSheet(); loadStyleSheet();
dump(`\nJuggler listening to the pipe\n`); dump(`\nJuggler listening to the pipe\n`);

View file

@ -14,10 +14,12 @@ const {Runtime} = ChromeUtils.import('chrome://juggler/content/content/Runtime.j
const helper = new Helper(); const helper = new Helper();
class FrameTree { class FrameTree {
constructor(rootDocShell) { constructor(rootBrowsingContext) {
helper.decorateAsEventEmitter(this); helper.decorateAsEventEmitter(this);
this._browsingContextGroup = rootDocShell.browsingContext.group; this._rootBrowsingContext = rootBrowsingContext;
this._browsingContextGroup = rootBrowsingContext.group;
if (!this._browsingContextGroup.__jugglerFrameTrees) if (!this._browsingContextGroup.__jugglerFrameTrees)
this._browsingContextGroup.__jugglerFrameTrees = new Set(); this._browsingContextGroup.__jugglerFrameTrees = new Set();
this._browsingContextGroup.__jugglerFrameTrees.add(this); this._browsingContextGroup.__jugglerFrameTrees.add(this);
@ -29,12 +31,14 @@ class FrameTree {
this._runtime = new Runtime(false /* isWorker */); this._runtime = new Runtime(false /* isWorker */);
this._workers = new Map(); this._workers = new Map();
this._docShellToFrame = new Map();
this._frameIdToFrame = new Map(); this._frameIdToFrame = new Map();
this._pageReady = false; this._pageReady = false;
this._javaScriptDisabled = false; this._javaScriptDisabled = false;
this._mainFrame = this._createFrame(rootDocShell); for (const browsingContext of helper.collectAllBrowsingContexts(rootBrowsingContext))
const webProgress = rootDocShell.QueryInterface(Ci.nsIInterfaceRequestor) this._createFrame(browsingContext);
this._mainFrame = this.frameForBrowsingContext(rootBrowsingContext);
const webProgress = rootBrowsingContext.docShell.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebProgress); .getInterface(Ci.nsIWebProgress);
this.QueryInterface = ChromeUtils.generateQI([ this.QueryInterface = ChromeUtils.generateQI([
Ci.nsIWebProgressListener, Ci.nsIWebProgressListener,
@ -42,8 +46,6 @@ class FrameTree {
Ci.nsISupportsWeakReference, Ci.nsISupportsWeakReference,
]); ]);
this._addedScrollbarsStylesheetSymbol = Symbol('_addedScrollbarsStylesheetSymbol');
this._wdm = Cc["@mozilla.org/dom/workers/workerdebuggermanager;1"].createInstance(Ci.nsIWorkerDebuggerManager); this._wdm = Cc["@mozilla.org/dom/workers/workerdebuggermanager;1"].createInstance(Ci.nsIWorkerDebuggerManager);
this._wdmListener = { this._wdmListener = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIWorkerDebuggerManagerListener]), QueryInterface: ChromeUtils.generateQI([Ci.nsIWorkerDebuggerManagerListener]),
@ -57,12 +59,29 @@ class FrameTree {
const flags = Ci.nsIWebProgress.NOTIFY_STATE_DOCUMENT | const flags = Ci.nsIWebProgress.NOTIFY_STATE_DOCUMENT |
Ci.nsIWebProgress.NOTIFY_LOCATION; Ci.nsIWebProgress.NOTIFY_LOCATION;
this._eventListeners = [ this._eventListeners = [
helper.addObserver((docShell, topic, loadIdentifier) => {
const frame = this.frameForDocShell(docShell);
if (!frame)
return;
frame._pendingNavigationId = helper.toProtocolNavigationId(loadIdentifier);
this.emit(FrameTree.Events.NavigationStarted, frame);
}, 'juggler-navigation-started-renderer'),
helper.addObserver(this._onDOMWindowCreated.bind(this), 'content-document-global-created'), helper.addObserver(this._onDOMWindowCreated.bind(this), 'content-document-global-created'),
helper.addObserver(this._onDOMWindowCreated.bind(this), 'juggler-dom-window-reused'), helper.addObserver(this._onDOMWindowCreated.bind(this), 'juggler-dom-window-reused'),
helper.addObserver(subject => this._onDocShellCreated(subject.QueryInterface(Ci.nsIDocShell)), 'webnavigation-create'), helper.addObserver((browsingContext, topic, why) => {
helper.addObserver(subject => this._onDocShellDestroyed(subject.QueryInterface(Ci.nsIDocShell)), 'webnavigation-destroy'), this._onBrowsingContextAttached(browsingContext);
}, 'browsing-context-attached'),
helper.addObserver((browsingContext, topic, why) => {
this._onBrowsingContextDetached(browsingContext);
}, 'browsing-context-discarded'),
helper.addObserver((subject, topic, eventInfo) => {
const [type, jugglerEventId] = eventInfo.split(' ');
this.emit(FrameTree.Events.InputEvent, { type, jugglerEventId: +(jugglerEventId ?? '0') });
}, 'juggler-mouse-event-hit-renderer'),
helper.addProgressListener(webProgress, this, flags), helper.addProgressListener(webProgress, this, flags),
]; ];
this._dragEventListeners = [];
} }
workers() { workers() {
@ -105,29 +124,16 @@ class FrameTree {
return null; return null;
if (!workerDebugger.window) if (!workerDebugger.window)
return null; return null;
const docShell = workerDebugger.window.docShell; return this.frameForDocShell(workerDebugger.window.docShell);
return this._docShellToFrame.get(docShell) || null;
} }
_onDOMWindowCreated(window) { _onDOMWindowCreated(window) {
if (!window[this._addedScrollbarsStylesheetSymbol] && this.scrollbarsHidden) { const frame = this.frameForDocShell(window.docShell);
const styleSheetService = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
const ioService = Cc["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
const uri = ioService.newURI('chrome://juggler/content/content/hidden-scrollbars.css', null, null);
const sheet = styleSheetService.preloadSheet(uri, styleSheetService.AGENT_SHEET);
window.windowUtils.addSheet(sheet, styleSheetService.AGENT_SHEET);
window[this._addedScrollbarsStylesheetSymbol] = true;
}
const frame = this._docShellToFrame.get(window.docShell) || null;
if (!frame) if (!frame)
return; return;
frame._onGlobalObjectCleared(); frame._onGlobalObjectCleared();
} }
setScrollbarsHidden(hidden) {
this.scrollbarsHidden = hidden;
}
setJavaScriptDisabled(javaScriptDisabled) { setJavaScriptDisabled(javaScriptDisabled) {
this._javaScriptDisabled = javaScriptDisabled; this._javaScriptDisabled = javaScriptDisabled;
for (const frame of this.frames()) for (const frame of this.frames())
@ -157,8 +163,19 @@ class FrameTree {
allFramesInBrowsingContextGroup(group) { allFramesInBrowsingContextGroup(group) {
const frames = []; const frames = [];
for (const frameTree of (group.__jugglerFrameTrees || [])) for (const frameTree of (group.__jugglerFrameTrees || [])) {
frames.push(...frameTree.frames()); for (const frame of frameTree.frames()) {
try {
// Try accessing docShell and domWindow to filter out dead frames.
// This might happen for print-preview frames, but maybe for something else as well.
frame.docShell();
frame.domWindow();
frames.push(frame);
} catch (e) {
dump(`WARNING: unable to access docShell and domWindow of the frame[id=${frame.id()}]\n`);
}
}
}
return frames; return frames;
} }
@ -182,8 +199,18 @@ class FrameTree {
frame._addBinding(worldName, name, script); frame._addBinding(worldName, name, script);
} }
frameForBrowsingContext(browsingContext) {
if (!browsingContext)
return null;
const frameId = helper.browsingContextToFrameId(browsingContext);
return this._frameIdToFrame.get(frameId) ?? null;
}
frameForDocShell(docShell) { frameForDocShell(docShell) {
return this._docShellToFrame.get(docShell) || null; if (!docShell)
return null;
const frameId = helper.browsingContextToFrameId(docShell.browsingContext);
return this._frameIdToFrame.get(frameId) ?? null;
} }
frame(frameId) { frame(frameId) {
@ -211,6 +238,51 @@ class FrameTree {
this._wdm.removeListener(this._wdmListener); this._wdm.removeListener(this._wdmListener);
this._runtime.dispose(); this._runtime.dispose();
helper.removeListeners(this._eventListeners); helper.removeListeners(this._eventListeners);
helper.removeListeners(this._dragEventListeners);
}
onWindowEvent(event) {
if (event.type !== 'DOMDocElementInserted' || !event.target.ownerGlobal)
return;
const docShell = event.target.ownerGlobal.docShell;
const frame = this.frameForDocShell(docShell);
if (!frame) {
dump(`WARNING: ${event.type} for unknown frame ${helper.browsingContextToFrameId(docShell.browsingContext)}\n`);
return;
}
if (frame._pendingNavigationId) {
docShell.QueryInterface(Ci.nsIWebNavigation);
this._frameNavigationCommitted(frame, docShell.currentURI.spec);
}
if (frame === this._mainFrame) {
helper.removeListeners(this._dragEventListeners);
const chromeEventHandler = docShell.chromeEventHandler;
const options = {
mozSystemGroup: true,
capture: true,
};
const emitInputEvent = (event) => this.emit(FrameTree.Events.InputEvent, { type: event.type, jugglerEventId: 0 });
// Drag events are dispatched from content process, so these we don't see in the
// `juggler-mouse-event-hit-renderer` instrumentation.
this._dragEventListeners = [
helper.addEventListener(chromeEventHandler, 'dragstart', emitInputEvent, options),
helper.addEventListener(chromeEventHandler, 'dragover', emitInputEvent, options),
];
}
}
_frameNavigationCommitted(frame, url) {
for (const subframe of frame._children)
this._detachFrame(subframe);
const navigationId = frame._pendingNavigationId;
frame._pendingNavigationId = null;
frame._lastCommittedNavigationId = navigationId;
frame._url = url;
this.emit(FrameTree.Events.NavigationCommitted, frame);
if (frame === this._mainFrame)
this.forcePageReady();
} }
onStateChange(progress, request, flag, status) { onStateChange(progress, request, flag, status) {
@ -218,11 +290,9 @@ class FrameTree {
return; return;
const channel = request.QueryInterface(Ci.nsIChannel); const channel = request.QueryInterface(Ci.nsIChannel);
const docShell = progress.DOMWindow.docShell; const docShell = progress.DOMWindow.docShell;
const frame = this._docShellToFrame.get(docShell); const frame = this.frameForDocShell(docShell);
if (!frame) { if (!frame)
dump(`WARNING: got a state changed event for un-tracked docshell!\n`);
return; return;
}
if (!channel.isDocument) { if (!channel.isDocument) {
// Somehow, we can get worker requests here, // Somehow, we can get worker requests here,
@ -230,32 +300,11 @@ class FrameTree {
return; return;
} }
const isStart = flag & Ci.nsIWebProgressListener.STATE_START;
const isTransferring = flag & Ci.nsIWebProgressListener.STATE_TRANSFERRING;
const isStop = flag & Ci.nsIWebProgressListener.STATE_STOP; const isStop = flag & Ci.nsIWebProgressListener.STATE_STOP;
if (isStop && frame._pendingNavigationId && status) {
if (isStart) {
// Starting a new navigation.
frame._pendingNavigationId = channelId(channel);
frame._pendingNavigationURL = channel.URI.spec;
this.emit(FrameTree.Events.NavigationStarted, frame);
} else if (isTransferring || (isStop && frame._pendingNavigationId && !status)) {
// Navigation is committed.
for (const subframe of frame._children)
this._detachFrame(subframe);
const navigationId = frame._pendingNavigationId;
frame._pendingNavigationId = null;
frame._pendingNavigationURL = null;
frame._lastCommittedNavigationId = navigationId;
frame._url = channel.URI.spec;
this.emit(FrameTree.Events.NavigationCommitted, frame);
if (frame === this._mainFrame)
this.forcePageReady();
} else if (isStop && frame._pendingNavigationId && status) {
// Navigation is aborted. // Navigation is aborted.
const navigationId = frame._pendingNavigationId; const navigationId = frame._pendingNavigationId;
frame._pendingNavigationId = null; frame._pendingNavigationId = null;
frame._pendingNavigationURL = null;
// Always report download navigation as failure to match other browsers. // Always report download navigation as failure to match other browsers.
const errorText = helper.getNetworkErrorStatusText(status); const errorText = helper.getNetworkErrorStatusText(status);
this.emit(FrameTree.Events.NavigationAborted, frame, navigationId, errorText); this.emit(FrameTree.Events.NavigationAborted, frame, navigationId, errorText);
@ -266,7 +315,7 @@ class FrameTree {
onLocationChange(progress, request, location, flags) { onLocationChange(progress, request, location, flags) {
const docShell = progress.DOMWindow.docShell; const docShell = progress.DOMWindow.docShell;
const frame = this._docShellToFrame.get(docShell); const frame = this.frameForDocShell(docShell);
const sameDocumentNavigation = !!(flags & Ci.nsIWebProgressListener.LOCATION_CHANGE_SAME_DOCUMENT); const sameDocumentNavigation = !!(flags & Ci.nsIWebProgressListener.LOCATION_CHANGE_SAME_DOCUMENT);
if (frame && sameDocumentNavigation) { if (frame && sameDocumentNavigation) {
frame._url = location.spec; frame._url = location.spec;
@ -274,28 +323,29 @@ class FrameTree {
} }
} }
_onDocShellCreated(docShell) { _onBrowsingContextAttached(browsingContext) {
// Bug 1142752: sometimes, the docshell appears to be immediately // If this browsing context doesn't belong to our frame tree - do nothing.
// destroyed, bailout early to prevent random exceptions. if (browsingContext.top !== this._rootBrowsingContext)
if (docShell.isBeingDestroyed())
return; return;
// If this docShell doesn't belong to our frame tree - do nothing. this._createFrame(browsingContext);
let root = docShell;
while (root.parent)
root = root.parent;
if (root === this._mainFrame._docShell)
this._createFrame(docShell);
} }
_createFrame(docShell) { _onBrowsingContextDetached(browsingContext) {
const parentFrame = this._docShellToFrame.get(docShell.parent) || null; const frame = this.frameForBrowsingContext(browsingContext);
if (frame)
this._detachFrame(frame);
}
_createFrame(browsingContext) {
const parentFrame = this.frameForBrowsingContext(browsingContext.parent);
if (!parentFrame && this._mainFrame) { if (!parentFrame && this._mainFrame) {
dump(`WARNING: found docShell with the same root, but no parent!\n`); dump(`WARNING: found docShell with the same root, but no parent!\n`);
return; return;
} }
const frame = new Frame(this, this._runtime, docShell, parentFrame); const frame = new Frame(this, this._runtime, browsingContext, parentFrame);
this._docShellToFrame.set(docShell, frame);
this._frameIdToFrame.set(frame.id(), frame); this._frameIdToFrame.set(frame.id(), frame);
if (browsingContext.docShell?.domWindow && browsingContext.docShell?.domWindow.location)
frame._url = browsingContext.docShell.domWindow.location.href;
this.emit(FrameTree.Events.FrameAttached, frame); this.emit(FrameTree.Events.FrameAttached, frame);
// Create execution context **after** reporting frame. // Create execution context **after** reporting frame.
// This is our protocol contract. // This is our protocol contract.
@ -304,12 +354,6 @@ class FrameTree {
return frame; return frame;
} }
_onDocShellDestroyed(docShell) {
const frame = this._docShellToFrame.get(docShell);
if (frame)
this._detachFrame(frame);
}
_detachFrame(frame) { _detachFrame(frame) {
// Detach all children first // Detach all children first
for (const subframe of frame._children) for (const subframe of frame._children)
@ -319,7 +363,6 @@ class FrameTree {
// as it confuses the client. // as it confuses the client.
return; return;
} }
this._docShellToFrame.delete(frame._docShell);
this._frameIdToFrame.delete(frame.id()); this._frameIdToFrame.delete(frame.id());
if (frame._parentFrame) if (frame._parentFrame)
frame._parentFrame._children.delete(frame); frame._parentFrame._children.delete(frame);
@ -344,6 +387,7 @@ FrameTree.Events = {
NavigationAborted: 'navigationaborted', NavigationAborted: 'navigationaborted',
SameDocumentNavigation: 'samedocumentnavigation', SameDocumentNavigation: 'samedocumentnavigation',
PageReady: 'pageready', PageReady: 'pageready',
InputEvent: 'inputevent',
}; };
class IsolatedWorld { class IsolatedWorld {
@ -355,16 +399,14 @@ class IsolatedWorld {
} }
class Frame { class Frame {
constructor(frameTree, runtime, docShell, parentFrame) { constructor(frameTree, runtime, browsingContext, parentFrame) {
this._frameTree = frameTree; this._frameTree = frameTree;
this._runtime = runtime; this._runtime = runtime;
this._docShell = docShell; this._browsingContext = browsingContext;
this._children = new Set(); this._children = new Set();
this._frameId = helper.browsingContextToFrameId(this._docShell.browsingContext); this._frameId = helper.browsingContextToFrameId(browsingContext);
this._parentFrame = null; this._parentFrame = null;
this._url = ''; this._url = '';
if (docShell.domWindow && docShell.domWindow.location)
this._url = docShell.domWindow.location.href;
if (parentFrame) { if (parentFrame) {
this._parentFrame = parentFrame; this._parentFrame = parentFrame;
parentFrame._children.add(this); parentFrame._children.add(this);
@ -372,7 +414,6 @@ class Frame {
this._lastCommittedNavigationId = null; this._lastCommittedNavigationId = null;
this._pendingNavigationId = null; this._pendingNavigationId = null;
this._pendingNavigationURL = null;
this._textInputProcessor = null; this._textInputProcessor = null;
@ -505,7 +546,7 @@ class Frame {
_onGlobalObjectCleared() { _onGlobalObjectCleared() {
const webSocketService = this._frameTree._webSocketEventService; const webSocketService = this._frameTree._webSocketEventService;
if (this._webSocketListenerInnerWindowId) if (this._webSocketListenerInnerWindowId && webSocketService.hasListenerFor(this._webSocketListenerInnerWindowId))
webSocketService.removeListener(this._webSocketListenerInnerWindowId, this._webSocketListener); webSocketService.removeListener(this._webSocketListenerInnerWindowId, this._webSocketListener);
this._webSocketListenerInnerWindowId = this.domWindow().windowGlobalChild.innerWindowId; this._webSocketListenerInnerWindowId = this.domWindow().windowGlobalChild.innerWindowId;
webSocketService.addListener(this._webSocketListenerInnerWindowId, this._webSocketListener); webSocketService.addListener(this._webSocketListenerInnerWindowId, this._webSocketListener);
@ -540,8 +581,8 @@ class Frame {
} }
_updateJavaScriptDisabled() { _updateJavaScriptDisabled() {
if (this._docShell.browsingContext.currentWindowContext) if (this._browsingContext.currentWindowContext)
this._docShell.browsingContext.currentWindowContext.allowJavascript = !this._frameTree._javaScriptDisabled; this._browsingContext.currentWindowContext.allowJavascript = !this._frameTree._javaScriptDisabled;
} }
mainExecutionContext() { mainExecutionContext() {
@ -552,7 +593,7 @@ class Frame {
if (!this._textInputProcessor) { if (!this._textInputProcessor) {
this._textInputProcessor = Cc["@mozilla.org/text-input-processor;1"].createInstance(Ci.nsITextInputProcessor); this._textInputProcessor = Cc["@mozilla.org/text-input-processor;1"].createInstance(Ci.nsITextInputProcessor);
} }
this._textInputProcessor.beginInputTransactionForTests(this._docShell.DOMWindow); this._textInputProcessor.beginInputTransactionForTests(this.docShell().DOMWindow);
return this._textInputProcessor; return this._textInputProcessor;
} }
@ -560,24 +601,20 @@ class Frame {
return this._pendingNavigationId; return this._pendingNavigationId;
} }
pendingNavigationURL() {
return this._pendingNavigationURL;
}
lastCommittedNavigationId() { lastCommittedNavigationId() {
return this._lastCommittedNavigationId; return this._lastCommittedNavigationId;
} }
docShell() { docShell() {
return this._docShell; return this._browsingContext.docShell;
} }
domWindow() { domWindow() {
return this._docShell.domWindow; return this.docShell()?.domWindow;
} }
name() { name() {
const frameElement = this._docShell.domWindow.frameElement; const frameElement = this.domWindow()?.frameElement;
let name = ''; let name = '';
if (frameElement) if (frameElement)
name = frameElement.getAttribute('name') || frameElement.getAttribute('id') || ''; name = frameElement.getAttribute('name') || frameElement.getAttribute('id') || '';
@ -606,7 +643,7 @@ class Worker {
workerDebugger.initialize('chrome://juggler/content/content/WorkerMain.js'); workerDebugger.initialize('chrome://juggler/content/content/WorkerMain.js');
this._channel = new SimpleChannel(`content::worker[${this._workerId}]`); this._channel = new SimpleChannel(`content::worker[${this._workerId}]`, 'worker-' + this._workerId);
this._channel.setTransport({ this._channel.setTransport({
sendMessage: obj => workerDebugger.postMessage(JSON.stringify(obj)), sendMessage: obj => workerDebugger.postMessage(JSON.stringify(obj)),
dispose: () => {}, dispose: () => {},

View file

@ -1,7 +1,6 @@
"use strict"; "use strict";
const { Helper } = ChromeUtils.import('chrome://juggler/content/Helper.js'); const { Helper } = ChromeUtils.import('chrome://juggler/content/Helper.js');
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
const { initialize } = ChromeUtils.import('chrome://juggler/content/content/main.js'); const { initialize } = ChromeUtils.import('chrome://juggler/content/content/main.js');
const Ci = Components.interfaces; const Ci = Components.interfaces;
@ -9,6 +8,8 @@ const helper = new Helper();
let sameProcessInstanceNumber = 0; let sameProcessInstanceNumber = 0;
const topBrowingContextToAgents = new Map();
class JugglerFrameChild extends JSWindowActorChild { class JugglerFrameChild extends JSWindowActorChild {
constructor() { constructor() {
super(); super();
@ -17,36 +18,66 @@ class JugglerFrameChild extends JSWindowActorChild {
} }
handleEvent(aEvent) { handleEvent(aEvent) {
if (this._agents && aEvent.target === this.document) const agents = this._agents();
this._agents.pageAgent.onWindowEvent(aEvent); if (!agents)
return;
if (aEvent.type === 'DOMWillOpenModalDialog') {
agents.channel.pause();
return;
}
if (aEvent.type === 'DOMModalDialogClosed') {
agents.channel.resumeSoon();
return;
}
if (aEvent.target === this.document) {
agents.pageAgent.onWindowEvent(aEvent);
agents.frameTree.onWindowEvent(aEvent);
}
}
_agents() {
return topBrowingContextToAgents.get(this.browsingContext.top);
} }
actorCreated() { actorCreated() {
this.actorName = `content::${this.browsingContext.browserId}/${this.browsingContext.id}/${++sameProcessInstanceNumber}`; this.actorName = `content::${this.browsingContext.browserId}/${this.browsingContext.id}/${++sameProcessInstanceNumber}`;
this._eventListeners.push(helper.addEventListener(this.contentWindow, 'load', event => { this._eventListeners.push(helper.addEventListener(this.contentWindow, 'load', event => {
this._agents?.pageAgent.onWindowEvent(event); this._agents()?.pageAgent.onWindowEvent(event);
})); }));
if (this.document.documentURI.startsWith('moz-extension://')) if (this.document.documentURI.startsWith('moz-extension://'))
return; return;
this._agents = initialize(this.browsingContext, this.docShell, this);
// Child frame events will be forwarded to related top-level agents.
if (this.browsingContext.parent)
return;
let agents = topBrowingContextToAgents.get(this.browsingContext);
if (!agents) {
agents = initialize(this.browsingContext, this.docShell);
topBrowingContextToAgents.set(this.browsingContext, agents);
} }
agents.channel.bindToActor(this);
_dispose() { agents.actor = this;
helper.removeListeners(this._eventListeners);
// We do not cleanup since agents are shared for all frames in the process.
// TODO: restore the cleanup.
// Reset transport so that all messages will be pending and will not throw any errors.
// this._channel.resetTransport();
// this._agents.pageAgent.dispose();
// this._agents.frameTree.dispose();
// this._agents = undefined;
} }
didDestroy() { didDestroy() {
this._dispose(); helper.removeListeners(this._eventListeners);
if (this.browsingContext.parent)
return;
const agents = topBrowingContextToAgents.get(this.browsingContext);
// The agents are already re-bound to a new actor.
if (agents?.actor !== this)
return;
topBrowingContextToAgents.delete(this.browsingContext);
agents.channel.resetTransport();
agents.pageAgent.dispose();
agents.frameTree.dispose();
} }
receiveMessage() { } receiveMessage() { }

View file

@ -3,13 +3,15 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict"; "use strict";
const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
const Ci = Components.interfaces; const Ci = Components.interfaces;
const Cr = Components.results; const Cr = Components.results;
const Cu = Components.utils; const Cu = Components.utils;
const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js'); const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
const {NetUtil} = ChromeUtils.import('resource://gre/modules/NetUtil.jsm'); const {NetUtil} = ChromeUtils.import('resource://gre/modules/NetUtil.jsm');
const {setTimeout} = ChromeUtils.import('resource://gre/modules/Timer.jsm');
const dragService = Cc["@mozilla.org/widget/dragservice;1"].getService( const dragService = Cc["@mozilla.org/widget/dragservice;1"].getService(
Ci.nsIDragService Ci.nsIDragService
); );
@ -60,8 +62,6 @@ class PageAgent {
const docShell = frameTree.mainFrame().docShell(); const docShell = frameTree.mainFrame().docShell();
this._docShell = docShell; this._docShell = docShell;
this._initialDPPX = docShell.contentViewer.overrideDPPX;
this._dragging = false;
// Dispatch frameAttached events for all initial frames // Dispatch frameAttached events for all initial frames
for (const frame of this._frameTree.frames()) { for (const frame of this._frameTree.frames()) {
@ -114,6 +114,17 @@ class PageAgent {
helper.on(this._frameTree, 'websocketframesent', event => this._browserPage.emit('webSocketFrameSent', event)), helper.on(this._frameTree, 'websocketframesent', event => this._browserPage.emit('webSocketFrameSent', event)),
helper.on(this._frameTree, 'websocketframereceived', event => this._browserPage.emit('webSocketFrameReceived', event)), helper.on(this._frameTree, 'websocketframereceived', event => this._browserPage.emit('webSocketFrameReceived', event)),
helper.on(this._frameTree, 'websocketclosed', event => this._browserPage.emit('webSocketClosed', event)), helper.on(this._frameTree, 'websocketclosed', event => this._browserPage.emit('webSocketClosed', event)),
helper.on(this._frameTree, 'inputevent', inputEvent => {
this._browserPage.emit('pageInputEvent', inputEvent);
if (inputEvent.type === 'dragstart') {
// After the dragStart event is dispatched and handled by Web,
// it might or might not create a new drag session, depending on its preventing default.
setTimeout(() => {
const session = this._getCurrentDragSession();
this._browserPage.emit('pageInputEvent', { type: 'juggler-drag-finalized', dragSessionStarted: !!session });
}, 0);
}
}),
helper.addObserver(this._onWindowOpen.bind(this), 'webNavigation-createdNavigationTarget-from-js'), helper.addObserver(this._onWindowOpen.bind(this), 'webNavigation-createdNavigationTarget-from-js'),
this._runtime.events.onErrorFromWorker((domWindow, message, stack) => { this._runtime.events.onErrorFromWorker((domWindow, message, stack) => {
const frame = this._frameTree.frameForDocShell(domWindow.docShell); const frame = this._frameTree.frameForDocShell(domWindow.docShell);
@ -135,15 +146,13 @@ class PageAgent {
crash: this._crash.bind(this), crash: this._crash.bind(this),
describeNode: this._describeNode.bind(this), describeNode: this._describeNode.bind(this),
dispatchKeyEvent: this._dispatchKeyEvent.bind(this), dispatchKeyEvent: this._dispatchKeyEvent.bind(this),
dispatchMouseEvent: this._dispatchMouseEvent.bind(this), dispatchDragEvent: this._dispatchDragEvent.bind(this),
dispatchTouchEvent: this._dispatchTouchEvent.bind(this), dispatchTouchEvent: this._dispatchTouchEvent.bind(this),
dispatchTapEvent: this._dispatchTapEvent.bind(this), dispatchTapEvent: this._dispatchTapEvent.bind(this),
getContentQuads: this._getContentQuads.bind(this), getContentQuads: this._getContentQuads.bind(this),
getFullAXTree: this._getFullAXTree.bind(this), getFullAXTree: this._getFullAXTree.bind(this),
insertText: this._insertText.bind(this), insertText: this._insertText.bind(this),
navigate: this._navigate.bind(this),
scrollIntoViewIfNeeded: this._scrollIntoViewIfNeeded.bind(this), scrollIntoViewIfNeeded: this._scrollIntoViewIfNeeded.bind(this),
setCacheDisabled: this._setCacheDisabled.bind(this),
setFileInputFiles: this._setFileInputFiles.bind(this), setFileInputFiles: this._setFileInputFiles.bind(this),
evaluate: this._runtime.evaluate.bind(this._runtime), evaluate: this._runtime.evaluate.bind(this._runtime),
callFunction: this._runtime.callFunction.bind(this._runtime), callFunction: this._runtime.callFunction.bind(this._runtime),
@ -153,15 +162,6 @@ class PageAgent {
]; ];
} }
_setCacheDisabled({cacheDisabled}) {
const enable = Ci.nsIRequest.LOAD_NORMAL;
const disable = Ci.nsIRequest.LOAD_BYPASS_CACHE |
Ci.nsIRequest.INHIBIT_CACHING;
const docShell = this._frameTree.mainFrame().docShell();
docShell.defaultLoadFlags = cacheDisabled ? disable : enable;
}
_emitAllEvents(frame) { _emitAllEvents(frame) {
this._browserPage.emit('pageEventFired', { this._browserPage.emit('pageEventFired', {
frameId: frame.id(), frameId: frame.id(),
@ -286,7 +286,6 @@ class PageAgent {
this._browserPage.emit('pageNavigationStarted', { this._browserPage.emit('pageNavigationStarted', {
frameId: frame.id(), frameId: frame.id(),
navigationId: frame.pendingNavigationId(), navigationId: frame.pendingNavigationId(),
url: frame.pendingNavigationURL(),
}); });
} }
@ -346,39 +345,6 @@ class PageAgent {
helper.removeListeners(this._eventListeners); helper.removeListeners(this._eventListeners);
} }
async _navigate({frameId, url, referer}) {
try {
const uri = NetUtil.newURI(url);
} catch (e) {
throw new Error(`Invalid url: "${url}"`);
}
let referrerURI = null;
let referrerInfo = null;
if (referer) {
try {
referrerURI = NetUtil.newURI(referer);
const ReferrerInfo = Components.Constructor(
'@mozilla.org/referrer-info;1',
'nsIReferrerInfo',
'init'
);
referrerInfo = new ReferrerInfo(Ci.nsIHttpChannel.REFERRER_POLICY_UNSET, true, referrerURI);
} catch (e) {
throw new Error(`Invalid referer: "${referer}"`);
}
}
const frame = this._frameTree.frame(frameId);
const docShell = frame.docShell().QueryInterface(Ci.nsIWebNavigation);
docShell.loadURI(url, {
triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
flags: Ci.nsIWebNavigation.LOAD_FLAGS_NONE,
referrerInfo,
postData: null,
headers: null,
});
return {navigationId: frame.pendingNavigationId(), navigationURL: frame.pendingNavigationURL()};
}
async _adoptNode({frameId, objectId, executionContextId}) { async _adoptNode({frameId, objectId, executionContextId}) {
const frame = this._frameTree.frame(frameId); const frame = this._frameTree.frame(frameId);
if (!frame) if (!frame)
@ -405,8 +371,19 @@ class PageAgent {
const unsafeObject = frame.unsafeObject(objectId); const unsafeObject = frame.unsafeObject(objectId);
if (!unsafeObject) if (!unsafeObject)
throw new Error('Object is not input!'); throw new Error('Object is not input!');
const nsFiles = await Promise.all(files.map(filePath => File.createFromFileName(filePath))); let nsFiles;
if (unsafeObject.webkitdirectory) {
nsFiles = await new Directory(files[0]).getFiles(true);
} else {
nsFiles = await Promise.all(files.map(filePath => File.createFromFileName(filePath)));
}
unsafeObject.mozSetFileArray(nsFiles); unsafeObject.mozSetFileArray(nsFiles);
const events = [
new (frame.domWindow().Event)('input', { bubbles: true, cancelable: true, composed: true }),
new (frame.domWindow().Event)('change', { bubbles: true, cancelable: true, composed: true }),
];
for (const event of events)
unsafeObject.dispatchEvent(event);
} }
_getContentQuads({objectId, frameId}) { _getContentQuads({objectId, frameId}) {
@ -485,18 +462,8 @@ class PageAgent {
} }
async _dispatchKeyEvent({type, keyCode, code, key, repeat, location, text}) { async _dispatchKeyEvent({type, keyCode, code, key, repeat, location, text}) {
// key events don't fire if we are dragging.
if (this._dragging) {
if (type === 'keydown' && key === 'Escape')
this._cancelDragIfNeeded();
return;
}
const frame = this._frameTree.mainFrame(); const frame = this._frameTree.mainFrame();
const tip = frame.textInputProcessor(); const tip = frame.textInputProcessor();
if (key === 'Meta' && Services.appinfo.OS !== 'Darwin')
key = 'OS';
else if (key === 'OS' && Services.appinfo.OS === 'Darwin')
key = 'Meta';
let keyEvent = new (frame.domWindow().KeyboardEvent)("", { let keyEvent = new (frame.domWindow().KeyboardEvent)("", {
key, key,
code, code,
@ -532,7 +499,9 @@ class PageAgent {
touchPoints.map(point => point.radiusY === undefined ? 1.0 : point.radiusY), touchPoints.map(point => point.radiusY === undefined ? 1.0 : point.radiusY),
touchPoints.map(point => point.rotationAngle === undefined ? 0.0 : point.rotationAngle), touchPoints.map(point => point.rotationAngle === undefined ? 0.0 : point.rotationAngle),
touchPoints.map(point => point.force === undefined ? 1.0 : point.force), touchPoints.map(point => point.force === undefined ? 1.0 : point.force),
touchPoints.length, touchPoints.map(point => 0),
touchPoints.map(point => 0),
touchPoints.map(point => 0),
modifiers); modifiers);
return {defaultPrevented}; return {defaultPrevented};
} }
@ -546,83 +515,31 @@ class PageAgent {
false /* aIgnoreRootScrollFrame */, false /* aIgnoreRootScrollFrame */,
true /* aFlushLayout */); true /* aFlushLayout */);
const {defaultPrevented: startPrevented} = await this._dispatchTouchEvent({ await this._dispatchTouchEvent({
type: 'touchstart', type: 'touchstart',
modifiers, modifiers,
touchPoints: [{x, y}] touchPoints: [{x, y}]
}); });
const {defaultPrevented: endPrevented} = await this._dispatchTouchEvent({ await this._dispatchTouchEvent({
type: 'touchend', type: 'touchend',
modifiers, modifiers,
touchPoints: [{x, y}] touchPoints: [{x, y}]
}); });
if (startPrevented || endPrevented) }
return;
_getCurrentDragSession() {
const frame = this._frameTree.mainFrame(); const frame = this._frameTree.mainFrame();
frame.domWindow().windowUtils.sendMouseEvent( const domWindow = frame?.domWindow();
'mousemove', return domWindow ? dragService.getCurrentSession(domWindow) : undefined;
x,
y,
0 /*button*/,
0 /*clickCount*/,
modifiers,
false /*aIgnoreRootScrollFrame*/,
undefined /*pressure*/,
5 /*inputSource*/,
undefined /*isDOMEventSynthesized*/,
false /*isWidgetEventSynthesized*/,
0 /*buttons*/,
undefined /*pointerIdentifier*/,
true /*disablePointerEvent*/);
frame.domWindow().windowUtils.sendMouseEvent(
'mousedown',
x,
y,
0 /*button*/,
1 /*clickCount*/,
modifiers,
false /*aIgnoreRootScrollFrame*/,
undefined /*pressure*/,
5 /*inputSource*/,
undefined /*isDOMEventSynthesized*/,
false /*isWidgetEventSynthesized*/,
1 /*buttons*/,
undefined /*pointerIdentifier*/,
true /*disablePointerEvent*/);
frame.domWindow().windowUtils.sendMouseEvent(
'mouseup',
x,
y,
0 /*button*/,
1 /*clickCount*/,
modifiers,
false /*aIgnoreRootScrollFrame*/,
undefined /*pressure*/,
5 /*inputSource*/,
undefined /*isDOMEventSynthesized*/,
false /*isWidgetEventSynthesized*/,
0 /*buttons*/,
undefined /*pointerIdentifier*/,
true /*disablePointerEvent*/);
} }
_startDragSessionIfNeeded() { async _dispatchDragEvent({type, x, y, modifiers}) {
const sess = dragService.getCurrentSession(); const session = this._getCurrentDragSession();
if (sess) return; const dropEffect = session.dataTransfer.dropEffect;
dragService.startDragSessionForTests(
Ci.nsIDragService.DRAGDROP_ACTION_MOVE |
Ci.nsIDragService.DRAGDROP_ACTION_COPY |
Ci.nsIDragService.DRAGDROP_ACTION_LINK
);
}
_simulateDragEvent(type, x, y, modifiers) { if ((type === 'drop' && dropEffect !== 'none') || type === 'dragover') {
if (type !== 'drop' || dragService.dragAction) { const win = this._frameTree.mainFrame().domWindow();
const window = this._frameTree.mainFrame().domWindow(); win.windowUtils.jugglerSendMouseEvent(
window.windowUtils.sendMouseEvent(
type, type,
x, x,
y, y,
@ -630,75 +547,20 @@ class PageAgent {
0, /*clickCount*/ 0, /*clickCount*/
modifiers, modifiers,
false /*aIgnoreRootScrollFrame*/, false /*aIgnoreRootScrollFrame*/,
undefined /*pressure*/, 0.0 /*pressure*/,
undefined /*inputSource*/, 0 /*inputSource*/,
undefined /*isDOMEventSynthesized*/,
undefined /*isWidgetEventSynthesized*/,
0, /*buttons*/
);
}
if (type === 'drop')
this._cancelDragIfNeeded();
}
_cancelDragIfNeeded() {
this._dragging = false;
const sess = dragService.getCurrentSession();
if (sess)
dragService.endDragSession(true);
}
async _dispatchMouseEvent({type, x, y, button, clickCount, modifiers, buttons}) {
this._startDragSessionIfNeeded();
const trapDrag = subject => {
this._dragging = true;
}
// Don't send mouse events if there is an active drag
if (!this._dragging) {
const frame = this._frameTree.mainFrame();
obs.addObserver(trapDrag, 'on-datatransfer-available');
frame.domWindow().windowUtils.sendMouseEvent(
type,
x,
y,
button,
clickCount,
modifiers,
false /*aIgnoreRootScrollFrame*/,
undefined /*pressure*/,
undefined /*inputSource*/,
true /*isDOMEventSynthesized*/, true /*isDOMEventSynthesized*/,
false /*isWidgetEventSynthesized*/, false /*isWidgetEventSynthesized*/,
buttons); 0 /*buttons*/,
obs.removeObserver(trapDrag, 'on-datatransfer-available'); win.windowUtils.DEFAULT_MOUSE_POINTER_ID /* pointerIdentifier */,
false /*disablePointerEvent*/,
if (type === 'mousedown' && button === 2) { );
frame.domWindow().windowUtils.sendMouseEvent( return;
'contextmenu',
x,
y,
button,
clickCount,
modifiers,
false /*aIgnoreRootScrollFrame*/,
undefined /*pressure*/,
undefined /*inputSource*/,
undefined /*isDOMEventSynthesized*/,
undefined /*isWidgetEventSynthesized*/,
buttons);
} }
} if (type === 'dragend') {
const session = this._getCurrentDragSession();
// update drag state session?.endDragSession(true);
if (this._dragging) { return;
if (type === 'mousemove')
this._simulateDragEvent('dragover', x, y, modifiers);
else if (type === 'mouseup') // firefox will do drops when any mouse button is released
this._simulateDragEvent('drop', x, y, modifiers);
} else {
this._cancelDragIfNeeded();
} }
} }

View file

@ -63,7 +63,6 @@ class Runtime {
if (isWorker) { if (isWorker) {
this._registerWorkerConsoleHandler(); this._registerWorkerConsoleHandler();
} else { } else {
const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
this._registerConsoleServiceListener(Services); this._registerConsoleServiceListener(Services);
this._registerConsoleAPIListener(Services); this._registerConsoleAPIListener(Services);
} }
@ -185,7 +184,13 @@ class Runtime {
if (context._isIsolatedWorldContext()) if (context._isIsolatedWorldContext())
return false; return false;
const domWindow = context._domWindow; const domWindow = context._domWindow;
try {
// `windowGlobalChild` might be dead already; accessing it will throw an error, message in a console,
// and infinite recursion.
return domWindow && domWindow.windowGlobalChild.innerWindowId === wrappedJSObject.innerID; return domWindow && domWindow.windowGlobalChild.innerWindowId === wrappedJSObject.innerID;
} catch (e) {
return false;
}
}); });
if (!executionContext) if (!executionContext)
return; return;
@ -234,8 +239,8 @@ class Runtime {
return {success: true, obj: obj.promiseValue}; return {success: true, obj: obj.promiseValue};
if (obj.promiseState === 'rejected') { if (obj.promiseState === 'rejected') {
const debuggee = executionContext._debuggee; const debuggee = executionContext._debuggee;
exceptionDetails.text = debuggee.executeInGlobalWithBindings('e.message', {e: obj.promiseReason}).return; exceptionDetails.text = debuggee.executeInGlobalWithBindings('e.message', {e: obj.promiseReason}, {useInnerBindings: true}).return;
exceptionDetails.stack = debuggee.executeInGlobalWithBindings('e.stack', {e: obj.promiseReason}).return; exceptionDetails.stack = debuggee.executeInGlobalWithBindings('e.stack', {e: obj.promiseReason}, {useInnerBindings: true}).return;
return {success: false, obj: null}; return {success: false, obj: null};
} }
let resolve, reject; let resolve, reject;
@ -262,8 +267,8 @@ class Runtime {
return; return;
}; };
const debuggee = pendingPromise.executionContext._debuggee; const debuggee = pendingPromise.executionContext._debuggee;
pendingPromise.exceptionDetails.text = debuggee.executeInGlobalWithBindings('e.message', {e: obj.promiseReason}).return; pendingPromise.exceptionDetails.text = debuggee.executeInGlobalWithBindings('e.message', {e: obj.promiseReason}, {useInnerBindings: true}).return;
pendingPromise.exceptionDetails.stack = debuggee.executeInGlobalWithBindings('e.stack', {e: obj.promiseReason}).return; pendingPromise.exceptionDetails.stack = debuggee.executeInGlobalWithBindings('e.stack', {e: obj.promiseReason}, {useInnerBindings: true}).return;
pendingPromise.resolve({success: false, obj: null}); pendingPromise.resolve({success: false, obj: null});
} }
@ -311,7 +316,8 @@ class ExecutionContext {
this._id = generateId(); this._id = generateId();
this._auxData = auxData; this._auxData = auxData;
this._jsonStringifyObject = this._debuggee.executeInGlobal(`((stringify, object) => { this._jsonStringifyObject = this._debuggee.executeInGlobal(`((stringify, object) => {
const oldToJSON = Date.prototype.toJSON; const oldToJSON = Date.prototype?.toJSON;
if (oldToJSON)
Date.prototype.toJSON = undefined; Date.prototype.toJSON = undefined;
const oldArrayToJSON = Array.prototype.toJSON; const oldArrayToJSON = Array.prototype.toJSON;
const oldArrayHadToJSON = Array.prototype.hasOwnProperty('toJSON'); const oldArrayHadToJSON = Array.prototype.hasOwnProperty('toJSON');
@ -325,6 +331,7 @@ class ExecutionContext {
return value; return value;
}); });
if (oldToJSON)
Date.prototype.toJSON = oldToJSON; Date.prototype.toJSON = oldToJSON;
if (oldArrayHadToJSON) if (oldArrayHadToJSON)
Array.prototype.toJSON = oldArrayToJSON; Array.prototype.toJSON = oldArrayToJSON;
@ -434,7 +441,7 @@ class ExecutionContext {
_instanceOf(debuggerObj, rawObj, className) { _instanceOf(debuggerObj, rawObj, className) {
if (this._domWindow) if (this._domWindow)
return rawObj instanceof this._domWindow[className]; return rawObj instanceof this._domWindow[className];
return this._debuggee.executeInGlobalWithBindings('o instanceof this[className]', {o: debuggerObj, className: this._debuggee.makeDebuggeeValue(className)}).return; return this._debuggee.executeInGlobalWithBindings('o instanceof this[className]', {o: debuggerObj, className: this._debuggee.makeDebuggeeValue(className)}, {useInnerBindings: true}).return;
} }
_createRemoteObject(debuggerObj) { _createRemoteObject(debuggerObj) {
@ -524,7 +531,7 @@ class ExecutionContext {
} }
_serialize(obj) { _serialize(obj) {
const result = this._debuggee.executeInGlobalWithBindings('stringify(e)', {e: obj, stringify: this._jsonStringifyObject}); const result = this._debuggee.executeInGlobalWithBindings('stringify(e)', {e: obj, stringify: this._jsonStringifyObject}, {useInnerBindings: true});
if (result.throw) if (result.throw)
throw new Error('Object is not serializable'); throw new Error('Object is not serializable');
return result.return === undefined ? undefined : JSON.parse(result.return); return result.return === undefined ? undefined : JSON.parse(result.return);
@ -553,15 +560,12 @@ class ExecutionContext {
} }
_getResult(completionValue, exceptionDetails = {}) { _getResult(completionValue, exceptionDetails = {}) {
if (!completionValue) { if (!completionValue)
exceptionDetails.text = 'Evaluation terminated!'; throw new Error('evaluation terminated');
exceptionDetails.stack = '';
return {success: false, obj: null};
}
if (completionValue.throw) { if (completionValue.throw) {
if (this._debuggee.executeInGlobalWithBindings('e instanceof Error', {e: completionValue.throw}).return) { if (this._debuggee.executeInGlobalWithBindings('e instanceof Error', {e: completionValue.throw}, {useInnerBindings: true}).return) {
exceptionDetails.text = this._debuggee.executeInGlobalWithBindings('e.message', {e: completionValue.throw}).return; exceptionDetails.text = this._debuggee.executeInGlobalWithBindings('e.message', {e: completionValue.throw}, {useInnerBindings: true}).return;
exceptionDetails.stack = this._debuggee.executeInGlobalWithBindings('e.stack', {e: completionValue.throw}).return; exceptionDetails.stack = this._debuggee.executeInGlobalWithBindings('e.stack', {e: completionValue.throw}, {useInnerBindings: true}).return;
} else { } else {
exceptionDetails.value = this._serialize(completionValue.throw); exceptionDetails.value = this._serialize(completionValue.throw);
} }

View file

@ -6,7 +6,9 @@
loadSubScript('chrome://juggler/content/content/Runtime.js'); loadSubScript('chrome://juggler/content/content/Runtime.js');
loadSubScript('chrome://juggler/content/SimpleChannel.js'); loadSubScript('chrome://juggler/content/SimpleChannel.js');
const channel = new SimpleChannel('worker::worker'); // SimpleChannel in worker is never replaced: its lifetime matches the lifetime
// of the worker itself, so anything would work as a unique identifier.
const channel = new SimpleChannel('worker::content', 'unique_identifier');
const eventListener = event => channel._onMessage(JSON.parse(event.data)); const eventListener = event => channel._onMessage(JSON.parse(event.data));
this.addEventListener('message', eventListener); this.addEventListener('message', eventListener);
channel.setTransport({ channel.setTransport({

View file

@ -2,30 +2,15 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js'); const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
const {FrameTree} = ChromeUtils.import('chrome://juggler/content/content/FrameTree.js'); const {FrameTree} = ChromeUtils.import('chrome://juggler/content/content/FrameTree.js');
const {SimpleChannel} = ChromeUtils.import('chrome://juggler/content/SimpleChannel.js'); const {SimpleChannel} = ChromeUtils.import('chrome://juggler/content/SimpleChannel.js');
const {PageAgent} = ChromeUtils.import('chrome://juggler/content/content/PageAgent.js'); const {PageAgent} = ChromeUtils.import('chrome://juggler/content/content/PageAgent.js');
const browsingContextToAgents = new Map();
const helper = new Helper(); const helper = new Helper();
function initialize(browsingContext, docShell, actor) { function initialize(browsingContext, docShell) {
if (browsingContext.parent) { const data = { channel: undefined, pageAgent: undefined, frameTree: undefined, failedToOverrideTimezone: false };
// For child frames, return agents from the main frame.
return browsingContextToAgents.get(browsingContext.top);
}
let data = browsingContextToAgents.get(browsingContext);
if (data) {
// Rebind from one main frame actor to another one.
data.channel.bindToActor(actor);
return data;
}
data = { channel: undefined, pageAgent: undefined, frameTree: undefined, failedToOverrideTimezone: false };
browsingContextToAgents.set(browsingContext, data);
const applySetting = { const applySetting = {
geolocation: (geolocation) => { geolocation: (geolocation) => {
@ -48,15 +33,6 @@ function initialize(browsingContext, docShell, actor) {
} }
}, },
onlineOverride: (onlineOverride) => {
if (!onlineOverride) {
docShell.onlineOverride = Ci.nsIDocShell.ONLINE_OVERRIDE_NONE;
return;
}
docShell.onlineOverride = onlineOverride === 'online' ?
Ci.nsIDocShell.ONLINE_OVERRIDE_ONLINE : Ci.nsIDocShell.ONLINE_OVERRIDE_OFFLINE;
},
bypassCSP: (bypassCSP) => { bypassCSP: (bypassCSP) => {
docShell.bypassCSPEnabled = bypassCSP; docShell.bypassCSPEnabled = bypassCSP;
}, },
@ -69,10 +45,6 @@ function initialize(browsingContext, docShell, actor) {
docShell.languageOverride = locale; docShell.languageOverride = locale;
}, },
scrollbarsHidden: (hidden) => {
data.frameTree.setScrollbarsHidden(hidden);
},
javaScriptDisabled: (javaScriptDisabled) => { javaScriptDisabled: (javaScriptDisabled) => {
data.frameTree.setJavaScriptDisabled(javaScriptDisabled); data.frameTree.setJavaScriptDisabled(javaScriptDisabled);
}, },
@ -85,7 +57,7 @@ function initialize(browsingContext, docShell, actor) {
docShell.overrideHasFocus = true; docShell.overrideHasFocus = true;
docShell.forceActiveState = true; docShell.forceActiveState = true;
docShell.disallowBFCache = true; docShell.disallowBFCache = true;
data.frameTree = new FrameTree(docShell); data.frameTree = new FrameTree(browsingContext);
for (const [name, value] of Object.entries(contextCrossProcessCookie.settings)) { for (const [name, value] of Object.entries(contextCrossProcessCookie.settings)) {
if (value !== undefined) if (value !== undefined)
applySetting[name](value); applySetting[name](value);
@ -93,7 +65,7 @@ function initialize(browsingContext, docShell, actor) {
for (const { worldName, name, script } of [...contextCrossProcessCookie.bindings, ...pageCrossProcessCookie.bindings]) for (const { worldName, name, script } of [...contextCrossProcessCookie.bindings, ...pageCrossProcessCookie.bindings])
data.frameTree.addBinding(worldName, name, script); data.frameTree.addBinding(worldName, name, script);
data.frameTree.setInitScripts([...contextCrossProcessCookie.initScripts, ...pageCrossProcessCookie.initScripts]); data.frameTree.setInitScripts([...contextCrossProcessCookie.initScripts, ...pageCrossProcessCookie.initScripts]);
data.channel = SimpleChannel.createForActor(actor); data.channel = new SimpleChannel('', 'process-' + Services.appinfo.processID);
data.pageAgent = new PageAgent(data.channel, data.frameTree); data.pageAgent = new PageAgent(data.channel, data.frameTree);
docShell.fileInputInterceptionEnabled = !!pageCrossProcessCookie.interceptFileChooserDialog; docShell.fileInputInterceptionEnabled = !!pageCrossProcessCookie.interceptFileChooserDialog;
@ -122,8 +94,7 @@ function initialize(browsingContext, docShell, actor) {
return data.failedToOverrideTimezone; return data.failedToOverrideTimezone;
}, },
async awaitViewportDimensions({width, height, deviceSizeIsPageSize}) { async awaitViewportDimensions({width, height}) {
docShell.deviceSizeIsPageSize = deviceSizeIsPageSize;
const win = docShell.domWindow; const win = docShell.domWindow;
if (win.innerWidth === width && win.innerHeight === height) if (win.innerWidth === width && win.innerHeight === height)
return; return;

View file

@ -5,7 +5,6 @@
"use strict"; "use strict";
const {AddonManager} = ChromeUtils.import("resource://gre/modules/AddonManager.jsm"); const {AddonManager} = ChromeUtils.import("resource://gre/modules/AddonManager.jsm");
const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
const {TargetRegistry} = ChromeUtils.import("chrome://juggler/content/TargetRegistry.js"); const {TargetRegistry} = ChromeUtils.import("chrome://juggler/content/TargetRegistry.js");
const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js'); const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
const {PageHandler} = ChromeUtils.import("chrome://juggler/content/protocol/PageHandler.js"); const {PageHandler} = ChromeUtils.import("chrome://juggler/content/protocol/PageHandler.js");
@ -14,7 +13,7 @@ const {AppConstants} = ChromeUtils.import("resource://gre/modules/AppConstants.j
const helper = new Helper(); const helper = new Helper();
class BrowserHandler { class BrowserHandler {
constructor(session, dispatcher, targetRegistry, onclose, onstart) { constructor(session, dispatcher, targetRegistry, startCompletePromise, onclose) {
this._session = session; this._session = session;
this._dispatcher = dispatcher; this._dispatcher = dispatcher;
this._targetRegistry = targetRegistry; this._targetRegistry = targetRegistry;
@ -24,16 +23,27 @@ class BrowserHandler {
this._createdBrowserContextIds = new Set(); this._createdBrowserContextIds = new Set();
this._attachedSessions = new Map(); this._attachedSessions = new Map();
this._onclose = onclose; this._onclose = onclose;
this._onstart = onstart; this._startCompletePromise = startCompletePromise;
} }
async ['Browser.enable']({attachToDefaultContext}) { async ['Browser.enable']({attachToDefaultContext, userPrefs = []}) {
if (this._enabled) if (this._enabled)
return; return;
await this._onstart(); await this._startCompletePromise;
this._enabled = true; this._enabled = true;
this._attachToDefaultContext = attachToDefaultContext; this._attachToDefaultContext = attachToDefaultContext;
for (const { name, value } of userPrefs) {
if (value === true || value === false)
Services.prefs.setBoolPref(name, value);
else if (typeof value === 'string')
Services.prefs.setStringPref(name, value);
else if (typeof value === 'number')
Services.prefs.setIntPref(name, value);
else
throw new Error(`Preference "${name}" has unsupported value: ${JSON.stringify(value)}`);
}
this._eventListeners = [ this._eventListeners = [
helper.on(this._targetRegistry, TargetRegistry.Events.TargetCreated, this._onTargetCreated.bind(this)), helper.on(this._targetRegistry, TargetRegistry.Events.TargetCreated, this._onTargetCreated.bind(this)),
helper.on(this._targetRegistry, TargetRegistry.Events.TargetDestroyed, this._onTargetDestroyed.bind(this)), helper.on(this._targetRegistry, TargetRegistry.Events.TargetDestroyed, this._onTargetDestroyed.bind(this)),
@ -136,6 +146,7 @@ class BrowserHandler {
waitForWindowClosed(browserWindow), waitForWindowClosed(browserWindow),
]); ]);
} }
await this._startCompletePromise;
this._onclose(); this._onclose();
Services.startup.quit(Ci.nsIAppStartup.eForceQuit); Services.startup.quit(Ci.nsIAppStartup.eForceQuit);
} }
@ -152,6 +163,12 @@ class BrowserHandler {
this._targetRegistry.browserContextForId(browserContextId).extraHTTPHeaders = headers; this._targetRegistry.browserContextForId(browserContextId).extraHTTPHeaders = headers;
} }
['Browser.clearCache']() {
// Clearing only the context cache does not work: https://bugzilla.mozilla.org/show_bug.cgi?id=1819147
Services.cache2.clear();
ChromeUtils.clearStyleSheetCache();
}
['Browser.setHTTPCredentials']({browserContextId, credentials}) { ['Browser.setHTTPCredentials']({browserContextId, credentials}) {
this._targetRegistry.browserContextForId(browserContextId).httpCredentials = nullToUndefined(credentials); this._targetRegistry.browserContextForId(browserContextId).httpCredentials = nullToUndefined(credentials);
} }
@ -169,6 +186,10 @@ class BrowserHandler {
this._targetRegistry.browserContextForId(browserContextId).requestInterceptionEnabled = enabled; this._targetRegistry.browserContextForId(browserContextId).requestInterceptionEnabled = enabled;
} }
['Browser.setCacheDisabled']({browserContextId, cacheDisabled}) {
this._targetRegistry.browserContextForId(browserContextId).setCacheDisabled(cacheDisabled);
}
['Browser.setIgnoreHTTPSErrors']({browserContextId, ignoreHTTPSErrors}) { ['Browser.setIgnoreHTTPSErrors']({browserContextId, ignoreHTTPSErrors}) {
this._targetRegistry.browserContextForId(browserContextId).setIgnoreHTTPSErrors(nullToUndefined(ignoreHTTPSErrors)); this._targetRegistry.browserContextForId(browserContextId).setIgnoreHTTPSErrors(nullToUndefined(ignoreHTTPSErrors));
} }
@ -182,7 +203,8 @@ class BrowserHandler {
} }
async ['Browser.setOnlineOverride']({browserContextId, override}) { async ['Browser.setOnlineOverride']({browserContextId, override}) {
await this._targetRegistry.browserContextForId(browserContextId).applySetting('onlineOverride', nullToUndefined(override)); const forceOffline = override === 'offline';
await this._targetRegistry.browserContextForId(browserContextId).setForceOffline(forceOffline);
} }
async ['Browser.setColorScheme']({browserContextId, colorScheme}) { async ['Browser.setColorScheme']({browserContextId, colorScheme}) {
@ -233,10 +255,6 @@ class BrowserHandler {
await this._targetRegistry.browserContextForId(browserContextId).setDefaultViewport(nullToUndefined(viewport)); await this._targetRegistry.browserContextForId(browserContextId).setDefaultViewport(nullToUndefined(viewport));
} }
async ['Browser.setScrollbarsHidden']({browserContextId, hidden}) {
await this._targetRegistry.browserContextForId(browserContextId).applySetting('scrollbarsHidden', nullToUndefined(hidden));
}
async ['Browser.setInitScripts']({browserContextId, scripts}) { async ['Browser.setInitScripts']({browserContextId, scripts}) {
await this._targetRegistry.browserContextForId(browserContextId).setInitScripts(scripts); await this._targetRegistry.browserContextForId(browserContextId).setInitScripts(scripts);
} }

View file

@ -74,6 +74,9 @@ class Dispatcher {
this._connection.send(JSON.stringify({id, sessionId, result})); this._connection.send(JSON.stringify({id, sessionId, result}));
} catch (e) { } catch (e) {
dump(`
ERROR: ${e.message} ${e.stack}
`);
this._connection.send(JSON.stringify({id, sessionId, error: { this._connection.send(JSON.stringify({id, sessionId, error: {
message: e.message, message: e.message,
data: e.stack data: e.stack

View file

@ -4,8 +4,8 @@
"use strict"; "use strict";
const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js'); const {Helper, EventWatcher} = ChromeUtils.import('chrome://juggler/content/Helper.js');
const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm"); const {NetUtil} = ChromeUtils.import('resource://gre/modules/NetUtil.jsm');
const {NetworkObserver, PageNetwork} = ChromeUtils.import('chrome://juggler/content/NetworkObserver.js'); const {NetworkObserver, PageNetwork} = ChromeUtils.import('chrome://juggler/content/NetworkObserver.js');
const {PageTarget} = ChromeUtils.import('chrome://juggler/content/TargetRegistry.js'); const {PageTarget} = ChromeUtils.import('chrome://juggler/content/TargetRegistry.js');
const {setTimeout} = ChromeUtils.import('resource://gre/modules/Timer.jsm'); const {setTimeout} = ChromeUtils.import('resource://gre/modules/Timer.jsm');
@ -79,6 +79,9 @@ class PageHandler {
return (...args) => this._session.emitEvent(eventName, ...args); return (...args) => this._session.emitEvent(eventName, ...args);
} }
this._isDragging = false;
this._lastMousePosition = { x: 0, y: 0 };
this._reportedFrameIds = new Set(); this._reportedFrameIds = new Set();
this._networkEventsForUnreportedFrameIds = new Map(); this._networkEventsForUnreportedFrameIds = new Map();
@ -89,14 +92,13 @@ class PageHandler {
// to be ignored by the protocol clients. // to be ignored by the protocol clients.
this._isPageReady = false; this._isPageReady = false;
// Whether the page is about to go cross-process after navigation.
this._isTransferringCrossProcessNavigation = false;
this._mainFrameId = undefined;
this._lastMainFrameNavigationId = undefined;
if (this._pageTarget.videoRecordingInfo()) if (this._pageTarget.videoRecordingInfo())
this._onVideoRecordingStarted(); this._onVideoRecordingStarted();
this._pageEventSink = {};
helper.decorateAsEventEmitter(this._pageEventSink);
this._pendingEventWatchers = new Set();
this._eventListeners = [ this._eventListeners = [
helper.on(this._pageTarget, PageTarget.Events.DialogOpened, this._onDialogOpened.bind(this)), helper.on(this._pageTarget, PageTarget.Events.DialogOpened, this._onDialogOpened.bind(this)),
helper.on(this._pageTarget, PageTarget.Events.DialogClosed, this._onDialogClosed.bind(this)), helper.on(this._pageTarget, PageTarget.Events.DialogClosed, this._onDialogClosed.bind(this)),
@ -105,7 +107,6 @@ class PageHandler {
}), }),
helper.on(this._pageTarget, PageTarget.Events.ScreencastStarted, this._onVideoRecordingStarted.bind(this)), helper.on(this._pageTarget, PageTarget.Events.ScreencastStarted, this._onVideoRecordingStarted.bind(this)),
helper.on(this._pageTarget, PageTarget.Events.ScreencastFrame, this._onScreencastFrame.bind(this)), helper.on(this._pageTarget, PageTarget.Events.ScreencastFrame, this._onScreencastFrame.bind(this)),
helper.on(this._pageTarget, PageTarget.Events.TopBrowsingContextReplaced, this._onTopBrowsingContextReplaced.bind(this)),
helper.on(this._pageNetwork, PageNetwork.Events.Request, this._handleNetworkEvent.bind(this, 'Network.requestWillBeSent')), helper.on(this._pageNetwork, PageNetwork.Events.Request, this._handleNetworkEvent.bind(this, 'Network.requestWillBeSent')),
helper.on(this._pageNetwork, PageNetwork.Events.Response, this._handleNetworkEvent.bind(this, 'Network.responseReceived')), helper.on(this._pageNetwork, PageNetwork.Events.Response, this._handleNetworkEvent.bind(this, 'Network.responseReceived')),
helper.on(this._pageNetwork, PageNetwork.Events.RequestFinished, this._handleNetworkEvent.bind(this, 'Network.requestFinished')), helper.on(this._pageNetwork, PageNetwork.Events.RequestFinished, this._handleNetworkEvent.bind(this, 'Network.requestFinished')),
@ -119,10 +120,11 @@ class PageHandler {
pageFrameDetached: emitProtocolEvent('Page.frameDetached'), pageFrameDetached: emitProtocolEvent('Page.frameDetached'),
pageLinkClicked: emitProtocolEvent('Page.linkClicked'), pageLinkClicked: emitProtocolEvent('Page.linkClicked'),
pageWillOpenNewWindowAsynchronously: emitProtocolEvent('Page.willOpenNewWindowAsynchronously'), pageWillOpenNewWindowAsynchronously: emitProtocolEvent('Page.willOpenNewWindowAsynchronously'),
pageNavigationAborted: params => this._handleNavigationEvent('Page.navigationAborted', params), pageNavigationAborted: emitProtocolEvent('Page.navigationAborted'),
pageNavigationCommitted: params => this._handleNavigationEvent('Page.navigationCommitted', params), pageNavigationCommitted: emitProtocolEvent('Page.navigationCommitted'),
pageNavigationStarted: params => this._handleNavigationEvent('Page.navigationStarted', params), pageNavigationStarted: emitProtocolEvent('Page.navigationStarted'),
pageReady: this._onPageReady.bind(this), pageReady: this._onPageReady.bind(this),
pageInputEvent: (event) => this._pageEventSink.emit(event.type, event),
pageSameDocumentNavigation: emitProtocolEvent('Page.sameDocumentNavigation'), pageSameDocumentNavigation: emitProtocolEvent('Page.sameDocumentNavigation'),
pageUncaughtError: emitProtocolEvent('Page.uncaughtError'), pageUncaughtError: emitProtocolEvent('Page.uncaughtError'),
pageWorkerCreated: this._onWorkerCreated.bind(this), pageWorkerCreated: this._onWorkerCreated.bind(this),
@ -152,6 +154,8 @@ class PageHandler {
async dispose() { async dispose() {
this._contentPage.dispose(); this._contentPage.dispose();
for (const watcher of this._pendingEventWatchers)
watcher.dispose();
helper.removeListeners(this._eventListeners); helper.removeListeners(this._eventListeners);
} }
@ -164,28 +168,6 @@ class PageHandler {
this._session.emitEvent('Page.screencastFrame', params); this._session.emitEvent('Page.screencastFrame', params);
} }
_onTopBrowsingContextReplaced() {
this._isTransferringCrossProcessNavigation = true;
}
_handleNavigationEvent(event, params) {
if (this._isTransferringCrossProcessNavigation && params.frameId === this._mainFrameId) {
// During a cross-process navigation, http channel in the new process might not be
// the same as the original one in the old process, for example after a redirect/interception.
// Therefore, the new proces has a new navigationId.
//
// To preserve protocol consistency, we replace the new navigationId with
// the old navigationId.
params.navigationId = this._lastMainFrameNavigationId || params.navigationId;
if (event === 'Page.navigationCommitted' || event === 'Page.navigationAborted')
this._isTransferringCrossProcessNavigation = false;
}
if (event === 'Page.navigationStarted' && params.frameId === this._mainFrameId)
this._lastMainFrameNavigationId = params.navigationId;
this._session.emitEvent(event, params);
}
_onPageReady(event) { _onPageReady(event) {
this._isPageReady = true; this._isPageReady = true;
this._session.emitEvent('Page.ready'); this._session.emitEvent('Page.ready');
@ -239,8 +221,6 @@ class PageHandler {
} }
_onFrameAttached({frameId, parentFrameId}) { _onFrameAttached({frameId, parentFrameId}) {
if (!parentFrameId)
this._mainFrameId = frameId;
this._session.emitEvent('Page.frameAttached', {frameId, parentFrameId}); this._session.emitEvent('Page.frameAttached', {frameId, parentFrameId});
this._reportedFrameIds.add(frameId); this._reportedFrameIds.add(frameId);
const events = this._networkEventsForUnreportedFrameIds.get(frameId) || []; const events = this._networkEventsForUnreportedFrameIds.get(frameId) || [];
@ -276,6 +256,13 @@ class PageHandler {
return await this._contentPage.send('disposeObject', options); return await this._contentPage.send('disposeObject', options);
} }
async ['Heap.collectGarbage']() {
Services.obs.notifyObservers(null, "child-gc-request");
Cu.forceGC();
Services.obs.notifyObservers(null, "child-cc-request");
Cu.forceCC();
}
async ['Network.getResponseBody']({requestId}) { async ['Network.getResponseBody']({requestId}) {
return this._pageNetwork.getResponseBody(requestId); return this._pageNetwork.getResponseBody(requestId);
} }
@ -319,11 +306,11 @@ class PageHandler {
} }
async ['Page.bringToFront'](options) { async ['Page.bringToFront'](options) {
this._pageTarget._window.focus(); await this._pageTarget.activateAndRun(() => {});
} }
async ['Page.setCacheDisabled'](options) { async ['Page.setCacheDisabled']({cacheDisabled}) {
return await this._contentPage.send('setCacheDisabled', options); return await this._pageTarget.setCacheDisabled(cacheDisabled);
} }
async ['Page.addBinding']({ worldName, name, script }) { async ['Page.addBinding']({ worldName, name, script }) {
@ -334,7 +321,7 @@ class PageHandler {
return await this._contentPage.send('adoptNode', options); return await this._contentPage.send('adoptNode', options);
} }
async ['Page.screenshot']({ mimeType, clip, omitDeviceScaleFactor }) { async ['Page.screenshot']({ mimeType, clip, omitDeviceScaleFactor, quality = 80}) {
const rect = new DOMRect(clip.x, clip.y, clip.width, clip.height); const rect = new DOMRect(clip.x, clip.y, clip.width, clip.height);
const browsingContext = this._pageTarget.linkedBrowser().browsingContext; const browsingContext = this._pageTarget.linkedBrowser().browsingContext;
@ -377,7 +364,15 @@ class PageHandler {
let ctx = canvas.getContext('2d'); let ctx = canvas.getContext('2d');
ctx.drawImage(snapshot, 0, 0); ctx.drawImage(snapshot, 0, 0);
snapshot.close(); snapshot.close();
const dataURL = canvas.toDataURL(mimeType);
if (mimeType === 'image/jpeg') {
if (quality < 0 || quality > 100)
throw new Error('Quality must be an integer value between 0 and 100; received ' + quality);
quality /= 100;
} else {
quality = undefined;
}
const dataURL = canvas.toDataURL(mimeType, quality);
return { data: dataURL.substring(dataURL.indexOf(',') + 1) }; return { data: dataURL.substring(dataURL.indexOf(',') + 1) };
} }
@ -385,8 +380,51 @@ class PageHandler {
return await this._contentPage.send('getContentQuads', options); return await this._contentPage.send('getContentQuads', options);
} }
async ['Page.navigate'](options) { async ['Page.navigate']({frameId, url, referer}) {
return await this._contentPage.send('navigate', options); const browsingContext = this._pageTarget.frameIdToBrowsingContext(frameId);
let sameDocumentNavigation = false;
try {
const uri = NetUtil.newURI(url);
// This is the same check that verifes browser-side if this is the same-document navigation.
// See CanonicalBrowsingContext::SupportsLoadingInParent.
sameDocumentNavigation = browsingContext.currentURI && uri.hasRef && uri.equalsExceptRef(browsingContext.currentURI);
} catch (e) {
throw new Error(`Invalid url: "${url}"`);
}
let referrerURI = null;
let referrerInfo = null;
if (referer) {
try {
referrerURI = NetUtil.newURI(referer);
const ReferrerInfo = Components.Constructor(
'@mozilla.org/referrer-info;1',
'nsIReferrerInfo',
'init'
);
referrerInfo = new ReferrerInfo(Ci.nsIReferrerInfo.UNSAFE_URL, true, referrerURI);
} catch (e) {
throw new Error(`Invalid referer: "${referer}"`);
}
}
let navigationId;
const unsubscribe = helper.addObserver((browsingContext, topic, loadIdentifier) => {
navigationId = helper.toProtocolNavigationId(loadIdentifier);
}, 'juggler-navigation-started-browser');
browsingContext.loadURI(Services.io.newURI(url), {
triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
loadFlags: Ci.nsIWebNavigation.LOAD_FLAGS_IS_LINK,
referrerInfo,
// postData: null,
// headers: null,
// Fake user activation.
hasValidUserGestureActivation: true,
});
unsubscribe();
return {
navigationId: sameDocumentNavigation ? null : navigationId,
};
} }
async ['Page.goBack']({}) { async ['Page.goBack']({}) {
@ -405,9 +443,11 @@ class PageHandler {
return { success: true }; return { success: true };
} }
async ['Page.reload']({}) { async ['Page.reload']() {
const browsingContext = this._pageTarget.linkedBrowser().browsingContext; await this._pageTarget.activateAndRun(() => {
browsingContext.reload(Ci.nsIWebNavigation.LOAD_FLAGS_NONE); const doc = this._pageTarget._tab.linkedBrowser.ownerDocument;
doc.getElementById('Browser:Reload').doCommand();
});
} }
async ['Page.describeNode'](options) { async ['Page.describeNode'](options) {
@ -422,8 +462,22 @@ class PageHandler {
return await this._pageTarget.setInitScripts(scripts); return await this._pageTarget.setInitScripts(scripts);
} }
async ['Page.dispatchKeyEvent'](options) { async ['Page.dispatchKeyEvent']({type, keyCode, code, key, repeat, location, text}) {
return await this._contentPage.send('dispatchKeyEvent', options); // key events don't fire if we are dragging.
if (this._isDragging) {
if (type === 'keydown' && key === 'Escape') {
await this._contentPage.send('dispatchDragEvent', {
type: 'dragover',
x: this._lastMousePosition.x,
y: this._lastMousePosition.y,
modifiers: 0
});
await this._contentPage.send('dispatchDragEvent', {type: 'dragend'});
this._isDragging = false;
}
return;
}
return await this._contentPage.send('dispatchKeyEvent', {type, keyCode, code, key, repeat, location, text});
} }
async ['Page.dispatchTouchEvent'](options) { async ['Page.dispatchTouchEvent'](options) {
@ -434,22 +488,152 @@ class PageHandler {
return await this._contentPage.send('dispatchTapEvent', options); return await this._contentPage.send('dispatchTapEvent', options);
} }
async ['Page.dispatchMouseEvent'](options) { async ['Page.dispatchMouseEvent']({type, x, y, button, clickCount, modifiers, buttons}) {
return await this._contentPage.send('dispatchMouseEvent', options); const win = this._pageTarget._window;
const sendEvents = async (types) => {
// 1. Scroll element to the desired location first; the coordinates are relative to the element.
this._pageTarget._linkedBrowser.scrollRectIntoViewIfNeeded(x, y, 0, 0);
// 2. Get element's bounding box in the browser after the scroll is completed.
const boundingBox = this._pageTarget._linkedBrowser.getBoundingClientRect();
// 3. Make sure compositor is flushed after scrolling.
if (win.windowUtils.flushApzRepaints())
await helper.awaitTopic('apz-repaints-flushed');
const watcher = new EventWatcher(this._pageEventSink, types, this._pendingEventWatchers);
const promises = [];
for (const type of types) {
// This dispatches to the renderer synchronously.
const jugglerEventId = win.windowUtils.jugglerSendMouseEvent(
type,
x + boundingBox.left,
y + boundingBox.top,
button,
clickCount,
modifiers,
false /* aIgnoreRootScrollFrame */,
0.0 /* pressure */,
0 /* inputSource */,
true /* isDOMEventSynthesized */,
false /* isWidgetEventSynthesized */,
buttons,
win.windowUtils.DEFAULT_MOUSE_POINTER_ID /* pointerIdentifier */,
false /* disablePointerEvent */
);
promises.push(watcher.ensureEvent(type, eventObject => eventObject.jugglerEventId === jugglerEventId));
}
await Promise.all(promises);
await watcher.dispose();
};
// We must switch to proper tab in the tabbed browser so that
// 1. Event is dispatched to a proper renderer.
// 2. We receive an ack from the renderer for the dispatched event.
await this._pageTarget.activateAndRun(async () => {
this._pageTarget.ensureContextMenuClosed();
// If someone asks us to dispatch mouse event outside of viewport, then we normally would drop it.
const boundingBox = this._pageTarget._linkedBrowser.getBoundingClientRect();
if (x < 0 || y < 0 || x > boundingBox.width || y > boundingBox.height) {
if (type !== 'mousemove')
return;
// A special hack: if someone tries to do `mousemove` outside of
// viewport coordinates, then move the mouse off from the Web Content.
// This way we can eliminate all the hover effects.
// NOTE: since this won't go inside the renderer, there's no need to wait for ACK.
win.windowUtils.sendMouseEvent(
'mousemove',
0 /* x */,
0 /* y */,
button,
clickCount,
modifiers,
false /* aIgnoreRootScrollFrame */,
0.0 /* pressure */,
0 /* inputSource */,
true /* isDOMEventSynthesized */,
false /* isWidgetEventSynthesized */,
buttons,
win.windowUtils.DEFAULT_MOUSE_POINTER_ID /* pointerIdentifier */,
false /* disablePointerEvent */
);
return;
}
if (type === 'mousedown') {
if (this._isDragging)
return;
const eventNames = button === 2 ? ['mousedown', 'contextmenu'] : ['mousedown'];
await sendEvents(eventNames);
return;
}
if (type === 'mousemove') {
this._lastMousePosition = { x, y };
if (this._isDragging) {
const watcher = new EventWatcher(this._pageEventSink, ['dragover'], this._pendingEventWatchers);
await this._contentPage.send('dispatchDragEvent', {type:'dragover', x, y, modifiers});
await watcher.ensureEventsAndDispose(['dragover']);
return;
}
const watcher = new EventWatcher(this._pageEventSink, ['dragstart', 'juggler-drag-finalized'], this._pendingEventWatchers);
await sendEvents(['mousemove']);
// The order of events after 'mousemove' is sent:
// 1. [dragstart] - might or might NOT be emitted
// 2. [mousemove] - always emitted. This was awaited as part of `sendEvents` call.
// 3. [juggler-drag-finalized] - only emitted if dragstart was emitted.
if (watcher.hasEvent('dragstart')) {
const eventObject = await watcher.ensureEvent('juggler-drag-finalized');
this._isDragging = eventObject.dragSessionStarted;
}
watcher.dispose();
return;
}
if (type === 'mouseup') {
if (this._isDragging) {
const watcher = new EventWatcher(this._pageEventSink, ['dragover'], this._pendingEventWatchers);
await this._contentPage.send('dispatchDragEvent', {type: 'dragover', x, y, modifiers});
await this._contentPage.send('dispatchDragEvent', {type: 'drop', x, y, modifiers});
await this._contentPage.send('dispatchDragEvent', {type: 'dragend', x, y, modifiers});
// NOTE:
// - 'drop' event might not be dispatched at all, depending on dropAction.
// - 'dragend' event might not be dispatched at all, if the source element was removed
// during drag. However, it'll be dispatched synchronously in the renderer.
await watcher.ensureEventsAndDispose(['dragover']);
this._isDragging = false;
} else {
await sendEvents(['mouseup']);
}
return;
}
}, { muteNotificationsPopup: true });
} }
async ['Page.dispatchWheelEvent']({x, y, button, deltaX, deltaY, deltaZ, modifiers }) { async ['Page.dispatchWheelEvent']({x, y, button, deltaX, deltaY, deltaZ, modifiers }) {
const boundingBox = this._pageTarget._linkedBrowser.getBoundingClientRect();
x += boundingBox.left;
y += boundingBox.top;
const deltaMode = 0; // WheelEvent.DOM_DELTA_PIXEL const deltaMode = 0; // WheelEvent.DOM_DELTA_PIXEL
const lineOrPageDeltaX = deltaX > 0 ? Math.floor(deltaX) : Math.ceil(deltaX); const lineOrPageDeltaX = deltaX > 0 ? Math.floor(deltaX) : Math.ceil(deltaX);
const lineOrPageDeltaY = deltaY > 0 ? Math.floor(deltaY) : Math.ceil(deltaY); const lineOrPageDeltaY = deltaY > 0 ? Math.floor(deltaY) : Math.ceil(deltaY);
await this._pageTarget.activateAndRun(async () => {
this._pageTarget.ensureContextMenuClosed();
// 1. Scroll element to the desired location first; the coordinates are relative to the element.
this._pageTarget._linkedBrowser.scrollRectIntoViewIfNeeded(x, y, 0, 0);
// 2. Get element's bounding box in the browser after the scroll is completed.
const boundingBox = this._pageTarget._linkedBrowser.getBoundingClientRect();
const win = this._pageTarget._window; const win = this._pageTarget._window;
// 3. Make sure compositor is flushed after scrolling.
if (win.windowUtils.flushApzRepaints())
await helper.awaitTopic('apz-repaints-flushed');
win.windowUtils.sendWheelEvent( win.windowUtils.sendWheelEvent(
x, x + boundingBox.left,
y, y + boundingBox.top,
deltaX, deltaX,
deltaY, deltaY,
deltaZ, deltaZ,
@ -458,6 +642,7 @@ class PageHandler {
lineOrPageDeltaX, lineOrPageDeltaX,
lineOrPageDeltaY, lineOrPageDeltaY,
0 /* options */); 0 /* options */);
}, { muteNotificationsPopup: true });
} }
async ['Page.insertText'](options) { async ['Page.insertText'](options) {

View file

@ -15,6 +15,11 @@ browserTypes.TargetInfo = {
openerId: t.Optional(t.String), openerId: t.Optional(t.String),
}; };
browserTypes.UserPreference = {
name: t.String,
value: t.Any,
};
browserTypes.CookieOptions = { browserTypes.CookieOptions = {
name: t.String, name: t.String,
value: t.String, value: t.String,
@ -188,6 +193,7 @@ networkTypes.HTTPHeader = {
networkTypes.HTTPCredentials = { networkTypes.HTTPCredentials = {
username: t.String, username: t.String,
password: t.String, password: t.String,
origin: t.Optional(t.String),
}; };
networkTypes.SecurityDetails = { networkTypes.SecurityDetails = {
@ -245,6 +251,7 @@ const Browser = {
'enable': { 'enable': {
params: { params: {
attachToDefaultContext: t.Boolean, attachToDefaultContext: t.Boolean,
userPrefs: t.Optional(t.Array(browserTypes.UserPreference)),
}, },
}, },
'createBrowserContext': { 'createBrowserContext': {
@ -281,6 +288,7 @@ const Browser = {
headers: t.Array(networkTypes.HTTPHeader), headers: t.Array(networkTypes.HTTPHeader),
}, },
}, },
'clearCache': {},
'setBrowserProxy': { 'setBrowserProxy': {
params: { params: {
type: t.Enum(['http', 'https', 'socks', 'socks4']), type: t.Enum(['http', 'https', 'socks', 'socks4']),
@ -314,6 +322,12 @@ const Browser = {
enabled: t.Boolean, enabled: t.Boolean,
}, },
}, },
'setCacheDisabled': {
params: {
browserContextId: t.Optional(t.String),
cacheDisabled: t.Boolean,
},
},
'setGeolocationOverride': { 'setGeolocationOverride': {
params: { params: {
browserContextId: t.Optional(t.String), browserContextId: t.Optional(t.String),
@ -380,12 +394,6 @@ const Browser = {
viewport: t.Nullable(pageTypes.Viewport), viewport: t.Nullable(pageTypes.Viewport),
} }
}, },
'setScrollbarsHidden': {
params: {
browserContextId: t.Optional(t.String),
hidden: t.Boolean,
}
},
'setInitScripts': { 'setInitScripts': {
params: { params: {
browserContextId: t.Optional(t.String), browserContextId: t.Optional(t.String),
@ -473,6 +481,17 @@ const Browser = {
}, },
}; };
const Heap = {
targets: ['page'],
types: {},
events: {},
methods: {
'collectGarbage': {
params: {},
},
},
};
const Network = { const Network = {
targets: ['page'], targets: ['page'],
types: networkTypes, types: networkTypes,
@ -659,7 +678,6 @@ const Page = {
'navigationStarted': { 'navigationStarted': {
frameId: t.String, frameId: t.String,
navigationId: t.String, navigationId: t.String,
url: t.String,
}, },
'navigationCommitted': { 'navigationCommitted': {
frameId: t.String, frameId: t.String,
@ -823,7 +841,6 @@ const Page = {
}, },
returns: { returns: {
navigationId: t.Nullable(t.String), navigationId: t.Nullable(t.String),
navigationURL: t.Nullable(t.String),
} }
}, },
'goBack': { 'goBack': {
@ -843,9 +860,7 @@ const Page = {
}, },
}, },
'reload': { 'reload': {
params: { params: { },
frameId: t.String,
},
}, },
'adoptNode': { 'adoptNode': {
params: { params: {
@ -862,6 +877,7 @@ const Page = {
params: { params: {
mimeType: t.Enum(['image/png', 'image/jpeg']), mimeType: t.Enum(['image/png', 'image/jpeg']),
clip: pageTypes.Clip, clip: pageTypes.Clip,
quality: t.Optional(t.Number),
omitDeviceScaleFactor: t.Optional(t.Boolean), omitDeviceScaleFactor: t.Optional(t.Boolean),
}, },
returns: { returns: {
@ -907,7 +923,7 @@ const Page = {
}, },
'dispatchMouseEvent': { 'dispatchMouseEvent': {
params: { params: {
type: t.String, type: t.Enum(['mousedown', 'mousemove', 'mouseup']),
button: t.Number, button: t.Number,
x: t.Number, x: t.Number,
y: t.Number, y: t.Number,
@ -991,7 +1007,7 @@ const Accessibility = {
} }
this.protocol = { this.protocol = {
domains: {Browser, Page, Runtime, Network, Accessibility}, domains: {Browser, Heap, Page, Runtime, Network, Accessibility},
}; };
this.checkScheme = checkScheme; this.checkScheme = checkScheme;
this.EXPORTED_SYMBOLS = ['protocol', 'checkScheme']; this.EXPORTED_SYMBOLS = ['protocol', 'checkScheme'];

View file

@ -36,6 +36,10 @@ void HeadlessWindowCapturer::RegisterCaptureDataCallback(rtc::VideoSinkInterface
rtc::CritScope lock2(&_callBackCs); rtc::CritScope lock2(&_callBackCs);
_dataCallBacks.insert(dataCallback); _dataCallBacks.insert(dataCallback);
} }
void HeadlessWindowCapturer::RegisterCaptureDataCallback(webrtc::RawVideoSinkInterface* dataCallback) {
}
void HeadlessWindowCapturer::DeRegisterCaptureDataCallback(rtc::VideoSinkInterface<webrtc::VideoFrame>* dataCallback) { void HeadlessWindowCapturer::DeRegisterCaptureDataCallback(rtc::VideoSinkInterface<webrtc::VideoFrame>* dataCallback) {
rtc::CritScope lock2(&_callBackCs); rtc::CritScope lock2(&_callBackCs);
auto it = _dataCallBacks.find(dataCallback); auto it = _dataCallBacks.find(dataCallback);

View file

@ -31,6 +31,7 @@ class HeadlessWindowCapturer : public webrtc::VideoCaptureModuleEx {
int32_t StopCaptureIfAllClientsClose() override; int32_t StopCaptureIfAllClientsClose() override;
void RegisterRawFrameCallback(webrtc::RawFrameCallback* rawFrameCallback) override; void RegisterRawFrameCallback(webrtc::RawFrameCallback* rawFrameCallback) override;
void RegisterCaptureDataCallback(webrtc::RawVideoSinkInterface* dataCallback) override;
void DeRegisterRawFrameCallback(webrtc::RawFrameCallback* rawFrameCallback) override; void DeRegisterRawFrameCallback(webrtc::RawFrameCallback* rawFrameCallback) override;
int32_t SetCaptureRotation(webrtc::VideoRotation) override { return -1; } int32_t SetCaptureRotation(webrtc::VideoRotation) override { return -1; }

View file

@ -145,11 +145,33 @@ public:
uint8_t* u_data = image->planes[VPX_PLANE_U]; uint8_t* u_data = image->planes[VPX_PLANE_U];
uint8_t* v_data = image->planes[VPX_PLANE_V]; uint8_t* v_data = image->planes[VPX_PLANE_V];
double src_width = src->width() - m_margin.LeftRight(); /**
double src_height = src->height() - m_margin.top; * Let's say we have the following image of 6x3 pixels (same number = same pixel value):
// YUV offsets must be even. * 112233
int yuvTopOffset = m_margin.top & 1 ? m_margin.top + 1 : m_margin.top; * 112233
int yuvLeftOffset = m_margin.left & 1 ? m_margin.left + 1 : m_margin.left; * 445566
* In I420 format (see https://en.wikipedia.org/wiki/YUV), the image will have the following data planes:
* Y [stride_Y = 6]:
* 112233
* 112233
* 445566
* U [stride_U = 3] - this plane has aggregate for each 2x2 pixels:
* 123
* 456
* V [stride_V = 3] - this plane has aggregate for each 2x2 pixels:
* 123
* 456
*
* To crop this image efficiently, we can move src_Y/U/V pointer and
* adjust the src_width and src_height. However, we must cut off only **even**
* amount of lines and columns to retain semantic of U and V planes which
* contain only 1/4 of pixel information.
*/
int yuvTopOffset = m_margin.top + (m_margin.top & 1);
int yuvLeftOffset = m_margin.left + (m_margin.left & 1);
double src_width = src->width() - yuvLeftOffset;
double src_height = src->height() - yuvTopOffset;
if (src_width > image->w || src_height > image->h) { if (src_width > image->w || src_height > image->h) {
double scale = std::min(image->w / src_width, image->h / src_height); double scale = std::min(image->w / src_width, image->h / src_height);

View file

@ -24,6 +24,8 @@
#include "modules/video_capture/video_capture.h" #include "modules/video_capture/video_capture.h"
#include "mozilla/widget/PlatformWidgetTypes.h" #include "mozilla/widget/PlatformWidgetTypes.h"
#include "video_engine/desktop_capture_impl.h" #include "video_engine/desktop_capture_impl.h"
#include "VideoEngine.h"
extern "C" { extern "C" {
#include "jpeglib.h" #include "jpeglib.h"
} }
@ -55,7 +57,7 @@ rtc::scoped_refptr<webrtc::VideoCaptureModuleEx> CreateWindowCapturer(nsIWidget*
windowId.AppendPrintf("%" PRIuPTR, rawWindowId); windowId.AppendPrintf("%" PRIuPTR, rawWindowId);
bool captureCursor = false; bool captureCursor = false;
static int moduleId = 0; static int moduleId = 0;
return rtc::scoped_refptr<webrtc::VideoCaptureModuleEx>(webrtc::DesktopCaptureImpl::Create(++moduleId, windowId.get(), CaptureDeviceType::Window, captureCursor)); return rtc::scoped_refptr<webrtc::VideoCaptureModuleEx>(webrtc::DesktopCaptureImpl::Create(++moduleId, windowId.get(), camera::CaptureDeviceType::Window, captureCursor));
} }
nsresult generateUid(nsString& uid) { nsresult generateUid(nsString& uid) {
@ -80,6 +82,7 @@ class nsScreencastService::Session : public rtc::VideoSinkInterface<webrtc::Vide
public webrtc::RawFrameCallback { public webrtc::RawFrameCallback {
Session( Session(
nsIScreencastServiceClient* client, nsIScreencastServiceClient* client,
nsIWidget* widget,
rtc::scoped_refptr<webrtc::VideoCaptureModuleEx>&& capturer, rtc::scoped_refptr<webrtc::VideoCaptureModuleEx>&& capturer,
std::unique_ptr<ScreencastEncoder> encoder, std::unique_ptr<ScreencastEncoder> encoder,
int width, int height, int width, int height,
@ -87,6 +90,7 @@ class nsScreencastService::Session : public rtc::VideoSinkInterface<webrtc::Vide
gfx::IntMargin margin, gfx::IntMargin margin,
uint32_t jpegQuality) uint32_t jpegQuality)
: mClient(client) : mClient(client)
, mWidget(widget)
, mCaptureModule(std::move(capturer)) , mCaptureModule(std::move(capturer))
, mEncoder(std::move(encoder)) , mEncoder(std::move(encoder))
, mJpegQuality(jpegQuality) , mJpegQuality(jpegQuality)
@ -102,13 +106,20 @@ class nsScreencastService::Session : public rtc::VideoSinkInterface<webrtc::Vide
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(Session) NS_INLINE_DECL_THREADSAFE_REFCOUNTING(Session)
static RefPtr<Session> Create( static RefPtr<Session> Create(
nsIScreencastServiceClient* client, nsIScreencastServiceClient* client,
nsIWidget* widget,
rtc::scoped_refptr<webrtc::VideoCaptureModuleEx>&& capturer, rtc::scoped_refptr<webrtc::VideoCaptureModuleEx>&& capturer,
std::unique_ptr<ScreencastEncoder> encoder, std::unique_ptr<ScreencastEncoder> encoder,
int width, int height, int width, int height,
int viewportWidth, int viewportHeight, int viewportWidth, int viewportHeight,
gfx::IntMargin margin, gfx::IntMargin margin,
uint32_t jpegQuality) { uint32_t jpegQuality) {
return do_AddRef(new Session(client, std::move(capturer), std::move(encoder), width, height, viewportWidth, viewportHeight, margin, jpegQuality)); return do_AddRef(new Session(client, widget, std::move(capturer), std::move(encoder), width, height, viewportWidth, viewportHeight, margin, jpegQuality));
}
rtc::scoped_refptr<webrtc::VideoCaptureModuleEx> ReuseCapturer(nsIWidget* widget) {
if (mWidget == widget)
return mCaptureModule;
return nullptr;
} }
bool Start() { bool Start() {
@ -118,7 +129,7 @@ class nsScreencastService::Session : public rtc::VideoSinkInterface<webrtc::Vide
capability.height = 960; capability.height = 960;
capability.maxFPS = ScreencastEncoder::fps; capability.maxFPS = ScreencastEncoder::fps;
capability.videoType = webrtc::VideoType::kI420; capability.videoType = webrtc::VideoType::kI420;
int error = mCaptureModule->StartCapture(capability); int error = mCaptureModule->StartCaptureCounted(capability);
if (error) { if (error) {
fprintf(stderr, "StartCapture error %d\n", error); fprintf(stderr, "StartCapture error %d\n", error);
return false; return false;
@ -141,10 +152,7 @@ class nsScreencastService::Session : public rtc::VideoSinkInterface<webrtc::Vide
mCaptureModule->DeRegisterCaptureDataCallback(this); mCaptureModule->DeRegisterCaptureDataCallback(this);
else else
mCaptureModule->DeRegisterRawFrameCallback(this); mCaptureModule->DeRegisterRawFrameCallback(this);
int error = mCaptureModule->StopCapture(); mCaptureModule->StopCaptureCounted();
if (error) {
fprintf(stderr, "StopCapture error %d\n", error);
}
if (mEncoder) { if (mEncoder) {
mEncoder->finish([this, protect = RefPtr{this}] { mEncoder->finish([this, protect = RefPtr{this}] {
NS_DispatchToMainThread(NS_NewRunnableFunction( NS_DispatchToMainThread(NS_NewRunnableFunction(
@ -279,6 +287,7 @@ class nsScreencastService::Session : public rtc::VideoSinkInterface<webrtc::Vide
private: private:
RefPtr<nsIScreencastServiceClient> mClient; RefPtr<nsIScreencastServiceClient> mClient;
nsIWidget* mWidget;
rtc::scoped_refptr<webrtc::VideoCaptureModuleEx> mCaptureModule; rtc::scoped_refptr<webrtc::VideoCaptureModuleEx> mCaptureModule;
std::unique_ptr<ScreencastEncoder> mEncoder; std::unique_ptr<ScreencastEncoder> mEncoder;
uint32_t mJpegQuality; uint32_t mJpegQuality;
@ -322,7 +331,14 @@ nsresult nsScreencastService::StartVideoRecording(nsIScreencastServiceClient* aC
return NS_ERROR_UNEXPECTED; return NS_ERROR_UNEXPECTED;
nsIWidget* widget = view->GetWidget(); nsIWidget* widget = view->GetWidget();
rtc::scoped_refptr<webrtc::VideoCaptureModuleEx> capturer = CreateWindowCapturer(widget); rtc::scoped_refptr<webrtc::VideoCaptureModuleEx> capturer = nullptr;
for (auto& it : mIdToSession) {
capturer = it.second->ReuseCapturer(widget);
if (capturer)
break;
}
if (!capturer)
capturer = CreateWindowCapturer(widget);
if (!capturer) if (!capturer)
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
@ -349,7 +365,7 @@ nsresult nsScreencastService::StartVideoRecording(nsIScreencastServiceClient* aC
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
sessionId = uid; sessionId = uid;
auto session = Session::Create(aClient, std::move(capturer), std::move(encoder), width, height, viewportWidth, viewportHeight, margin, isVideo ? 0 : quality); auto session = Session::Create(aClient, widget, std::move(capturer), std::move(encoder), width, height, viewportWidth, viewportHeight, margin, isVideo ? 0 : quality);
if (!session->Start()) if (!session->Start())
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
mIdToSession.emplace(sessionId, std::move(session)); mIdToSession.emplace(sessionId, std::move(session));

File diff suppressed because it is too large Load diff

View file

@ -3,6 +3,10 @@
// ================================================================= // =================================================================
// THESE ARE THE PROPERTIES THAT MUST BE ENABLED FOR JUGGLER TO WORK // THESE ARE THE PROPERTIES THAT MUST BE ENABLED FOR JUGGLER TO WORK
// ================================================================= // =================================================================
pref("dom.input_events.security.minNumTicks", 0);
pref("dom.input_events.security.minTimeElapsedInMS", 0);
pref("dom.iframe_lazy_loading.enabled", false);
pref("datareporting.policy.dataSubmissionEnabled", false); pref("datareporting.policy.dataSubmissionEnabled", false);
pref("datareporting.policy.dataSubmissionPolicyAccepted", false); pref("datareporting.policy.dataSubmissionPolicyAccepted", false);
@ -11,6 +15,9 @@ pref("datareporting.policy.dataSubmissionPolicyBypassNotification", true);
// Force pdfs into downloads. // Force pdfs into downloads.
pref("pdfjs.disabled", true); pref("pdfjs.disabled", true);
// This preference breaks our authentication flow.
pref("network.auth.use_redirect_for_retries", false);
// Disable cross-process iframes, but not cross-process navigations. // Disable cross-process iframes, but not cross-process navigations.
pref("fission.webContentIsolationStrategy", 0); pref("fission.webContentIsolationStrategy", 0);
@ -18,9 +25,6 @@ pref("fission.webContentIsolationStrategy", 0);
// We also separately disable BFCache in content via docSchell property. // We also separately disable BFCache in content via docSchell property.
pref("fission.bfcacheInParent", false); pref("fission.bfcacheInParent", false);
// File url navigations behave differently from http, we are not ready.
pref("browser.tabs.remote.separateFileUriProcess", false);
// Disable first-party-based cookie partitioning. // Disable first-party-based cookie partitioning.
// When it is enabled, we have to retain "thirdPartyCookie^" permissions // When it is enabled, we have to retain "thirdPartyCookie^" permissions
// in the storageState. // in the storageState.
@ -39,14 +43,13 @@ pref("dom.ipc.processPrelaunch.enabled", false);
// Isolate permissions by user context. // Isolate permissions by user context.
pref("permissions.isolateBy.userContext", true); pref("permissions.isolateBy.userContext", true);
// We need this to issue Page.navigate from inside the renderer
// to cross-process domains, for example file urls.
pref("security.sandbox.content.level", 2);
// Allow creating files in content process - required for // Allow creating files in content process - required for
// |Page.setFileInputFiles| protocol method. // |Page.setFileInputFiles| protocol method.
pref("dom.file.createInChild", true); pref("dom.file.createInChild", true);
// Allow uploading directorys in content process.
pref("dom.filesystem.pathcheck.disabled", true);
// Do not warn when closing all open tabs // Do not warn when closing all open tabs
pref("browser.tabs.warnOnClose", false); pref("browser.tabs.warnOnClose", false);
@ -85,14 +88,28 @@ pref("geo.provider.testing", true);
// THESE ARE NICHE PROPERTIES THAT ARE NICE TO HAVE // THESE ARE NICHE PROPERTIES THAT ARE NICE TO HAVE
// ================================================================= // =================================================================
// Enable software-backed webgl. See https://phabricator.services.mozilla.com/D164016
pref("webgl.forbid-software", false);
// Disable auto-fill for credit cards and addresses.
// See https://github.com/microsoft/playwright/issues/21393
pref("extensions.formautofill.creditCards.supported", "off");
pref("extensions.formautofill.addresses.supported", "off");
// Allow access to system-added self-signed certificates. This aligns
// firefox behavior with other browser defaults.
pref("security.enterprise_roots.enabled", true);
// There's a security features warning that might be shown on certain Linux distributions & configurations:
// https://support.mozilla.org/en-US/kb/install-firefox-linux#w_security-features-warning
// This notification should never be shown in automation scenarios.
pref("security.sandbox.warn_unprivileged_namespaces", false);
// Avoid stalling on shutdown, after "xpcom-will-shutdown" phase. // Avoid stalling on shutdown, after "xpcom-will-shutdown" phase.
// This at least happens when shutting down soon after launching. // This at least happens when shutting down soon after launching.
// See AppShutdown.cpp for more details on shutdown phases. // See AppShutdown.cpp for more details on shutdown phases.
pref("toolkit.shutdown.fastShutdownStage", 3); pref("toolkit.shutdown.fastShutdownStage", 3);
// @see https://github.com/microsoft/playwright/issues/8178
pref("dom.postMessage.sharedArrayBuffer.bypassCOOP_COEP.insecure.enabled", true);
// Use light theme by default. // Use light theme by default.
pref("ui.systemUsesDarkTheme", 0); pref("ui.systemUsesDarkTheme", 0);
@ -103,9 +120,20 @@ pref("prompts.contentPromptSubDialog", false);
// Do not use system colors - they are affected by themes. // Do not use system colors - they are affected by themes.
pref("ui.use_standins_for_native_colors", true); pref("ui.use_standins_for_native_colors", true);
// Turn off the Push service.
pref("dom.push.serverURL", ""); pref("dom.push.serverURL", "");
// This setting breaks settings loading. // Prevent Remote Settings (firefox.settings.services.mozilla.com) to issue non local connections.
pref("services.settings.server", ""); pref("services.settings.server", "");
// Prevent location.services.mozilla.com to issue non local connections.
pref("browser.region.network.url", "");
pref("browser.pocket.enabled", false);
pref("browser.newtabpage.activity-stream.feeds.topsites", false);
// Disable sponsored tiles from "Mozilla Tiles Service"
pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false);
// required to prevent non-local access to push.services.mozilla.com
pref("dom.push.connection.enabled", false);
// Prevent contile.services.mozilla.com to issue non local connections.
pref("browser.topsites.contile.enabled", false);
pref("browser.safebrowsing.provider.mozilla.updateURL", ""); pref("browser.safebrowsing.provider.mozilla.updateURL", "");
pref("browser.library.activity-stream.enabled", false); pref("browser.library.activity-stream.enabled", false);
pref("browser.search.geoSpecificDefaults", false); pref("browser.search.geoSpecificDefaults", false);
@ -300,3 +328,8 @@ pref("extensions.blocklist.enabled", false);
// Force Firefox Devtools to open in a separate window. // Force Firefox Devtools to open in a separate window.
pref("devtools.toolbox.host", "window"); pref("devtools.toolbox.host", "window");
// Disable auto translations
pref("browser.translations.enable", false);
// Disable spell check
pref("layout.spellcheckDefault", 0);

View file

@ -0,0 +1,44 @@
#!/usr/bin/env bash
# A script to roll browser patches from internal repository.
set -e
set +x
trap "cd $(pwd -P)" EXIT
cd "$(dirname "$0")"
SCRIPT_PATH=$(pwd -P)
if [[ "$#" -ne 1 ]]; then
echo "Usage: $0 <path to playwright-browsers checkout>"
exit 1
fi
SOURCE_DIRECTORY="$1"
if [[ $(basename "${SOURCE_DIRECTORY}") != "playwright-browsers" ]]; then
echo "ERROR: the source directory must be named 'playwright-browsers'"
exit 1
fi
if ! [[ -d "${SOURCE_DIRECTORY}/browser_patches" ]]; then
echo "ERROR: the ${SOURCE_DIRECTORY}/browser_patches does not exist"
exit 1
fi
files=(
"./firefox/juggler/"
"./firefox/patches/"
"./firefox/preferences/"
"./firefox/UPSTREAM_CONFIG.sh"
"./webkit/embedder/"
"./webkit/patches/"
"./webkit/pw_run.sh"
"./webkit/UPSTREAM_CONFIG.sh"
"./winldd/"
)
for file in "${files[@]}"; do
rsync -av --delete "${SOURCE_DIRECTORY}/browser_patches/${file}" "${SCRIPT_PATH}/${file}"
done

View file

@ -1,3 +1,3 @@
REMOTE_URL="https://github.com/WebKit/WebKit.git" REMOTE_URL="https://github.com/WebKit/WebKit.git"
BASE_BRANCH="main" BASE_BRANCH="main"
BASE_REVISION="675d141bdcf7fa6df9bdf505d46e46fdac638452" BASE_REVISION="76c95d6131edd36775a5eac01e297926fc974be8"

View file

@ -33,6 +33,7 @@
#import <WebKit/WKUserContentControllerPrivate.h> #import <WebKit/WKUserContentControllerPrivate.h>
#import <WebKit/WKWebViewConfigurationPrivate.h> #import <WebKit/WKWebViewConfigurationPrivate.h>
#import <WebKit/WKWebViewPrivate.h> #import <WebKit/WKWebViewPrivate.h>
#import <WebKit/WKWebpagePreferencesPrivate.h>
#import <WebKit/WKWebsiteDataStorePrivate.h> #import <WebKit/WKWebsiteDataStorePrivate.h>
#import <WebKit/WebNSURLExtras.h> #import <WebKit/WebNSURLExtras.h>
#import <WebKit/WebKit.h> #import <WebKit/WebKit.h>
@ -97,7 +98,7 @@ const NSActivityOptions ActivityOptions =
for (NSString *argument in subArray) { for (NSString *argument in subArray) {
if (![argument hasPrefix:@"--"]) if (![argument hasPrefix:@"--"])
_initialURL = argument; _initialURL = [argument copy];
if ([argument hasPrefix:@"--user-data-dir="]) { if ([argument hasPrefix:@"--user-data-dir="]) {
NSRange range = NSMakeRange(16, [argument length] - 16); NSRange range = NSMakeRange(16, [argument length] - 16);
_userDataDir = [[argument substringWithRange:range] copy]; _userDataDir = [[argument substringWithRange:range] copy];
@ -180,7 +181,7 @@ const NSActivityOptions ActivityOptions =
_WKWebsiteDataStoreConfiguration *configuration = [[[_WKWebsiteDataStoreConfiguration alloc] init] autorelease]; _WKWebsiteDataStoreConfiguration *configuration = [[[_WKWebsiteDataStoreConfiguration alloc] init] autorelease];
if (_userDataDir) { if (_userDataDir) {
// Local storage state should be stored in separate dirs for persistent contexts. // Local storage state should be stored in separate dirs for persistent contexts.
[configuration setShouldUseCustomStoragePaths:YES]; [configuration setUnifiedOriginStorageLevel:_WKUnifiedOriginStorageLevelNone];
NSURL *cookieFile = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/cookie.db", _userDataDir]]; NSURL *cookieFile = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/cookie.db", _userDataDir]];
[configuration _setCookieStorageFile:cookieFile]; [configuration _setCookieStorageFile:cookieFile];
@ -230,14 +231,18 @@ const NSActivityOptions ActivityOptions =
configuration = [[WKWebViewConfiguration alloc] init]; configuration = [[WKWebViewConfiguration alloc] init];
configuration.websiteDataStore = [self persistentDataStore]; configuration.websiteDataStore = [self persistentDataStore];
configuration._controlledByAutomation = true; configuration._controlledByAutomation = true;
configuration.preferences._fullScreenEnabled = YES; configuration.preferences.elementFullscreenEnabled = YES;
configuration.preferences._developerExtrasEnabled = YES; configuration.preferences._developerExtrasEnabled = YES;
configuration.preferences._mediaDevicesEnabled = YES; configuration.preferences._mediaDevicesEnabled = YES;
configuration.preferences._mockCaptureDevicesEnabled = YES; configuration.preferences._mockCaptureDevicesEnabled = YES;
// Enable WebM support.
configuration.preferences._alternateWebMPlayerEnabled = YES;
configuration.preferences._hiddenPageDOMTimerThrottlingEnabled = NO; configuration.preferences._hiddenPageDOMTimerThrottlingEnabled = NO;
configuration.preferences._hiddenPageDOMTimerThrottlingAutoIncreases = NO; configuration.preferences._hiddenPageDOMTimerThrottlingAutoIncreases = NO;
configuration.preferences._pageVisibilityBasedProcessSuppressionEnabled = NO; configuration.preferences._pageVisibilityBasedProcessSuppressionEnabled = NO;
configuration.preferences._domTimersThrottlingEnabled = NO; configuration.preferences._domTimersThrottlingEnabled = NO;
// Do not auto play audio and video with sound.
configuration.defaultWebpagePreferences._autoplayPolicy = _WKWebsiteAutoplayPolicyAllowWithoutSound;
_WKProcessPoolConfiguration *processConfiguration = [[[_WKProcessPoolConfiguration alloc] init] autorelease]; _WKProcessPoolConfiguration *processConfiguration = [[[_WKProcessPoolConfiguration alloc] init] autorelease];
processConfiguration.forceOverlayScrollbars = YES; processConfiguration.forceOverlayScrollbars = YES;
configuration.processPool = [[[WKProcessPool alloc] _initWithConfiguration:processConfiguration] autorelease]; configuration.processPool = [[[WKProcessPool alloc] _initWithConfiguration:processConfiguration] autorelease];
@ -477,8 +482,20 @@ const NSActivityOptions ActivityOptions =
decisionHandler(WKNavigationResponsePolicyAllow); decisionHandler(WKNavigationResponsePolicyAllow);
return; return;
} }
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)navigationResponse.response; NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)navigationResponse.response;
NSString *contentType = [httpResponse valueForHTTPHeaderField:@"Content-Type"];
if (!navigationResponse.canShowMIMEType && (contentType && [contentType length] > 0)) {
decisionHandler(WKNavigationResponsePolicyDownload);
return;
}
if (contentType && ([contentType isEqualToString:@"application/pdf"] || [contentType isEqualToString:@"text/pdf"])) {
decisionHandler(WKNavigationResponsePolicyDownload);
return;
}
NSString *disposition = [[httpResponse allHeaderFields] objectForKey:@"Content-Disposition"]; NSString *disposition = [[httpResponse allHeaderFields] objectForKey:@"Content-Disposition"];
if (disposition && [disposition hasPrefix:@"attachment"]) { if (disposition && [disposition hasPrefix:@"attachment"]) {
decisionHandler(WKNavigationResponsePolicyDownload); decisionHandler(WKNavigationResponsePolicyDownload);

View file

@ -211,7 +211,7 @@ static void* keyValueObservingContext = &keyValueObservingContext;
| _WKRenderingProgressEventFirstLayoutAfterSuppressedIncrementalRendering | _WKRenderingProgressEventFirstLayoutAfterSuppressedIncrementalRendering
| _WKRenderingProgressEventFirstPaintAfterSuppressedIncrementalRendering; | _WKRenderingProgressEventFirstPaintAfterSuppressedIncrementalRendering;
_webView.customUserAgent = @"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.4 Safari/605.1.15"; _webView.customUserAgent = @"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.4 Safari/605.1.15";
_webView._usePlatformFindUI = NO; _webView._usePlatformFindUI = NO;
@ -724,7 +724,7 @@ static BOOL areEssentiallyEqual(double a, double b)
[_webView loadHTMLString:HTMLString baseURL:nil]; [_webView loadHTMLString:HTMLString baseURL:nil];
} }
static NSSet *dataTypes() static NSSet *dataTypes(void)
{ {
return [WKWebsiteDataStore allWebsiteDataTypes]; return [WKWebsiteDataStore allWebsiteDataTypes];
} }
@ -792,8 +792,20 @@ static NSSet *dataTypes()
decisionHandler(WKNavigationResponsePolicyAllow); decisionHandler(WKNavigationResponsePolicyAllow);
return; return;
} }
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)navigationResponse.response; NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)navigationResponse.response;
NSString *contentType = [httpResponse valueForHTTPHeaderField:@"Content-Type"];
if (!navigationResponse.canShowMIMEType && (contentType && [contentType length] > 0)) {
decisionHandler(WKNavigationResponsePolicyDownload);
return;
}
if (contentType && ([contentType isEqualToString:@"application/pdf"] || [contentType isEqualToString:@"text/pdf"])) {
decisionHandler(WKNavigationResponsePolicyDownload);
return;
}
NSString *disposition = [[httpResponse allHeaderFields] objectForKey:@"Content-Disposition"]; NSString *disposition = [[httpResponse allHeaderFields] objectForKey:@"Content-Disposition"];
if (disposition && [disposition hasPrefix:@"attachment"]) { if (disposition && [disposition hasPrefix:@"attachment"]) {
decisionHandler(WKNavigationResponsePolicyDownload); decisionHandler(WKNavigationResponsePolicyDownload);

View file

@ -29,10 +29,6 @@ list(APPEND Playwright_PRIVATE_LIBRARIES
) )
WEBKIT_EXECUTABLE_DECLARE(Playwright) WEBKIT_EXECUTABLE_DECLARE(Playwright)
WEBKIT_WRAP_EXECUTABLE(Playwright
SOURCES ${TOOLS_DIR}/win/DLLLauncher/DLLLauncherMain.cpp Playwright.rc
LIBRARIES shlwapi
)
WEBKIT_EXECUTABLE(Playwright) WEBKIT_EXECUTABLE(Playwright)
set_target_properties(Playwright PROPERTIES WIN32_EXECUTABLE ON) set_target_properties(Playwright PROPERTIES WIN32_EXECUTABLE ON)

View file

@ -62,14 +62,6 @@ void computeFullDesktopFrame()
s_windowSize.cy = scaleFactor * (desktop.bottom - desktop.top); s_windowSize.cy = scaleFactor * (desktop.bottom - desktop.top);
} }
BOOL WINAPI DllMain(HINSTANCE dllInstance, DWORD reason, LPVOID)
{
if (reason == DLL_PROCESS_ATTACH)
hInst = dllInstance;
return TRUE;
}
bool getAppDataFolder(_bstr_t& directory) bool getAppDataFolder(_bstr_t& directory)
{ {
wchar_t appDataDirectory[MAX_PATH]; wchar_t appDataDirectory[MAX_PATH];

View file

@ -1,76 +0,0 @@
// Microsoft Visual C++ generated resource script.
//
#include "PlaywrightResource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#define APSTUDIO_HIDDEN_SYMBOLS
#include "windows.h"
#undef APSTUDIO_HIDDEN_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_PLAYWRIGHT ICON "Playwright.ico"
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"PlaywrightResource.\0"
END
2 TEXTINCLUDE
BEGIN
"#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
"#include ""windows.h""\r\n"
"#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View file

@ -100,7 +100,7 @@ WebKitBrowserWindow::WebKitBrowserWindow(BrowserWindowClient& client, HWND mainW
WKPagePolicyClientV1 policyClient = { }; WKPagePolicyClientV1 policyClient = { };
policyClient.base.version = 1; policyClient.base.version = 1;
policyClient.base.clientInfo = this; policyClient.base.clientInfo = this;
policyClient.decidePolicyForResponse_deprecatedForUseWithV0 = decidePolicyForResponse; policyClient.decidePolicyForResponse = decidePolicyForResponse;
policyClient.decidePolicyForNavigationAction = decidePolicyForNavigationAction; policyClient.decidePolicyForNavigationAction = decidePolicyForNavigationAction;
WKPageSetPagePolicyClient(page, &policyClient.base); WKPageSetPagePolicyClient(page, &policyClient.base);
@ -402,9 +402,10 @@ void WebKitBrowserWindow::decidePolicyForNavigationAction(WKPageRef page, WKFram
WKFramePolicyListenerUse(listener); WKFramePolicyListenerUse(listener);
} }
void WebKitBrowserWindow::decidePolicyForResponse(WKPageRef page, WKFrameRef frame, WKURLResponseRef response, WKURLRequestRef request, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo) void WebKitBrowserWindow::decidePolicyForResponse(WKPageRef page, WKFrameRef frame, WKURLResponseRef response, WKURLRequestRef request, bool canShowMIMEType, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo)
{ {
if (WKURLResponseIsAttachment(response)) // Safari renders resources without content-type as text.
if (WKURLResponseIsAttachment(response) || (!WKStringIsEmpty(WKURLResponseCopyMIMEType(response)) && !canShowMIMEType))
WKFramePolicyListenerDownload(listener); WKFramePolicyListenerDownload(listener);
else else
WKFramePolicyListenerUse(listener); WKFramePolicyListenerUse(listener);

View file

@ -73,7 +73,7 @@ private:
static WKRect getWindowFrame(WKPageRef page, const void *clientInfo); static WKRect getWindowFrame(WKPageRef page, const void *clientInfo);
static void didNotHandleKeyEvent(WKPageRef, WKNativeEventPtr, const void*); static void didNotHandleKeyEvent(WKPageRef, WKNativeEventPtr, const void*);
static void decidePolicyForNavigationAction(WKPageRef, WKFrameRef, WKFrameNavigationType, WKEventModifiers, WKEventMouseButton, WKFrameRef, WKURLRequestRef, WKFramePolicyListenerRef, WKTypeRef, const void* clientInfo); static void decidePolicyForNavigationAction(WKPageRef, WKFrameRef, WKFrameNavigationType, WKEventModifiers, WKEventMouseButton, WKFrameRef, WKURLRequestRef, WKFramePolicyListenerRef, WKTypeRef, const void* clientInfo);
static void decidePolicyForResponse(WKPageRef, WKFrameRef, WKURLResponseRef, WKURLRequestRef, WKFramePolicyListenerRef, WKTypeRef, const void*); static void decidePolicyForResponse(WKPageRef, WKFrameRef, WKURLResponseRef, WKURLRequestRef, bool, WKFramePolicyListenerRef, WKTypeRef, const void*);
BrowserWindowClient& m_client; BrowserWindowClient& m_client;
WKRetainPtr<WKViewRef> m_view; WKRetainPtr<WKViewRef> m_view;

View file

@ -70,6 +70,7 @@ static void configureDataStore(WKWebsiteDataStoreRef dataStore) {
int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpstrCmdLine, _In_ int nCmdShow) int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpstrCmdLine, _In_ int nCmdShow)
{ {
hInst = hInstance;
#ifdef _CRTDBG_MAP_ALLOC #ifdef _CRTDBG_MAP_ALLOC
_CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
@ -165,8 +166,3 @@ exit:
return static_cast<int>(msg.wParam); return static_cast<int>(msg.wParam);
} }
extern "C" __declspec(dllexport) int WINAPI dllLauncherEntryPoint(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpstrCmdLine, int nCmdShow)
{
return wWinMain(hInstance, hPrevInstance, lpstrCmdLine, nCmdShow);
}

File diff suppressed because it is too large Load diff

View file

@ -1,11 +1,14 @@
#!/bin/bash #!/usr/bin/env bash
function getWebkitCheckoutPath() {
echo ${WK_CHECKOUT_PATH:-"$HOME/webkit"}
}
function runOSX() { function runOSX() {
# if script is run as-is # if script is run as-is
if [[ -f "${SCRIPT_PATH}/EXPECTED_BUILDS" && -n "$WK_CHECKOUT_PATH" && -d "$WK_CHECKOUT_PATH/WebKitBuild/Release/Playwright.app" ]]; then WK_CHECKOUT_PATH=$(getWebkitCheckoutPath)
if [[ -f "${SCRIPT_PATH}/EXPECTED_BUILDS" && -d "$WK_CHECKOUT_PATH/WebKitBuild/Release/Playwright.app" ]]; then
DYLIB_PATH="$WK_CHECKOUT_PATH/WebKitBuild/Release" DYLIB_PATH="$WK_CHECKOUT_PATH/WebKitBuild/Release"
elif [[ -f "${SCRIPT_PATH}/EXPECTED_BUILDS" && -d "$HOME/webkit/WebKitBuild/Release/Playwright.app" ]]; then
DYLIB_PATH="$HOME/webkit/WebKitBuild/Release"
elif [[ -d $SCRIPT_PATH/Playwright.app ]]; then elif [[ -d $SCRIPT_PATH/Playwright.app ]]; then
DYLIB_PATH="$SCRIPT_PATH" DYLIB_PATH="$SCRIPT_PATH"
elif [[ -d $SCRIPT_PATH/WebKitBuild/Release/Playwright.app ]]; then elif [[ -d $SCRIPT_PATH/WebKitBuild/Release/Playwright.app ]]; then
@ -23,29 +26,30 @@ function runLinux() {
GIO_DIR=""; GIO_DIR="";
LD_PATH=""; LD_PATH="";
BUNDLE_DIR=""; BUNDLE_DIR="";
DEPENDENCIES_FOLDER="DependenciesGTK"; DEPENDENCIES_FOLDER="WebKitBuild/DependenciesGTK";
MINIBROWSER_FOLDER="minibrowser-gtk"; MINIBROWSER_FOLDER="minibrowser-gtk";
BUILD_FOLDER="WebKitBuild/GTK"; BUILD_FOLDER="WebKitBuild/GTK";
if [[ "$*" == *--headless* ]]; then if [[ "$*" == *--headless* ]]; then
DEPENDENCIES_FOLDER="DependenciesWPE"; DEPENDENCIES_FOLDER="WebKitBuild/DependenciesWPE";
MINIBROWSER_FOLDER="minibrowser-wpe"; MINIBROWSER_FOLDER="minibrowser-wpe";
BUILD_FOLDER="WebKitBuild/WPE"; BUILD_FOLDER="WebKitBuild/WPE";
fi fi
# Setting extra environment variables like LD_LIBRARY_PATH or WEBKIT_INJECTED_BUNDLE_PATH # Setting extra environment variables like LD_LIBRARY_PATH or WEBKIT_INJECTED_BUNDLE_PATH
# is only needed when calling MiniBrowser from the build folder. The MiniBrowser from # is only needed when calling MiniBrowser from the build folder. The MiniBrowser from
# the zip bundle wrapper already sets itself the needed env variables. # the zip bundle wrapper already sets itself the needed env variables.
WK_CHECKOUT_PATH=$(getWebkitCheckoutPath)
if [[ -d $SCRIPT_PATH/$MINIBROWSER_FOLDER ]]; then if [[ -d $SCRIPT_PATH/$MINIBROWSER_FOLDER ]]; then
MINIBROWSER="$SCRIPT_PATH/$MINIBROWSER_FOLDER/MiniBrowser" MINIBROWSER="$SCRIPT_PATH/$MINIBROWSER_FOLDER/MiniBrowser"
elif [[ -d $HOME/webkit/$BUILD_FOLDER ]]; then elif [[ -d $WK_CHECKOUT_PATH/$BUILD_FOLDER ]]; then
LD_PATH="$HOME/webkit/$BUILD_FOLDER/$DEPENDENCIES_FOLDER/Root/lib:$SCRIPT_PATH/checkout/$BUILD_FOLDER/Release/bin" LD_PATH="$WK_CHECKOUT_PATH/$DEPENDENCIES_FOLDER/Root/lib:$SCRIPT_PATH/checkout/$BUILD_FOLDER/Release/bin"
GIO_DIR="$HOME/webkit/$BUILD_FOLDER/$DEPENDENCIES_FOLDER/Root/lib/gio/modules" GIO_DIR="$WK_CHECKOUT_PATH/$DEPENDENCIES_FOLDER/Root/lib/gio/modules"
BUNDLE_DIR="$HOME/webkit/$BUILD_FOLDER/Release/lib" BUNDLE_DIR="$WK_CHECKOUT_PATH/$BUILD_FOLDER/Release/lib"
MINIBROWSER="$HOME/webkit/$BUILD_FOLDER/Release/bin/MiniBrowser" MINIBROWSER="$WK_CHECKOUT_PATH/$BUILD_FOLDER/Release/bin/MiniBrowser"
elif [[ -f $SCRIPT_PATH/MiniBrowser ]]; then elif [[ -f $SCRIPT_PATH/MiniBrowser ]]; then
MINIBROWSER="$SCRIPT_PATH/MiniBrowser" MINIBROWSER="$SCRIPT_PATH/MiniBrowser"
elif [[ -d $SCRIPT_PATH/$BUILD_FOLDER ]]; then elif [[ -d $SCRIPT_PATH/$BUILD_FOLDER ]]; then
LD_PATH="$SCRIPT_PATH/$BUILD_FOLDER/$DEPENDENCIES_FOLDER/Root/lib:$SCRIPT_PATH/$BUILD_FOLDER/Release/bin" LD_PATH="$SCRIPT_PATH/$DEPENDENCIES_FOLDER/Root/lib:$SCRIPT_PATH/$BUILD_FOLDER/Release/bin"
GIO_DIR="$SCRIPT_PATH/$BUILD_FOLDER/$DEPENDENCIES_FOLDER/Root/lib/gio/modules" GIO_DIR="$SCRIPT_PATH/$DEPENDENCIES_FOLDER/Root/lib/gio/modules"
BUNDLE_DIR="$SCRIPT_PATH/$BUILD_FOLDER/Release/lib" BUNDLE_DIR="$SCRIPT_PATH/$BUILD_FOLDER/Release/lib"
MINIBROWSER="$SCRIPT_PATH/$BUILD_FOLDER/Release/bin/MiniBrowser" MINIBROWSER="$SCRIPT_PATH/$BUILD_FOLDER/Release/bin/MiniBrowser"
else else

View file

@ -1,7 +1,7 @@
# Tool for printing .exe and .dll dependencies on Windows # Tool for printing .exe and .dll dependencies on Windows
This is similar to `ldd` on linux in that loads specified files and tries to This is similar to `ldd` on linux in that loads specified files and tries to
resolve all DLLs referenced by it, printing in the format `<lib name> => <full path> | "no found"` resolve all DLLs referenced by it, printing in the formar `<lib name> => <full path> | "no found"`
To minimize dependencies we link all C runtime libraries statically, there is To minimize dependencies we link all C runtime libraries statically, there is
still one dynamic dependency on `dbghelp.dll` which is supposed to be preinstalled still one dynamic dependency on `dbghelp.dll` which is supposed to be preinstalled
on all Windows machines. on all Windows machines.

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
set -e set -e
set +x set +x
@ -39,5 +39,4 @@ fi
# create a TMP directory to copy all necessary files # create a TMP directory to copy all necessary files
cd ./x64/Release cd ./x64/Release
zip $ZIP_PATH ./PrintDeps.exe 7z a "$ZIP_PATH" ./PrintDeps.exe

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
set -e set -e
set +x set +x

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
set -e set -e
set +x set +x

View file

@ -3,6 +3,8 @@ id: accessibility-testing
title: "Accessibility testing" title: "Accessibility testing"
--- ---
## Introduction
Playwright can be used to test your application for many types of accessibility issues. Playwright can be used to test your application for many types of accessibility issues.
A few examples of problems this can catch include: A few examples of problems this can catch include:
@ -12,8 +14,6 @@ A few examples of problems this can catch include:
The following examples rely on the [`com.deque.html.axe-core/playwright`](https://mvnrepository.com/artifact/com.deque.html.axe-core/playwright) Maven package which adds support for running the [axe accessibility testing engine](https://www.deque.com/axe/) as part of your Playwright tests. The following examples rely on the [`com.deque.html.axe-core/playwright`](https://mvnrepository.com/artifact/com.deque.html.axe-core/playwright) Maven package which adds support for running the [axe accessibility testing engine](https://www.deque.com/axe/) as part of your Playwright tests.
<!-- TOC -->
## Disclaimer ## Disclaimer
Automated accessibility tests can detect some common accessibility problems such as missing or invalid properties. But many accessibility problems can only be discovered through manual testing. We recommend using a combination of automated testing, manual accessibility assessments, and inclusive user testing. Automated accessibility tests can detect some common accessibility problems such as missing or invalid properties. But many accessibility problems can only be discovered through manual testing. We recommend using a combination of automated testing, manual accessibility assessments, and inclusive user testing.
@ -70,6 +70,7 @@ For example, you can use [`AxeBuilder.include()`](https://github.com/dequelabs/a
`AxeBuilder.analyze()` will scan the page *in its current state* when you call it. To scan parts of a page that are revealed based on UI interactions, use [Locators](./locators.md) to interact with the page before invoking `analyze()`: `AxeBuilder.analyze()` will scan the page *in its current state* when you call it. To scan parts of a page that are revealed based on UI interactions, use [Locators](./locators.md) to interact with the page before invoking `analyze()`:
```java ```java
public class HomepageTests {
@Test @Test
void navigationMenuFlyoutShouldNotHaveAutomaticallyDetectableAccessibilityViolations() throws Exception { void navigationMenuFlyoutShouldNotHaveAutomaticallyDetectableAccessibilityViolations() throws Exception {
page.navigate("https://your-site.com/"); page.navigate("https://your-site.com/");
@ -87,6 +88,7 @@ void navigationMenuFlyoutShouldNotHaveAutomaticallyDetectableAccessibilityViolat
assertEquals(Collections.emptyList(), accessibilityScanResults.getViolations()); assertEquals(Collections.emptyList(), accessibilityScanResults.getViolations());
} }
}
``` ```
### Example 3: Scanning for WCAG violations ### Example 3: Scanning for WCAG violations
@ -133,7 +135,7 @@ If the element in question is used repeatedly in many pages, consider [using a t
### Disabling individual scan rules ### Disabling individual scan rules
If your application contains many different pre-existing violations of a specific rule, you can use [`AxeBuilder.disableRules()`](https://github.com/dequelabs/axe-core-maven-html/blob/develop/playwright/README.md#axebuilderdisablerulesliststring-rules) to temporarily disable individual rules until you're able to fix the issues. If your application contains many different preexisting violations of a specific rule, you can use [`AxeBuilder.disableRules()`](https://github.com/dequelabs/axe-core-maven-html/blob/develop/playwright/README.md#axebuilderdisablerulesliststring-rules) to temporarily disable individual rules until you're able to fix the issues.
You can find the rule IDs to pass to `disableRules()` in the `id` property of the violations you want to suppress. A [complete list of axe's rules](https://github.com/dequelabs/axe-core/blob/master/doc/rule-descriptions.md) can be found in `axe-core`'s documentation. You can find the rule IDs to pass to `disableRules()` in the `id` property of the violations you want to suppress. A [complete list of axe's rules](https://github.com/dequelabs/axe-core/blob/master/doc/rule-descriptions.md) can be found in `axe-core`'s documentation.
@ -158,6 +160,7 @@ This approach avoids the downsides of using `AxeBuilder.exclude()` at the cost o
Here is an example of using fingerprints based on only rule IDs and "target" selectors pointing to each violation: Here is an example of using fingerprints based on only rule IDs and "target" selectors pointing to each violation:
```java ```java
public class HomepageTests {
@Test @Test
shouldOnlyHaveAccessibilityViolationsMatchingKnownFingerprints() throws Exception { shouldOnlyHaveAccessibilityViolationsMatchingKnownFingerprints() throws Exception {
page.navigate("https://your-site.com/"); page.navigate("https://your-site.com/");
@ -191,6 +194,7 @@ public List<ViolationFingerprint> fingerprintsFromScanResults(AxeResults results
))) )))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
}
``` ```
## Using a test fixture for common axe configuration ## Using a test fixture for common axe configuration
@ -210,8 +214,8 @@ This example fixture creates an `AxeBuilder` object which is pre-configured with
class AxeTestFixtures extends TestFixtures { class AxeTestFixtures extends TestFixtures {
AxeBuilder makeAxeBuilder() { AxeBuilder makeAxeBuilder() {
return new AxeBuilder(page) return new AxeBuilder(page)
.withTags(['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa']) .withTags(new String[]{"wcag2a", "wcag2aa", "wcag21a", "wcag21aa"})
.exclude('#commonly-reused-element-with-known-issue'); .exclude("#commonly-reused-element-with-known-issue");
} }
} }
``` ```
@ -229,10 +233,12 @@ public class HomepageTests extends AxeTestFixtures {
AxeResults accessibilityScanResults = makeAxeBuilder() AxeResults accessibilityScanResults = makeAxeBuilder()
// Automatically uses the shared AxeBuilder configuration, // Automatically uses the shared AxeBuilder configuration,
// but supports additional test-specific configuration too // but supports additional test-specific configuration too
.include('#specific-element-under-test') .include("#specific-element-under-test")
.analyze(); .analyze();
assertEquals(Collections.emptyList(), accessibilityScanResults.getViolations()); assertEquals(Collections.emptyList(), accessibilityScanResults.getViolations());
} }
} }
``` ```
See experimental [JUnit integration](./junit.md) to automatically initialize Playwright objects and more.

View file

@ -3,6 +3,8 @@ id: accessibility-testing
title: "Accessibility testing" title: "Accessibility testing"
--- ---
## Introduction
Playwright can be used to test your application for many types of accessibility issues. Playwright can be used to test your application for many types of accessibility issues.
A few examples of problems this can catch include: A few examples of problems this can catch include:
@ -12,7 +14,7 @@ A few examples of problems this can catch include:
The following examples rely on the [`@axe-core/playwright`](https://npmjs.org/@axe-core/playwright) package which adds support for running the [axe accessibility testing engine](https://www.deque.com/axe/) as part of your Playwright tests. The following examples rely on the [`@axe-core/playwright`](https://npmjs.org/@axe-core/playwright) package which adds support for running the [axe accessibility testing engine](https://www.deque.com/axe/) as part of your Playwright tests.
:::note Disclaimer :::note[Disclaimer]
Automated accessibility tests can detect some common accessibility problems such as missing or invalid properties. But many accessibility problems can only be discovered through manual testing. We recommend using a combination of automated testing, manual accessibility assessments, and inclusive user testing. Automated accessibility tests can detect some common accessibility problems such as missing or invalid properties. But many accessibility problems can only be discovered through manual testing. We recommend using a combination of automated testing, manual accessibility assessments, and inclusive user testing.
For manual assessments, we recommend [Accessibility Insights for Web](https://accessibilityinsights.io/docs/web/overview/?referrer=playwright-accessibility-testing-js), a free and open source dev tool that walks you through assessing a website for [WCAG 2.1 AA](https://www.w3.org/WAI/WCAG21/quickref/?currentsidebar=%23col_customize&levels=aaa) coverage. For manual assessments, we recommend [Accessibility Insights for Web](https://accessibilityinsights.io/docs/web/overview/?referrer=playwright-accessibility-testing-js), a free and open source dev tool that walks you through assessing a website for [WCAG 2.1 AA](https://www.w3.org/WAI/WCAG21/quickref/?currentsidebar=%23col_customize&levels=aaa) coverage.
@ -71,7 +73,9 @@ For example, you can use [`AxeBuilder.include()`](https://github.com/dequelabs/a
`AxeBuilder.analyze()` will scan the page *in its current state* when you call it. To scan parts of a page that are revealed based on UI interactions, use [Locators](./locators.md) to interact with the page before invoking `analyze()`: `AxeBuilder.analyze()` will scan the page *in its current state* when you call it. To scan parts of a page that are revealed based on UI interactions, use [Locators](./locators.md) to interact with the page before invoking `analyze()`:
```js ```js
test('navigation menu flyout should not have automatically detectable accessibility violations', async ({ page }) => { test('navigation menu should not have automatically detectable accessibility violations', async ({
page,
}) => {
await page.goto('https://your-site.com/'); await page.goto('https://your-site.com/');
await page.getByRole('button', { name: 'Navigation Menu' }).click(); await page.getByRole('button', { name: 'Navigation Menu' }).click();
@ -95,7 +99,7 @@ By default, axe checks against a wide variety of accessibility rules. Some of th
You can constrain an accessibility scan to only run those rules which are "tagged" as corresponding to specific WCAG success criteria by using [`AxeBuilder.withTags()`](https://github.com/dequelabs/axe-core-npm/blob/develop/packages/playwright/README.md#axebuilderwithtagstags-stringarray). For example, [Accessibility Insights for Web's Automated Checks](https://accessibilityinsights.io/docs/web/getstarted/fastpass/?referrer=playwright-accessibility-testing-js) only include axe rules that test for violations of WCAG A and AA success criteria; to match that behavior, you would use the tags `wcag2a`, `wcag2aa`, `wcag21a`, and `wcag21aa`. You can constrain an accessibility scan to only run those rules which are "tagged" as corresponding to specific WCAG success criteria by using [`AxeBuilder.withTags()`](https://github.com/dequelabs/axe-core-npm/blob/develop/packages/playwright/README.md#axebuilderwithtagstags-stringarray). For example, [Accessibility Insights for Web's Automated Checks](https://accessibilityinsights.io/docs/web/getstarted/fastpass/?referrer=playwright-accessibility-testing-js) only include axe rules that test for violations of WCAG A and AA success criteria; to match that behavior, you would use the tags `wcag2a`, `wcag2aa`, `wcag21a`, and `wcag21aa`.
Note that [automated testing cannot detect all types of WCAG violations](#disclaimer). Note that automated testing cannot detect all types of WCAG violations.
```js ```js
test('should not have any automatically detectable WCAG A or AA violations', async ({ page }) => { test('should not have any automatically detectable WCAG A or AA violations', async ({ page }) => {
@ -126,7 +130,9 @@ This is usually the simplest option, but it has some important downsides:
Here is an example of excluding one element from being scanned in one specific test: Here is an example of excluding one element from being scanned in one specific test:
```js ```js
test('should not have any accessibility violations outside of elements with known issues', async ({ page }) => { test('should not have any accessibility violations outside of elements with known issues', async ({
page,
}) => {
await page.goto('https://your-site.com/page-with-known-issues'); await page.goto('https://your-site.com/page-with-known-issues');
const accessibilityScanResults = await new AxeBuilder({ page }) const accessibilityScanResults = await new AxeBuilder({ page })
@ -141,12 +147,14 @@ If the element in question is used repeatedly in many pages, consider [using a t
### Disabling individual scan rules ### Disabling individual scan rules
If your application contains many different pre-existing violations of a specific rule, you can use [`AxeBuilder.disableRules()`](https://github.com/dequelabs/axe-core-npm/blob/develop/packages/playwright/README.md#axebuilderdisablerulesrules-stringarray) to temporarily disable individual rules until you're able to fix the issues. If your application contains many different preexisting violations of a specific rule, you can use [`AxeBuilder.disableRules()`](https://github.com/dequelabs/axe-core-npm/blob/develop/packages/playwright/README.md#axebuilderdisablerulesrules-stringarray) to temporarily disable individual rules until you're able to fix the issues.
You can find the rule IDs to pass to `disableRules()` in the `id` property of the violations you want to suppress. A [complete list of axe's rules](https://github.com/dequelabs/axe-core/blob/master/doc/rule-descriptions.md) can be found in `axe-core`'s documentation. You can find the rule IDs to pass to `disableRules()` in the `id` property of the violations you want to suppress. A [complete list of axe's rules](https://github.com/dequelabs/axe-core/blob/master/doc/rule-descriptions.md) can be found in `axe-core`'s documentation.
```js ```js
test('should not have any accessibility violations outside of rules with known issues', async ({ page }) => { test('should not have any accessibility violations outside of rules with known issues', async ({
page,
}) => {
await page.goto('https://your-site.com/page-with-known-issues'); await page.goto('https://your-site.com/page-with-known-issues');
const accessibilityScanResults = await new AxeBuilder({ page }) const accessibilityScanResults = await new AxeBuilder({ page })
@ -159,7 +167,7 @@ test('should not have any accessibility violations outside of rules with known i
### Using snapshots to allow specific known issues ### Using snapshots to allow specific known issues
If you would like to allow for a more granular set of known issues, you can use [Snapshots](./test-snapshots.md) to verify that a set of pre-existing violations has not changed. This approach avoids the downsides of using `AxeBuilder.exclude()` at the cost of slightly more complexity and fragility. If you would like to allow for a more granular set of known issues, you can use [Snapshots](./test-snapshots.md) to verify that a set of preexisting violations has not changed. This approach avoids the downsides of using `AxeBuilder.exclude()` at the cost of slightly more complexity and fragility.
Do not use a snapshot of the entire `accessibilityScanResults.violations` array. It contains implementation details of the elements in question, such as a snippet of their rendered HTML; if you include these in your snapshots, it will make your tests prone to breaking every time one of the components in question changes for an unrelated reason: Do not use a snapshot of the entire `accessibilityScanResults.violations` array. It contains implementation details of the elements in question, such as a snippet of their rendered HTML; if you include these in your snapshots, it will make your tests prone to breaking every time one of the components in question changes for an unrelated reason:
@ -223,8 +231,7 @@ The following example demonstrates creating and using a test fixture that covers
This example fixture creates an `AxeBuilder` object which is pre-configured with shared `withTags()` and `exclude()` configuration. This example fixture creates an `AxeBuilder` object which is pre-configured with shared `withTags()` and `exclude()` configuration.
```js tab=js-ts ```js tab=js-ts title="axe-test.ts"
// axe-test.ts
import { test as base } from '@playwright/test'; import { test as base } from '@playwright/test';
import AxeBuilder from '@axe-core/playwright'; import AxeBuilder from '@axe-core/playwright';

View file

@ -3,11 +3,13 @@ id: actionability
title: "Auto-waiting" title: "Auto-waiting"
--- ---
## Introduction
Playwright performs a range of actionability checks on the elements before making actions to ensure these actions Playwright performs a range of actionability checks on the elements before making actions to ensure these actions
behave as expected. It auto-waits for all the relevant checks to pass and only then performs the requested action. If the required checks do not pass within the given `timeout`, action fails with the `TimeoutError`. behave as expected. It auto-waits for all the relevant checks to pass and only then performs the requested action. If the required checks do not pass within the given `timeout`, action fails with the `TimeoutError`.
For example, for [`method: Page.click`], Playwright will ensure that: For example, for [`method: Locator.click`], Playwright will ensure that:
- element is [Attached] to the DOM - locator resolves to exactly one element
- element is [Visible] - element is [Visible]
- element is [Stable], as in not animating or completed animation - element is [Stable], as in not animating or completed animation
- element [Receives Events], as in not obscured by other elements - element [Receives Events], as in not obscured by other elements
@ -15,72 +17,75 @@ For example, for [`method: Page.click`], Playwright will ensure that:
Here is the complete list of actionability checks performed for each action: Here is the complete list of actionability checks performed for each action:
| Action | [Attached] | [Visible] | [Stable] | [Receives Events] | [Enabled] | [Editable] | | Action | [Visible] | [Stable] | [Receives Events] | [Enabled] | [Editable] |
| :- | :-: | :-: | :-: | :-: | :-: | :-: | | :- | :-: | :-: | :-: | :-: | :-: |
| check | Yes | Yes | Yes | Yes | Yes | - | | [`method: Locator.check`] | Yes | Yes | Yes | Yes | - |
| click | Yes | Yes | Yes | Yes | Yes | - | | [`method: Locator.click`] | Yes | Yes | Yes | Yes | - |
| dblclick | Yes | Yes | Yes | Yes | Yes | - | | [`method: Locator.dblclick`] | Yes | Yes | Yes | Yes | - |
| setChecked | Yes | Yes | Yes | Yes | Yes | - | | [`method: Locator.setChecked`] | Yes | Yes | Yes | Yes | - |
| tap | Yes | Yes | Yes | Yes | Yes | - | | [`method: Locator.tap`] | Yes | Yes | Yes | Yes | - |
| uncheck | Yes | Yes | Yes | Yes | Yes | - | | [`method: Locator.uncheck`] | Yes | Yes | Yes | Yes | - |
| hover | Yes | Yes | Yes | Yes | - | - | | [`method: Locator.hover`] | Yes | Yes | Yes | - | - |
| scrollIntoViewIfNeeded | Yes | - | Yes | - | - | - | | [`method: Locator.dragTo`] | Yes | Yes | Yes | - | - |
| screenshot | Yes | Yes | Yes | - | - | - | | [`method: Locator.screenshot`] | Yes | Yes | - | - | - |
| fill | Yes | Yes | - | - | Yes | Yes | | [`method: Locator.fill`] | Yes | - | - | Yes | Yes |
| selectText | Yes | Yes | - | - | - | - | | [`method: Locator.clear`] | Yes | - | - | Yes | Yes |
| dispatchEvent | Yes | - | - | - | - | - | | [`method: Locator.selectOption`] | Yes | - | - | Yes | - |
| focus | Yes | - | - | - | - | - | | [`method: Locator.selectText`] | Yes | - | - | - | - |
| getAttribute | Yes | - | - | - | - | - | | [`method: Locator.scrollIntoViewIfNeeded`] | - | Yes | - | - | - |
| innerText | Yes | - | - | - | - | - | | [`method: Locator.blur`] | - | - | - | - | - |
| innerHTML | Yes | - | - | - | - | - | | [`method: Locator.dispatchEvent`] | - | - | - | - | - |
| press | Yes | - | - | - | - | - | | [`method: Locator.focus`] | - | - | - | - | - |
| setInputFiles | Yes | - | - | - | - | - | | [`method: Locator.press`] | - | - | - | - | - |
| selectOption | Yes | Yes | - | - | Yes | - | | [`method: Locator.pressSequentially`] | - | - | - | - | - |
| textContent | Yes | - | - | - | - | - | | [`method: Locator.setInputFiles`] | - | - | - | - | - |
| type | Yes | - | - | - | - | - |
<br/>
## Forcing actions ## Forcing actions
Some actions like [`method: Page.click`] support `force` option that disables non-essential actionability checks, Some actions like [`method: Locator.click`] support `force` option that disables non-essential actionability checks,
for example passing truthy `force` to [`method: Page.click`] method will not check that the target element actually for example passing truthy `force` to [`method: Locator.click`] method will not check that the target element actually
receives click events. receives click events.
## Assertions ## Assertions
You can check the actionability state of the element using one of the following methods as well. This is typically Playwright includes auto-retrying assertions that remove flakiness by waiting until the condition is met, similarly to auto-waiting before actions.
not necessary, but it helps writing assertive tests that ensure that after certain actions, elements reach
actionable state:
- [`method: ElementHandle.isChecked`] | Assertion | Description |
- [`method: ElementHandle.isDisabled`] | :- | :- |
- [`method: ElementHandle.isEditable`] | [`method: LocatorAssertions.toBeAttached`] | Element is attached |
- [`method: ElementHandle.isEnabled`] | [`method: LocatorAssertions.toBeChecked`] | Checkbox is checked |
- [`method: ElementHandle.isHidden`] | [`method: LocatorAssertions.toBeDisabled`] | Element is disabled |
- [`method: ElementHandle.isVisible`] | [`method: LocatorAssertions.toBeEditable`] | Element is editable |
- [`method: Page.isChecked`] | [`method: LocatorAssertions.toBeEmpty`] | Container is empty |
- [`method: Page.isDisabled`] | [`method: LocatorAssertions.toBeEnabled`] | Element is enabled |
- [`method: Page.isEditable`] | [`method: LocatorAssertions.toBeFocused`] | Element is focused |
- [`method: Page.isEnabled`] | [`method: LocatorAssertions.toBeHidden`] | Element is not visible |
- [`method: Page.isHidden`] | [`method: LocatorAssertions.toBeInViewport`] | Element intersects viewport |
- [`method: Page.isVisible`] | [`method: LocatorAssertions.toBeVisible`] | Element is visible |
- [`method: Locator.isChecked`] | [`method: LocatorAssertions.toContainText`] | Element contains text |
- [`method: Locator.isDisabled`] | [`method: LocatorAssertions.toHaveAttribute`] | Element has a DOM attribute |
- [`method: Locator.isEditable`] | [`method: LocatorAssertions.toHaveClass`] | Element has a class property |
- [`method: Locator.isEnabled`] | [`method: LocatorAssertions.toHaveCount`] | List has exact number of children |
- [`method: Locator.isHidden`] | [`method: LocatorAssertions.toHaveCSS`] | Element has CSS property |
- [`method: Locator.isVisible`] | [`method: LocatorAssertions.toHaveId`] | Element has an ID |
| [`method: LocatorAssertions.toHaveJSProperty`] | Element has a JavaScript property |
| [`method: LocatorAssertions.toHaveText`] | Element matches text |
| [`method: LocatorAssertions.toHaveValue`] | Input has a value |
| [`method: LocatorAssertions.toHaveValues`] | Select has options selected |
| [`method: PageAssertions.toHaveTitle`] | Page has a title |
| [`method: PageAssertions.toHaveURL`] | Page has a URL |
| [`method: APIResponseAssertions.toBeOK`] | Response has an OK status |
<br/> Learn more in the [assertions guide](./test-assertions.md).
## Attached
Element is considered attached when it is [connected](https://developer.mozilla.org/en-US/docs/Web/API/Node/isConnected) to a Document or a ShadowRoot.
## Visible ## Visible
Element is considered visible when it has non-empty bounding box and does not have `visibility:hidden` computed style. Note that elements of zero size or with `display:none` are not considered visible. Element is considered visible when it has non-empty bounding box and does not have `visibility:hidden` computed style.
Note that according to this definition:
* Elements of zero size **are not** considered visible.
* Elements with `display:none` **are not** considered visible.
* Elements with `opacity:0` **are** considered visible.
## Stable ## Stable
@ -88,18 +93,27 @@ Element is considered stable when it has maintained the same bounding box for at
## Enabled ## Enabled
Element is considered enabled unless it is a `<button>`, `<select>`, `<input>` or `<textarea>` with a `disabled` property. Element is considered enabled when it is **not disabled**.
Element is **disabled** when:
- it is a `<button>`, `<select>`, `<input>`, `<textarea>`, `<option>` or `<optgroup>` with a `[disabled]` attribute;
- it is a `<button>`, `<select>`, `<input>`, `<textarea>`, `<option>` or `<optgroup>` that is a part of a `<fieldset>` with a `[disabled]` attribute;
- it is a descendant of an element with `[aria-disabled=true]` attribute.
## Editable ## Editable
Element is considered editable when it is [enabled] and does not have `readonly` property set. Element is considered editable when it is [enabled] and is **not readonly**.
Element is **readonly** when:
- it is a `<select>`, `<input>` or `<textarea>` with a `[readonly]` attribute;
- it has an `[aria-readonly=true]` attribute and an aria role that [supports it](https://w3c.github.io/aria/#aria-readonly).
## Receives Events ## Receives Events
Element is considered receiving pointer events when it is the hit target of the pointer event at the action point. For example, when clicking at the point `(10;10)`, Playwright checks whether some other element (usually an overlay) will instead capture the click at `(10;10)`. Element is considered receiving pointer events when it is the hit target of the pointer event at the action point. For example, when clicking at the point `(10;10)`, Playwright checks whether some other element (usually an overlay) will instead capture the click at `(10;10)`.
For example, consider a scenario where Playwright will click `Sign Up` button regardless of when the [`method: Page.click`] call was made: For example, consider a scenario where Playwright will click `Sign Up` button regardless of when the [`method: Locator.click`] call was made:
- page is checking that user name is unique and `Sign Up` button is disabled; - page is checking that user name is unique and `Sign Up` button is disabled;
- after checking with the server, the disabled `Sign Up` button is replaced with another one that is now enabled. - after checking with the server, the disabled `Sign Up` button is replaced with another one that is now enabled.
@ -108,4 +122,3 @@ For example, consider a scenario where Playwright will click `Sign Up` button re
[Enabled]: #enabled "Enabled" [Enabled]: #enabled "Enabled"
[Editable]: #editable "Editable" [Editable]: #editable "Editable"
[Receives Events]: #receives-events "Receives Events" [Receives Events]: #receives-events "Receives Events"
[Attached]: #attached "Attached"

View file

@ -3,6 +3,8 @@ id: api-testing
title: "API testing" title: "API testing"
--- ---
## Introduction
Playwright can be used to get access to the [REST](https://en.wikipedia.org/wiki/Representational_state_transfer) API of Playwright can be used to get access to the [REST](https://en.wikipedia.org/wiki/Representational_state_transfer) API of
your application. your application.
@ -14,9 +16,7 @@ A few examples where it may come in handy:
All of that could be achieved via [APIRequestContext] methods. All of that could be achieved via [APIRequestContext] methods.
The following examples rely on the [`Microsoft.Playwright.NUnit`](./test-runners.md) package which creates a Playwright and Page instance for each test. The following examples rely on the [`Microsoft.Playwright.MSTest`](./test-runners.md) package which creates a Playwright and Page instance for each test.
<!-- TOC -->
## Writing API Test ## Writing API Test
@ -32,22 +32,19 @@ The following example demonstrates how to use Playwright to test issues creation
GitHub API requires authorization, so we'll configure the token once for all tests. While at it, we'll also set the `baseURL` to simplify the tests. GitHub API requires authorization, so we'll configure the token once for all tests. While at it, we'll also set the `baseURL` to simplify the tests.
```csharp ```csharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Playwright.NUnit;
using Microsoft.Playwright; using Microsoft.Playwright;
using NUnit.Framework; using Microsoft.Playwright.MSTest;
namespace PlaywrightTests; namespace PlaywrightTests;
[TestClass]
public class TestGitHubAPI : PlaywrightTest public class TestGitHubAPI : PlaywrightTest
{ {
static string API_TOKEN = Environment.GetEnvironmentVariable("GITHUB_API_TOKEN"); static string? API_TOKEN = Environment.GetEnvironmentVariable("GITHUB_API_TOKEN");
private IAPIRequestContext Request = null; private IAPIRequestContext Request = null!;
[SetUp] [TestInitialize]
public async Task SetUpAPITesting() public async Task SetUpAPITesting()
{ {
await CreateAPIRequestContext(); await CreateAPIRequestContext();
@ -69,7 +66,7 @@ public class TestGitHubAPI : PlaywrightTest
}); });
} }
[TearDown] [TestCleanup]
public async Task TearDownAPITesting() public async Task TearDownAPITesting()
{ {
await Request.DisposeAsync(); await Request.DisposeAsync();
@ -81,36 +78,34 @@ public class TestGitHubAPI : PlaywrightTest
Now that we initialized request object we can add a few tests that will create new issues in the repository. Now that we initialized request object we can add a few tests that will create new issues in the repository.
```csharp ```csharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text.Json; using System.Text.Json;
using Microsoft.Playwright.NUnit;
using Microsoft.Playwright; using Microsoft.Playwright;
using NUnit.Framework; using Microsoft.Playwright.MSTest;
namespace PlaywrightTests; namespace PlaywrightTests;
[TestFixture] [TestClass]
public class TestGitHubAPI : PlaywrightTest public class TestGitHubAPI : PlaywrightTest
{ {
static string REPO = "test-repo-2"; static string REPO = "test";
static string USER = Environment.GetEnvironmentVariable("GITHUB_USER"); static string USER = Environment.GetEnvironmentVariable("GITHUB_USER");
static string API_TOKEN = Environment.GetEnvironmentVariable("GITHUB_API_TOKEN"); static string? API_TOKEN = Environment.GetEnvironmentVariable("GITHUB_API_TOKEN");
private IAPIRequestContext Request = null; private IAPIRequestContext Request = null!;
[Test] [TestMethod]
public async Task ShouldCreateBugReport() public async Task ShouldCreateBugReport()
{ {
var data = new Dictionary<string, string>(); var data = new Dictionary<string, string>
data.Add("title", "[Bug] report 1"); {
data.Add("body", "Bug description"); { "title", "[Bug] report 1" },
{ "body", "Bug description" }
};
var newIssue = await Request.PostAsync("/repos/" + USER + "/" + REPO + "/issues", new() { DataObject = data }); var newIssue = await Request.PostAsync("/repos/" + USER + "/" + REPO + "/issues", new() { DataObject = data });
Assert.True(newIssue.Ok); await Expect(newIssue).ToBeOKAsync();
var issues = await Request.GetAsync("/repos/" + USER + "/" + REPO + "/issues"); var issues = await Request.GetAsync("/repos/" + USER + "/" + REPO + "/issues");
Assert.True(issues.Ok); await Expect(newIssue).ToBeOKAsync();
var issuesJsonResponse = await issues.JsonAsync(); var issuesJsonResponse = await issues.JsonAsync();
JsonElement? issue = null; JsonElement? issue = null;
foreach (JsonElement issueObj in issuesJsonResponse?.EnumerateArray()) foreach (JsonElement issueObj in issuesJsonResponse?.EnumerateArray())
@ -123,23 +118,24 @@ public class TestGitHubAPI : PlaywrightTest
} }
} }
} }
Assert.NotNull(issue); Assert.IsNotNull(issue);
Assert.AreEqual("Bug description", issue?.GetProperty("body").GetString()); Assert.AreEqual("Bug description", issue?.GetProperty("body").GetString());
} }
[Test] [TestMethod]
public async Task ShouldCreateFeatureRequests() public async Task ShouldCreateFeatureRequests()
{ {
var data = new Dictionary<string, string>(); var data = new Dictionary<string, string>
data.Add("title", "[Feature] request 1"); {
data.Add("body", "Feature description"); { "title", "[Feature] request 1" },
{ "body", "Feature description" }
};
var newIssue = await Request.PostAsync("/repos/" + USER + "/" + REPO + "/issues", new() { DataObject = data }); var newIssue = await Request.PostAsync("/repos/" + USER + "/" + REPO + "/issues", new() { DataObject = data });
Assert.True(newIssue.Ok); await Expect(newIssue).ToBeOKAsync();
var issues = await Request.GetAsync("/repos/" + USER + "/" + REPO + "/issues"); var issues = await Request.GetAsync("/repos/" + USER + "/" + REPO + "/issues");
Assert.True(issues.Ok); await Expect(newIssue).ToBeOKAsync();
var issuesJsonResponse = await issues.JsonAsync(); var issuesJsonResponse = await issues.JsonAsync();
var issuesJson = (await issues.JsonAsync())?.EnumerateArray();
JsonElement? issue = null; JsonElement? issue = null;
foreach (JsonElement issueObj in issuesJsonResponse?.EnumerateArray()) foreach (JsonElement issueObj in issuesJsonResponse?.EnumerateArray())
@ -152,7 +148,7 @@ public class TestGitHubAPI : PlaywrightTest
} }
} }
} }
Assert.NotNull(issue); Assert.IsNotNull(issue);
Assert.AreEqual("Feature description", issue?.GetProperty("body").GetString()); Assert.AreEqual("Feature description", issue?.GetProperty("body").GetString());
} }
@ -165,9 +161,17 @@ public class TestGitHubAPI : PlaywrightTest
These tests assume that repository exists. You probably want to create a new one before running tests and delete it afterwards. Use `[SetUp]` and `[TearDown]` hooks for that. These tests assume that repository exists. You probably want to create a new one before running tests and delete it afterwards. Use `[SetUp]` and `[TearDown]` hooks for that.
```csharp ```csharp
// ... using System.Text.Json;
using Microsoft.Playwright;
using Microsoft.Playwright.MSTest;
[SetUp] namespace PlaywrightTests;
[TestClass]
public class TestGitHubAPI : PlaywrightTest
{
// ...
[TestInitialize]
public async Task SetUpAPITesting() public async Task SetUpAPITesting()
{ {
await CreateAPIRequestContext(); await CreateAPIRequestContext();
@ -183,10 +187,10 @@ These tests assume that repository exists. You probably want to create a new one
["name"] = REPO, ["name"] = REPO,
}, },
}); });
Assert.True(resp.Ok); await Expect(resp).ToBeOKAsync();
} }
[TearDown] [TestCleanup]
public async Task TearDownAPITesting() public async Task TearDownAPITesting()
{ {
await DeleteTestRepository(); await DeleteTestRepository();
@ -196,7 +200,8 @@ These tests assume that repository exists. You probably want to create a new one
private async Task DeleteTestRepository() private async Task DeleteTestRepository()
{ {
var resp = await Request.DeleteAsync("/repos/" + USER + "/" + REPO); var resp = await Request.DeleteAsync("/repos/" + USER + "/" + REPO);
Assert.True(resp.Ok); await Expect(resp).ToBeOKAsync();
}
} }
``` ```
@ -205,36 +210,34 @@ These tests assume that repository exists. You probably want to create a new one
Here is the complete example of an API test: Here is the complete example of an API test:
```csharp ```csharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text.Json; using System.Text.Json;
using Microsoft.Playwright.NUnit;
using Microsoft.Playwright; using Microsoft.Playwright;
using NUnit.Framework; using Microsoft.Playwright.MSTest;
namespace PlaywrightTests; namespace PlaywrightTests;
[TestFixture] [TestClass]
public class TestGitHubAPI : PlaywrightTest public class TestGitHubAPI : PlaywrightTest
{ {
static string REPO = "test-repo-2"; static string REPO = "test-repo-2";
static string USER = Environment.GetEnvironmentVariable("GITHUB_USER"); static string USER = Environment.GetEnvironmentVariable("GITHUB_USER");
static string API_TOKEN = Environment.GetEnvironmentVariable("GITHUB_API_TOKEN"); static string? API_TOKEN = Environment.GetEnvironmentVariable("GITHUB_API_TOKEN");
private IAPIRequestContext Request = null; private IAPIRequestContext Request = null!;
[Test] [TestMethod]
public async Task ShouldCreateBugReport() public async Task ShouldCreateBugReport()
{ {
var data = new Dictionary<string, string>(); var data = new Dictionary<string, string>
data.Add("title", "[Bug] report 1"); {
data.Add("body", "Bug description"); { "title", "[Bug] report 1" },
{ "body", "Bug description" }
};
var newIssue = await Request.PostAsync("/repos/" + USER + "/" + REPO + "/issues", new() { DataObject = data }); var newIssue = await Request.PostAsync("/repos/" + USER + "/" + REPO + "/issues", new() { DataObject = data });
Assert.True(newIssue.Ok); await Expect(newIssue).ToBeOKAsync();
var issues = await Request.GetAsync("/repos/" + USER + "/" + REPO + "/issues"); var issues = await Request.GetAsync("/repos/" + USER + "/" + REPO + "/issues");
Assert.True(issues.Ok); await Expect(newIssue).ToBeOKAsync();
var issuesJsonResponse = await issues.JsonAsync(); var issuesJsonResponse = await issues.JsonAsync();
JsonElement? issue = null; JsonElement? issue = null;
foreach (JsonElement issueObj in issuesJsonResponse?.EnumerateArray()) foreach (JsonElement issueObj in issuesJsonResponse?.EnumerateArray())
@ -247,23 +250,24 @@ public class TestGitHubAPI : PlaywrightTest
} }
} }
} }
Assert.NotNull(issue); Assert.IsNotNull(issue);
Assert.AreEqual("Bug description", issue?.GetProperty("body").GetString()); Assert.AreEqual("Bug description", issue?.GetProperty("body").GetString());
} }
[Test] [TestMethod]
public async Task ShouldCreateFeatureRequests() public async Task ShouldCreateFeatureRequests()
{ {
var data = new Dictionary<string, string>(); var data = new Dictionary<string, string>
data.Add("title", "[Feature] request 1"); {
data.Add("body", "Feature description"); { "title", "[Feature] request 1" },
{ "body", "Feature description" }
};
var newIssue = await Request.PostAsync("/repos/" + USER + "/" + REPO + "/issues", new() { DataObject = data }); var newIssue = await Request.PostAsync("/repos/" + USER + "/" + REPO + "/issues", new() { DataObject = data });
Assert.True(newIssue.Ok); await Expect(newIssue).ToBeOKAsync();
var issues = await Request.GetAsync("/repos/" + USER + "/" + REPO + "/issues"); var issues = await Request.GetAsync("/repos/" + USER + "/" + REPO + "/issues");
Assert.True(issues.Ok); await Expect(newIssue).ToBeOKAsync();
var issuesJsonResponse = await issues.JsonAsync(); var issuesJsonResponse = await issues.JsonAsync();
var issuesJson = (await issues.JsonAsync())?.EnumerateArray();
JsonElement? issue = null; JsonElement? issue = null;
foreach (JsonElement issueObj in issuesJsonResponse?.EnumerateArray()) foreach (JsonElement issueObj in issuesJsonResponse?.EnumerateArray())
@ -276,11 +280,11 @@ public class TestGitHubAPI : PlaywrightTest
} }
} }
} }
Assert.NotNull(issue); Assert.IsNotNull(issue);
Assert.AreEqual("Feature description", issue?.GetProperty("body").GetString()); Assert.AreEqual("Feature description", issue?.GetProperty("body").GetString());
} }
[SetUp] [TestInitialize]
public async Task SetUpAPITesting() public async Task SetUpAPITesting()
{ {
await CreateAPIRequestContext(); await CreateAPIRequestContext();
@ -289,14 +293,16 @@ public class TestGitHubAPI : PlaywrightTest
private async Task CreateAPIRequestContext() private async Task CreateAPIRequestContext()
{ {
var headers = new Dictionary<string, string>(); var headers = new Dictionary<string, string>
{
// We set this header per GitHub guidelines. // We set this header per GitHub guidelines.
headers.Add("Accept", "application/vnd.github.v3+json"); { "Accept", "application/vnd.github.v3+json" },
// Add authorization token to all requests. // Add authorization token to all requests.
// Assuming personal access token available in the environment. // Assuming personal access token available in the environment.
headers.Add("Authorization", "token " + API_TOKEN); { "Authorization", "token " + API_TOKEN }
};
Request = await this.Playwright.APIRequest.NewContextAsync(new() Request = await Playwright.APIRequest.NewContextAsync(new()
{ {
// All requests we send go to this API endpoint. // All requests we send go to this API endpoint.
BaseURL = "https://api.github.com", BaseURL = "https://api.github.com",
@ -313,10 +319,10 @@ public class TestGitHubAPI : PlaywrightTest
["name"] = REPO, ["name"] = REPO,
}, },
}); });
Assert.True(resp.Ok); await Expect(resp).ToBeOKAsync();
} }
[TearDown] [TestCleanup]
public async Task TearDownAPITesting() public async Task TearDownAPITesting()
{ {
await DeleteTestRepository(); await DeleteTestRepository();
@ -326,7 +332,7 @@ public class TestGitHubAPI : PlaywrightTest
private async Task DeleteTestRepository() private async Task DeleteTestRepository()
{ {
var resp = await Request.DeleteAsync("/repos/" + USER + "/" + REPO); var resp = await Request.DeleteAsync("/repos/" + USER + "/" + REPO);
Assert.True(resp.Ok); await Expect(resp).ToBeOKAsync();
} }
} }
``` ```
@ -337,14 +343,18 @@ The following test creates a new issue via API and then navigates to the list of
project to check that it appears at the top of the list. The check is performed using [LocatorAssertions]. project to check that it appears at the top of the list. The check is performed using [LocatorAssertions].
```csharp ```csharp
[Test] class TestGitHubAPI : PageTest
{
[TestMethod]
public async Task LastCreatedIssueShouldBeFirstInTheList() public async Task LastCreatedIssueShouldBeFirstInTheList()
{ {
var data = new Dictionary<string, string>(); var data = new Dictionary<string, string>
data.Add("title", "[Feature] request 1"); {
data.Add("body", "Feature description"); { "title", "[Feature] request 1" },
{ "body", "Feature description" }
};
var newIssue = await Request.PostAsync("/repos/" + USER + "/" + REPO + "/issues", new() { DataObject = data }); var newIssue = await Request.PostAsync("/repos/" + USER + "/" + REPO + "/issues", new() { DataObject = data });
Assert.True(newIssue.Ok); await Expect(newIssue).ToBeOKAsync();
// When inheriting from 'PlaywrightTest' it only gives you a Playwright instance. To get a Page instance, either start // When inheriting from 'PlaywrightTest' it only gives you a Playwright instance. To get a Page instance, either start
// a browser, context, and page manually or inherit from 'PageTest' which will launch it for you. // a browser, context, and page manually or inherit from 'PageTest' which will launch it for you.
@ -352,6 +362,7 @@ project to check that it appears at the top of the list. The check is performed
var firstIssue = Page.Locator("a[data-hovercard-type='issue']").First; var firstIssue = Page.Locator("a[data-hovercard-type='issue']").First;
await Expect(firstIssue).ToHaveTextAsync("[Feature] request 1"); await Expect(firstIssue).ToHaveTextAsync("[Feature] request 1");
} }
}
``` ```
## Check the server state after running user actions ## Check the server state after running user actions
@ -360,7 +371,10 @@ The following test creates a new issue via user interface in the browser and the
it was created: it was created:
```csharp ```csharp
[Test] // Make sure to extend from PageTest if you want to use the Page class.
class GitHubTests : PageTest
{
[TestMethod]
public async Task LastCreatedIssueShouldBeOnTheServer() public async Task LastCreatedIssueShouldBeOnTheServer()
{ {
await Page.GotoAsync("https://github.com/" + USER + "/" + REPO + "/issues"); await Page.GotoAsync("https://github.com/" + USER + "/" + REPO + "/issues");
@ -368,12 +382,13 @@ it was created:
await Page.Locator("[aria-label='Title']").FillAsync("Bug report 1"); await Page.Locator("[aria-label='Title']").FillAsync("Bug report 1");
await Page.Locator("[aria-label='Comment body']").FillAsync("Bug description"); await Page.Locator("[aria-label='Comment body']").FillAsync("Bug description");
await Page.Locator("text=Submit new issue").ClickAsync(); await Page.Locator("text=Submit new issue").ClickAsync();
String issueId = Page.Url.Substring(Page.Url.LastIndexOf('/')); var issueId = Page.Url.Substring(Page.Url.LastIndexOf('/'));
var newIssue = await Request.GetAsync("https://github.com/" + USER + "/" + REPO + "/issues/" + issueId); var newIssue = await Request.GetAsync("https://github.com/" + USER + "/" + REPO + "/issues/" + issueId);
Assert.True(newIssue.Ok); await Expect(newIssue).ToBeOKAsync();
StringAssert.Contains(await newIssue.TextAsync(), "Bug report 1"); StringAssert.Contains(await newIssue.TextAsync(), "Bug report 1");
} }
}
``` ```
## Reuse authentication state ## Reuse authentication state

View file

@ -3,6 +3,8 @@ id: api-testing
title: "API testing" title: "API testing"
--- ---
## Introduction
Playwright can be used to get access to the [REST](https://en.wikipedia.org/wiki/Representational_state_transfer) API of Playwright can be used to get access to the [REST](https://en.wikipedia.org/wiki/Representational_state_transfer) API of
your application. your application.
@ -14,8 +16,6 @@ A few examples where it may come in handy:
All of that could be achieved via [APIRequestContext] methods. All of that could be achieved via [APIRequestContext] methods.
<!-- TOC -->
## Writing API Test ## Writing API Test
[APIRequestContext] can send all kinds of HTTP(S) requests over network. [APIRequestContext] can send all kinds of HTTP(S) requests over network.
@ -194,6 +194,7 @@ public class TestGitHubAPI {
These tests assume that repository exists. You probably want to create a new one before running tests and delete it afterwards. Use `@BeforeAll` and `@AfterAll` hooks for that. These tests assume that repository exists. You probably want to create a new one before running tests and delete it afterwards. Use `@BeforeAll` and `@AfterAll` hooks for that.
```java ```java
public class TestGitHubAPI {
// ... // ...
void createTestRepository() { void createTestRepository() {
@ -223,6 +224,7 @@ These tests assume that repository exists. You probably want to create a new one
disposeAPIRequestContext(); disposeAPIRequestContext();
closePlaywright(); closePlaywright();
} }
}
``` ```
### Complete test example ### Complete test example
@ -373,12 +375,15 @@ public class TestGitHubAPI {
} }
``` ```
See experimental [JUnit integration](./junit.md) to automatically initialize Playwright objects and more.
## Prepare server state via API calls ## Prepare server state via API calls
The following test creates a new issue via API and then navigates to the list of all issues in the The following test creates a new issue via API and then navigates to the list of all issues in the
project to check that it appears at the top of the list. The check is performed using [LocatorAssertions]. project to check that it appears at the top of the list. The check is performed using [LocatorAssertions].
```java ```java
public class TestGitHubAPI {
@Test @Test
void lastCreatedIssueShouldBeFirstInTheList() { void lastCreatedIssueShouldBeFirstInTheList() {
Map<String, String> data = new HashMap<>(); Map<String, String> data = new HashMap<>();
@ -392,6 +397,7 @@ void lastCreatedIssueShouldBeFirstInTheList() {
Locator firstIssue = page.locator("a[data-hovercard-type='issue']").first(); Locator firstIssue = page.locator("a[data-hovercard-type='issue']").first();
assertThat(firstIssue).hasText("[Feature] request 1"); assertThat(firstIssue).hasText("[Feature] request 1");
} }
}
``` ```
## Check the server state after running user actions ## Check the server state after running user actions
@ -400,6 +406,7 @@ The following test creates a new issue via user interface in the browser and the
it was created: it was created:
```java ```java
public class TestGitHubAPI {
@Test @Test
void lastCreatedIssueShouldBeOnTheServer() { void lastCreatedIssueShouldBeOnTheServer() {
page.navigate("https://github.com/" + USER + "/" + REPO + "/issues"); page.navigate("https://github.com/" + USER + "/" + REPO + "/issues");
@ -413,6 +420,7 @@ void lastCreatedIssueShouldBeOnTheServer() {
assertThat(newIssue).isOK(); assertThat(newIssue).isOK();
assertTrue(newIssue.text().contains("Bug report 1")); assertTrue(newIssue.text().contains("Bug report 1"));
} }
}
``` ```
## Reuse authentication state ## Reuse authentication state

View file

@ -1,8 +1,10 @@
--- ---
id: test-api-testing id: api-testing
title: "API testing" title: "API testing"
--- ---
## Introduction
Playwright can be used to get access to the [REST](https://en.wikipedia.org/wiki/Representational_state_transfer) API of Playwright can be used to get access to the [REST](https://en.wikipedia.org/wiki/Representational_state_transfer) API of
your application. your application.
@ -14,8 +16,6 @@ A few examples where it may come in handy:
All of that could be achieved via [APIRequestContext] methods. All of that could be achieved via [APIRequestContext] methods.
<!-- TOC3 -->
## Writing API Test ## Writing API Test
[APIRequestContext] can send all kinds of HTTP(S) requests over network. [APIRequestContext] can send all kinds of HTTP(S) requests over network.
@ -29,8 +29,7 @@ The following example demonstrates how to use Playwright to test issues creation
GitHub API requires authorization, so we'll configure the token once for all tests. While at it, we'll also set the `baseURL` to simplify the tests. You can either put them in the configuration file, or in the test file with `test.use()`. GitHub API requires authorization, so we'll configure the token once for all tests. While at it, we'll also set the `baseURL` to simplify the tests. You can either put them in the configuration file, or in the test file with `test.use()`.
```js tab=js-ts ```js title="playwright.config.ts"
// playwright.config.ts
import { defineConfig } from '@playwright/test'; import { defineConfig } from '@playwright/test';
export default defineConfig({ export default defineConfig({
use: { use: {
@ -47,21 +46,19 @@ export default defineConfig({
}); });
``` ```
```js tab=js-js **Proxy configuration**
// playwright.config.js
// @ts-check
const { defineConfig } = require('@playwright/test');
module.exports = defineConfig({ If your tests need to run behind a proxy, you can specify this in the config and the `request` fixture
will pick it up automatically:
```js title="playwright.config.ts"
import { defineConfig } from '@playwright/test';
export default defineConfig({
use: { use: {
// All requests we send go to this API endpoint. proxy: {
baseURL: 'https://api.github.com', server: 'http://my-proxy:8080',
extraHTTPHeaders: { username: 'user',
// We set this header per GitHub guidelines. password: 'secret'
'Accept': 'application/vnd.github.v3+json',
// Add authorization token to all requests.
// Assuming personal access token available in the environment.
'Authorization': `token ${process.env.API_TOKEN}`,
}, },
} }
}); });
@ -138,7 +135,7 @@ test.afterAll(async ({ request }) => {
Behind the scenes, [`request` fixture](./api/class-fixtures#fixtures-request) will actually call [`method: APIRequest.newContext`]. You can always do that manually if you'd like more control. Below is a standalone script that does the same as `beforeAll` and `afterAll` from above. Behind the scenes, [`request` fixture](./api/class-fixtures#fixtures-request) will actually call [`method: APIRequest.newContext`]. You can always do that manually if you'd like more control. Below is a standalone script that does the same as `beforeAll` and `afterAll` from above.
```js ```js
const { request } = require('@playwright/test'); import { request } from '@playwright/test';
const REPO = 'test-repo-1'; const REPO = 'test-repo-1';
const USER = 'github-username'; const USER = 'github-username';
@ -168,7 +165,7 @@ const USER = 'github-username';
'Authorization': `token ${process.env.API_TOKEN}`, 'Authorization': `token ${process.env.API_TOKEN}`,
} }
}); });
})() })();
``` ```
## Sending API requests from UI tests ## Sending API requests from UI tests
@ -180,7 +177,7 @@ While running tests inside browsers you may want to make calls to the HTTP API o
The following test creates a new issue via API and then navigates to the list of all issues in the The following test creates a new issue via API and then navigates to the list of all issues in the
project to check that it appears at the top of the list. project to check that it appears at the top of the list.
```js tab=js-ts ```js
import { test, expect } from '@playwright/test'; import { test, expect } from '@playwright/test';
const REPO = 'test-repo-1'; const REPO = 'test-repo-1';
@ -201,51 +198,8 @@ test.beforeAll(async ({ playwright }) => {
'Authorization': `token ${process.env.API_TOKEN}`, 'Authorization': `token ${process.env.API_TOKEN}`,
}, },
}); });
})
test.afterAll(async ({ }) => {
// Dispose all responses.
await apiContext.dispose();
}); });
test('last created issue should be first in the list', async ({ page }) => {
const newIssue = await apiContext.post(`/repos/${USER}/${REPO}/issues`, {
data: {
title: '[Feature] request 1',
}
});
expect(newIssue.ok()).toBeTruthy();
await page.goto(`https://github.com/${USER}/${REPO}/issues`);
const firstIssue = page.locator(`a[data-hovercard-type='issue']`).first();
await expect(firstIssue).toHaveText('[Feature] request 1');
});
```
```js tab=js-js
// @ts-check
const { test, expect } = require('@playwright/test');
const REPO = 'test-repo-1';
const USER = 'github-username';
// Request context is reused by all tests in the file.
let apiContext;
test.beforeAll(async ({ playwright }) => {
apiContext = await playwright.request.newContext({
// All requests we send go to this API endpoint.
baseURL: 'https://api.github.com',
extraHTTPHeaders: {
// We set this header per GitHub guidelines.
'Accept': 'application/vnd.github.v3+json',
// Add authorization token to all requests.
// Assuming personal access token available in the environment.
'Authorization': `token ${process.env.API_TOKEN}`,
},
});
})
test.afterAll(async ({ }) => { test.afterAll(async ({ }) => {
// Dispose all responses. // Dispose all responses.
await apiContext.dispose(); await apiContext.dispose();
@ -270,7 +224,7 @@ test('last created issue should be first in the list', async ({ page }) => {
The following test creates a new issue via user interface in the browser and then uses checks if The following test creates a new issue via user interface in the browser and then uses checks if
it was created via API: it was created via API:
```js tab=js-ts ```js
import { test, expect } from '@playwright/test'; import { test, expect } from '@playwright/test';
const REPO = 'test-repo-1'; const REPO = 'test-repo-1';
@ -291,14 +245,14 @@ test.beforeAll(async ({ playwright }) => {
'Authorization': `token ${process.env.API_TOKEN}`, 'Authorization': `token ${process.env.API_TOKEN}`,
}, },
}); });
}) });
test.afterAll(async ({ }) => { test.afterAll(async ({ }) => {
// Dispose all responses. // Dispose all responses.
await apiContext.dispose(); await apiContext.dispose();
}); });
test('last created issue should be on the server', async ({ page, request }) => { test('last created issue should be on the server', async ({ page }) => {
await page.goto(`https://github.com/${USER}/${REPO}/issues`); await page.goto(`https://github.com/${USER}/${REPO}/issues`);
await page.getByText('New Issue').click(); await page.getByText('New Issue').click();
await page.getByRole('textbox', { name: 'Title' }).fill('Bug report 1'); await page.getByRole('textbox', { name: 'Title' }).fill('Bug report 1');
@ -306,54 +260,11 @@ test('last created issue should be on the server', async ({ page, request }) =>
await page.getByText('Submit new issue').click(); await page.getByText('Submit new issue').click();
const issueId = page.url().substr(page.url().lastIndexOf('/')); const issueId = page.url().substr(page.url().lastIndexOf('/'));
const newIssue = await request.get(`https://api.github.com/repos/${USER}/${REPO}/issues/${issueId}`); const newIssue = await apiContext.get(
`https://api.github.com/repos/${USER}/${REPO}/issues/${issueId}`
);
expect(newIssue.ok()).toBeTruthy(); expect(newIssue.ok()).toBeTruthy();
expect(newIssue).toEqual(expect.objectContaining({ expect(newIssue.json()).toEqual(expect.objectContaining({
title: 'Bug report 1'
}));
});
```
```js tab=js-js
// @ts-check
const { test, expect } = require('@playwright/test');
const REPO = 'test-repo-1';
const USER = 'github-username';
// Request context is reused by all tests in the file.
let apiContext;
test.beforeAll(async ({ playwright }) => {
apiContext = await playwright.request.newContext({
// All requests we send go to this API endpoint.
baseURL: 'https://api.github.com',
extraHTTPHeaders: {
// We set this header per GitHub guidelines.
'Accept': 'application/vnd.github.v3+json',
// Add authorization token to all requests.
// Assuming personal access token available in the environment.
'Authorization': `token ${process.env.API_TOKEN}`,
},
});
})
test.afterAll(async ({ }) => {
// Dispose all responses.
await apiContext.dispose();
});
test('last created issue should be on the server', async ({ page, request }) => {
await page.goto(`https://github.com/${USER}/${REPO}/issues`);
await page.getByText('New Issue').click();
await page.getByRole('textbox', { name: 'Title' }).fill('Bug report 1');
await page.getByRole('textbox', { name: 'Comment body' }).fill('Bug description');
await page.getByText('Submit new issue').click();
const issueId = page.url().substr(page.url().lastIndexOf('/'));
const newIssue = await request.get(`https://api.github.com/repos/${USER}/${REPO}/issues/${issueId}`);
expect(newIssue.ok()).toBeTruthy();
expect(newIssue).toEqual(expect.objectContaining({
title: 'Bug report 1' title: 'Bug report 1'
})); }));
}); });
@ -397,21 +308,28 @@ The main difference is that [APIRequestContext] accessible via [`property: Brows
automatically update browser cookies if [APIResponse] has `Set-Cookie` header: automatically update browser cookies if [APIResponse] has `Set-Cookie` header:
```js ```js
test('context request will share cookie storage with its browser context', async ({ page, context }) => { test('context request will share cookie storage with its browser context', async ({
await context.route('https://www.github.com/', async (route) => { page,
context,
}) => {
await context.route('https://www.github.com/', async route => {
// Send an API request that shares cookie storage with the browser context. // Send an API request that shares cookie storage with the browser context.
const response = await context.request.fetch(route.request()); const response = await context.request.fetch(route.request());
const responseHeaders = response.headers(); const responseHeaders = response.headers();
// The response will have 'Set-Cookie' header. // The response will have 'Set-Cookie' header.
const responseCookies = new Map(responseHeaders['set-cookie'].split('\n').map(c => c.split(';', 2)[0].split('='))); const responseCookies = new Map(responseHeaders['set-cookie']
.split('\n')
.map(c => c.split(';', 2)[0].split('=')));
// The response will have 3 cookies in 'Set-Cookie' header. // The response will have 3 cookies in 'Set-Cookie' header.
expect(responseCookies.size).toBe(3); expect(responseCookies.size).toBe(3);
const contextCookies = await context.cookies(); const contextCookies = await context.cookies();
// The browser context will already contain all the cookies from the API response. // The browser context will already contain all the cookies from the API response.
expect(new Map(contextCookies.map(({name, value}) => [name, value]))).toEqual(responseCookies); expect(new Map(contextCookies.map(({ name, value }) =>
[name, value])
)).toEqual(responseCookies);
route.fulfill({ await route.fulfill({
response, response,
headers: { ...responseHeaders, foo: 'bar' }, headers: { ...responseHeaders, foo: 'bar' },
}); });
@ -424,14 +342,21 @@ If you don't want [APIRequestContext] to use and update cookies from the browser
create a new instance of [APIRequestContext] which will have its own isolated cookies: create a new instance of [APIRequestContext] which will have its own isolated cookies:
```js ```js
test('global context request has isolated cookie storage', async ({ page, context, browser, playwright }) => { test('global context request has isolated cookie storage', async ({
page,
context,
browser,
playwright
}) => {
// Create a new instance of APIRequestContext with isolated cookie storage. // Create a new instance of APIRequestContext with isolated cookie storage.
const request = await playwright.request.newContext(); const request = await playwright.request.newContext();
await context.route('https://www.github.com/', async (route) => { await context.route('https://www.github.com/', async route => {
const response = await request.fetch(route.request()); const response = await request.fetch(route.request());
const responseHeaders = response.headers(); const responseHeaders = response.headers();
const responseCookies = new Map(responseHeaders['set-cookie'].split('\n').map(c => c.split(';', 2)[0].split('='))); const responseCookies = new Map(responseHeaders['set-cookie']
.split('\n')
.map(c => c.split(';', 2)[0].split('=')));
// The response will have 3 cookies in 'Set-Cookie' header. // The response will have 3 cookies in 'Set-Cookie' header.
expect(responseCookies.size).toBe(3); expect(responseCookies.size).toBe(3);
const contextCookies = await context.cookies(); const contextCookies = await context.cookies();
@ -444,9 +369,11 @@ test('global context request has isolated cookie storage', async ({ page, contex
const browserContext2 = await browser.newContext({ storageState }); const browserContext2 = await browser.newContext({ storageState });
const contextCookies2 = await browserContext2.cookies(); const contextCookies2 = await browserContext2.cookies();
// The new browser context will already contain all the cookies from the API response. // The new browser context will already contain all the cookies from the API response.
expect(new Map(contextCookies2.map(({name, value}) => [name, value]))).toEqual(responseCookies); expect(
new Map(contextCookies2.map(({ name, value }) => [name, value]))
).toEqual(responseCookies);
route.fulfill({ await route.fulfill({
response, response,
headers: { ...responseHeaders, foo: 'bar' }, headers: { ...responseHeaders, foo: 'bar' },
}); });

Some files were not shown because too many files have changed in this diff Show more