Как скрывать скроллбары с помощью Chrome DevTools Protocol
Обзор
Данный рецепт работает только при использовании Chrome DevTools Protocol (CDP).
Читайте подробности в разделе «Как использовать CDP в Testplane»
Одна из причин падений тестов при тестировании верстки с помощью скриншотов — это появление скроллбара в браузере в момент снятия скриншота. Подробнее об этой проблеме и некоторых способах её решения, вы можете прочитать здесь. Особенно часто эта проблема возникает в тестах с мобильной эмуляцией.
В CDP есть специальный метод Emulation.setScrollbarsHidden, который позволяет скрыть скроллбар. Однако в puppeteer отсутствует обертка над этим методом. Поэтому мы воспользуемся методом CDPSession.send, чтобы выполнить команду Emulation.setScrollbarsHidden.
Пример: как отключить скроллбар с помощью CDP
Вот как это будет выглядеть:
it("should hide scrollbar", async function () {
// Получаем инстанс puppeteer'а
const puppeteer = await this.browser.getPuppeteer();
// Получаем первую открытую страницу (считаем, что она активная в данный момент)
const [page] = await puppeteer.pages();
// Создаем CDP-сессию
const client = await page.target().createCDPSession();
// Скрываем скроллбар
await client.send("Emulation.setScrollbarsHidden", { hidden: true });
await this.browser.url("https://yandex.ru");
});
Полезные ссылки
Читайте также наш рецепт «Как убрать скроллбары из скриншотов».
Там же вы узнаете про плагин hermione-hide-scrollbars, который реализован на основе метода Emulation.setScrollbarsHidden и который вы можете использовать, чтобы отключить скроллбары в CI для всех тестов в конкретных браузерах.