gendesign/tradein-mvp/browser
bot-backend 5c0fd78c1f
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 10s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Successful in 53s
fix(tradein/browser): цикл ожидания челленджа падал ровно на успешном исходе
Найдено при ревью ветки. `_wait_out_pow_challenge` опрашивал `page.content()`
без защиты, а челлендж перезагружает страницу САМ (`window.location =
location.href`). Вызов content(), попавший в момент этой перезагрузки, кидает
«Execution context was destroyed, most likely because of a navigation» — то
есть цикл ронял фетч ровно тогда, когда проверка успешно пройдена и мы
дождались того, ради чего ждали.

На моках дефект не воспроизводился: поддельная page навигацию не рвёт.

Добавлено:
  - `_content_during_navigation()` — content(), возвращающий None вместо
    исключения, если текст ошибки указывает на гонку с навигацией. Различаем
    по тексту, а не по типу: сервис не импортирует playwright, page приходит
    готовым. Всё прочее (закрытая страница, упавший браузер) пробрасывается.
  - Цикл трактует None как «ещё не устоялось, опроси снова».
  - Финальная догидрация тоже защищена: один короткий добор, затем внятная
    ошибка вместо падения на гонке.
  - Поддельная page в тестах умеет поднимать исключение из content();
    три теста на гонку — прохождение, вечная навигация, посторонняя ошибка.

Фальсификация: без правки два новых теста падают именно с
`Execution context was destroyed`. Полный сьют сервиса — 123 passed.

Refs #3045
2026-08-21 19:57:51 +03:00
..
Dockerfile fix(browser): pageError.location needs valid defaults, not just optional chaining (#918 follow-up) (#927) 2026-05-31 20:15:39 +00:00
server.py fix(tradein/browser): цикл ожидания челленджа падал ровно на успешном исходе 2026-08-21 19:57:51 +03:00
test_server.py fix(tradein/browser): четыре теста сайдкара догоняют код — тест отстал, не код сломан (#2722) (#2724) 2026-08-06 11:13:17 +00:00
test_server_fetch_json.py fix(tradein/browser): повтор evaluate на той же странице — гонка случается ПОСЛЕ load (#2676) (#2721) 2026-08-06 10:18:14 +00:00
test_server_no_proxy_refusal.py chore(tradein): удалить мёртвые mobileproxy env-переменные и rotate-ip (#2616 шаги 2-3) (#2650) 2026-08-05 09:35:54 +00:00
test_server_pacing.py feat(scrapers): live pacing-регулятор (GET/PUT /scraper/pacing) + data-quality coverage endpoint 2026-06-20 12:47:03 +03:00
test_server_pow_challenge.py fix(tradein/browser): цикл ожидания челленджа падал ровно на успешном исходе 2026-08-21 19:57:51 +03:00
test_server_proxy_override.py chore(tradein): удалить мёртвые mobileproxy env-переменные и rotate-ip (#2616 шаги 2-3) (#2650) 2026-08-05 09:35:54 +00:00
test_server_resource_block.py feat(browser): block font/media + per-provider page pacing — снизить proxy fan-out (#1812) 2026-06-19 21:28:09 +03:00
test_server_smoke.py fix(tradein/browser): четыре теста сайдкара догоняют код — тест отстал, не код сломан (#2722) (#2724) 2026-08-06 11:13:17 +00:00