@apica-io/asm-playwright-runner 1.0.0-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/asm-playwright-runner.iml +8 -0
- package/dist/actions.js +47 -0
- package/dist/cli/index.js +97 -0
- package/dist/lib/helper.js +109 -0
- package/dist/lib/parser.js +309 -0
- package/dist/loader.js +5 -0
- package/dist/model/result.js +1 -0
- package/dist/model/runnerConfig.js +27 -0
- package/dist/model/traceModel.js +2 -0
- package/dist/runner.js +280 -0
- package/package.json +47 -0
- package/samples/betsson.spec.ts +86 -0
- package/samples/example.json +10 -0
- package/samples/google.json +6 -0
- package/samples/playwright-multi-script.spec.ts +60 -0
- package/samples/playwright-script.spec.ts +9 -0
- package/samples/playwright-test-script.spec.ts +18 -0
- package/samples/r.json +16 -0
- package/src/actions.ts +42 -0
- package/src/cli/index.ts +74 -0
- package/src/lib/helper.ts +81 -0
- package/src/lib/parser.ts +341 -0
- package/src/model/runnerConfig.ts +41 -0
- package/src/model/traceModel.ts +150 -0
- package/src/runner.ts +272 -0
- package/tsconfig.json +23 -0
package/samples/r.json
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{"type":"resource-snapshot","snapshot":{"pageref":"page@ecf217cf36d6558e6a093669f419142e","startedDateTime":"2026-05-06T09:43:51.104Z","time":1042.461,"request":{"method":"GET","url":"https://nghttp2.org/","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":":authority","value":"nghttp2.org"},{"name":":method","value":"GET"},{"name":":path","value":"/"},{"name":":scheme","value":"https"},{"name":"accept","value":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"},{"name":"accept-encoding","value":"gzip, deflate, br, zstd"},{"name":"priority","value":"u=0, i"},{"name":"sec-ch-ua","value":"\"HeadlessChrome\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\""},{"name":"sec-ch-ua-mobile","value":"?0"},{"name":"sec-ch-ua-platform","value":"\"Windows\""},{"name":"sec-fetch-dest","value":"document"},{"name":"sec-fetch-mode","value":"navigate"},{"name":"sec-fetch-site","value":"none"},{"name":"sec-fetch-user","value":"?1"},{"name":"upgrade-insecure-requests","value":"1"},{"name":"user-agent","value":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.7727.15 Safari/537.36"}],"queryString":[],"headersSize":678,"bodySize":0},"response":{"status":200,"statusText":"","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":"accept-ranges","value":"bytes"},{"name":"alt-svc","value":"h3=\":443\"; ma=3600"},{"name":"content-length","value":"6324"},{"name":"content-type","value":"text/html"},{"name":"date","value":"Wed, 06 May 2026 09:43:51 GMT"},{"name":"etag","value":"\"69e4a17c-18b4\""},{"name":"last-modified","value":"Sun, 19 Apr 2026 09:33:48 GMT"},{"name":"server","value":"nghttpx"},{"name":"strict-transport-security","value":"max-age=31536000"},{"name":"via","value":"2 nghttpx"},{"name":"x-backend-header-rtt","value":"0.000615"},{"name":"x-content-type-options","value":"nosniff"},{"name":"x-frame-options","value":"SAMEORIGIN"},{"name":"x-xss-protection","value":"1; mode=block"}],"content":{"size":6324,"mimeType":"text/html","compression":0,"_sha1":"27238ddf70d58102b06c4c1abf4860f9d55c8213.html"},"headersSize":0,"bodySize":6581,"redirectURL":"","_transferSize":6581},"cache":{},"timings":{"dns":52.821,"connect":638.914,"ssl":178.374,"send":0,"wait":169.668,"receive":2.684},"_frameref":"frame@e30423b46b509816b6c52bbaf4780106","_monotonicTime":8780.036,"serverIPAddress":"139.162.123.134","_serverPort":443,"_securityDetails":{"protocol":"TLS 1.3","subjectName":"nghttp2.org","issuer":"E7","validFrom":1776643299,"validTo":1784419298}}}
|
|
2
|
+
{"type":"resource-snapshot","snapshot":{"pageref":"page@ecf217cf36d6558e6a093669f419142e","startedDateTime":"2026-05-06T09:43:53.163Z","time":354.985,"request":{"method":"GET","url":"https://nghttp2.org/stylesheets/screen.css","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":":authority","value":"nghttp2.org"},{"name":":method","value":"GET"},{"name":":path","value":"/stylesheets/screen.css"},{"name":":scheme","value":"https"},{"name":"accept","value":"text/css,*/*;q=0.1"},{"name":"accept-encoding","value":"gzip, deflate, br, zstd"},{"name":"priority","value":"u=0"},{"name":"referer","value":"https://nghttp2.org/"},{"name":"sec-ch-ua","value":"\"HeadlessChrome\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\""},{"name":"sec-ch-ua-mobile","value":"?0"},{"name":"sec-ch-ua-platform","value":"\"Windows\""},{"name":"sec-fetch-dest","value":"style"},{"name":"sec-fetch-mode","value":"no-cors"},{"name":"sec-fetch-site","value":"same-origin"},{"name":"user-agent","value":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.7727.15 Safari/537.36"}],"queryString":[],"headersSize":586,"bodySize":0},"response":{"status":200,"statusText":"","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":"accept-ranges","value":"bytes"},{"name":"alt-svc","value":"h3=\":443\"; ma=3600"},{"name":"content-length","value":"39082"},{"name":"content-type","value":"text/css"},{"name":"date","value":"Wed, 06 May 2026 09:43:51 GMT"},{"name":"etag","value":"\"69e4a17c-98aa\""},{"name":"last-modified","value":"Sun, 19 Apr 2026 09:33:48 GMT"},{"name":"server","value":"nghttpx"},{"name":"strict-transport-security","value":"max-age=31536000"},{"name":"via","value":"2 nghttpx"},{"name":"x-backend-header-rtt","value":"0.000941"},{"name":"x-content-type-options","value":"nosniff"},{"name":"x-frame-options","value":"SAMEORIGIN"},{"name":"x-xss-protection","value":"1; mode=block"}],"content":{"size":39082,"mimeType":"text/css","compression":0,"_sha1":"171a1b3e2716a9802fc3c92482ea70f77dbb7578.css"},"headersSize":0,"bodySize":39168,"redirectURL":"","_transferSize":39168},"cache":{},"timings":{"dns":-1,"connect":-1,"ssl":-1,"send":0,"wait":194.533,"receive":160.452},"_frameref":"frame@e30423b46b509816b6c52bbaf4780106","_monotonicTime":10838.511,"serverIPAddress":"139.162.123.134","_serverPort":443,"_securityDetails":{"protocol":"TLS 1.3","subjectName":"nghttp2.org","issuer":"E7","validFrom":1776643299,"validTo":1784419298}}}
|
|
3
|
+
{"type":"resource-snapshot","snapshot":{"pageref":"page@ecf217cf36d6558e6a093669f419142e","startedDateTime":"2026-05-06T09:43:53.163Z","time":354.76099999999997,"request":{"method":"GET","url":"https://nghttp2.org/javascripts/modernizr-2.0.js","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":":authority","value":"nghttp2.org"},{"name":":method","value":"GET"},{"name":":path","value":"/javascripts/modernizr-2.0.js"},{"name":":scheme","value":"https"},{"name":"accept","value":"*/*"},{"name":"accept-encoding","value":"gzip, deflate, br, zstd"},{"name":"priority","value":"u=1"},{"name":"referer","value":"https://nghttp2.org/"},{"name":"sec-ch-ua","value":"\"HeadlessChrome\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\""},{"name":"sec-ch-ua-mobile","value":"?0"},{"name":"sec-ch-ua-platform","value":"\"Windows\""},{"name":"sec-fetch-dest","value":"script"},{"name":"sec-fetch-mode","value":"no-cors"},{"name":"sec-fetch-site","value":"same-origin"},{"name":"user-agent","value":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.7727.15 Safari/537.36"}],"queryString":[],"headersSize":584,"bodySize":0},"response":{"status":200,"statusText":"","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":"accept-ranges","value":"bytes"},{"name":"alt-svc","value":"h3=\":443\"; ma=3600"},{"name":"content-length","value":"7020"},{"name":"content-type","value":"text/javascript"},{"name":"date","value":"Wed, 06 May 2026 09:43:51 GMT"},{"name":"etag","value":"\"69e4a17c-1b6c\""},{"name":"last-modified","value":"Sun, 19 Apr 2026 09:33:48 GMT"},{"name":"server","value":"nghttpx"},{"name":"strict-transport-security","value":"max-age=31536000"},{"name":"via","value":"2 nghttpx"},{"name":"x-backend-header-rtt","value":"0.000915"},{"name":"x-content-type-options","value":"nosniff"},{"name":"x-frame-options","value":"SAMEORIGIN"},{"name":"x-xss-protection","value":"1; mode=block"}],"content":{"size":-1,"mimeType":"text/javascript","compression":0},"headersSize":0,"bodySize":7092,"redirectURL":"","_transferSize":7092},"cache":{},"timings":{"dns":-1,"connect":-1,"ssl":-1,"send":0,"wait":195.037,"receive":159.724},"_frameref":"frame@e30423b46b509816b6c52bbaf4780106","_monotonicTime":10838.825,"serverIPAddress":"139.162.123.134","_serverPort":443,"_securityDetails":{"protocol":"TLS 1.3","subjectName":"nghttp2.org","issuer":"E7","validFrom":1776643299,"validTo":1784419298}}}
|
|
4
|
+
{"type":"resource-snapshot","snapshot":{"pageref":"page@ecf217cf36d6558e6a093669f419142e","startedDateTime":"2026-05-06T09:43:53.164Z","time":384.219,"request":{"method":"GET","url":"https://nghttp2.org/javascripts/octopress.js","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":":authority","value":"nghttp2.org"},{"name":":method","value":"GET"},{"name":":path","value":"/javascripts/octopress.js"},{"name":":scheme","value":"https"},{"name":"accept","value":"*/*"},{"name":"accept-encoding","value":"gzip, deflate, br, zstd"},{"name":"priority","value":"u=1"},{"name":"referer","value":"https://nghttp2.org/"},{"name":"sec-ch-ua","value":"\"HeadlessChrome\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\""},{"name":"sec-ch-ua-mobile","value":"?0"},{"name":"sec-ch-ua-platform","value":"\"Windows\""},{"name":"sec-fetch-dest","value":"script"},{"name":"sec-fetch-mode","value":"no-cors"},{"name":"sec-fetch-site","value":"same-origin"},{"name":"user-agent","value":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.7727.15 Safari/537.36"}],"queryString":[],"headersSize":576,"bodySize":0},"response":{"status":200,"statusText":"","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":"accept-ranges","value":"bytes"},{"name":"alt-svc","value":"h3=\":443\"; ma=3600"},{"name":"content-length","value":"8357"},{"name":"content-type","value":"text/javascript"},{"name":"date","value":"Wed, 06 May 2026 09:43:51 GMT"},{"name":"etag","value":"\"69e4a17c-20a5\""},{"name":"last-modified","value":"Sun, 19 Apr 2026 09:33:48 GMT"},{"name":"server","value":"nghttpx"},{"name":"strict-transport-security","value":"max-age=31536000"},{"name":"via","value":"2 nghttpx"},{"name":"x-backend-header-rtt","value":"0.000784"},{"name":"x-content-type-options","value":"nosniff"},{"name":"x-frame-options","value":"SAMEORIGIN"},{"name":"x-xss-protection","value":"1; mode=block"}],"content":{"size":-1,"mimeType":"text/javascript","compression":0},"headersSize":0,"bodySize":8434,"redirectURL":"","_transferSize":8434},"cache":{},"timings":{"dns":-1,"connect":-1,"ssl":-1,"send":0,"wait":379.503,"receive":4.716},"_frameref":"frame@e30423b46b509816b6c52bbaf4780106","_monotonicTime":10839.147,"serverIPAddress":"139.162.123.134","_serverPort":443,"_securityDetails":{"protocol":"TLS 1.3","subjectName":"nghttp2.org","issuer":"E7","validFrom":1776643299,"validTo":1784419298}}}
|
|
5
|
+
{"type":"resource-snapshot","snapshot":{"pageref":"page@ecf217cf36d6558e6a093669f419142e","startedDateTime":"2026-05-06T09:43:53.164Z","time":92.221,"request":{"method":"GET","url":"https://fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":":authority","value":"fonts.googleapis.com"},{"name":":method","value":"GET"},{"name":":path","value":"/css?family=PT+Serif:regular,italic,bold,bolditalic"},{"name":":scheme","value":"https"},{"name":"accept","value":"text/css,*/*;q=0.1"},{"name":"accept-encoding","value":"gzip, deflate, br, zstd"},{"name":"priority","value":"u=0"},{"name":"referer","value":"https://nghttp2.org/"},{"name":"sec-ch-ua","value":"\"HeadlessChrome\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\""},{"name":"sec-ch-ua-mobile","value":"?0"},{"name":"sec-ch-ua-platform","value":"\"Windows\""},{"name":"sec-fetch-dest","value":"style"},{"name":"sec-fetch-mode","value":"no-cors"},{"name":"sec-fetch-site","value":"cross-site"},{"name":"sec-fetch-storage-access","value":"active"},{"name":"user-agent","value":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.7727.15 Safari/537.36"}],"queryString":[{"name":"family","value":"PT Serif:regular,italic,bold,bolditalic"}],"headersSize":637,"bodySize":0},"response":{"status":200,"statusText":"","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":"access-control-allow-origin","value":"*"},{"name":"alt-svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"name":"cache-control","value":"private, max-age=86400, stale-while-revalidate=604800"},{"name":"content-encoding","value":"gzip"},{"name":"content-type","value":"text/css; charset=utf-8"},{"name":"cross-origin-opener-policy","value":"same-origin-allow-popups"},{"name":"cross-origin-resource-policy","value":"cross-origin"},{"name":"date","value":"Wed, 06 May 2026 09:43:52 GMT"},{"name":"expires","value":"Wed, 06 May 2026 09:43:52 GMT"},{"name":"last-modified","value":"Wed, 06 May 2026 09:00:44 GMT"},{"name":"link","value":"<https://fonts.gstatic.com>; rel=preconnect; crossorigin"},{"name":"server","value":"ESF"},{"name":"strict-transport-security","value":"max-age=31536000"},{"name":"timing-allow-origin","value":"*"},{"name":"vary","value":"Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-Site"},{"name":"x-content-type-options","value":"nosniff"},{"name":"x-frame-options","value":"SAMEORIGIN"},{"name":"x-xss-protection","value":"0"}],"content":{"size":5518,"mimeType":"text/css; charset=utf-8","compression":4419,"_sha1":"ecbb0ecf515f96459bc4f72d54c2ced1787e04e6.css"},"headersSize":0,"bodySize":1099,"redirectURL":"","_transferSize":1099},"cache":{},"timings":{"dns":-1,"connect":-1,"ssl":-1,"send":0,"wait":88.518,"receive":3.703},"_frameref":"frame@e30423b46b509816b6c52bbaf4780106","_monotonicTime":10839.52,"serverIPAddress":"142.250.206.170","_serverPort":443,"_securityDetails":{"protocol":"TLS 1.3","subjectName":"upload.video.google.com","issuer":"WR2","validFrom":1775625567,"validTo":1782883166}}}
|
|
6
|
+
{"type":"resource-snapshot","snapshot":{"pageref":"page@ecf217cf36d6558e6a093669f419142e","startedDateTime":"2026-05-06T09:43:53.165Z","time":547.581,"request":{"method":"GET","url":"https://fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":":authority","value":"fonts.googleapis.com"},{"name":":method","value":"GET"},{"name":":path","value":"/css?family=PT+Sans:regular,italic,bold,bolditalic"},{"name":":scheme","value":"https"},{"name":"accept","value":"text/css,*/*;q=0.1"},{"name":"accept-encoding","value":"gzip, deflate, br, zstd"},{"name":"priority","value":"u=0"},{"name":"referer","value":"https://nghttp2.org/"},{"name":"sec-ch-ua","value":"\"HeadlessChrome\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\""},{"name":"sec-ch-ua-mobile","value":"?0"},{"name":"sec-ch-ua-platform","value":"\"Windows\""},{"name":"sec-fetch-dest","value":"style"},{"name":"sec-fetch-mode","value":"no-cors"},{"name":"sec-fetch-site","value":"cross-site"},{"name":"sec-fetch-storage-access","value":"active"},{"name":"user-agent","value":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.7727.15 Safari/537.36"}],"queryString":[{"name":"family","value":"PT Sans:regular,italic,bold,bolditalic"}],"headersSize":636,"bodySize":0},"response":{"status":200,"statusText":"","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":"access-control-allow-origin","value":"*"},{"name":"alt-svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"name":"cache-control","value":"private, max-age=86400, stale-while-revalidate=604800"},{"name":"content-encoding","value":"gzip"},{"name":"content-type","value":"text/css; charset=utf-8"},{"name":"cross-origin-opener-policy","value":"same-origin-allow-popups"},{"name":"cross-origin-resource-policy","value":"cross-origin"},{"name":"date","value":"Wed, 06 May 2026 09:43:52 GMT"},{"name":"expires","value":"Wed, 06 May 2026 09:43:52 GMT"},{"name":"last-modified","value":"Wed, 06 May 2026 09:20:27 GMT"},{"name":"link","value":"<https://fonts.gstatic.com>; rel=preconnect; crossorigin"},{"name":"server","value":"ESF"},{"name":"strict-transport-security","value":"max-age=31536000"},{"name":"timing-allow-origin","value":"*"},{"name":"vary","value":"Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-Site"},{"name":"x-content-type-options","value":"nosniff"},{"name":"x-frame-options","value":"SAMEORIGIN"},{"name":"x-xss-protection","value":"0"}],"content":{"size":5462,"mimeType":"text/css; charset=utf-8","compression":4742,"_sha1":"fa3950ca4f3ad8606c0ffb792c8ec49354187955.css"},"headersSize":0,"bodySize":720,"redirectURL":"","_transferSize":720},"cache":{},"timings":{"dns":69.492,"connect":360.352,"ssl":23.05,"send":0,"wait":91.173,"receive":3.514},"_frameref":"frame@e30423b46b509816b6c52bbaf4780106","_monotonicTime":10840.532,"serverIPAddress":"142.250.206.170","_serverPort":443,"_securityDetails":{"protocol":"TLS 1.3","subjectName":"upload.video.google.com","issuer":"WR2","validFrom":1775625567,"validTo":1782883166}}}
|
|
7
|
+
{"type":"resource-snapshot","snapshot":{"pageref":"page@ecf217cf36d6558e6a093669f419142e","startedDateTime":"2026-05-06T09:43:53.163Z","time":563.972,"request":{"method":"GET","url":"https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":":authority","value":"ajax.googleapis.com"},{"name":":method","value":"GET"},{"name":":path","value":"/ajax/libs/jquery/1.9.1/jquery.min.js"},{"name":":scheme","value":"https"},{"name":"accept","value":"*/*"},{"name":"accept-encoding","value":"gzip, deflate, br, zstd"},{"name":"priority","value":"u=1"},{"name":"referer","value":"https://nghttp2.org/"},{"name":"sec-ch-ua","value":"\"HeadlessChrome\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\""},{"name":"sec-ch-ua-mobile","value":"?0"},{"name":"sec-ch-ua-platform","value":"\"Windows\""},{"name":"sec-fetch-dest","value":"script"},{"name":"sec-fetch-mode","value":"no-cors"},{"name":"sec-fetch-site","value":"cross-site"},{"name":"sec-fetch-storage-access","value":"active"},{"name":"user-agent","value":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.7727.15 Safari/537.36"}],"queryString":[],"headersSize":641,"bodySize":0},"response":{"status":200,"statusText":"","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":"accept-ranges","value":"bytes"},{"name":"access-control-allow-origin","value":"*"},{"name":"age","value":"471866"},{"name":"alt-svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"name":"cache-control","value":"public, max-age=31536000, stale-while-revalidate=2592000"},{"name":"content-encoding","value":"gzip"},{"name":"content-length","value":"33018"},{"name":"content-security-policy-report-only","value":"require-trusted-types-for 'script'; report-uri https://csp.withgoogle.com/csp/hosted-libraries-pushers"},{"name":"content-type","value":"text/javascript; charset=UTF-8"},{"name":"cross-origin-opener-policy","value":"same-origin; report-to=\"hosted-libraries-pushers\""},{"name":"cross-origin-resource-policy","value":"cross-origin"},{"name":"date","value":"Thu, 30 Apr 2026 22:39:26 GMT"},{"name":"expires","value":"Fri, 30 Apr 2027 22:39:26 GMT"},{"name":"last-modified","value":"Tue, 03 Mar 2020 19:15:00 GMT"},{"name":"report-to","value":"{\"group\":\"hosted-libraries-pushers\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/hosted-libraries-pushers\"}]}"},{"name":"server","value":"sffe"},{"name":"timing-allow-origin","value":"*"},{"name":"vary","value":"Accept-Encoding"},{"name":"x-content-type-options","value":"nosniff"},{"name":"x-xss-protection","value":"0"}],"content":{"size":-1,"mimeType":"text/javascript; charset=UTF-8","compression":0},"headersSize":0,"bodySize":33659,"redirectURL":"","_transferSize":33659},"cache":{},"timings":{"dns":73.738,"connect":378.794,"ssl":41.944,"send":0,"wait":22.115,"receive":47.381},"_frameref":"frame@e30423b46b509816b6c52bbaf4780106","_monotonicTime":10839.01,"serverIPAddress":"142.250.71.106","_serverPort":443,"_securityDetails":{"protocol":"TLS 1.3","subjectName":"upload.video.google.com","issuer":"WR2","validFrom":1775625567,"validTo":1782883166}}}
|
|
8
|
+
{"type":"resource-snapshot","snapshot":{"pageref":"page@ecf217cf36d6558e6a093669f419142e","startedDateTime":"2026-05-06T09:43:53.770Z","time":150.654,"request":{"method":"GET","url":"https://nghttp2.org/images/line-tile.png?1413623488","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":":authority","value":"nghttp2.org"},{"name":":method","value":"GET"},{"name":":path","value":"/images/line-tile.png?1413623488"},{"name":":scheme","value":"https"},{"name":"accept","value":"image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8"},{"name":"accept-encoding","value":"gzip, deflate, br, zstd"},{"name":"priority","value":"i"},{"name":"referer","value":"https://nghttp2.org/stylesheets/screen.css"},{"name":"sec-ch-ua","value":"\"HeadlessChrome\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\""},{"name":"sec-ch-ua-mobile","value":"?0"},{"name":"sec-ch-ua-platform","value":"\"Windows\""},{"name":"sec-fetch-dest","value":"image"},{"name":"sec-fetch-mode","value":"no-cors"},{"name":"sec-fetch-site","value":"same-origin"},{"name":"user-agent","value":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.7727.15 Safari/537.36"}],"queryString":[{"name":"1413623488","value":""}],"headersSize":659,"bodySize":0},"response":{"status":200,"statusText":"","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":"accept-ranges","value":"bytes"},{"name":"alt-svc","value":"h3=\":443\"; ma=3600"},{"name":"content-length","value":"636"},{"name":"content-type","value":"image/png"},{"name":"date","value":"Wed, 06 May 2026 09:43:52 GMT"},{"name":"etag","value":"\"69e4a17c-27c\""},{"name":"last-modified","value":"Sun, 19 Apr 2026 09:33:48 GMT"},{"name":"server","value":"nghttpx"},{"name":"strict-transport-security","value":"max-age=31536000"},{"name":"via","value":"2 nghttpx"},{"name":"x-backend-header-rtt","value":"0.000937"},{"name":"x-content-type-options","value":"nosniff"},{"name":"x-frame-options","value":"SAMEORIGIN"},{"name":"x-xss-protection","value":"1; mode=block"}],"content":{"size":636,"mimeType":"image/png","compression":0,"_sha1":"a86a5d70fb0024dd295b85ea9058b43c1c5f25d3.png"},"headersSize":0,"bodySize":726,"redirectURL":"","_transferSize":726},"cache":{},"timings":{"dns":-1,"connect":-1,"ssl":-1,"send":0,"wait":149.623,"receive":1.031},"_frameref":"frame@e30423b46b509816b6c52bbaf4780106","_monotonicTime":11446.28,"serverIPAddress":"139.162.123.134","_serverPort":443,"_securityDetails":{"protocol":"TLS 1.3","subjectName":"nghttp2.org","issuer":"E7","validFrom":1776643299,"validTo":1784419298}}}
|
|
9
|
+
{"type":"resource-snapshot","snapshot":{"pageref":"page@ecf217cf36d6558e6a093669f419142e","startedDateTime":"2026-05-06T09:43:53.717Z","time":193.308,"request":{"method":"GET","url":"https://platform.twitter.com/widgets.js","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":":authority","value":"platform.twitter.com"},{"name":":method","value":"GET"},{"name":":path","value":"/widgets.js"},{"name":":scheme","value":"https"},{"name":"accept","value":"*/*"},{"name":"accept-encoding","value":"gzip, deflate, br, zstd"},{"name":"referer","value":"https://nghttp2.org/"},{"name":"sec-ch-ua","value":"\"HeadlessChrome\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\""},{"name":"sec-ch-ua-mobile","value":"?0"},{"name":"sec-ch-ua-platform","value":"\"Windows\""},{"name":"sec-fetch-dest","value":"script"},{"name":"sec-fetch-mode","value":"no-cors"},{"name":"sec-fetch-site","value":"cross-site"},{"name":"sec-fetch-storage-access","value":"active"},{"name":"user-agent","value":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.7727.15 Safari/537.36"}],"queryString":[],"headersSize":575,"bodySize":0},"response":{"status":200,"statusText":"","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":"accept-ranges","value":"bytes"},{"name":"access-control-allow-methods","value":"GET"},{"name":"access-control-allow-origin","value":"*"},{"name":"cache-control","value":"public, max-age=1800"},{"name":"content-encoding","value":"gzip"},{"name":"content-length","value":"27597"},{"name":"content-type","value":"application/javascript; charset=utf-8"},{"name":"date","value":"Wed, 06 May 2026 09:43:52 GMT"},{"name":"etag","value":"\"824beb891744db98ccbd3a456e59e0f7+gzip\""},{"name":"last-modified","value":"Mon, 11 Dec 2023 17:20:28 GMT"},{"name":"p3p","value":"CP=\"CAO DSP LAW CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa OUR BUS IND UNI COM NAV INT\""},{"name":"tw-cdn","value":"FT"},{"name":"vary","value":"Accept-Encoding"},{"name":"x-amz-server-side-encryption","value":"AES256"},{"name":"x-cache","value":"HIT, HIT"},{"name":"x-served-by","value":"cache-iad-kcgs7200137-IAD, cache-qbd-vind4800022-QBD"}],"content":{"size":-1,"mimeType":"application/javascript; charset=utf-8","compression":0},"headersSize":0,"bodySize":27990,"redirectURL":"","_transferSize":27990},"cache":{},"timings":{"dns":30.022,"connect":68.474,"ssl":40.869,"send":0,"wait":23.819,"receive":30.124},"_frameref":"frame@e30423b46b509816b6c52bbaf4780106","_monotonicTime":11393.145,"serverIPAddress":"151.101.104.157","_serverPort":443,"_securityDetails":{"protocol":"TLS 1.3","subjectName":"*.twimg.com","issuer":"R12","validFrom":1777838607,"validTo":1785614606}}}
|
|
10
|
+
{"type":"resource-snapshot","snapshot":{"pageref":"page@ecf217cf36d6558e6a093669f419142e","startedDateTime":"2026-05-06T09:43:53.771Z","time":185.655,"request":{"method":"GET","url":"https://nghttp2.org/images/noise.png?1413623488","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":":authority","value":"nghttp2.org"},{"name":":method","value":"GET"},{"name":":path","value":"/images/noise.png?1413623488"},{"name":":scheme","value":"https"},{"name":"accept","value":"image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8"},{"name":"accept-encoding","value":"gzip, deflate, br, zstd"},{"name":"priority","value":"i"},{"name":"referer","value":"https://nghttp2.org/stylesheets/screen.css"},{"name":"sec-ch-ua","value":"\"HeadlessChrome\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\""},{"name":"sec-ch-ua-mobile","value":"?0"},{"name":"sec-ch-ua-platform","value":"\"Windows\""},{"name":"sec-fetch-dest","value":"image"},{"name":"sec-fetch-mode","value":"no-cors"},{"name":"sec-fetch-site","value":"same-origin"},{"name":"user-agent","value":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.7727.15 Safari/537.36"}],"queryString":[{"name":"1413623488","value":""}],"headersSize":651,"bodySize":0},"response":{"status":200,"statusText":"","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":"accept-ranges","value":"bytes"},{"name":"alt-svc","value":"h3=\":443\"; ma=3600"},{"name":"content-length","value":"17742"},{"name":"content-type","value":"image/png"},{"name":"date","value":"Wed, 06 May 2026 09:43:52 GMT"},{"name":"etag","value":"\"69e4a17c-454e\""},{"name":"last-modified","value":"Sun, 19 Apr 2026 09:33:48 GMT"},{"name":"server","value":"nghttpx"},{"name":"strict-transport-security","value":"max-age=31536000"},{"name":"via","value":"2 nghttpx"},{"name":"x-backend-header-rtt","value":"0.000818"},{"name":"x-content-type-options","value":"nosniff"},{"name":"x-frame-options","value":"SAMEORIGIN"},{"name":"x-xss-protection","value":"1; mode=block"}],"content":{"size":17742,"mimeType":"image/png","compression":0,"_sha1":"a839ae391fbbb0a1a2b22f8aba1d8ae2a702ef34.png"},"headersSize":0,"bodySize":17811,"redirectURL":"","_transferSize":17811},"cache":{},"timings":{"dns":-1,"connect":-1,"ssl":-1,"send":0,"wait":184.827,"receive":0.828},"_frameref":"frame@e30423b46b509816b6c52bbaf4780106","_monotonicTime":11446.909,"serverIPAddress":"139.162.123.134","_serverPort":443,"_securityDetails":{"protocol":"TLS 1.3","subjectName":"nghttp2.org","issuer":"E7","validFrom":1776643299,"validTo":1784419298}}}
|
|
11
|
+
{"type":"resource-snapshot","snapshot":{"pageref":"page@ecf217cf36d6558e6a093669f419142e","startedDateTime":"2026-05-06T09:43:53.786Z","time":156.347,"request":{"method":"GET","url":"https://nghttp2.org/images/rss.png?1413623488","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":":authority","value":"nghttp2.org"},{"name":":method","value":"GET"},{"name":":path","value":"/images/rss.png?1413623488"},{"name":":scheme","value":"https"},{"name":"accept","value":"image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8"},{"name":"accept-encoding","value":"gzip, deflate, br, zstd"},{"name":"origin","value":"https://nghttp2.org"},{"name":"priority","value":"i"},{"name":"referer","value":"https://nghttp2.org/stylesheets/screen.css"},{"name":"sec-ch-ua","value":"\"HeadlessChrome\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\""},{"name":"sec-ch-ua-mobile","value":"?0"},{"name":"sec-ch-ua-platform","value":"\"Windows\""},{"name":"sec-fetch-dest","value":"image"},{"name":"sec-fetch-mode","value":"cors"},{"name":"sec-fetch-site","value":"same-origin"},{"name":"user-agent","value":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.7727.15 Safari/537.36"}],"queryString":[{"name":"1413623488","value":""}],"headersSize":673,"bodySize":0},"response":{"status":200,"statusText":"","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":"accept-ranges","value":"bytes"},{"name":"alt-svc","value":"h3=\":443\"; ma=3600"},{"name":"content-length","value":"490"},{"name":"content-type","value":"image/png"},{"name":"date","value":"Wed, 06 May 2026 09:43:52 GMT"},{"name":"etag","value":"\"69e4a17c-1ea\""},{"name":"last-modified","value":"Sun, 19 Apr 2026 09:33:48 GMT"},{"name":"server","value":"nghttpx"},{"name":"strict-transport-security","value":"max-age=31536000"},{"name":"via","value":"2 nghttpx"},{"name":"x-backend-header-rtt","value":"0.000664"},{"name":"x-content-type-options","value":"nosniff"},{"name":"x-frame-options","value":"SAMEORIGIN"},{"name":"x-xss-protection","value":"1; mode=block"}],"content":{"size":490,"mimeType":"image/png","compression":0,"_sha1":"d61fc1ccc66f081002b15532f66e054147d5f2fb.png"},"headersSize":0,"bodySize":548,"redirectURL":"","_transferSize":548},"cache":{},"timings":{"dns":-1,"connect":-1,"ssl":-1,"send":0,"wait":155.321,"receive":1.026},"_frameref":"frame@e30423b46b509816b6c52bbaf4780106","_monotonicTime":11461.71,"serverIPAddress":"139.162.123.134","_serverPort":443,"_securityDetails":{"protocol":"TLS 1.3","subjectName":"nghttp2.org","issuer":"E7","validFrom":1776643299,"validTo":1784419298}}}
|
|
12
|
+
{"type":"resource-snapshot","snapshot":{"pageref":"page@ecf217cf36d6558e6a093669f419142e","startedDateTime":"2026-05-06T09:43:53.892Z","time":62.44,"request":{"method":"GET","url":"https://platform.twitter.com/widgets/widget_iframe.2f70fb173b9000da126c79afe2098f02.html?origin=https%3A%2F%2Fnghttp2.org","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":":authority","value":"platform.twitter.com"},{"name":":method","value":"GET"},{"name":":path","value":"/widgets/widget_iframe.2f70fb173b9000da126c79afe2098f02.html?origin=https%3A%2F%2Fnghttp2.org"},{"name":":scheme","value":"https"},{"name":"accept","value":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"},{"name":"accept-encoding","value":"gzip, deflate, br, zstd"},{"name":"priority","value":"u=0, i"},{"name":"referer","value":"https://nghttp2.org/"},{"name":"sec-ch-ua","value":"\"HeadlessChrome\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\""},{"name":"sec-ch-ua-mobile","value":"?0"},{"name":"sec-ch-ua-platform","value":"\"Windows\""},{"name":"sec-fetch-dest","value":"iframe"},{"name":"sec-fetch-mode","value":"navigate"},{"name":"sec-fetch-site","value":"cross-site"},{"name":"sec-fetch-storage-access","value":"active"},{"name":"sec-fetch-user","value":"?1"},{"name":"upgrade-insecure-requests","value":"1"},{"name":"user-agent","value":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.7727.15 Safari/537.36"}],"queryString":[{"name":"origin","value":"https://nghttp2.org"}],"headersSize":907,"bodySize":0},"response":{"status":200,"statusText":"","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":"accept-ranges","value":"bytes"},{"name":"access-control-allow-methods","value":"GET"},{"name":"access-control-allow-origin","value":"*"},{"name":"cache-control","value":"public, max-age=315360000"},{"name":"content-encoding","value":"gzip"},{"name":"content-length","value":"105429"},{"name":"content-type","value":"text/html; charset=utf-8"},{"name":"date","value":"Wed, 06 May 2026 09:43:52 GMT"},{"name":"etag","value":"\"81267302efdfb3e4524a22631a8fc99e+gzip\""},{"name":"last-modified","value":"Mon, 11 Dec 2023 17:19:49 GMT"},{"name":"p3p","value":"CP=\"CAO DSP LAW CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa OUR BUS IND UNI COM NAV INT\""},{"name":"tw-cdn","value":"FT"},{"name":"vary","value":"Accept-Encoding"},{"name":"x-amz-server-side-encryption","value":"AES256"},{"name":"x-cache","value":"HIT, HIT"},{"name":"x-served-by","value":"cache-iad-kiad7000164-IAD, cache-qbd-vind4800022-QBD"}],"content":{"size":327164,"mimeType":"text/html; charset=utf-8","compression":221506,"_sha1":"efb274e7d019d5f3cdbee88d317f46fe45bc91ee.html"},"headersSize":0,"bodySize":105658,"redirectURL":"","_transferSize":105658},"cache":{},"timings":{"dns":-1,"connect":-1,"ssl":-1,"send":0,"wait":21.499,"receive":40.941},"_frameref":"frame@a2ae48b7b35d7f9e02f0aa0a42a747aa","_monotonicTime":11567.885,"serverIPAddress":"151.101.104.157","_serverPort":443,"_securityDetails":{"protocol":"TLS 1.3","subjectName":"*.twimg.com","issuer":"R12","validFrom":1777838607,"validTo":1785614606}}}
|
|
13
|
+
{"type":"resource-snapshot","snapshot":{"pageref":"page@ecf217cf36d6558e6a093669f419142e","startedDateTime":"2026-05-06T09:43:53.772Z","time":496.273,"request":{"method":"GET","url":"https://fonts.gstatic.com/s/ptserif/v19/EJRVQgYoZZY2vCFuvAFWzr8.woff2","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":":authority","value":"fonts.gstatic.com"},{"name":":method","value":"GET"},{"name":":path","value":"/s/ptserif/v19/EJRVQgYoZZY2vCFuvAFWzr8.woff2"},{"name":":scheme","value":"https"},{"name":"accept","value":"*/*"},{"name":"accept-encoding","value":"gzip, deflate, br, zstd"},{"name":"origin","value":"https://nghttp2.org"},{"name":"priority","value":"u=0"},{"name":"referer","value":"https://fonts.googleapis.com/"},{"name":"sec-ch-ua","value":"\"HeadlessChrome\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\""},{"name":"sec-ch-ua-mobile","value":"?0"},{"name":"sec-ch-ua-platform","value":"\"Windows\""},{"name":"sec-fetch-dest","value":"font"},{"name":"sec-fetch-mode","value":"cors"},{"name":"sec-fetch-site","value":"cross-site"},{"name":"user-agent","value":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.7727.15 Safari/537.36"}],"queryString":[],"headersSize":652,"bodySize":0},"response":{"status":200,"statusText":"","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":"accept-ranges","value":"bytes"},{"name":"access-control-allow-origin","value":"*"},{"name":"age","value":"129288"},{"name":"alt-svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"name":"cache-control","value":"public, max-age=31536000"},{"name":"content-length","value":"33116"},{"name":"content-security-policy-report-only","value":"require-trusted-types-for 'script'; report-uri https://csp.withgoogle.com/csp/apps-themes"},{"name":"content-type","value":"font/woff2"},{"name":"cross-origin-opener-policy","value":"same-origin; report-to=\"apps-themes\""},{"name":"cross-origin-resource-policy","value":"cross-origin"},{"name":"date","value":"Mon, 04 May 2026 21:49:04 GMT"},{"name":"expires","value":"Tue, 04 May 2027 21:49:04 GMT"},{"name":"last-modified","value":"Thu, 04 Sep 2025 17:38:18 GMT"},{"name":"report-to","value":"{\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}"},{"name":"server","value":"sffe"},{"name":"timing-allow-origin","value":"*"},{"name":"x-content-type-options","value":"nosniff"},{"name":"x-xss-protection","value":"0"}],"content":{"size":33116,"mimeType":"font/woff2","compression":0,"_sha1":"12e1e0d36983a8d900bc66b4784a6f9b9ace4b60.woff2"},"headersSize":0,"bodySize":33667,"redirectURL":"","_transferSize":33667},"cache":{},"timings":{"dns":23.915,"connect":352.21,"ssl":31.303,"send":0,"wait":21.648,"receive":67.197},"_frameref":"frame@e30423b46b509816b6c52bbaf4780106","_monotonicTime":11447.475,"serverIPAddress":"192.178.211.94","_serverPort":443,"_securityDetails":{"protocol":"TLS 1.3","subjectName":"*.gstatic.com","issuer":"WR2","validFrom":1775625567,"validTo":1782883166}}}
|
|
14
|
+
{"type":"resource-snapshot","snapshot":{"pageref":"page@ecf217cf36d6558e6a093669f419142e","startedDateTime":"2026-05-06T09:43:53.772Z","time":105.491,"request":{"method":"GET","url":"https://fonts.gstatic.com/s/ptserif/v19/EJRSQgYoZZY2vCFuvAnt66qSVys.woff2","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":":authority","value":"fonts.gstatic.com"},{"name":":method","value":"GET"},{"name":":path","value":"/s/ptserif/v19/EJRSQgYoZZY2vCFuvAnt66qSVys.woff2"},{"name":":scheme","value":"https"},{"name":"accept","value":"*/*"},{"name":"accept-encoding","value":"gzip, deflate, br, zstd"},{"name":"origin","value":"https://nghttp2.org"},{"name":"priority","value":"u=0"},{"name":"referer","value":"https://fonts.googleapis.com/"},{"name":"sec-ch-ua","value":"\"HeadlessChrome\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\""},{"name":"sec-ch-ua-mobile","value":"?0"},{"name":"sec-ch-ua-platform","value":"\"Windows\""},{"name":"sec-fetch-dest","value":"font"},{"name":"sec-fetch-mode","value":"cors"},{"name":"sec-fetch-site","value":"cross-site"},{"name":"user-agent","value":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.7727.15 Safari/537.36"}],"queryString":[],"headersSize":660,"bodySize":0},"response":{"status":200,"statusText":"","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":"accept-ranges","value":"bytes"},{"name":"access-control-allow-origin","value":"*"},{"name":"age","value":"126272"},{"name":"alt-svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"name":"cache-control","value":"public, max-age=31536000"},{"name":"content-length","value":"29588"},{"name":"content-security-policy-report-only","value":"require-trusted-types-for 'script'; report-uri https://csp.withgoogle.com/csp/apps-themes"},{"name":"content-type","value":"font/woff2"},{"name":"cross-origin-opener-policy","value":"same-origin; report-to=\"apps-themes\""},{"name":"cross-origin-resource-policy","value":"cross-origin"},{"name":"date","value":"Mon, 04 May 2026 22:39:20 GMT"},{"name":"expires","value":"Tue, 04 May 2027 22:39:20 GMT"},{"name":"last-modified","value":"Thu, 04 Sep 2025 17:42:06 GMT"},{"name":"report-to","value":"{\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}"},{"name":"server","value":"sffe"},{"name":"timing-allow-origin","value":"*"},{"name":"x-content-type-options","value":"nosniff"},{"name":"x-xss-protection","value":"0"}],"content":{"size":29588,"mimeType":"font/woff2","compression":0,"_sha1":"0480db0094dec698acf12620a246bd9134766119.woff2"},"headersSize":0,"bodySize":29714,"redirectURL":"","_transferSize":29714},"cache":{},"timings":{"dns":-1,"connect":-1,"ssl":-1,"send":0,"wait":51.071,"receive":54.42},"_frameref":"frame@e30423b46b509816b6c52bbaf4780106","_monotonicTime":11447.654,"serverIPAddress":"192.178.211.94","_serverPort":443,"_securityDetails":{"protocol":"TLS 1.3","subjectName":"*.gstatic.com","issuer":"WR2","validFrom":1775625567,"validTo":1782883166}}}
|
|
15
|
+
{"type":"resource-snapshot","snapshot":{"pageref":"page@ecf217cf36d6558e6a093669f419142e","startedDateTime":"2026-05-06T09:43:53.772Z","time":129.64,"request":{"method":"GET","url":"https://fonts.gstatic.com/s/ptsans/v18/jizaRExUiTo99u79D0KExQ.woff2","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":":authority","value":"fonts.gstatic.com"},{"name":":method","value":"GET"},{"name":":path","value":"/s/ptsans/v18/jizaRExUiTo99u79D0KExQ.woff2"},{"name":":scheme","value":"https"},{"name":"accept","value":"*/*"},{"name":"accept-encoding","value":"gzip, deflate, br, zstd"},{"name":"origin","value":"https://nghttp2.org"},{"name":"priority","value":"u=0"},{"name":"referer","value":"https://fonts.googleapis.com/"},{"name":"sec-ch-ua","value":"\"HeadlessChrome\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\""},{"name":"sec-ch-ua-mobile","value":"?0"},{"name":"sec-ch-ua-platform","value":"\"Windows\""},{"name":"sec-fetch-dest","value":"font"},{"name":"sec-fetch-mode","value":"cors"},{"name":"sec-fetch-site","value":"cross-site"},{"name":"user-agent","value":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.7727.15 Safari/537.36"}],"queryString":[],"headersSize":648,"bodySize":0},"response":{"status":200,"statusText":"","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":"accept-ranges","value":"bytes"},{"name":"access-control-allow-origin","value":"*"},{"name":"age","value":"314061"},{"name":"alt-svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"},{"name":"cache-control","value":"public, max-age=31536000"},{"name":"content-length","value":"45532"},{"name":"content-security-policy-report-only","value":"require-trusted-types-for 'script'; report-uri https://csp.withgoogle.com/csp/apps-themes"},{"name":"content-type","value":"font/woff2"},{"name":"cross-origin-opener-policy","value":"same-origin; report-to=\"apps-themes\""},{"name":"cross-origin-resource-policy","value":"cross-origin"},{"name":"date","value":"Sat, 02 May 2026 18:29:31 GMT"},{"name":"expires","value":"Sun, 02 May 2027 18:29:31 GMT"},{"name":"last-modified","value":"Thu, 04 Sep 2025 17:27:33 GMT"},{"name":"report-to","value":"{\"group\":\"apps-themes\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/apps-themes\"}]}"},{"name":"server","value":"sffe"},{"name":"timing-allow-origin","value":"*"},{"name":"x-content-type-options","value":"nosniff"},{"name":"x-xss-protection","value":"0"}],"content":{"size":45532,"mimeType":"font/woff2","compression":0,"_sha1":"a922c0987319ee73a9645918566d35cb90196b3d.woff2"},"headersSize":0,"bodySize":45668,"redirectURL":"","_transferSize":45668},"cache":{},"timings":{"dns":-1,"connect":-1,"ssl":-1,"send":0,"wait":39.991,"receive":89.649},"_frameref":"frame@e30423b46b509816b6c52bbaf4780106","_monotonicTime":11447.585,"serverIPAddress":"192.178.211.94","_serverPort":443,"_securityDetails":{"protocol":"TLS 1.3","subjectName":"*.gstatic.com","issuer":"WR2","validFrom":1775625567,"validTo":1782883166}}}
|
|
16
|
+
{"type":"resource-snapshot","snapshot":{"pageref":"page@ecf217cf36d6558e6a093669f419142e","startedDateTime":"2026-05-06T09:43:53.988Z","time":-1,"request":{"method":"GET","url":"https://syndication.twitter.com/settings?session_id=a917a5b6461452d869173eb5bae00a74fb901722","httpVersion":"HTTP/1.1","cookies":[],"headers":[{"name":"sec-ch-ua-platform","value":"\"Windows\""},{"name":"Referer","value":"https://platform.twitter.com/"},{"name":"User-Agent","value":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.7727.15 Safari/537.36"},{"name":"sec-ch-ua","value":"\"HeadlessChrome\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\""},{"name":"sec-ch-ua-mobile","value":"?0"}],"queryString":[{"name":"session_id","value":"a917a5b6461452d869173eb5bae00a74fb901722"}],"headersSize":-1,"bodySize":0},"response":{"status":-1,"statusText":"","httpVersion":"HTTP/1.1","cookies":[],"headers":[],"content":{"size":-1,"mimeType":"x-unknown"},"headersSize":-1,"bodySize":-1,"redirectURL":"","_transferSize":-1},"cache":{},"timings":{"send":-1,"wait":-1,"receive":-1},"_frameref":"frame@a2ae48b7b35d7f9e02f0aa0a42a747aa","_monotonicTime":11663.93}}
|
package/src/actions.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Page, Response, ElementHandle } from "playwright";
|
|
2
|
+
|
|
3
|
+
export type Step = { action: string; [key: string]: any };
|
|
4
|
+
export type ActionResult = void | Buffer | string[] | Response | ElementHandle<any> | null;
|
|
5
|
+
export type ActionHandler = (page: Page, step: Step) => Promise<ActionResult>;
|
|
6
|
+
|
|
7
|
+
async function assertStringContains(source: () => Promise<string | null>, expected: string) {
|
|
8
|
+
const value = await source();
|
|
9
|
+
if (!value?.includes(expected)) {
|
|
10
|
+
throw new Error(`Expected "${expected}" in "${value}"`);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const actionRegistry: Record<string, ActionHandler> = {
|
|
15
|
+
goto: async (page, step) => page.goto(step.url),
|
|
16
|
+
click: async (page, step) => page.click(step.selector),
|
|
17
|
+
type: async (page, step) => page.fill(step.selector, step.value),
|
|
18
|
+
screenshot: async (page, step) => page.screenshot({ path: step.path }),
|
|
19
|
+
reload: async (page) => page.reload(),
|
|
20
|
+
waitForSelector: async (page, step) => page.waitForSelector(step.selector),
|
|
21
|
+
hover: async (page, step) => page.hover(step.selector),
|
|
22
|
+
dblclick: async (page, step) => page.dblclick(step.selector),
|
|
23
|
+
check: async (page, step) => page.check(step.selector),
|
|
24
|
+
uncheck: async (page, step) => page.uncheck(step.selector),
|
|
25
|
+
selectOption: async (page, step) => page.selectOption(step.selector, step.value),
|
|
26
|
+
press: async (page, step) => page.press(step.selector, step.key),
|
|
27
|
+
waitForTimeout: async (page, step) => page.waitForTimeout(step.ms),
|
|
28
|
+
keyboardType: async (page, step) => page.keyboard.type(step.text),
|
|
29
|
+
keyboardPress: async (page, step) => page.keyboard.press(step.key),
|
|
30
|
+
assertText: async (page, step) =>
|
|
31
|
+
assertStringContains(() => page.textContent(step.selector), step.expected),
|
|
32
|
+
assertTitle: async (page, step) =>
|
|
33
|
+
assertStringContains(() => page.title(), step.expected),
|
|
34
|
+
uploadFile: async (page, step) => page.setInputFiles(step.selector, step.files),
|
|
35
|
+
waitForResponse: async (page, step) => page.waitForResponse(step.urlPattern),
|
|
36
|
+
assertVisible: async (page, step) => {
|
|
37
|
+
const isVisible = await page.isVisible(step.selector);
|
|
38
|
+
if (!isVisible) {
|
|
39
|
+
throw new Error(`Expected element "${step.selector}" to be visible`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
};
|
package/src/cli/index.ts
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {Command} from "commander";
|
|
3
|
+
import {getPackageInfo} from "../lib/helper";
|
|
4
|
+
import * as log4js from "log4js";
|
|
5
|
+
import fs from "fs";
|
|
6
|
+
import {PlaywrightRunner} from "../runner";
|
|
7
|
+
import {RunnerConfig} from "../model/runnerConfig";
|
|
8
|
+
|
|
9
|
+
const cliLogConfig = {
|
|
10
|
+
appenders: {
|
|
11
|
+
out: {
|
|
12
|
+
type: "stdout",
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
categories: {
|
|
16
|
+
default: {appenders: ["out"], level: "INFO"},
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
var pack: any = getPackageInfo();
|
|
20
|
+
let version = pack.version || "version unknown";
|
|
21
|
+
|
|
22
|
+
const program = new Command();
|
|
23
|
+
let data: any;
|
|
24
|
+
program
|
|
25
|
+
.name("asm-playwright-runner")
|
|
26
|
+
.description("CLI wrapper for Playwright collections or scripts")
|
|
27
|
+
.version(version)
|
|
28
|
+
.argument("<collection>", "Flow JSON file or Playwright script")
|
|
29
|
+
.option("-b, --browser <browser>", "Browser type (chromium|firefox|webkit)", "chromium")
|
|
30
|
+
.option("-v, --verbose", "Print collection information on stdout", false)
|
|
31
|
+
.option("--chromiumPath <path>", "Custom Chromium/Chrome executable path")
|
|
32
|
+
.option("--headless", "Run browser headless (default true)", false)
|
|
33
|
+
.option("-r, --resultDir <dir>", "Result directory")
|
|
34
|
+
.option("-l, --logLevel <logLevel>", "Log level", "info")
|
|
35
|
+
.option("--extraHTTPHeaders <headers>", "Extra HTTP headers as JSON string")
|
|
36
|
+
.option("--timeout <timeout>", "Test timeout in ms")
|
|
37
|
+
.option(
|
|
38
|
+
"-rv, --returnResult",
|
|
39
|
+
"Return the full structured test result object to the caller instead of only logging output",
|
|
40
|
+
false
|
|
41
|
+
)
|
|
42
|
+
.option("--sslClientCert <path>", "Client certificate (PEM)")
|
|
43
|
+
.option("--sslClientKey <path>", "Client certificate private key")
|
|
44
|
+
.option("--sslClientPassphrase <passphrase>", "Client certificate passphrase");
|
|
45
|
+
|
|
46
|
+
program.version(version)
|
|
47
|
+
program.parse(process.argv);
|
|
48
|
+
|
|
49
|
+
let log_level: string = program.opts().logLevel || "info";
|
|
50
|
+
log_level = log_level.toUpperCase();
|
|
51
|
+
cliLogConfig.categories.default.level =
|
|
52
|
+
["DEBUG", "TRACE", "ERROR", "FATAL"].includes(log_level) ? log_level : "INFO";
|
|
53
|
+
|
|
54
|
+
cliLogConfig.categories.default.level = log_level;
|
|
55
|
+
log4js.configure(cliLogConfig);
|
|
56
|
+
var logger = log4js.getLogger(pack.name);
|
|
57
|
+
logger.info("%s (%s) started", pack.name, version);
|
|
58
|
+
|
|
59
|
+
// now construct runner
|
|
60
|
+
const runner = new PlaywrightRunner();
|
|
61
|
+
|
|
62
|
+
(async () => {
|
|
63
|
+
const collection = program.args[0];
|
|
64
|
+
const options = program.opts() as RunnerConfig;
|
|
65
|
+
|
|
66
|
+
if (!fs.existsSync(collection) || !fs.lstatSync(collection).isFile()) {
|
|
67
|
+
console.error("The specified collection file %s does not exist", collection);
|
|
68
|
+
process.exit(9);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
await runner.init(collection, options);
|
|
72
|
+
await runner.run(collection, options);
|
|
73
|
+
await runner.close();
|
|
74
|
+
})();
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import readline from "readline";
|
|
3
|
+
import unzipper from 'unzipper';
|
|
4
|
+
import path from "path";
|
|
5
|
+
|
|
6
|
+
export function readJsonFile(pathName:string) {
|
|
7
|
+
try {
|
|
8
|
+
let content = fs.readFileSync(pathName)
|
|
9
|
+
return JSON.parse(content.toString())
|
|
10
|
+
}
|
|
11
|
+
catch(error) {
|
|
12
|
+
return {}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
var packInfo:any
|
|
17
|
+
export function getPackageInfo () {
|
|
18
|
+
if(packInfo === undefined){
|
|
19
|
+
packInfo=readJsonFile(`${__dirname}/../../package.json`)
|
|
20
|
+
}
|
|
21
|
+
return packInfo
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export async function traceZipToLines(tracePath: string): Promise<any[]> {
|
|
25
|
+
const directory = await unzipper.Open.file(tracePath);
|
|
26
|
+
|
|
27
|
+
const traceEntry = directory.files.find(file =>
|
|
28
|
+
file.path.endsWith("test.trace")
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
const events: any[] = [];
|
|
32
|
+
|
|
33
|
+
if (!traceEntry) {
|
|
34
|
+
return events;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const stream = traceEntry.stream();
|
|
38
|
+
|
|
39
|
+
const rl = readline.createInterface({
|
|
40
|
+
input: stream,
|
|
41
|
+
crlfDelay: Infinity,
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
for await (const line of rl) {
|
|
45
|
+
const text = line.toString().trim();
|
|
46
|
+
|
|
47
|
+
if (!text) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
try {
|
|
52
|
+
events.push(JSON.parse(text));
|
|
53
|
+
} catch (err) {
|
|
54
|
+
console.error("Invalid JSON:", text);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return events;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function loadFlow(filePath: string) {
|
|
62
|
+
const raw = fs.readFileSync(filePath, "utf-8");
|
|
63
|
+
return JSON.parse(raw);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function collectTraceFiles(resultDir: string): string[] {
|
|
67
|
+
const traces: string[] = [];
|
|
68
|
+
const walk = (dir: string) => {
|
|
69
|
+
for (const entry of fs.readdirSync(dir)) {
|
|
70
|
+
const fullPath = path.join(dir, entry);
|
|
71
|
+
const stat = fs.statSync(fullPath);
|
|
72
|
+
if (stat.isDirectory()) {
|
|
73
|
+
walk(fullPath);
|
|
74
|
+
} else if (entry === "trace.zip") {
|
|
75
|
+
traces.push(fullPath);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
walk(resultDir);
|
|
80
|
+
return traces;
|
|
81
|
+
}
|