1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
|
#compdef playwright
# ------------------------------------------------------------------------------
# Copyright (c) 2026 Github zsh-users - https://github.com/zsh-users
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
# ------------------------------------------------------------------------------
# Description
# -----------
#
# Completion script for playwright 1.60.0 (https://playwright.dev/)
#
# ------------------------------------------------------------------------------
# Authors
# -------
#
# * Shohei Yoshida (https://github.com/syohex) <syohex@gmail.com>
#
# ------------------------------------------------------------------------------
_playwright() {
typeset -A opt_args
local context state line
local curcontext="$curcontext"
local ret=1
local -a browsers=(chromium firefox webkit)
local -a installable_browsers=(chromium firefox webkit chromium-headless-shell)
local -a target_languages=(javascript playwright-test python python-async python-pytest
csharp csharp-mstest csharp-nunit csharp-xunit java java-junit)
local -a channels=(chrome chrome-beta msedge-dev)
local -a pager_formats=(Letter Legal Tabloid Ledger A0 A1 A2 A3 A4 A5 A6)
local -a loop_providers=(claude copilot opencode vscode vscode-legacy)
local -a trace_modes=(on off on-first-retry on-all-retries retain-on-failure
retain-on-first-failure retain-on-failure-and-retries)
_arguments -C -A "-*" \
'(-v --verbose)'{-v,--verbose}'[output the version number]' \
'(- *)'{-h,--help}'[display help for command]' \
'1: :_playwright_subcommands' \
'*::arg:->args' \
&& ret=0
case "$state" in
(args)
local -a options=('(- *)'{-h,--help}'[display help for command]')
case $words[1] in
(help)
options+=('1: :_playwright_subcommands')
;;
(open|codegen|cr|ff|wk|screenshot|pdf|show-trace|test)
options+=(
'(-b --browser)'{-b,--browser}'[browser to use(default: chromium)]:browser:($browsers)' )
;|
(open|codegen|cr|ff|wk|screenshot|pdf)
options+=(
'--block-service-workers[block service workers]'
'--channel[Chromium distribution channel]:channel:($channels)'
'--color-scheme[emulate preferred color scheme]:scheme:(light dark)'
'--device[emulate device(e.g. "iPhone 11")]:device'
'--geolocation[specify geolocation coordinates]:coordinates'
'--ignore-https-errors[ignore https errors]'
'--load-storage[load context storage state from the file]:file:_files'
'--lang[specify language/locale(e.g. "en-GB")]:language'
'--proxy-server[specify proxy server]:proxy'
'--proxy-bypass[comma-separated domains to bypass proxy]:bypass'
'--save-har[save HAR file with all network activity at the end]:file:_files'
'--save-har-glob[filter entries in the HAR by matching URL against this glob pattern]:pattern'
'--save-storage[save context storage state at the end]:file:_files'
'--timezone[time zone to emulate]:time_zone'
'--timeout[timeout for Playwright actions in milliseconds(default: no timeout)]:timeout'
'--user-agent[specify user agent string]:user_agent'
'--user-data-dir[use the specified user data directory instead of a new context]:dir:_files -/'
'--viewport-size[specify browser viewport size in pixels(e.g. "1280, 720")]:size'
'*::url:_urls'
)
;|
(install)
options+=(
'--with-deps[install system dependencies for browsers]'
'--dry-run[do not execute installation, only print information]'
'(- *)--list[prints list of browsers from all playwright installations]'
'--force[force reinstall of already installed browsers]'
'--only-shell[only install headless shell when installing chromium]'
'--no-shell[do not install chromium headless shell]'
'*::browser:($installable_browsers)'
)
;;
(uninstall)
options+=('--all[remove all browsers used by any Playwright installation from the system]')
;;
(install-deps)
options+=('--dry-run[do not modify the system]')
;;
(screenshot|pdf)
options+=(
'--wait-for-selector[wait for selector before taking a screenshot]:selector'
'--wait-for-timeout[wait for timeout in milliseconds before taking a screenshot]:timeout'
'*:: :_files'
)
;|
(screenshot)
options+=(
'--full-page[take a full page screenshot]'
'*:: :_files'
)
;;
(pdf)
options+=(
'--pager-format[pager format]:format:($pager_formats)'
'*:: :_files'
)
;;
(show-trace)
options+=(
'(-h --host)'{-h,--host}'[host to serve trace on]:host'
'(-p --port)'{-p,--port}'[port to serve trace on]:port'
'--stdin[accept trace URLs over stdin to update the viewer]'
'*:: :_files'
)
;;
(trace)
_playwright_trace && ret=0
return ret
;;
(test)
options+=(
'(-c --config)'{-c,--config}'[configuration file or a test directory]:config:_files'
'--debug[run tests with Playwright Inspector]:mode:(inspector cli)'
'--fail-on-flaky-tests[fail if any test is flagged as flaky]'
'--forbid-only[fail if test.only is called]'
'--fully-parallel[run all tests in parallel]'
'(-g --grep)'{-g,--grep}'[only run tests matching this regular expression]:pattern'
'--global-timeout[maximum time this test suite can run in milliseconds]:timeout'
'--grep-invert[only run tests that do not match this regular expression]:pattern'
'--headed[run tests in headed browsers]'
'--ignore-snapshots[ignore screenshot and snapshot expectations]'
'(-j --workers)'{-j,--workers}'[number of concurrent workers or percentage of logical CPU cores]:workers'
'--last-failed[only re-run the failures]'
'--list[collect all the tests and report them, but do not run]'
'--max-failures[stop after the first N failures]:num'
'--no-deps[do not run project dependencies]'
'--only-changed[only run test files that have been changed between "HEAD" and "ref"]:ref'
'--output[folder for output artifacts(default: "test-results")]:dir:_files -/'
'--pass-with-no-tests[make test run succeed even if no tests were found]'
'*--project[only run tests from the specified list of projects]:project'
'--quiet[suppress stdio]'
'--repeat-each[run each test N times(default: 1)]:num'
'--reporter[reporter to use, comma-separated]:reporter:_playwright_reporters'
'--retries[maximum retry count for flaky tests(default: no retries)]:num'
'--run-agents[run agents to generate the code for page.perform]:agent:(missing all none)'
'--shard[shard tests and execute only the selected shard(e.g. "3/5")]:shard'
'--test-list[path to a file containing a list of tests to run]:file:_files'
'--test-list-invert[path to a file containing a list of tests to skip]:file:_files'
'--timeout[specify test timeout threshold in milliseconds, zero for unlimited(default: 30000)]:timeout'
'--trace[force tracing mode]:mode:($trace_modes)'
'--tsconfig[path to a single tsconfig applicable to all imported files]:file:_files'
'(-u --update-snapshots)'{-u,--update-snapshots}'[update snapshots with actual results]:mode:(all changed missing none)'
'--ui[run tests in interactive UI mode]'
'--ui-host[host to server UI on]:host'
'--ui-port[port to server UI on]:port'
'--update-source-method[choose the way source is updated(default: patch)]:method:(overwrite 3way patch)'
'-x[stop after the first failure]'
'*:: :_files'
)
;;
(show-report)
options+=(
'(-h --host)'{-h,--host}'[host to serve report on]:host'
'(-p --port)'{-p,--port}'[port to serve report on]:port'
)
;;
(merge-reports)
options+=(
'(-c --config)'{-c,--config}'[configuration file]:file:_files'
'--reporter[reporter to use, comma-separated (default: list)]:reporter:_playwright_reporters'
'*:: :_files -/'
)
;;
(clear-cache)
options+=(
'(-c --config)'{-c,--config}'[configuration file or a test directory]:file:_files'
)
;;
(init-agents)
options+=(
'--loop[agentic loop provider]:provider:($loop_providers)'
'(-c --config)'{-c,--config}'[configuration file to find a project to use for seed test]:file:_files'
'--project[project to use for seed test]:_files -/'
'--prompts[include prompts in the agent initialization]'
)
;;
esac
_arguments "$options[@]" && ret=0
;;
esac
return ret
}
(( $+functions[_playwright_subcommands] )) ||
_playwright_subcommands() {
local -a commands=(
"open:open page in browser specified via -b, --browser"
"codegen:open page and generate code for user actions"
"install:ensure browsers necessary for this version of Playwright are installed"
"uninstall:remove browsers used by this installation of Playwright from the system"
"install-deps:install dependencies necessary to run browsers"
"cr:open page in Chromium"
"ff:open page in Firefox"
"wk:open page in WebKit"
"screenshot:capture a page screenshot"
"pdf:save page as PDF"
"show-trace:show trace viewer"
"trace:inspect trace files from the command line"
"test:run tests with Playwright Test"
"show-report:show HTML report"
"merge-reports:merge multiple blob reports into a single report"
"clear-cache:clear build and test caches"
"init-agents:Initialize repository agents"
"help:display help for command"
)
_describe -t commands 'command' commands "$@"
}
(( $+functions[_playwright_trace] )) ||
_playwright_trace() {
local ret=1
_arguments -C \
'(- *)'{-h,--help}'[Print this usage information]' \
'1: :_playwright_trace_subcommands' \
'*:: :->arg' \
&& ret=0
case $state in
(arg)
local -a options=(
'(- *)'{-h,--help}'[display help for command]'
'*:: :_files'
)
case $words[1] in
(help)
options=('1:command:_playwright_trace_subcommands')
;;
(actions)
options+=(
'--grep[filter actions by title pattern]:pattern'
'--errors-only[only show failed actions]'
)
;;
(requests)
options+=(
'--grep[filter by URL pattern]:pattern'
'--method[filter by HTTP method]:method:(DELETE GET HEAD POST PUT CONNECT OPTIONS TRACE PATCH)'
'--status[filter by status code]:code'
'--failed[only show failed request(status >= 400)]'
)
;;
(console)
options+=(
'--errors-only[only show errors]'
'--warnings[show errors and warnings]'
'--browser[only browser console messages]'
'--stdio[only stdout/stderr]'
)
;;
(snapshot)
options+=(
'--name[snapshot phase]:name:(before input after)'
'--serve[serve snapshot on localhost and keep running]'
)
;;
(screenshot|attachment)
options+=('(-o --output)'{-o,--output}'[output file path]:file:_files')
;;
esac
_arguments "$options[@]" && ret=0
;;
esac
return ret
}
(( $+functions[_playwright_trace_subcommands] )) ||
_playwright_trace_subcommands() {
local -a commands=(
"open:extract trace file for inspection"
"close:remove extracted trace data"
"actions:list actions in the trace"
"action:show details of a specific action"
"requests:show network requests"
"request:show details of a specific network request"
"console:show console messages"
"errors:show errors with stack traces"
"snapshot:run a playwright-cli command against a DOM snapshot"
"screenshot:save screencast screenshot for an action"
"attachments:list trace attachments"
"attachment:extract a trace attachment by its number"
"install-skill:install SKILL.md for LLM integration"
"help:display help for command"
)
_describe -t commands 'command' commands "$@"
}
(( $+functions[_playwright_reporters] )) ||
_playwright_reporters() {
local -a reporters=(list line dot json junit null github html blob)
_values -s ',' reporter $reporters
}
_playwright "$@"
# Local Variables:
# mode: Shell-Script
# sh-indentation: 2
# indent-tabs-mode: nil
# sh-basic-offset: 2
# End:
# vim: ft=zsh sw=2 ts=2 et
|