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; тестовий годинник сервера задають через його власний API | BiDi і середовище |
| 9 | Склад підтверджує, що повернення прибуло; гроші повертаються | Надіслати вебхук складу, а потім чекати на лист | HTTP-клієнт надсилає вебхук; очікування опитує скриньку з тайм-аутом, написаним під неї, і ніколи не пауза | Ваша мова |
| 10 | Змінити адресу доставки після замовлення, до відвантаження | Прочитати, що отримав склад | Звичайні команди в браузері, потім HTTP-клієнт читає тестовий ендпоінт складу | Ваша мова |
| 11 | Оформити замовлення як гість, потім створити акаунт зі сторінки підтвердження | Почати справді анонімно | Нова сесія — це новий браузер із чистим профілем, тож ніщо, залишене маршрутом 10, до нього не дістане, — ціною запуску браузера | WebDriver |
| 12 | Агент підтримки повертає гроші за пошкоджений товар у бек-офісі | Друга особа, вже залогінена | Друга сесія. Агент входить через API; тест відкриває невелику сторінку на домені бек-офісу й додає cookie сесії — cookie для будь-якого іншого домену WebDriver не прийме | WebDriver і ваша мова |
Таблиця відповідає, чи може Selenium пройти маршрути магазину. Може, усі дванадцять. Друга половина цього екрана відповідає на питання, на яке може відповісти лише Selenium: чи працюють маршрути в браузерах, які клієнти справді встановили? Playwright запускає власні збірки — його WebKitрушій браузера SafariРушій браузера з відкритим кодом, на якому працює Safari. Сторінка, що працює в Chrome, може зламатися у WebKit, тому набори тестів проганяють браузерні маршрути й у ньому — Playwright для цього має власну збірку WebKit.Усі терміни не є Safari, — тому сторінка про Playwright лишає маршрут 2 у випущеному Safari людині з iPhone перед кожним релізом. Запуск нижче закриває цю прогалину. Це чотири маршрути в пʼяти браузерах на одному grid щоночі, записані як рішення магазину й пронумеровані, щоб наступні розділи могли посилатися на «рядок 2.3».
1.Що запускається
- Маршрути 1, 2, 5 і 11 — ті чотири, результат яких залежить від того, як сам браузер поводиться з , фреймами й іншими доменами. Решта вісім ідуть лише в Playwright.
- Щоночі й перед кожним релізом, після того як набір Playwright для мерджу зелений. Червона ніч ніколи не блокує мердж — вона відкриває тікет.
- У брендових Chrome, Edge і Firefox, які встановлюють клієнти, у Safari на macOS — і маршрут 2 ще й на iPhone.
2.Де він працює
- Один grid усередині мережі магазину. Маршрутизатор має імʼя користувача й пароль, і жоден його порт не досяжний з інтернету.
- Два Linux-вузли з Docker-образів проєкту, з Chrome, Edge і Firefox, по чотири сесії на кожному.
- Mac mini з одним слотом Safari, бо Safari дозволяє одну сесію водночас, і iPhone, підʼєднаний до нього, — довірений, розблокований, з увімкненою Remote Automation. iPhone ділить цей самий слот.
3.Як створюють сесію і як у ній чекають
- Нова сесія для кожного маршруту. Жодну сесію ніколи не ділять двоє.
- Жодного неявного очікування. Кожне очікування явне: 10 секунд, опитування кожні 250 мс і повідомлення, що називає умову.
- Елементи шукають спершу за
data-testid, потім за коротким CSS-селектором. Жодного XPathзапит до елементів за шляхомМова запитів, що вибирає частини XML- чи HTML-документа за шляхом крізь нього: цей елемент, усередині того, третій такого типу. У браузерному тесті довгий XPath записує, де елемент стоїть, а не чим він є, тож ламається, щойно змінюється розмітка.Усі терміни, скопійованого з інструментів браузера.
4.Версії — і коли один падає
- Selenium закріплено на точній версії й оновлюють окремою зміною. Драйвери підбирає Selenium Manager; Linux-вузли закріплюють
browserVersionі пересувають його свідомо. - Падіння зберігає скриншот і код сторінки, а в Chrome, Edge і Firefox — ще й журнал консолі через BiDi. Safari дає перші два й власний журнал драйвера.
- Червоний маршрут читають поруч із результатом Playwright для того самого маршруту. Зелений там і червоний тут означає браузер, а не магазин, і тікет називає версію браузера.
- Selenium закріплено на точній версії й оновлюють окремою зміною. Драйвери підбирає Selenium Manager; Linux-вузли закріплюють
Протокол із трьома власниками — і один похід туди й назад на кожну команду
Розуміння Selenium починається з того, що це не одна програма. Ваш тест кличе привʼязку — клієнтську бібліотеку вашою мовою. Привʼязка надсилає кожну команду звичайним HTTP-запитом із JSONJavaScript Object Notation — текстовий формат данихТекстовий формат для передавання даних: пари «ключ — значення», списки, числа й рядки. Він народився в JavaScript, але сьогодні його читає будь-яка мова — і саме тому ним відповідає більшість API, а не чимось потужнішим.Усі терміни: щоб знайти кнопку оплати — 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.
Те, що драйвер належить вендорові, — найважливіший факт. Playwright керує Firefox і WebKit через збірки, які пропатчив сам; драйвер WebDriver керує браузером таким, яким його випускає вендор. Таблиця показує, що це означає для кожного браузера.
| Браузер | Драйвер і хто його випускає | Як його отримати | Що варто знати |
|---|---|---|---|
| Chrome | chromedriver, Google | Selenium Manager завантажує відповідний; з Chrome 115 драйвери публікують разом із Chrome for Testing | Брендовий Chrome оновлюється сам — кожні два тижні з Chrome 153 у вересні 2026. Задайте browserVersion, і Selenium Manager натомість завантажить саме цю збірку Chrome for Testing |
| Edge | msedgedriver, Microsoft | Selenium Manager | Той самий рушій Chromium з браузером Microsoft навколо — вхід, політики, функції, які увімкнув корпоративний клієнт |
| Firefox | geckodriver, Mozilla | Selenium Manager | Брендовий Firefox — той, яким Playwright керувати не може. Це також браузер, що першим перейшов із протоколу DevTools на WebDriver BiDi |
| Safari на macOS | safaridriver, Apple | Встановлюється разом з операційною системою; вмикається один раз командою safaridriver --enable | Apple: одночасно може бути активним лише один екземпляр 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 пропонує два механізми очікування, і безпечний лише один. Неявне очікування — налаштування на всю сесію: кожен пошук елемента повторюється до заданого часу, перш ніж упасти, а за замовчуванням це нуль. Явне очікування — цикл у тесті: він опитує названу умову — елемент видимий, на нього можна клікнути, текст змінився, — доки умова не справдиться або не спливе тайм-аут, а повідомлення про тайм-аут називає, чого чекали. Третій підхід, фіксована пауза, — узагалі не механізм. Це здогад, закороткий на завантаженій машині й змарнований на швидкій.
Друга звичка, що вирішує, чи добре старітиме набір, — як шукають елементи. By у Selenium — локатор у повному сенсі: рецепт, який розвʼязують щоразу, коли ним користуються. А те, що повертає findElement, — ні. Це посилання на один вузол, і коли сторінка перерендерюється, цього вузла вже немає, — застаріла сума маршруту 4. Тож page objectклас на кожен екран у наборі тестівПатерн проєктування браузерних тестів: кожна сторінка чи компонент отримує клас, що знає, як знайти її елементи й виконати її дії, тож тести читаються як кроки, а редизайн виправляють в одному місці. Сам клас нічого не має перевіряти — перевірка результату лишається в тесті.Усі терміни тримає значення By і шукає на вимогу. Щодо того, який рецепт обрати, документація радить id там, де id унікальні й стабільні, потім добре написаний CSS-селектор, і попереджає, що XPath-селектори зазвичай не тестують на швидкодію вендори браузерів і вони бувають досить повільні. Магазин додає атрибут для тестів (рядок 3.3): шукайте елемент за тим, для чого він, а не за тим, де він стоїть.
Сесія — це браузер: ізоляція, паралельні запуски й доріжка, яку задає один Mac
У Selenium немає одиниці ізоляції, меншої за сесію, а сесія — це процес браузера зі свіжим профілем. Магазин відкриває нову для кожного маршруту (рядок 3.1). Тому маршрут 11 нічого не коштує: нова сесія не бачить того, що лишив маршрут 10. Кожен маршрут платить запуском браузера — близько двох секунд у Chrome на вузлах магазину, чотирьох у Safari, двадцяти на iPhone.
Тож друга особа — це другий браузер. Маршрут 12 відкриває його для агента, і збереженого стану сховища, з яким такий браузер можна запустити, немає. Зате є cookie. Агент входить через APIApplication Programming Interface — контракт між програмамиПравила, за якими одна програма звертається до іншої: які запити можна надіслати, у якому вигляді й що прийде у відповідь. Для того, хто звертається, це контракт — усе, що за ним, лишається чорною скринькою, і саме тому другий бік можна переписати, не зламавши вас.Докладніше в статті →Усі терміни, тест відкриває невелику сторінку на домені бек-офісу й додає cookie сесії — і відтоді агент у системі. Порядок важить: cookie для домену, на якому браузер не перебуває, WebDriver не прийме. З BiDi storage.setCookie ставить cookie без цього обходу — у Chrome, Edge і Firefox.
Паралельний запуск тестів — теж не робота Selenium. Це робить раннер тестів — JUnit, TestNG, pytest із плагіном для паралельності, NUnit, — і кожен тест відкриває власну сесію на grid. Скільки їх іде водночас, вирішує grid через слоти: один на процесорне ядро для браузерів родини Chrome і Firefox на вузлі, а для Safari, каже документація, створюється лише один слот. Це одне речення і є формою ночі магазину.
WebDriver BiDi: канал, якого протоколу завжди бракувало, — і браузер, що ним не говорить
Класичний WebDriver — це запит і відповідь, тож браузер ніколи не може заговорити першим. Він не може сказати, що запит упав, що скрипт кинув помилку чи що консоль щось надрукувала. Роками обхідним шляхом був Chrome DevTools Protocolяк інструменти керують ChromeПротокол, яким інструменти розробника Chrome оглядають браузер і керують ним; до нього може підʼєднатися будь-яка програма. Інструменти тестування, як-от Playwright і Puppeteer, керують через нього Chromium, тож бачать стан браузера напряму, а не крізь сторінку.Усі терміни, яким добре говорять лише браузери родини Chrome. WebDriver BiDi — стандартна відповідь. Він додає до сесії WebSocketпостійний двосторонній звʼязокЗʼєднання, що лишається відкритим в обидва боки: на відміну від HTTP, сервер може надіслати повідомлення сам, не чекаючи запиту. На ньому тримаються чати й живі стрічки — і більшість того, що виглядає як сторінка, що оновлюється сама.Усі терміни, яким браузер надсилає події тоді, коли вони стаються, і додає команди, яких класичний протокол не мав. Документація Selenium описує його як протокол, створений проєктом Selenium разом із вендорами браузерів, і як кросбраузерну заміну Chrome DevTools Protocol. Це робочий проєкт W3C, востаннє оновлений 8 жовтня 2026 року, а тест вмикає його можливістю webSocketUrl.
| Модуль | Що він додає | Де магазин скористався б ним |
|---|---|---|
log | Повідомлення консолі й помилки JavaScript у момент, коли вони стаються | Зберігається з кожним падінням (рядок 4.2) |
network | Кожен запит видно, його можна перехопити, відповісти на нього чи зірвати | Заблокувати аналітику, карти й маркетинговий чат, як це робить рядок 1.3 у Playwright |
script | Скрипт, завантажений раніше за власні скрипти сторінки, у кожному фреймі | Маршрут 8: Date, зафіксований на 30-му дні до того, як його прочитає код магазину |
storage | Cookie читають і ставлять у будь-якому розділі, не відвідуючи сайт | Маршрут 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 |
Усі шість можуть працювати одним процесом (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 Testing | Selenium 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 р.
Стандарт — і бік браузерів
протокол, його помилки, BiDi та Safari на Mac і iPhone — у розділах 1–3 і 5- СтандартWebDriver — Рекомендація W3C (відкривається в новій вкладці)W3C · 05.06.2018
- СтандартWebDriver — робочий проєкт (відкривається в новій вкладці)W3C · 02.07.2026
- СтандартWebDriver BiDi (відкривається в новій вкладці)W3C · 08.10.2026
- Документаціяscript module (відкривається в новій вкладці)MDN Web Docs
- ДокументаціяWebDriver (відкривається в новій вкладці)Apple Developer
- ДокументаціяEnable WebDriver on iOS and iPadOS (відкривається в новій вкладці)Apple Developer
- СтаттяBrian Burg — WebDriver is Coming to Safari in iOS 13 (відкривається в новій вкладці)WebKit · 08.07.2019
Інструмент — за його власною документацією
очікування, локатори, page object, сесії, cookie, grid і Selenium Manager у розділах 2–7- ДокументаціяWaiting Strategies (відкривається в новій вкладці)Selenium
- ДокументаціяTips on working with locators (відкривається в новій вкладці)Selenium
- ДокументаціяPage object models (відкривається в новій вкладці)Selenium
- ДокументаціяWorking with cookies (відкривається в новій вкладці)Selenium
- ДокументаціяSelenium Grid Components (відкривається в новій вкладці)Selenium
- ДокументаціяTOML configuration options (відкривається в новій вкладці)Selenium
- ДокументаціяSelenium Manager (відкривається в новій вкладці)Selenium
- ДокументаціяWebDriver BiDi (відкривається в новій вкладці)Selenium
Збої, на яких вчиться стаття
SeleniumGreed у розділі «Grid: той самий протокол із маршрутизатором попереду»- СтаттяAvigayil Mechtinger, Gili Tikochinski, Dor Laska — SeleniumGreed: Threat actors exploit exposed Selenium Grid services for Cryptomining (відкривається в новій вкладці)Wiz · 25.07.2024
- СтаттяDavid Burns — Protecting unsecured Selenium Grids against SeleniumGreed (відкривається в новій вкладці)Selenium · 31.07.2024
Зміни
пʼять рядків розділу «Пʼять змін під робочими наборами» і код від агента в розділі «Де він не допомагає»- ДокументаціяDownloads (відкривається в новій вкладці)ChromeDriver · Chrome for Developers
- СтаттяMathias Bynens, Peter Kvitek — Removing --headless=old from Chrome (відкривається в новій вкладці)Chrome for Developers · 23.10.2024
- СтаттяGet features faster with Chrome’s two-week release cycle (відкривається в новій вкладці)Chrome for Developers · 03.03.2026
- СтаттяDeprecating CDP Support in Firefox: Embracing the Future with WebDriver BiDi (відкривається в новій вкладці)Firefox Developer Experience · 28.05.2024
- СтаттяPuja Jagani — Removing ChromeDevTools Support For Firefox (відкривається в новій вкладці)Selenium · 03.02.2025
- СтаттяDavid Burns — Your Agent Learned Selenium From My Old Blog Posts (відкривається в новій вкладці)Selenium · 29.09.2026
Дослідження з Claude. Пошук і звірку першоджерел зроблено з Claude (Anthropic). Відбір, текст і перевірку фактів — редакція Anatomy of IT Product.
Було корисно?
Поділіться з тим, хто працює над тією ж задачею.