Merge pull request #1267 from zsh-users/add-playwright
Add playwright completion
This commit is contained in:
commit
45e2c02492
|
|
@ -0,0 +1,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
|
||||
Loading…
Reference in New Issue