From 37c2dd8819e228486dec5bb9a333913307cdd96d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Greg=20Berg=C3=A9?= Date: Sun, 5 Jul 2026 22:06:20 +0200 Subject: [PATCH] Fix flaky customer screenshots caused by the cookie banner (#4363) Co-authored-by: Claude Opus 4.8 (1M context) --- .changeset/customer-goto-domcontentloaded.md | 5 + .changeset/flaky-cookie-banner-screenshots.md | 5 + .../hide-admin-toolbar-in-screenshots.md | 5 + .../reduced-motion-maxwidth-transition.md | 5 + .changeset/reset-cross-space-nav-e2e.md | 5 + bun.lock | 94 ++++++++++-- packages/gitbook/e2e/customers.spec.ts | 142 +++++++++--------- packages/gitbook/e2e/internal.spec.ts | 26 ++-- packages/gitbook/e2e/util.ts | 38 ++++- packages/gitbook/package.json | 4 +- .../src/components/AdminToolbar/Toolbar.tsx | 5 +- .../components/SpaceLayout/SpaceLayout.tsx | 2 +- packages/gitbook/tests/markdown.test.ts | 2 +- 13 files changed, 233 insertions(+), 105 deletions(-) create mode 100644 .changeset/customer-goto-domcontentloaded.md create mode 100644 .changeset/flaky-cookie-banner-screenshots.md create mode 100644 .changeset/hide-admin-toolbar-in-screenshots.md create mode 100644 .changeset/reduced-motion-maxwidth-transition.md create mode 100644 .changeset/reset-cross-space-nav-e2e.md diff --git a/.changeset/customer-goto-domcontentloaded.md b/.changeset/customer-goto-domcontentloaded.md new file mode 100644 index 000000000..c34b07ba3 --- /dev/null +++ b/.changeset/customer-goto-domcontentloaded.md @@ -0,0 +1,5 @@ +--- +"gitbook": patch +--- + +Navigate customer visual tests with `domcontentloaded` to avoid `load`-event hangs on external sites. diff --git a/.changeset/flaky-cookie-banner-screenshots.md b/.changeset/flaky-cookie-banner-screenshots.md new file mode 100644 index 000000000..8f3b9601a --- /dev/null +++ b/.changeset/flaky-cookie-banner-screenshots.md @@ -0,0 +1,5 @@ +--- +"gitbook": patch +--- + +Fix flaky customer e2e screenshots by waiting for the built-in cookie banner before capturing. diff --git a/.changeset/hide-admin-toolbar-in-screenshots.md b/.changeset/hide-admin-toolbar-in-screenshots.md new file mode 100644 index 000000000..76d60b905 --- /dev/null +++ b/.changeset/hide-admin-toolbar-in-screenshots.md @@ -0,0 +1,5 @@ +--- +"gitbook": patch +--- + +Add a `data-testid` to the admin toolbar so e2e tests can assert its presence while hiding it from visual screenshots (it animates open, causing flaky diffs). diff --git a/.changeset/reduced-motion-maxwidth-transition.md b/.changeset/reduced-motion-maxwidth-transition.md new file mode 100644 index 000000000..682519b53 --- /dev/null +++ b/.changeset/reduced-motion-maxwidth-transition.md @@ -0,0 +1,5 @@ +--- +"gitbook": patch +--- + +Disable the content max-width transition under reduced motion, matching the surrounding layout transitions. diff --git a/.changeset/reset-cross-space-nav-e2e.md b/.changeset/reset-cross-space-nav-e2e.md new file mode 100644 index 000000000..e343faac9 --- /dev/null +++ b/.changeset/reset-cross-space-nav-e2e.md @@ -0,0 +1,5 @@ +--- +"gitbook": patch +--- + +Reset cross-space navigation state between e2e navigations so the "Back to " shortcut can't leak in and cause flaky screenshots. diff --git a/bun.lock b/bun.lock index 072d9c885..e6214a000 100644 --- a/bun.lock +++ b/bun.lock @@ -201,8 +201,8 @@ "zustand": "^5.0.3", }, "devDependencies": { - "@argos-ci/playwright": "^6.4.2", - "@playwright/test": "^1.58.2", + "@argos-ci/playwright": "^7.2.0", + "@playwright/test": "^1.61.1", "@scalar/api-client-react": "catalog:", "@tailwindcss/postcss": "^4.1.11", "@types/js-cookie": "^3.0.6", @@ -392,15 +392,15 @@ "@antfu/install-pkg": ["@antfu/install-pkg@1.1.0", "", { "dependencies": { "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" } }, "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ=="], - "@argos-ci/api-client": ["@argos-ci/api-client@0.16.0", "", { "dependencies": { "debug": "^4.4.3", "openapi-fetch": "^0.15.0" } }, "sha512-BG6g+AZABKN8W2syzfPWKhPxxrAB9Wjp2iNS11R4IskHDV6T41+qeQDpT88GOq6eUZ64Sjzoh/nXG+9EpNxtfw=="], + "@argos-ci/api-client": ["@argos-ci/api-client@0.24.0", "", { "dependencies": { "debug": "^4.4.3", "openapi-fetch": "^0.17.0", "p-retry": "^8.0.0" } }, "sha512-pWEkmqVyD2CbGGG9KsTQgufWIYRzMsZVWyLY4d3lI2pUbuTlv0W0pvvmJybmKkIk3Tcn1T5vMBjT2DYuUiZbqQ=="], - "@argos-ci/browser": ["@argos-ci/browser@5.1.2", "", {}, "sha512-eQqtM54Vh83++Dac5+7ml4YXKW/KnUHRQWjTZ+VGeXfOJdjnZa4JjfVL6fnFG6CKrXjCK5dd9gcZRmbVpbt8rA=="], + "@argos-ci/browser": ["@argos-ci/browser@6.3.0", "", {}, "sha512-quTww/Yhm2jv+Y6q6dD4xEpm9Bb/SrZNFJaXgncAnCvW8jNnCrmDE2+8zAuGUh41Wkq1JQNDYKlBCO/RpY6A8Q=="], - "@argos-ci/core": ["@argos-ci/core@5.1.1", "", { "dependencies": { "@argos-ci/api-client": "0.16.0", "@argos-ci/util": "3.2.0", "convict": "^6.2.4", "debug": "^4.4.3", "fast-glob": "^3.3.3", "mime-types": "^3.0.2", "sharp": "^0.34.5", "tmp": "^0.2.5" } }, "sha512-RI5pYb5wmWUoXzWefNCjKSqGA3BroUB2ac9awlYV3McJjSAW8nCGJUt2Eds90Shkp+i4S6KbMLnLG56slhTCsg=="], + "@argos-ci/core": ["@argos-ci/core@6.4.0", "", { "dependencies": { "@argos-ci/api-client": "0.24.0", "@argos-ci/util": "4.0.0", "convict": "^6.2.5", "debug": "^4.4.3", "fast-glob": "^3.3.3", "mime-types": "^3.0.2", "p-retry": "^8.0.0", "sharp": "^0.35.2", "tmp": "^0.2.7" } }, "sha512-YUySBUbjHpI8GZKe96n4VzgPPXl90hjw/GCHLQ3U6xbbIEZczCBCHeHB/MDjyXCHyk+9T7FUJSE0ddWnpDRI8Q=="], - "@argos-ci/playwright": ["@argos-ci/playwright@6.4.2", "", { "dependencies": { "@argos-ci/browser": "5.1.2", "@argos-ci/core": "5.1.1", "@argos-ci/util": "3.2.0", "chalk": "^5.6.2", "debug": "^4.4.3" } }, "sha512-0HE4rmgx2/znlMUi3z0Bp8OD7u7zNls9SlljL+qTVoWQRW22sDvpmRdZpjzb4pEjoe6onqPTDOqm5/f8QYHMwg=="], + "@argos-ci/playwright": ["@argos-ci/playwright@7.2.0", "", { "dependencies": { "@argos-ci/browser": "6.3.0", "@argos-ci/core": "6.4.0", "@argos-ci/util": "4.0.0", "chalk": "^5.6.2", "debug": "^4.4.3" } }, "sha512-YkZswuc+hZLC8sUUp6QPzZJSfZsxnbt+sfyZr5DWSHuz5g2XRxJ8oEsXJwFraDMYku5jwfAtqXvza1J3WUo6qA=="], - "@argos-ci/util": ["@argos-ci/util@3.2.0", "", {}, "sha512-/Bn0qCH8VsdPv5WB9TUEf3oTgsIqsTMUEjPVDopHLzKK+j7nQYGOF3MnN7VhBow82BXeStBfJCS3UiZ6cgxRlw=="], + "@argos-ci/util": ["@argos-ci/util@4.0.0", "", {}, "sha512-2yrJr81OVpa2TkvSjzGZlGv6SVqZcxF62AVk6M79aZ7nXkwWFg3tjA8awbFwn2mODI67gkP5FarAD29bzx3P3w=="], "@ast-grep/napi": ["@ast-grep/napi@0.40.5", "", { "optionalDependencies": { "@ast-grep/napi-darwin-arm64": "0.40.5", "@ast-grep/napi-darwin-x64": "0.40.5", "@ast-grep/napi-linux-arm64-gnu": "0.40.5", "@ast-grep/napi-linux-arm64-musl": "0.40.5", "@ast-grep/napi-linux-x64-gnu": "0.40.5", "@ast-grep/napi-linux-x64-musl": "0.40.5", "@ast-grep/napi-win32-arm64-msvc": "0.40.5", "@ast-grep/napi-win32-ia32-msvc": "0.40.5", "@ast-grep/napi-win32-x64-msvc": "0.40.5" } }, "sha512-hJA62OeBKUQT68DD2gDyhOqJxZxycqg8wLxbqjgqSzYttCMSDL9tiAQ9abgekBYNHudbJosm9sWOEbmCDfpX2A=="], @@ -812,6 +812,8 @@ "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.2.4" }, "os": "darwin", "cpu": "x64" }, "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw=="], + "@img/sharp-freebsd-wasm32": ["@img/sharp-freebsd-wasm32@0.35.3", "", { "dependencies": { "@img/sharp-wasm32": "0.35.3" }, "os": "freebsd" }, "sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg=="], + "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g=="], "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg=="], @@ -850,6 +852,8 @@ "@img/sharp-wasm32": ["@img/sharp-wasm32@0.34.5", "", { "dependencies": { "@emnapi/runtime": "^1.7.0" }, "cpu": "none" }, "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw=="], + "@img/sharp-webcontainers-wasm32": ["@img/sharp-webcontainers-wasm32@0.35.3", "", { "dependencies": { "@img/sharp-wasm32": "0.35.3" }, "cpu": "none" }, "sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q=="], + "@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.34.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g=="], "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.34.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg=="], @@ -1026,7 +1030,7 @@ "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], - "@playwright/test": ["@playwright/test@1.58.2", "", { "dependencies": { "playwright": "1.58.2" }, "bin": { "playwright": "cli.js" } }, "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA=="], + "@playwright/test": ["@playwright/test@1.61.1", "", { "dependencies": { "playwright": "1.61.1" }, "bin": { "playwright": "cli.js" } }, "sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig=="], "@poppinss/colors": ["@poppinss/colors@4.1.5", "", { "dependencies": { "kleur": "^4.1.5" } }, "sha512-FvdDqtcRCtz6hThExcFOgW0cWX+xwSMWcRuQe5ZEb2m7cVQOAVZOIMt+/v9RxGiD9/OY16qJBXK4CVKWAPalBw=="], @@ -2024,7 +2028,7 @@ "convert-hrtime": ["convert-hrtime@3.0.0", "", {}, "sha512-7V+KqSvMiHp8yWDuwfww06XleMWVVB9b9tURBx+G7UTADuo5hYPuowKloz4OzOqbPezxgo+fdQ1522WzPG4OeA=="], - "convict": ["convict@6.2.4", "", { "dependencies": { "lodash.clonedeep": "^4.5.0", "yargs-parser": "^20.2.7" } }, "sha512-qN60BAwdMVdofckX7AlohVJ2x9UvjTNoKVXCL2LxFk1l7757EJqf1nySdMkPQer0bt8kQ5lQiyZ9/2NvrFBuwQ=="], + "convict": ["convict@6.2.5", "", { "dependencies": { "lodash.clonedeep": "^4.5.0", "yargs-parser": "^20.2.7" } }, "sha512-JtXpxqDqJ8P0UwEHwhxLzCIXQy97vlYBZR222Sbzb1q1Erex9ASrztJ29SyhWFQjod1AeFBaPzEEC8YvtZMIYg=="], "cookie": ["cookie@1.0.2", "", {}, "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA=="], @@ -2908,11 +2912,11 @@ "oniguruma-to-es": ["oniguruma-to-es@4.3.4", "", { "dependencies": { "oniguruma-parser": "^0.12.1", "regex": "^6.0.1", "regex-recursion": "^6.0.2" } }, "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA=="], - "openapi-fetch": ["openapi-fetch@0.15.2", "", { "dependencies": { "openapi-typescript-helpers": "^0.0.15" } }, "sha512-rdYTzUmSsJevmNqg7fwUVGuKc2Gfb9h6ph74EVPkPfIGJaZTfqdIbJahtbJ3qg1LKinln30hqZniLnKpH0RJBg=="], + "openapi-fetch": ["openapi-fetch@0.17.0", "", { "dependencies": { "openapi-typescript-helpers": "^0.1.0" } }, "sha512-PsbZR1wAPcG91eEthKhN+Zn92FMHxv+/faECIwjXdxfTODGSGegYv0sc1Olz+HYPvKOuoXfp+0pA2XVt2cI0Ig=="], "openapi-types": ["openapi-types@12.1.3", "", {}, "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw=="], - "openapi-typescript-helpers": ["openapi-typescript-helpers@0.0.15", "", {}, "sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw=="], + "openapi-typescript-helpers": ["openapi-typescript-helpers@0.1.0", "", {}, "sha512-OKTGPthhivLw/fHz6c3OPtg72vi86qaMlqbJuVJ23qOvQ+53uw1n7HdmkJFibloF7QEjDrDkzJiOJuockM/ljw=="], "os-paths": ["os-paths@4.4.0", "", {}, "sha512-wrAwOeXp1RRMFfQY8Sy7VaGVmPocaLwSFOYCGKSyo8qmJ+/yaafCl5BCA1IQZWqFSRBrKDYFeR9d/VyQzfH/jg=="], @@ -3322,7 +3326,7 @@ "tldts-core": ["tldts-core@7.0.30", "", {}, "sha512-uiHN8PIB1VmWyS98eZYja4xzlYqeFZVjb4OuYlJQnZAuJhMw4PbKQOKgHKhBdJR3FE/t5mUQ1Kd80++B+qhD1Q=="], - "tmp": ["tmp@0.2.5", "", {}, "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow=="], + "tmp": ["tmp@0.2.7", "", {}, "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw=="], "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], @@ -3538,6 +3542,8 @@ "@argos-ci/core/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], + "@argos-ci/core/sharp": ["sharp@0.35.3", "", { "dependencies": { "@img/colour": "^1.1.0", "detect-libc": "^2.1.2", "semver": "^7.8.5" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.35.3", "@img/sharp-darwin-x64": "0.35.3", "@img/sharp-freebsd-wasm32": "0.35.3", "@img/sharp-libvips-darwin-arm64": "1.3.2", "@img/sharp-libvips-darwin-x64": "1.3.2", "@img/sharp-libvips-linux-arm": "1.3.2", "@img/sharp-libvips-linux-arm64": "1.3.2", "@img/sharp-libvips-linux-ppc64": "1.3.2", "@img/sharp-libvips-linux-riscv64": "1.3.2", "@img/sharp-libvips-linux-s390x": "1.3.2", "@img/sharp-libvips-linux-x64": "1.3.2", "@img/sharp-libvips-linuxmusl-arm64": "1.3.2", "@img/sharp-libvips-linuxmusl-x64": "1.3.2", "@img/sharp-linux-arm": "0.35.3", "@img/sharp-linux-arm64": "0.35.3", "@img/sharp-linux-ppc64": "0.35.3", "@img/sharp-linux-riscv64": "0.35.3", "@img/sharp-linux-s390x": "0.35.3", "@img/sharp-linux-x64": "0.35.3", "@img/sharp-linuxmusl-arm64": "0.35.3", "@img/sharp-linuxmusl-x64": "0.35.3", "@img/sharp-webcontainers-wasm32": "0.35.3", "@img/sharp-win32-arm64": "0.35.3", "@img/sharp-win32-ia32": "0.35.3", "@img/sharp-win32-x64": "0.35.3" }, "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q=="], + "@aws-crypto/crc32/@aws-sdk/types": ["@aws-sdk/types@3.734.0", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg=="], "@aws-crypto/crc32c/@aws-sdk/types": ["@aws-sdk/types@3.734.0", "", { "dependencies": { "@smithy/types": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg=="], @@ -3630,6 +3636,10 @@ "@hyperjump/json-schema/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], + "@img/sharp-freebsd-wasm32/@img/sharp-wasm32": ["@img/sharp-wasm32@0.35.3", "", { "dependencies": { "@emnapi/runtime": "^1.11.1" } }, "sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w=="], + + "@img/sharp-webcontainers-wasm32/@img/sharp-wasm32": ["@img/sharp-wasm32@0.35.3", "", { "dependencies": { "@emnapi/runtime": "^1.11.1" } }, "sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w=="], + "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], "@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], @@ -3682,7 +3692,7 @@ "@oxc-transform/binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" } }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="], - "@playwright/test/playwright": ["playwright@1.58.2", "", { "dependencies": { "playwright-core": "1.58.2" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A=="], + "@playwright/test/playwright": ["playwright@1.61.1", "", { "dependencies": { "playwright-core": "1.61.1" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ=="], "@poppinss/dumper/supports-color": ["supports-color@10.2.2", "", {}, "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g=="], @@ -4288,6 +4298,58 @@ "@argos-ci/core/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + "@argos-ci/core/sharp/@img/colour": ["@img/colour@1.1.0", "", {}, "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ=="], + + "@argos-ci/core/sharp/@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.3.2" }, "os": "darwin", "cpu": "arm64" }, "sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg=="], + + "@argos-ci/core/sharp/@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.3.2" }, "os": "darwin", "cpu": "x64" }, "sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w=="], + + "@argos-ci/core/sharp/@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.3.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg=="], + + "@argos-ci/core/sharp/@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.3.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw=="], + + "@argos-ci/core/sharp/@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.3.2", "", { "os": "linux", "cpu": "arm" }, "sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ=="], + + "@argos-ci/core/sharp/@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.3.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA=="], + + "@argos-ci/core/sharp/@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.3.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw=="], + + "@argos-ci/core/sharp/@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.3.2", "", { "os": "linux", "cpu": "none" }, "sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w=="], + + "@argos-ci/core/sharp/@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.3.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ=="], + + "@argos-ci/core/sharp/@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.3.2", "", { "os": "linux", "cpu": "x64" }, "sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w=="], + + "@argos-ci/core/sharp/@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.3.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw=="], + + "@argos-ci/core/sharp/@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.3.2", "", { "os": "linux", "cpu": "x64" }, "sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ=="], + + "@argos-ci/core/sharp/@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.3.2" }, "os": "linux", "cpu": "arm" }, "sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA=="], + + "@argos-ci/core/sharp/@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.3.2" }, "os": "linux", "cpu": "arm64" }, "sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ=="], + + "@argos-ci/core/sharp/@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.3.2" }, "os": "linux", "cpu": "ppc64" }, "sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA=="], + + "@argos-ci/core/sharp/@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.3.2" }, "os": "linux", "cpu": "none" }, "sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ=="], + + "@argos-ci/core/sharp/@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.3.2" }, "os": "linux", "cpu": "s390x" }, "sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw=="], + + "@argos-ci/core/sharp/@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.3.2" }, "os": "linux", "cpu": "x64" }, "sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA=="], + + "@argos-ci/core/sharp/@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.3.2" }, "os": "linux", "cpu": "arm64" }, "sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w=="], + + "@argos-ci/core/sharp/@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.35.3", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.3.2" }, "os": "linux", "cpu": "x64" }, "sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg=="], + + "@argos-ci/core/sharp/@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.35.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w=="], + + "@argos-ci/core/sharp/@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.35.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw=="], + + "@argos-ci/core/sharp/@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.35.3", "", { "os": "win32", "cpu": "x64" }, "sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA=="], + + "@argos-ci/core/sharp/detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + + "@argos-ci/core/sharp/semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], + "@aws-crypto/crc32/@aws-sdk/types/@smithy/types": ["@smithy/types@4.1.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw=="], "@aws-crypto/crc32c/@aws-sdk/types/@smithy/types": ["@smithy/types@4.1.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw=="], @@ -4332,6 +4394,10 @@ "@headlessui/react/@floating-ui/react/@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.7", "", { "dependencies": { "@floating-ui/dom": "^1.7.5" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg=="], + "@img/sharp-freebsd-wasm32/@img/sharp-wasm32/@emnapi/runtime": ["@emnapi/runtime@1.11.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA=="], + + "@img/sharp-webcontainers-wasm32/@img/sharp-wasm32/@emnapi/runtime": ["@emnapi/runtime@1.11.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA=="], + "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], @@ -4370,7 +4436,7 @@ "@playwright/test/playwright/fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="], - "@playwright/test/playwright/playwright-core": ["playwright-core@1.58.2", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg=="], + "@playwright/test/playwright/playwright-core": ["playwright-core@1.61.1", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg=="], "@radix-ui/react-arrow/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], diff --git a/packages/gitbook/e2e/customers.spec.ts b/packages/gitbook/e2e/customers.spec.ts index 422e99ee4..afd5410e0 100644 --- a/packages/gitbook/e2e/customers.spec.ts +++ b/packages/gitbook/e2e/customers.spec.ts @@ -65,11 +65,12 @@ const testCases: TestsCase[] = [ contentBaseURL: 'https://docs.gmgn.ai', tests: [{ name: 'Home', url: '/' }], }, - { - name: 'docs.portainer.io', - contentBaseURL: 'https://docs.portainer.io', - tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], - }, + // Removed, an AI widget, makes it flaky. + // { + // name: 'docs.portainer.io', + // contentBaseURL: 'https://docs.portainer.io', + // tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], + // }, { name: 'docs.chirptoken.io', contentBaseURL: 'https://docs.chirptoken.io', @@ -133,7 +134,7 @@ const testCases: TestsCase[] = [ { name: 'docs.tickettool.xyz', contentBaseURL: 'https://docs.tickettool.xyz', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'wiki.redmodding.org', @@ -167,11 +168,6 @@ const testCases: TestsCase[] = [ }, ], }, - { - name: 'sosovalue-white-paper.gitbook.io', - contentBaseURL: 'https://sosovalue-white-paper.gitbook.io', - tests: [{ name: 'Home', url: '/' }], - }, { name: 'chartschool.stockcharts.com', contentBaseURL: 'https://chartschool.stockcharts.com', @@ -180,18 +176,13 @@ const testCases: TestsCase[] = [ { name: 'docs.soniclabs.com', contentBaseURL: 'https://docs.soniclabs.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'docs.thousandeyes.com', contentBaseURL: 'https://docs.thousandeyes.com', tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, - { - name: 'docs.raydium.io', - contentBaseURL: 'https://docs.raydium.io', - tests: [{ name: 'Home', url: '/' }], - }, { name: 'docs.fluentbit.io', contentBaseURL: 'https://docs.fluentbit.io', @@ -214,17 +205,17 @@ const testCases: TestsCase[] = [ { name: 'unsloth.ai/docs', contentBaseURL: 'https://unsloth.ai', - tests: [{ name: 'Home', url: '/docs' }], + tests: [{ name: 'Home', url: '/docs', run: waitForCookiesDialog }], }, { name: 'mariadb.com/docs', contentBaseURL: 'https://mariadb.com', - tests: [{ name: 'Home', url: '/docs' }], + tests: [{ name: 'Home', url: '/docs', run: waitForCookiesDialog }], }, { name: 'docs.n8n.io', contentBaseURL: 'https://docs.n8n.io', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'docs.cherry-ai.com', @@ -234,17 +225,17 @@ const testCases: TestsCase[] = [ { name: 'library.zoom.com', contentBaseURL: 'https://library.zoom.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'help.verkada.com', contentBaseURL: 'https://help.verkada.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'docs.overleaf.com', contentBaseURL: 'https://docs.overleaf.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'wiki.tiltedphoques.com/tilted-online', @@ -259,27 +250,27 @@ const testCases: TestsCase[] = [ { name: 'kakaobusiness.gitbook.io/main', contentBaseURL: 'https://kakaobusiness.gitbook.io', - tests: [{ name: 'Home', url: '/main' }], + tests: [{ name: 'Home', url: '/main', run: waitForCookiesDialog }], }, { name: 'docs.maestro.dev', contentBaseURL: 'https://docs.maestro.dev', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'developers.oxylabs.io', contentBaseURL: 'https://developers.oxylabs.io', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'docs.parallels.com/landing', contentBaseURL: 'https://docs.parallels.com', - tests: [{ name: 'Home', url: '/landing' }], + tests: [{ name: 'Home', url: '/landing', run: waitForCookiesDialog }], }, { name: 'help.impact.com', contentBaseURL: 'https://help.impact.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'docs.9proxy.com', @@ -299,7 +290,7 @@ const testCases: TestsCase[] = [ { name: 'help.aikido.dev', contentBaseURL: 'https://help.aikido.dev', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'doc.demarche.numerique.gouv.fr', @@ -319,17 +310,17 @@ const testCases: TestsCase[] = [ { name: 'docs.triumpharcade.com', contentBaseURL: 'https://docs.triumpharcade.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'docs.nats.io', contentBaseURL: 'https://docs.nats.io', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'help.glpi-project.org', contentBaseURL: 'https://help.glpi-project.org', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'docs.waydro.id', @@ -349,38 +340,39 @@ const testCases: TestsCase[] = [ { name: 'docs.pinot.apache.org', contentBaseURL: 'https://docs.pinot.apache.org', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'docs.devolutions.net', contentBaseURL: 'https://docs.devolutions.net', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'guides.gresb.com', contentBaseURL: 'https://guides.gresb.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'docs.prestashop-project.org/welcome', contentBaseURL: 'https://docs.prestashop-project.org', - tests: [{ name: 'Home', url: '/welcome' }], + tests: [{ name: 'Home', url: '/welcome', run: waitForCookiesDialog }], }, { name: 'help.researchgate.net', contentBaseURL: 'https://help.researchgate.net', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'docs.verifone.com', contentBaseURL: 'https://docs.verifone.com', - tests: [{ name: 'Home', url: '/' }], - }, - { - name: 'docs.roboflow.com', - contentBaseURL: 'https://docs.roboflow.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, + // Deactivate it because of a custom Ask AI that causes flakiness. + // { + // name: 'docs.roboflow.com', + // contentBaseURL: 'https://docs.roboflow.com', + // tests: [{ name: 'Home', url: '/' }], + // }, { name: 'www.netexec.wiki', contentBaseURL: 'https://www.netexec.wiki', @@ -395,42 +387,43 @@ const testCases: TestsCase[] = [ name: 'gitbook.com/docs', contentBaseURL: 'https://gitbook.com', tests: [ - { name: 'Home', url: '/docs' }, + { name: 'Home', url: '/docs', run: waitForCookiesDialog }, { name: 'OpenAPI', url: '/docs/developers/gitbook-api/api-reference/docs-sites/site-ai-ask', + run: waitForCookiesDialog, }, ], }, { name: 'documentation.gravitee.io', contentBaseURL: 'https://documentation.gravitee.io', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'faq.wanttopay.net/wanttopay-app', contentBaseURL: 'https://faq.wanttopay.net', - tests: [{ name: 'Home', url: '/wanttopay-app' }], + tests: [{ name: 'Home', url: '/wanttopay-app', run: waitForCookiesDialog }], }, { name: 'guide.prismlive.com', contentBaseURL: 'https://guide.prismlive.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'docs.ionos.com/cloud', contentBaseURL: 'https://docs.ionos.com', - tests: [{ name: 'Home', url: '/cloud' }], + tests: [{ name: 'Home', url: '/cloud', run: waitForCookiesDialog }], }, { name: 'support.evite.com', contentBaseURL: 'https://support.evite.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'knowledge.illumina.com', contentBaseURL: 'https://knowledge.illumina.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'wiki.retrobat.org', @@ -440,7 +433,7 @@ const testCases: TestsCase[] = [ { name: 'wiki.polymaker.com', contentBaseURL: 'https://wiki.polymaker.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'docs.ducks-services.com', @@ -450,7 +443,7 @@ const testCases: TestsCase[] = [ { name: 'docs.hex-rays.com', contentBaseURL: 'https://docs.hex-rays.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'whitepaper.interlinklabs.ai', @@ -460,7 +453,7 @@ const testCases: TestsCase[] = [ { name: 'help.openloyalty.io', contentBaseURL: 'https://help.openloyalty.io', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'retrozia.gitbook.io/retrozia', @@ -470,17 +463,17 @@ const testCases: TestsCase[] = [ { name: 'helpcenter.channable.com', contentBaseURL: 'https://helpcenter.channable.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'developerdocs.instructure.com', contentBaseURL: 'https://developerdocs.instructure.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'legal.jagex.com', contentBaseURL: 'https://legal.jagex.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'manual.edgetx.org', @@ -490,17 +483,18 @@ const testCases: TestsCase[] = [ { name: 'docs.cortex.io', contentBaseURL: 'https://docs.cortex.io', - tests: [{ name: 'Home', url: '/' }], - }, - { - name: 'docs.mufy.ai', - contentBaseURL: 'https://docs.mufy.ai', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, + // Flaky because of the GIF + // { + // name: 'docs.mufy.ai', + // contentBaseURL: 'https://docs.mufy.ai', + // tests: [{ name: 'Home', url: '/' }], + // }, { name: 'docs.ndi.video/all', contentBaseURL: 'https://docs.ndi.video', - tests: [{ name: 'Home', url: '/all' }], + tests: [{ name: 'Home', url: '/all', run: waitForCookiesDialog }], }, { name: 'docs.sevenpens.com/drawtab', @@ -515,7 +509,7 @@ const testCases: TestsCase[] = [ { name: 'docs.holybro.com', contentBaseURL: 'https://docs.holybro.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'help.tokenpocket.pro/en', @@ -530,7 +524,7 @@ const testCases: TestsCase[] = [ { name: 'tools.osintnewsletter.com', contentBaseURL: 'https://tools.osintnewsletter.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'wiki.mmorealms.gg', @@ -540,7 +534,7 @@ const testCases: TestsCase[] = [ { name: 'docs.vectra.ai', contentBaseURL: 'https://docs.vectra.ai', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'docs.cipp.app', @@ -565,32 +559,32 @@ const testCases: TestsCase[] = [ { name: 'docs.patchmypc.com', contentBaseURL: 'https://docs.patchmypc.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'guide.cryosparc.com', contentBaseURL: 'https://guide.cryosparc.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'guides.stellaraio.com/stellar', contentBaseURL: 'https://guides.stellaraio.com', - tests: [{ name: 'Home', url: '/stellar' }], + tests: [{ name: 'Home', url: '/stellar', run: waitForCookiesDialog }], }, { name: 'docs.iyzico.com', contentBaseURL: 'https://docs.iyzico.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'help.wotnot.io', contentBaseURL: 'https://help.wotnot.io', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'docs.sportmonks.com/v3', contentBaseURL: 'https://docs.sportmonks.com', - tests: [{ name: 'Home', url: '/v3' }], + tests: [{ name: 'Home', url: '/v3', run: waitForCookiesDialog }], }, { name: 'docs.payments.thalescloud.io', @@ -600,12 +594,12 @@ const testCases: TestsCase[] = [ { name: 'doc.anytype.io/anytype-docs', contentBaseURL: 'https://doc.anytype.io', - tests: [{ name: 'Home', url: '/anytype-docs' }], + tests: [{ name: 'Home', url: '/anytype-docs', run: waitForCookiesDialog }], }, { name: 'help.blotato.com', contentBaseURL: 'https://help.blotato.com', - tests: [{ name: 'Home', url: '/' }], + tests: [{ name: 'Home', url: '/', run: waitForCookiesDialog }], }, { name: 'docs.cartographer3d.com', diff --git a/packages/gitbook/e2e/internal.spec.ts b/packages/gitbook/e2e/internal.spec.ts index 77a86956f..77ee57d9d 100644 --- a/packages/gitbook/e2e/internal.spec.ts +++ b/packages/gitbook/e2e/internal.spec.ts @@ -32,6 +32,7 @@ import { runTestCases, setTimeToMorning, waitForAIChatResponse, + waitForAdminToolbar, waitForCookiesDialog, waitForCoverImages, waitForNotFound, @@ -612,21 +613,19 @@ const testCases: TestsCase[] = [ name: 'Site with sections and section groups', url: '', }, - { - name: 'Section group dropdown', - url: '', - run: async (page) => { - await page.getByRole('button', { name: 'Test Section Group 1' }).hover(); - await expect(page.getByRole('link', { name: /Section B/ })).toBeVisible(); - }, - }, { name: 'Section group link', url: '', screenshot: false, run: async (page) => { - const sectionGroupDropdown = await page.getByText('Test Section Group 1'); - await sectionGroupDropdown.hover(); + const trigger = page.getByRole('button', { name: 'Test Section Group 1' }); + // Radix NavigationMenu opens the dropdown on a `pointermove`. A single + // synthetic hover can land before hydration and be lost, so re-hover + // until the dropdown content actually appears. + await expect(async () => { + await trigger.hover(); + await expect(page.getByText('Section B')).toBeVisible({ timeout: 1000 }); + }).toPass({ timeout: 15000 }); await page.getByText('Section B').click(); await page.waitForURL((url) => url.pathname.includes('/sections/sections-4')); }, @@ -656,7 +655,12 @@ const testCases: TestsCase[] = [ { name: 'Revision', url: '~/revisions/S55pwsEr5UVoroaOiWnP/blocks/headings', - run: waitForCookiesDialog, + run: async (page) => { + await waitForCookiesDialog(page); + // Viewing a past revision shows the admin toolbar; assert it is + // present (it is hidden from the screenshot as it animates open). + await waitForAdminToolbar(page); + }, }, { name: 'Invalid revision', diff --git a/packages/gitbook/e2e/util.ts b/packages/gitbook/e2e/util.ts index 9b170e78c..402f4aede 100644 --- a/packages/gitbook/e2e/util.ts +++ b/packages/gitbook/e2e/util.ts @@ -172,6 +172,19 @@ export async function waitForCookiesDialog(page: Page) { }); } +/** + * Wait for the GitBook admin toolbar to be present. + * + * The toolbar only renders when signed in to GitBook. It is hidden from + * screenshots (see `argosCSS`) because it auto-expands with an animation, so + * use this to assert it is rendered without capturing its flaky visual state. + */ +export async function waitForAdminToolbar(page: Page) { + await expect(page.getByTestId('admin-toolbar')).toBeVisible({ + timeout: 10_000, + }); +} + export async function waitForNotFound(_page: Page, response: Response | null) { expect(response).not.toBeNull(); expect(response?.status()).toBe(404); @@ -248,6 +261,19 @@ export function runTestCases(testCases: TestsCase[]) { ); } + // Reset the cross-space navigation state on every document load so the + // "Back to " shortcut never leaks between navigations/tests. It is + // detected client-side from this sessionStorage, and a stale value (e.g. + // after a retry or a cross-space redirect) makes it appear or not + // non-deterministically, causing flaky screenshots. + await page.addInitScript(() => { + try { + sessionStorage.removeItem('gitbook-space-navigation:last'); + sessionStorage.removeItem('gitbook-space-navigation:back'); + sessionStorage.removeItem('gitbook-space-navigation:from-picker'); + } catch {} + }); + // Set the header to disable the Vercel toolbar // But only on the main document as it'd cause CORS issues on other resources await page.route('**/*', async (route, request) => { @@ -263,7 +289,11 @@ export function runTestCases(testCases: TestsCase[]) { } }); - const response = await page.goto(url); + // Wait only for `domcontentloaded` rather than the default `load`: these + // are real customer sites whose third-party subresources can hang and + // never fire `load`, aborting the navigation. Argos stabilization (run in + // `beforeScreenshot`) still waits for images/fonts before capturing. + const response = await page.goto(url, { waitUntil: 'domcontentloaded' }); if (testEntry.run) { await testEntry.run(page, response); } @@ -283,6 +313,12 @@ export function runTestCases(testCases: TestsCase[]) { /* Hide Intercom */ .intercom-lightweight-app { display: none !important; + } + /* Hide the GitBook admin toolbar: it auto-expands with an + animation, so its state at capture time is non-deterministic. + Its presence is asserted separately via waitForAdminToolbar. */ + [data-testid="admin-toolbar"] { + display: none !important; } `, threshold: screenshotOptions?.threshold ?? undefined, diff --git a/packages/gitbook/package.json b/packages/gitbook/package.json index eb46bcf3e..37a97b527 100644 --- a/packages/gitbook/package.json +++ b/packages/gitbook/package.json @@ -93,8 +93,8 @@ "zustand": "^5.0.3" }, "devDependencies": { - "@argos-ci/playwright": "^6.4.2", - "@playwright/test": "^1.58.2", + "@argos-ci/playwright": "^7.2.0", + "@playwright/test": "^1.61.1", "@scalar/api-client-react": "catalog:", "@tailwindcss/postcss": "^4.1.11", "@types/js-cookie": "^3.0.6", diff --git a/packages/gitbook/src/components/AdminToolbar/Toolbar.tsx b/packages/gitbook/src/components/AdminToolbar/Toolbar.tsx index 8b62699a6..93f70d63a 100644 --- a/packages/gitbook/src/components/AdminToolbar/Toolbar.tsx +++ b/packages/gitbook/src/components/AdminToolbar/Toolbar.tsx @@ -105,7 +105,10 @@ export function Toolbar(props: ToolbarProps) { } return ( - + diff --git a/packages/gitbook/src/components/SpaceLayout/SpaceLayout.tsx b/packages/gitbook/src/components/SpaceLayout/SpaceLayout.tsx index ae3e69456..a516cba1a 100644 --- a/packages/gitbook/src/components/SpaceLayout/SpaceLayout.tsx +++ b/packages/gitbook/src/components/SpaceLayout/SpaceLayout.tsx @@ -141,7 +141,7 @@ export function SpaceLayout(props: SpaceLayoutProps) { 'lg:flex-row', 'lg:justify-center', CONTAINER_STYLE, - 'transition-[max-width] duration-300', + 'transition-[max-width] duration-300 motion-reduce:transition-none', !withTopHeader || variants.generic.length > 1 ? 'has-sidebar' diff --git a/packages/gitbook/tests/markdown.test.ts b/packages/gitbook/tests/markdown.test.ts index 0360e675f..d2d55b676 100644 --- a/packages/gitbook/tests/markdown.test.ts +++ b/packages/gitbook/tests/markdown.test.ts @@ -191,7 +191,7 @@ describe('markdown ask responses', () => { expect(response.headers.get('x-robots-tag')).toBe('noindex'); expect(text).toContain(ASK_QUESTION_HEADING); }, - { timeout: 30_000 } + { timeout: 60_000 } ); it(