





















@@ -14,18 +14,14 @@ TOKEN="browser-cdp-e2e-token"
1414CONTAINER_NAME="openclaw-browser-cdp-e2e-$$"
1515DOCKER_COMMAND_TIMEOUT="${OPENCLAW_BROWSER_CDP_SNAPSHOT_DOCKER_COMMAND_TIMEOUT:-900s}"
161617-docker_cmd() {
18- timeout "$DOCKER_COMMAND_TIMEOUT" "$@"
19-}
20-2117cleanup() {
22-docker_cmd docker rm -f "$CONTAINER_NAME" >/dev/null 2>&1 || true
18+docker_e2e_docker_cmd rm -f "$CONTAINER_NAME" >/dev/null 2>&1 || true
2319}
2420trap cleanup EXIT
25212622if [ "${OPENCLAW_SKIP_DOCKER_BUILD:-0}" = "1" ] || [ "$SKIP_BUILD" = "1" ]; then
2723echo "Reusing Docker image: $IMAGE_NAME"
28-docker_cmd docker image inspect "$IMAGE_NAME" >/dev/null
24+docker_e2e_docker_cmd image inspect "$IMAGE_NAME" >/dev/null
2925else
3026 docker_e2e_build_or_reuse "$BASE_IMAGE" browser-cdp-base "$ROOT_DIR/scripts/e2e/Dockerfile" "$ROOT_DIR" "" "0"
3127 build_dir="$(mktemp -d "${TMPDIR:-/tmp}/openclaw-browser-cdp-build.XXXXXX")"
@@ -45,7 +41,7 @@ OPENCLAW_TEST_STATE_SCRIPT_B64="$(docker_e2e_test_state_shell_b64 browser-cdp-sn
45414642echo "Starting browser CDP snapshot container..."
4743docker_e2e_harness_mount_args
48-docker_cmd docker run -d \
44+docker_e2e_docker_cmd run -d \
4945"${DOCKER_E2E_HARNESS_ARGS[@]}" \
5046 --name "$CONTAINER_NAME" \
5147 -e COREPACK_ENABLE_DOWNLOAD_PROMPT=0 \
@@ -95,26 +91,7 @@ chromium --headless=new --no-sandbox --disable-gpu --disable-dev-shm-usage \\
9591 --remote-debugging-port=$CDP_PORT \\
9692 --user-data-dir=/tmp/openclaw-browser-cdp/chrome \\
9793 about:blank >/tmp/browser-cdp-chromium.log 2>&1 &
98-node --input-type=module - <<'NODE' >/tmp/browser-cdp-fixture.log 2>&1 &
99-import http from 'node:http';
100-const html = \`<!doctype html>
101-<html>
102- <body>
103- <main>
104- <button>Save</button>
105- <a href=\"https://docs.openclaw.ai/browser-cdp-live\">Docs</a>
106- <div id=\"card\" onclick=\"window.__clicked = true\" style=\"cursor: pointer\">Clickable Card</div>
107- <iframe title=\"Child\" srcdoc='<button>Inside</button>'></iframe>
108- </main>
109- </body>
110-</html>\`;
111-http
112- .createServer((_req, res) => {
113- res.writeHead(200, { 'content-type': 'text/html; charset=utf-8' });
114- res.end(html);
115- })
116- .listen($FIXTURE_PORT, '127.0.0.1');
117-NODE
94+FIXTURE_PORT=$FIXTURE_PORT node scripts/e2e/lib/browser-cdp-snapshot/fixture-server.mjs >/tmp/browser-cdp-fixture.log 2>&1 &
11895openclaw_e2e_exec_gateway \"\$entry\" $PORT loopback /tmp/browser-cdp-gateway.log" >/dev/null
1199612097echo "Waiting for Chromium and Gateway..."
@@ -129,7 +106,7 @@ if ! docker_e2e_wait_container_bash "$CONTAINER_NAME" 180 0.5 "
129106fi
130107131108echo "Running browser CDP snapshot smoke..."
132-docker_cmd docker exec "$CONTAINER_NAME" bash -lc "
109+docker_e2e_docker_cmd exec "$CONTAINER_NAME" bash -lc "
133110set -euo pipefail
134111source /tmp/openclaw-test-state-env
135112source scripts/lib/openclaw-e2e-instance.sh
@@ -139,25 +116,7 @@ node \"\$entry\" browser \"\${base_args[@]}\" --browser-profile docker-cdp docto
139116grep -q 'OK live-snapshot' /tmp/browser-cdp-doctor.txt
140117node \"\$entry\" browser \"\${base_args[@]}\" --browser-profile docker-cdp open http://127.0.0.1:$FIXTURE_PORT/ >/tmp/browser-cdp-open.txt
141118node \"\$entry\" browser \"\${base_args[@]}\" --browser-profile docker-cdp snapshot --interactive --urls --out /tmp/browser-cdp-snapshot.txt >/tmp/browser-cdp-snapshot.out
142-node --input-type=module - <<'NODE'
143-import fs from 'node:fs';
144-const snapshot = fs.readFileSync('/tmp/browser-cdp-snapshot.txt', 'utf8');
145-for (const needle of [
146- 'button \"Save\"',
147- 'link \"Docs\"',
148- 'https://docs.openclaw.ai/browser-cdp-live',
149- 'generic \"Clickable Card\"',
150- 'cursor:pointer',
151- 'Iframe \"Child\"',
152- 'button \"Inside\"',
153-]) {
154- if (!snapshot.includes(needle)) {
155- console.error(snapshot);
156- throw new Error('missing snapshot needle: ' + needle);
157- }
158-}
159-console.log('ok');
160-NODE
119+node scripts/e2e/lib/browser-cdp-snapshot/assert-snapshot.mjs /tmp/browser-cdp-snapshot.txt
161120"
162121163122echo "Browser CDP snapshot Docker E2E passed."
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。