Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Перехватить запросы на внешние ресурсы? #782

Closed
AdelFattakhova opened this issue Aug 11, 2023 · 2 comments

Comments

@AdelFattakhova
Copy link

Столкнулись с тем, что иногда при локальном запуске тестов большинство тест-кейсов падает по таймауту во время исполнения хука beforeEach. Выяснили, что происходит это из-за порой долгой загрузки страницы, которая долгая из-за запросов в сторонние сервисы. Например, разного рода аналитика и реклама.

Есть ли какой-то способ перед началом тестов не ждать полной загрузки страницы, а только DOM, как параметр waitUntil в puppeteer и playwright? Пробовали в параметры браузеров ставить pageLoadStrategy: 'eager' и pageLoadStrategy: 'none' (не помогло):

browsers: {
    chrome: {
      ...
      desiredCapabilities: {
        pageLoadStrategy: 'eager',
        ...
      },
    },
}

Или есть ли способ перехватить запросы в сторонние сервисы ДО полной загрузки страницы и подменить ответ (и таким образом не ждать выполнения запросов)? В доке webdriverio нашлись только моки, которые для такого не предназначены (они работают после полной загрузки страницы), и Interception Service, который тоже не предоставляет нужного функционала.

@DudaGod
Copy link
Member

DudaGod commented Aug 12, 2023

Привет.

Столкнулись с тем, что иногда при локальном запуске тестов большинство тест-кейсов падает по таймауту во время исполнения хука beforeEach. Выяснили, что происходит это из-за порой долгой загрузки страницы, которая долгая из-за запросов в сторонние сервисы. Например, разного рода аналитика и реклама.

Сайты с аналитикой/рекламой/etc можно замокать и возвращать пустоту. Например вот так:

const mock = await this.browser.mock('YOUR_GLOB_MASK'); 
mock.respond('', {fetchResponse: false});

В качестве YOUR_GLOB_MASK можно подставлять любой сайт в виде строки (например https://metrika.yandex.ru) или указать маску вида - https://www.google.com/images/**/*.png, т.е. чтобы перехватить все png-шки с google.

Есть ли какой-то способ перед началом тестов не ждать полной загрузки страницы, а только DOM, как параметр waitUntil в puppeteer и playwright? Пробовали в параметры браузеров ставить pageLoadStrategy: 'eager' и pageLoadStrategy: 'none' (не помогло):

По идее вариант с pageLoadStrategy: eager должен работать. Возможно проблема в проверке выполняющейся после открытия урла. Нужен какой-то minimal reproducible example.

Или есть ли способ перехватить запросы в сторонние сервисы ДО полной загрузки страницы и подменить ответ (и таким образом не ждать выполнения запросов)? В доке webdriverio нашлись только моки, которые для такого не предназначены (они работают после полной загрузки страницы), и Interception Service, который тоже не предоставляет нужного функционала.

Моки работают в рантайме, а не после загрузки страницы. Возможно вы забыли явно выставить опцию fetchResponse: false, чтобы не осуществлялся реальный запрос.

@AdelFattakhova
Copy link
Author

да, пропустили fetchResponse: false, спасибо!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants