QAБудь-який рівень

Selenium

Selenium — відкритий набір інструментів автоматизації браузера на основі W3C WebDriver, стандарту, який вендори браузерів реалізують у власних драйверах. Сторінка починається з дванадцяти маршрутів зі сторінки «Наскрізне тестування», написаних на Selenium, — хто що забезпечує в кожному, — і з того одного запуску, який до набору магазину може додати лише Selenium: браузери, які клієнти справді встановлюють, включно з Safari на iPhone. Далі протокол і його драйвери, очікування, сесії й доріжка, яку задає один Mac, WebDriver BiDi, grid і його відчинені двері, пʼять змін під робочими наборами і де він не допомагає.

Поточна версія
4.51 · жовтень 2026
Браузер
Той, що в клієнтів
Одиниця ізоляції
Сесія — це браузер

Дванадцять маршрутів магазину в Selenium на одному екрані — і хто що забезпечує

Selenium робить менше, ніж два інші інструменти на цьому сайті, і робить так свідомо. Він керує браузером — і на цьому все. Тож корисне питання — хто робить решту. Нижче — дванадцять маршрутів зі сторінки «Наскрізне тестування», той самий інтернет-магазин, — так, як магазин написав би їх на Selenium. Четверта колонка каже як. Пʼята каже, хто це забезпечує: WebDriver — стандарт, який реалізує кожен вендор браузера; WebDriver BiDi — його новіший двосторонній канал; мова, якою написано тести; або тестове середовище.

#МаршрутЩо йому потрібно від інструментаУ SeleniumХто забезпечує
1Знайти «синій светр», відкрити SKU 30417, оплатити тестовою карткою, отримати номер замовленняВвести дані в поля картки, що живуть в iframe платіжного провайдера на іншому доменіswitchTo().frame() заходить у фрейм провайдера, а defaultContent() виходить із нього — драйвер працює на рівні браузера, тож домен фрейму не важить; номер замовлення — явне очікуванняWebDriver
2Зареєструватися, підтвердити пошту, увійти, перезавантажити — досі в акаунтіТой самий тест у Safari, який мають клієнти, — на Mac і на iPhoneВласний safaridriver від Apple керує випущеним Safari на macOS і Safari на iPhone, підʼєднаному до цього Mac, з platformName: 'ios' — рядок 2.3Драйвер Apple, через grid
3Скинути забутий пароль за посиланням із листаПрочитати тестову скриньку, якої браузер не бачитьВід Selenium нічого: HTTP-клієнт мови питає API скриньки, FluentWait опитує її, доки лист не прийде, а get() іде за посиланнямВаша мова
4Застосувати SPRING10, змінити кількість, оплатитиПорівняти екран із тим, що провайдера попросили списатиHTTP-клієнт читає списання з пісочниці; суму на сторінці читають заново після того, як кошик перерендерився, інакше це застарілий елемент (розділ 3)Ваша мова
5Оплатити карткою з 3-D Secure: перехід на перевірку банку й назадПіти з домену магазину й повернутися в ту саму сесіюНічого особливого: сесія йде за браузером між доменами, як людина, і її cookie повертаються разом із неюWebDriver
6Картку відхилено; оплатити ще раз іншою карткоюРівно одне замовлення після цьогоHTTP-клієнт рахує замовлення клієнта після другої оплатиВаша мова
7Спитати асистента замовлень «де моє замовлення» про щойно оформлене замовленняМодель асистента, відтворена із запису, — але модель викликає серверВідтворення задане в середовищі, як і в будь-якому інструменті; Selenium чекає на статус на екраніСередовище
8Почати повернення на 30-й день; етикетка для повернення приходить листом30-й день вікна повернення — і в браузері, і на серверіУ WebDriver немає годинника. Попередньо завантажений через BiDi скрипт фіксує Date до того, як запрацює код магазину, — у Chrome, Edge і Firefox, не в Safari; тестовий годинник сервера задають через його власний APIBiDi і середовище
9Склад підтверджує, що повернення прибуло; гроші повертаютьсяНадіслати вебхук складу, а потім чекати на листHTTP-клієнт надсилає вебхук; очікування опитує скриньку з тайм-аутом, написаним під неї, і ніколи не паузаВаша мова
10Змінити адресу доставки після замовлення, до відвантаженняПрочитати, що отримав складЗвичайні команди в браузері, потім HTTP-клієнт читає тестовий ендпоінт складуВаша мова
11Оформити замовлення як гість, потім створити акаунт зі сторінки підтвердженняПочати справді анонімноНова сесія — це новий браузер із чистим профілем, тож ніщо, залишене маршрутом 10, до нього не дістане, — ціною запуску браузераWebDriver
12Агент підтримки повертає гроші за пошкоджений товар у бек-офісіДруга особа, вже залогіненаДруга сесія. Агент входить через API; тест відкриває невелику сторінку на домені бек-офісу й додає cookie сесії — cookie для будь-якого іншого домену WebDriver не приймеWebDriver і ваша мова

Таблиця відповідає, чи може Selenium пройти маршрути магазину. Може, усі дванадцять. Друга половина цього екрана відповідає на питання, на яке може відповісти лише Selenium: чи працюють маршрути в браузерах, які клієнти справді встановили? Playwright запускає власні збірки — його не є Safari, — тому сторінка про Playwright лишає маршрут 2 у випущеному Safari людині з iPhone перед кожним релізом. Запуск нижче закриває цю прогалину. Це чотири маршрути в пʼяти браузерах на одному grid щоночі, записані як рішення магазину й пронумеровані, щоб наступні розділи могли посилатися на «рядок 2.3».

  1. 1.Що запускається

    1. Маршрути 1, 2, 5 і 11 — ті чотири, результат яких залежить від того, як сам браузер поводиться з , фреймами й іншими доменами. Решта вісім ідуть лише в Playwright.
    2. Щоночі й перед кожним релізом, після того як набір Playwright для мерджу зелений. Червона ніч ніколи не блокує мердж — вона відкриває тікет.
    3. У брендових Chrome, Edge і Firefox, які встановлюють клієнти, у Safari на macOS — і маршрут 2 ще й на iPhone.
  2. 2.Де він працює

    1. Один grid усередині мережі магазину. Маршрутизатор має імʼя користувача й пароль, і жоден його порт не досяжний з інтернету.
    2. Два Linux-вузли з Docker-образів проєкту, з Chrome, Edge і Firefox, по чотири сесії на кожному.
    3. Mac mini з одним слотом Safari, бо Safari дозволяє одну сесію водночас, і iPhone, підʼєднаний до нього, — довірений, розблокований, з увімкненою Remote Automation. iPhone ділить цей самий слот.
  3. 3.Як створюють сесію і як у ній чекають

    1. Нова сесія для кожного маршруту. Жодну сесію ніколи не ділять двоє.
    2. Жодного неявного очікування. Кожне очікування явне: 10 секунд, опитування кожні 250 мс і повідомлення, що називає умову.
    3. Елементи шукають спершу за data-testid, потім за коротким CSS-селектором. Жодного , скопійованого з інструментів браузера.
  4. 4.Версії — і коли один падає

    1. Selenium закріплено на точній версії й оновлюють окремою зміною. Драйвери підбирає Selenium Manager; Linux-вузли закріплюють browserVersion і пересувають його свідомо.
    2. Падіння зберігає скриншот і код сторінки, а в Chrome, Edge і Firefox — ще й журнал консолі через BiDi. Safari дає перші два й власний журнал драйвера.
    3. Червоний маршрут читають поруч із результатом Playwright для того самого маршруту. Зелений там і червоний тут означає браузер, а не магазин, і тікет називає версію браузера.

Протокол із трьома власниками — і один похід туди й назад на кожну команду

Розуміння Selenium починається з того, що це не одна програма. Ваш тест кличе привʼязку — клієнтську бібліотеку вашою мовою. Привʼязка надсилає кожну команду звичайним HTTP-запитом із : щоб знайти кнопку оплати — POST на /session/{id}/element з {"using": "css selector", "value": "[data-testid=pay]"}. Драйвер — програма, яку написав вендор браузера, — отримує його, змушує браузер це зробити й відповідає. Кожна команда — похід туди й назад, і нічого не повертається, якщо тест про це не спитав.

Середина цього ланцюжка — стандарт W3C: WebDriver став Рекомендацією 5 червня 2018 року, а його наступний рівень — робочий проєкт, востаннє оновлений 2 липня 2026 року. Тож ланцюжок має трьох власників. Тест належить вам. Привʼязки, grid і Selenium Manager — інструмент, що завантажує драйвери, — належать проєкту Selenium. Драйвери й браузери належать вендорам браузерів. Оскільки формат на дроті публічний, будь-який кінець можна замінити, і власна сторінка Apple каже саме це: тести можна писати на Python, Java, PHP, JavaScript і будь-якій іншій мові, бібліотека якої сумісна з протоколом W3C WebDriver.

Selenium — протокол із трьома власниками. Ваш тест кличе привʼязку від проєкту Selenium; привʼязка надсилає кожну команду HTTP-запитом із JSON драйверу, написаному вендором браузера, а той змушує браузер діяти й відповідає. Один запит — одна відповідь: без запиту нічого не повертається, тому чекати — робота тесту. Середина — стандарт W3C, тож будь-який кінець можна замінити. А оскільки драйвер належить вендорові — chromedriver, msedgedriver, geckodriver і safaridriver від Apple, що керує ще й Safari на iPhone, підʼєднаному до Mac, — браузер під тестом той, яким користуються клієнти, а не збірка, пропатчена для тестування. WebDriver BiDi додає зворотний канал для повідомлень консолі, мережевих запитів і помилок; станом на жовтень 2026 року його підтримують Chrome, Edge і Firefox, а Safari — жодної частини.

Те, що драйвер належить вендорові, — найважливіший факт. Playwright керує Firefox і WebKit через збірки, які пропатчив сам; драйвер WebDriver керує браузером таким, яким його випускає вендор. Таблиця показує, що це означає для кожного браузера.

БраузерДрайвер і хто його випускаєЯк його отриматиЩо варто знати
Chromechromedriver, GoogleSelenium Manager завантажує відповідний; з Chrome 115 драйвери публікують разом із Chrome for TestingБрендовий Chrome оновлюється сам — кожні два тижні з Chrome 153 у вересні 2026. Задайте browserVersion, і Selenium Manager натомість завантажить саме цю збірку Chrome for Testing
Edgemsedgedriver, MicrosoftSelenium ManagerТой самий рушій Chromium з браузером Microsoft навколо — вхід, політики, функції, які увімкнув корпоративний клієнт
Firefoxgeckodriver, MozillaSelenium ManagerБрендовий Firefox — той, яким Playwright керувати не може. Це також браузер, що першим перейшов із протоколу DevTools на WebDriver BiDi
Safari на macOSsafaridriver, AppleВстановлюється разом з операційною системою; вмикається один раз командою safaridriver --enableApple: одночасно може бути активним лише один екземпляр Safari, і до нього може бути підʼєднана лише одна сесія WebDriver. Один Mac — одна сесія Safari
Safari на iPhone та iPadТой самий safaridriver на Mac, до якого підʼєднано пристрійНа пристрої: Параметри → Safari → Додатково → Web Inspector і Remote Automation; у тесті: platformName: 'ios'З iOS 13 (2019). Пристрій має бути довіреним і розблокованим, а екранна клавіатура під час сесії прихована — введення симулюється, а не натискається

Очікування пишете ви: що WebDriver перевіряє один раз і чого не перевіряє ніколи

Люди, що прийшли з Playwright, очікують, що клік зачекає, доки клікати матиме сенс. Клік WebDriver цього не робить. Element Click у стандарті прокручує елемент у видиму область і перевіряє дві речі, один раз. Якщо елемент досі поза видимою областю, відповідь — element not interactable. Якщо щось інше його закриває, відповідь — element click intercepted. В обох випадках помилка повертається одразу; ніщо не повторюється. Навігація чекає лише, доки readyState документа стане «complete», а на застосунок, що рендериться після цього, — тобто майже будь-який сучасний магазин, — не чекає взагалі.

Тож маршрути магазину зустрічають помилки стандарту в передбачуваних місцях, і для кожної є одне виправлення, яке працює, і одне, яке її ховає.

ПомилкаЩо каже стандартДе її зустрічає магазинВиправлення
no such elementЕлемент не вдалося знайти на сторінці за заданими параметрами пошукуМаршрут 1: прочитати номер замовлення до того, як сторінка підтвердження відрендериласяЯвне очікування саме цього елемента. Не пауза й не неявне очікування
stale element referenceЕлемент більше не прикріплений до DOMМаршрут 4: суму знайдено до того, як SPRING10 перерендерив кошик, а прочитано післяЗнайти її знову всередині очікування. Тримати в page object локатори, а не знайдені елементи
element click interceptedЕлемент, що отримує клік, закриває той, на який просили клікнутиМаршрут 11: банер про cookie досі над «Створити акаунт»Дочекатися, доки банер зникне, або прийняти його в підготовці маршруту. Ніколи не клік через JavaScript — він клікає те, на що людина клікнути не змогла б
element not interactableЗ елементом не можна взаємодіяти ні вказівником, ні клавіатуроюМаршрут 5: «Підтвердити» банку, поки його панель 3-D Secure ще виїжджаєЧекати, доки на елемент можна клікнути: це перевіряє, що він показаний і ввімкнений
invalid cookie domainСпроба встановити cookie для іншого домену, ніж поточна сторінкаМаршрут 12: додати cookie сесії агента до того, як відкрито бек-офісСпершу відкрити невелику сторінку на цьому домені — документація радить сторінку 404
session not createdНову сесію створити не вдалосяБудь-який маршрут — уранці після того, як Chrome оновився сам, а драйвер на машині ніДати Selenium Manager підібрати драйвер і закріпити browserVersion там, де запуск має бути відтворюваним (рядок 4.1)

Selenium пропонує два механізми очікування, і безпечний лише один. Неявне очікування — налаштування на всю сесію: кожен пошук елемента повторюється до заданого часу, перш ніж упасти, а за замовчуванням це нуль. Явне очікування — цикл у тесті: він опитує названу умову — елемент видимий, на нього можна клікнути, текст змінився, — доки умова не справдиться або не спливе тайм-аут, а повідомлення про тайм-аут називає, чого чекали. Третій підхід, фіксована пауза, — узагалі не механізм. Це здогад, закороткий на завантаженій машині й змарнований на швидкій.

Приклад із документації Selenium: неявне очікування 10 секунд і явне 15 для елемента, що так і не зʼявляється. Явне очікування — цикл, що викликає пошук і спить пів секунди; коли задано неявне, кожен пошук сам шукає до 10 секунд. Тож пошуки блокуються з 0 до 10 і з 10,5 до 20,5 секунди, дедлайн минає посеред другого, а цикл помічає це, лише коли той повертається: очікування падає на 20,5 секунди, а не на 15. Коли неявне очікування нуль, те саме очікування падає рівно на 15,0 секунди або знаходить елемент, що зʼявився на 6,2 секунди, на опитуванні 6,5. Тому документація й каже ніколи не змішувати ці два механізми.

Друга звичка, що вирішує, чи добре старітиме набір, — як шукають елементи. By у Selenium — локатор у повному сенсі: рецепт, який розвʼязують щоразу, коли ним користуються. А те, що повертає findElement, — ні. Це посилання на один вузол, і коли сторінка перерендерюється, цього вузла вже немає, — застаріла сума маршруту 4. Тож тримає значення By і шукає на вимогу. Щодо того, який рецепт обрати, документація радить id там, де id унікальні й стабільні, потім добре написаний CSS-селектор, і попереджає, що XPath-селектори зазвичай не тестують на швидкодію вендори браузерів і вони бувають досить повільні. Магазин додає атрибут для тестів (рядок 3.3): шукайте елемент за тим, для чого він, а не за тим, де він стоїть.

Сесія — це браузер: ізоляція, паралельні запуски й доріжка, яку задає один Mac

У Selenium немає одиниці ізоляції, меншої за сесію, а сесія — це процес браузера зі свіжим профілем. Магазин відкриває нову для кожного маршруту (рядок 3.1). Тому маршрут 11 нічого не коштує: нова сесія не бачить того, що лишив маршрут 10. Кожен маршрут платить запуском браузера — близько двох секунд у Chrome на вузлах магазину, чотирьох у Safari, двадцяти на iPhone.

Тож друга особа — це другий браузер. Маршрут 12 відкриває його для агента, і збереженого стану сховища, з яким такий браузер можна запустити, немає. Зате є cookie. Агент входить через , тест відкриває невелику сторінку на домені бек-офісу й додає cookie сесії — і відтоді агент у системі. Порядок важить: cookie для домену, на якому браузер не перебуває, WebDriver не прийме. З BiDi storage.setCookie ставить cookie без цього обходу — у Chrome, Edge і Firefox.

Паралельний запуск тестів — теж не робота Selenium. Це робить раннер тестів — JUnit, TestNG, pytest із плагіном для паралельності, NUnit, — і кожен тест відкриває власну сесію на grid. Скільки їх іде водночас, вирішує grid через слоти: один на процесорне ядро для браузерів родини Chrome і Firefox на вузлі, а для Safari, каже документація, створюється лише один слот. Це одне речення і є формою ночі магазину.

Нічний запуск маршрутів 1, 2, 5 і 11 магазину в браузерах, які встановлюють клієнти. Сесія спершу запускає браузер: близько 2 секунд на Linux-вузлах, 4 у Safari, 20 на iPhone. Linux-вузли мають по чотири слоти, тож вісім сесій Chrome і Edge стартують одразу, а чотири сесії Firefox чекають у черзі grid, доки слоти не звільняться на 62-й і 72-й секундах; Linux готово на 154-й. Mac mini має один слот, бо Safari дозволяє одну сесію водночас, а iPhone ділить його: чотири маршрути в Safari, потім маршрут 2 на iPhone закінчуються на 396-й секунді. Ніч триває стільки, скільки Mac; другий Mac завершив би її на 238-й секунді.

WebDriver BiDi: канал, якого протоколу завжди бракувало, — і браузер, що ним не говорить

Класичний WebDriver — це запит і відповідь, тож браузер ніколи не може заговорити першим. Він не може сказати, що запит упав, що скрипт кинув помилку чи що консоль щось надрукувала. Роками обхідним шляхом був , яким добре говорять лише браузери родини Chrome. WebDriver BiDi — стандартна відповідь. Він додає до сесії , яким браузер надсилає події тоді, коли вони стаються, і додає команди, яких класичний протокол не мав. Документація Selenium описує його як протокол, створений проєктом Selenium разом із вендорами браузерів, і як кросбраузерну заміну Chrome DevTools Protocol. Це робочий проєкт W3C, востаннє оновлений 8 жовтня 2026 року, а тест вмикає його можливістю webSocketUrl.

МодульЩо він додаєДе магазин скористався б ним
logПовідомлення консолі й помилки JavaScript у момент, коли вони стаютьсяЗберігається з кожним падінням (рядок 4.2)
networkКожен запит видно, його можна перехопити, відповісти на нього чи зірватиЗаблокувати аналітику, карти й маркетинговий чат, як це робить рядок 1.3 у Playwright
scriptСкрипт, завантажений раніше за власні скрипти сторінки, у кожному фрейміМаршрут 8: Date, зафіксований на 30-му дні до того, як його прочитає код магазину
storageCookie читають і ставлять у будь-якому розділі, не відвідуючи сайтМаршрут 12 без обходу через сторінку 404
emulationМова, часовий пояс, геолокація й екран, перевизначені для сесіїЗафіксовані часовий пояс і мова, як рядок 1.2 у Playwright

Усі пʼять працюють у Chrome і Edge з версії 126 — emulation з 137 — і у Firefox. Саме це план мусить врахувати, бо на цьому перелік закінчується. За даними сумісності MDN на 15 жовтня 2026 року Safari не підтримує жодної частини WebDriver BiDi — запити на попередньо завантажені скрипти й команди для cookie відкриті у трекері WebKit. Браузер, через який передусім і варто тримати цей grid, — єдиний браузер на ньому, де нових можливостей немає. Усе на доріжці Safari користується класичним WebDriver: скриншоти, код сторінки й власний журнал драйвера.

В інших браузерах перехід уже стався. Mozilla оголосила застарілою свою підтримку протоколу DevTools з Firefox 129, у травні 2024 року закликавши переходити на BiDi, а Selenium прибрав підтримку DevTools для Firefox у версії 4.29 у лютому 2025 року.

Grid: той самий протокол із маршрутизатором попереду — і двері, відчинені за замовчуванням

Selenium Grid ставить маршрутизатор перед тим самим протоколом. У тесті змінюється одне — адреса, до якої він підʼєднується, а grid вирішує, яка машина запустить сесію. Він має шість частин, і з Grid 4 кожна може працювати окремим процесом.

ЧастинаЩо вона робитьУ нічному запуску магазину
Маршрутизатор (Router)Єдина точка входу. Запит на нову сесію йде в чергу; команда для наявної сесії — прямо на вузол, що її тримаєЗа іменем користувача й паролем, недосяжний з інтернету (рядок 2.1)
Черга нових сесій (New Session Queue)Тримає запити на нові сесії в порядку надходження й відхиляє той, що чекає довше за свій тайм-аутЧотири сесії Firefox чекають тут, доки Chrome і Edge звільнять слот
Розподільник (Distributor)Знає кожен вузол і його вільні слоти, бере перший запит, який може обслужити вільний слот, і створює сесію тамВідправляє кожен запит Safari на Mac, по одному
Мапа сесій (Session Map)Записує, який вузол запускає яку сесію, щоб маршрутизатор міг переслати кожну командуДо неї звертаються на кожній команді ночі
Вузол (Node)Машина з браузерами й драйверами, що пропонує слоти; вона лише виконує команди. Вона також може пересилати на інший ендпоінт WebDriver — Appium чи хмарного провайдераДва Linux-вузли по чотири слоти; Mac з одним (рядки 2.2, 2.3)
Шина подій (Event Bus)Переносить повідомлення між іншими частинами — вузол зареєструвався, сесія завершиласяТестам не видна; перший процес, який запускають у повністю розподіленому grid
Selenium Grid ставить одну адресу перед багатьма машинами. Перший запит сесії йде від маршрутизатора в чергу нових сесій, у порядку надходження; розподільник бере перший запит, який може обслужити вільний слот, створює сесію на цьому вузлі й записує її в мапу сесій. Кожна наступна команда йде на маршрутизатор, а він шукає сесію й пересилає команду прямо на вузол. Grid магазину має два Linux-вузли по чотири слоти й Mac mini з одним слотом Safari та iPhone. Маршрутизатор не має пароля, доки його не задати, бо проєкт розраховує на приватну мережу; у липні 2024 року Wiz описала SeleniumGreed — кампанію, що відкривала сесії на grid, залишених відкритими на порту 4444, і змушувала вузли запускати Python замість браузера.

Усі шість можуть працювати одним процесом (standalone), як хаб із вузлами або повністю розподілено, і проєкт публікує Docker-образи для кожного варіанта. Чого жоден із цих режимів не змінює — першого речення історії про безпеку.

Це речення належить самому Selenium: Selenium Grid за замовчуванням не має жодної автентифікації, бо завжди передбачалося, що ви поставите його за захищеною мережею. 25 липня 2024 року Wiz Research опублікувала, що буває, коли цього не зробили. Кампанія, яку там назвали SeleniumGreed, відкривала сесії на grid, відкритих в інтернет, і в параметрах Chrome цієї сесії задавала як бінарний файл браузера Python, а як його аргументи — скрипт. Вузол запускав Python замість Chrome, скрипт відкривав зворотну оболонку, і машина майнила криптовалюту. Wiz нарахувала понад 30 000 відкритих grid — половину на старій 3.141.59, половину новіших, переважно на типовому порту 4444 — і підтвердила, що прийом працює й на версії 4. Нічого не зламали у звичному сенсі. Grid запускає ту програму, яку просить його клієнт, — це його робота.

Пʼять змін під робочими наборами

Набір Selenium залежить від трьох сторін водночас: проєкту, драйверів і браузерів. Кожну з цих змін заздалегідь оголосили ті, хто її зробив, і кожна відділила набори, що доручили драйвери проєкту й закріплювали версії свідомо, від тих, що завантажували бінарні файли вручну.

ЗмінаЩо вона зламала чи виявилаЩо захистило набір
Selenium 4.0, 13 жовтня 2021: лише протокол W3C; старіший JSON Wire Protocol прибраноМожливості, не оформлені за стандартом, могли не дати сесії запуститися; усе специфічне для браузера потребує префікса вендора, як-от goog:chromeOptionsКласи Options браузера замість зібраних уручну словників можливостей
Chrome 115, 18 липня 2023: ChromeDriver переїжджає на ендпоінти Chrome for TestingСкрипти й менеджери драйверів, що завантажували зі старої адреси, не знаходили драйвера для нового Chrome; сторінка завантаження тепер починається з того, що для Chrome 115 і новіших треба дивитися панель доступності Chrome for TestingSelenium Manager, що входить до комплекту з 4.6 у листопаді 2022 і з 4.11, 31 липня 2023, ще й сам завантажує Chrome for Testing
Firefox 129, 2024, і Selenium 4.29, лютий 2025: протокол DevTools для Firefox оголошено застарілим, а потім прибрано із SeleniumКод, що діставався Firefox через класи DevTools у Selenium, перестав працювати; власний допис Selenium каже, що ця реалізація завжди була частковоюВисокорівневі API BiDi, що однаково працюють і у Firefox, і в Chrome
Chrome 132, 14 січня 2025: --headless=old прибрано з ChromeНабори на старому headless-режимі отримали помилку або новий режим і нові скриншоти; старий режим лишився тільки окремим бінарним файлом chrome-headless-shellВибір headless-режиму на імʼя в параметрах браузера — старого тепер як chrome-headless-shell — і базові скриншоти, які вважають належними до збірки браузера
Chrome 153, 8 вересня 2026: новий стабільний Chrome кожні два тижні замість чотирьохУдвічі більше оновлень браузера під кожним вузлом — і вдвічі більше ранків, коли незакріплена машина запускає браузер, якого ніхто не обиравSelenium Manager, що підбирає відповідний драйвер на кожному старті сесії, — і закріплений browserVersion там, де запуск має бути відтворюваним

Де він не допомагає і як порівнюється

Selenium відповідає на вужче питання, ніж колись. Для нового набору, який ніщо не штовхає в інший бік, Playwright дає більше за менші зусилля, і його сторінка це каже. Сказати це тут — і є те, що надає змісту випадкам, де Selenium виграє.

  • Він дає вам браузер — і нічого більше. Раннер, звіт, повтори, запис запуску, що впав, — команда обирає й підʼєднує кожне сама.
  • Очікування — це код, який пишете ви, і в успадкованому наборі його зазвичай написано неправильно.
  • Safari під автоматизацією починає з чистого аркуша, як приватне вікно, за скляною панеллю. Це близько до першого візиту, а не до клієнта з річною історією, а на iPhone екранна клавіатура не показується взагалі.
  • Нові можливості закінчуються там, де починається найсильніший аргумент цієї сторінки: Safari не говорить BiDi.
  • Він не тестує нативні застосунки — це робить Appium тим самим протоколом — і не є інструментом навантажувального тестування.

Selenium — правильний вибір, коли

  • Питання — у браузерах, які випускають для клієнтів: брендових Chrome, Edge і Firefox, Safari на Mac і на iPhone.
  • Тести пишуть на Ruby, PHP чи іншій мові, для якої жоден інший інструмент не має бібліотеки, або команда вже живе в стеку Selenium.
  • Система під тестом стоїть усередині мережі, до якої дістає лише ваш власний grid.

Беріть Playwright чи Cypress, коли

  • Набір новий — на JavaScript, Java, Python чи .NET — і ніщо не накладає обмежень щодо браузера.
  • Поточний біль — нестабільні очікування, а перевірки, що чекають самі, прибирають їхню найбільшу причину.
  • Ви хочете повний запис запуску, що впав, із пайплайну, не збираючи його самотужки.

Антипатерни, які варто назвати

  • Глобальне неявне очікування разом із явними — документація сама попереджає, що це дає непередбачуваний час очікування.
  • Абсолютний XPath, скопійований з інструментів браузера: ламається на наступному редизайні й нічого при цьому не пояснює.
  • Перевірки всередині page object. Документація: самі page object ніколи не мають робити перевірок чи тверджень.
  • Одна сесія на кілька тестів заради часу запуску: повертається рівно та залежність від порядку, яку сесія мала прибрати.
  • Grid на публічному порту. Див. SeleniumGreed.
  • Код, який написав агент для програмування на основі десятиліття старих дописів. Власний блог Selenium 29 вересня 2026 року перелічує, що такий агент видає: обʼєкт DesiredCapabilities, якого не існує вже багато років, абсолютний XPath, скопійований з DevTools, і sleep(5), — і додає, що описуватиме він Selenium 3.

Коли це застосовувати

Застосовуйте, коли

  • Перевірка маршрутів, що залежать від самого браузера, у брендових браузерах, які встановлюють клієнти, включно із Safari на iPhone.
  • Команди, чиї тести написано на Ruby, PHP чи іншій мові, яку обслуговує лише WebDriver.
  • Системи всередині приватної мережі, де власний grid — спосіб до них дістатися.
  • Довгоживучі набори, де відкритий стандарт вартує більше за зручність новішого API.

Уникайте, коли

  • Новий набір без обмежень щодо браузера чи мови, де сучасний раннер дає більше за менші зусилля.
  • Команди без бажання самотужки писати очікування, звітність та ізоляцію: протокол не дає нічого з цього.
  • Як привід поставити grid туди, де до нього дістане інтернет, або сховати повільний набір за більшою кількістю слотів.
  • Будь-де, де досі стоїть неявне очікування, — доки його не приберуть: жодна інша зміна не зробить набір передбачуваним.

Джерела й метод

На чому стоїть ця стаття

  • 23 джерела
  • 1 задокументований збій
  • Перевірено 19 жовтня 2026 р.

Дослідження з Claude. Пошук і звірку першоджерел зроблено з Claude (Anthropic). Відбір, текст і перевірку фактів — редакція Anatomy of IT Product.

Було корисно?

Поділіться з тим, хто працює над тією ж задачею.