<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Selenide: лаконичные и стабильные UI тесты на Java on Selenide</title><link>https://ru.selenide.org/</link><description>Recent content in Selenide: лаконичные и стабильные UI тесты на Java on Selenide</description><generator>Hugo</generator><language>ru</language><managingEditor>andrei.solntsev@gmail.com (Andrei Solntsev)</managingEditor><webMaster>andrei.solntsev@gmail.com (Andrei Solntsev)</webMaster><lastBuildDate>Fri, 10 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://ru.selenide.org/rss.xml" rel="self" type="application/rss+xml"/><item><title>Вышла Selenide 7.16.0</title><link>https://ru.selenide.org/2026/04/10/selenide-7.16.0/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2026/04/10/selenide-7.16.0/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Кому пятничный релиз &lt;a href="https://github.com/selenide/selenide/milestone/239?closed=1"&gt;Selenide 7.16.0&lt;/a&gt;?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Целая цивилизация олдскульных ручных тестописцев погибнет сегодня вечером и больше никогда не возродится.
Я не хочу, чтобы это произошло, и мне жаль этих медленных парней, но, вероятно, так и будет.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/04/10/selenide-7.16.0/#selenide-mcp-server"&gt;Selenide MCP server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/04/10/selenide-7.16.0/#websockets-in-selenide-proxy"&gt;Запилили вебсокеты в селенидовском прокси&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/04/10/selenide-7.16.0/#fix-searching-element-by-label"&gt;Поиск элемента по label&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/04/10/selenide-7.16.0/#fix-cdp-download-with-multiple-tabs"&gt;CDP download в нескольких вкладках&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/04/10/selenide-7.16.0/#handling-alerts-in-firefox"&gt;Алерты в Firefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/04/10/selenide-7.16.0/#form-resubmission-confirmation-dialog-in-firefox"&gt;Выключили &amp;ldquo;form resubmission confirmation dialog&amp;rdquo; в Firefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/04/10/selenide-7.16.0/#ancestor-with-multiple-class-names"&gt;&lt;code&gt;$.ancestor()&lt;/code&gt; с несколькими классами&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/04/10/selenide-7.16.0/#video-recorder-for-custom-webdriver"&gt;Видео рекордер с кастомным вебдрайвером&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/04/10/selenide-7.16.0/#gaps-in-recorded-videos"&gt;Разрывы в записанных видео&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/04/10/selenide-7.16.0/#update-to-selenium-4.43.0"&gt;Обновили Selenium с 4.41.0 на 4.43.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h3 id="selenide-mcp-server"&gt;Selenide MCP server&lt;/h3&gt;
&lt;p&gt;Дожили!&lt;/p&gt;</description></item><item><title>Вышла Selenide 7.15.0</title><link>https://ru.selenide.org/2026/03/11/selenide-7.15.0/</link><pubDate>Wed, 11 Mar 2026 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2026/03/11/selenide-7.15.0/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;У нас вышел релиз &lt;a href="https://github.com/selenide/selenide/milestone/237?closed=1"&gt;Selenide 7.15.0&lt;/a&gt;!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Буквально несколько минут назад мы начали Операцию “Эпическая Ява”.&lt;br&gt;
Огромный новый релиз нашей Java-библиотеки.&lt;br&gt;
Никто не делает Java-библиотеки так, как мы. Никто.&lt;br&gt;
Мы исправили баги. Мы уничтожили медленный код. Полностью.&lt;br&gt;
А производительность? Потрясающая производительность. Лучшая из всех, что вы когда-либо видели.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/03/11/selenide-7.15.0/#skip-downloading-file-content"&gt;Скачивать файл без контента&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/03/11/selenide-7.15.0/#chrome-driver-in-remote-debugger-mode"&gt;Chrome driver в режиме &amp;ldquo;remote debugger&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/03/11/selenide-7.15.0/#take-screenshot-even-if-cdp-is-disabled"&gt;Скриншоты в Хроме, когда CDP выключен&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/03/11/selenide-7.15.0/#limit-execution-time-of-all-commands"&gt;Ограничили время выполнения всех команд&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/03/11/selenide-7.15.0/#fix-video-size-when-browser-size-has-been-changing"&gt;Размер видео, когда окно браузера менялось в течение теста&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/03/11/selenide-7.15.0/#or-condition-for-missing-elements"&gt;Условие &amp;ldquo;OR&amp;rdquo; для исчезнувших элементов&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/03/11/selenide-7.15.0/#update-to-selenium-4.41.0"&gt;Обновили Selenium с 4.40.0 на 4.41.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/03/11/selenide-7.15.0/#links"&gt;Ссылки&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h3 id="skip-downloading-file-content"&gt;Скачивать файл без контента&lt;/h3&gt;
&lt;p&gt;В селениде есть метод &lt;code&gt;$.download()&lt;/code&gt;, позволяющий из теста скачать файл. Обычно это стоит делать для того, чтобы
проверить название и содержимое скачанного файла. Или хотя бы формат (pdf/xls/csv/&amp;hellip;).&lt;/p&gt;</description></item><item><title>Вышла Selenide 7.14.0</title><link>https://ru.selenide.org/2026/01/21/selenide-7.14.0/</link><pubDate>Wed, 21 Jan 2026 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2026/01/21/selenide-7.14.0/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;У нас вышел релиз &lt;a href="https://github.com/selenide/selenide/milestone/236?closed=1"&gt;Selenide 7.14.0&lt;/a&gt;!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;У нас есть практически концепция релиза.&lt;/p&gt;
&lt;p&gt;Я думаю, что это будет очень выгодный релиз для Селенида, а также для вас самих.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/01/21/selenide-7.14.0/#download-files-with-space"&gt;Исправили скачивание файлов с пробелом в имени&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/01/21/selenide-7.14.0/#grid-behind-time-download"&gt;Исправили скачивание файлов с грида, который отстаёт на 1 секунду&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/01/21/selenide-7.14.0/#fail-fast-for-selenium-grid"&gt;increment timeout для грида&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/01/21/selenide-7.14.0/#forbid-removing-selenide-own-proxy-filters"&gt;Запретили удалять внутренние прокси-фильтры Селенида&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/01/21/selenide-7.14.0/#remove-all-request-or-response-filters-separately"&gt;Удалить все реквест-фильтры (или все респонс-фильтры)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/01/21/selenide-7.14.0/#mask-type-value"&gt;Добавили метод для маскировки значений&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/01/21/selenide-7.14.0/#export-video-recorder"&gt;Видео рекордер можно использовать без Селенида&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/01/21/selenide-7.14.0/#shorten-format-of-timeouts"&gt;Сократили формат таймаутов в ошибках и логах&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2026/01/21/selenide-7.14.0/#update-to-selenium-4.40.0"&gt;Обновили Selenium с 4.39.0 на 4.40.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h3 id="download-files-with-space"&gt;Исправили скачивание файлов с пробелом в имени&lt;/h3&gt;
&lt;p&gt;Ну это классика.&lt;/p&gt;</description></item><item><title>Вышла Selenide 7.13.0</title><link>https://ru.selenide.org/2025/12/14/selenide-7.13.0/</link><pubDate>Sun, 14 Dec 2025 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2025/12/14/selenide-7.13.0/</guid><description>&lt;p&gt;Привет, мерзляки!&lt;/p&gt;
&lt;p&gt;У нас вышел релиз &lt;a href="https://github.com/selenide/selenide/milestone/235?closed=1"&gt;Selenide 7.13.0&lt;/a&gt;, начинаем анбоксинг!&lt;/p&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/12/14/selenide-7.13.0/#improve-file-downloading-from-grid"&gt;Смачно забафали скачивание файлов из Selenium Grid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/12/14/selenide-7.13.0/#fail-fast-if-download-link-not-found"&gt;Скачивание файла не ждёт слишком долго, если ссылка не найдена&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/12/14/selenide-7.13.0/#mask-credentials-in-remote-url"&gt;Маскируем пароли в URL облака&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/12/14/selenide-7.13.0/#proxy-cleanup-filters"&gt;Добавили метод &lt;code&gt;proxy.cleanupFilters()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/12/14/selenide-7.13.0/#remove-response-size-watchdog"&gt;Удалили ворнинг о размере респонса&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/12/14/selenide-7.13.0/#add-prefix-to-selenide-own-filters"&gt;Добавили префикс селенидовским прокси фильтрам&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/12/14/selenide-7.13.0/#fix-frame-rate-for-video"&gt;Пофиксили рассинхрон видео&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/12/14/selenide-7.13.0/#update-to-selenium-4.39.0"&gt;Обновили Selenium с 4.38.0 на 4.39.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h3 id="improve-file-downloading-from-grid"&gt;Смачно забафали скачивание файлов из Selenium Grid&lt;/h3&gt;
&lt;p&gt;В селениде есть метод &lt;code&gt;$.download()&lt;/code&gt;, который скачивает в браузере и возвращает этот файл.
Полезно для тестирования всяких там отчётов, экселек, пдфок и тому подобного.&lt;/p&gt;</description></item><item><title>Вышла Selenide 7.12.0</title><link>https://ru.selenide.org/2025/10/29/selenide-7.12.0/</link><pubDate>Wed, 29 Oct 2025 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2025/10/29/selenide-7.12.0/</guid><description>&lt;p&gt;Остановись, мгновение!&lt;/p&gt;
&lt;p&gt;Вышел уже второй релиз в октябре &lt;a href="https://github.com/selenide/selenide/milestone/229?closed=1"&gt;Selenide 7.12.0&lt;/a&gt;, успеть бы обновиться!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Мне не передать словами весь спектр чувств…&lt;/p&gt;
&lt;p&gt;Когда ты каждый месяц пилишь чего-то там, релизишь, и вдруг видишь, что люди читают релиз ноутсы, обновляются —&lt;br&gt;
это ли не лучшая награда?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/10/29/selenide-7.12.0/#screenshots-with-devtools"&gt;Скриншоты с помощью DevTools/BiDi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/10/29/selenide-7.12.0/#by-label"&gt;Новый локатор &lt;code&gt;byLabel&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/10/29/selenide-7.12.0/#new-locators"&gt;Новые локаторы &lt;code&gt;byPlaceholder&lt;/code&gt;, &lt;code&gt;byTitle&lt;/code&gt;, &lt;code&gt;byAltText&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/10/29/selenide-7.12.0/#by-test-id"&gt;Новый локатор &lt;code&gt;byTestId&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/10/29/selenide-7.12.0/#mobile-emulation"&gt;Эмуляция мобильника&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/10/29/selenide-7.12.0/#browser-logs-with-bidi"&gt;Логи браузера с помощью DevTools/BiDi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/10/29/selenide-7.12.0/#shadow-host-as-context"&gt;Можно искать прямо в shadow host &lt;code&gt;byShadowCss&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/10/29/selenide-7.12.0/#unhighlight"&gt;Новый метод &lt;code&gt;$.unhighlight()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/10/29/selenide-7.12.0/#update-to-selenium-4.38.0"&gt;Обновили Selenium с 4.36.0 на 4.38.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h3 id="screenshots-with-devtools"&gt;Скриншоты с помощью DevTools/BiDi&lt;/h3&gt;
&lt;p&gt;Теперь Селенид для снятия скриншотов использует не стандартный вебдрайверовский метод, а DevTools (в хроме) или BiDi (в фаерфоксе).
Во время &lt;a href="https://ru.selenide.org/2025/08/20/selenide-7.10.0/#take-screenshots-using-bidi-or-devtools"&gt;работы над видео рекордером&lt;/a&gt; мы заметили, что этот способ&lt;/p&gt;</description></item><item><title>Вышла Selenide 7.11.1</title><link>https://ru.selenide.org/2025/10/04/selenide-7.11.1/</link><pubDate>Sat, 04 Oct 2025 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2025/10/04/selenide-7.11.1/</guid><description>&lt;p&gt;Добреньки, пановне да паночки!&lt;/p&gt;
&lt;p&gt;Я с благими вестями:
давеча нарелизили мы &lt;a href="https://github.com/selenide/selenide/milestone/230?closed=1"&gt;Selenide 7.11.1&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Вы уже пять с половиной недель пилите бессмысленный релиз, для которого настоящей мощной команде потребовалось бы менее недели.
Это нисколько не украшает проект.&lt;br&gt;
Знаете, вы выглядите неважно.&lt;br&gt;
Вы бумажный тигр?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Да, изменения больше внутренние да технические. Но кое-что сломаться можно и у вас. ;)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/10/04/selenide-7.11.1/#disable-smooth-scrolling-by-default"&gt;Выключаем плавную прокрутку&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/10/04/selenide-7.11.1/#fix-augmenter-usages"&gt;Исправили использование &lt;code&gt;Augmenter&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/10/04/selenide-7.11.1/#custom-screenshot-laboratory"&gt;Порефакторили &lt;code&gt;ScreenShotLaboratory&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/10/04/selenide-7.11.1/#remove-workaround-for-host-identifier"&gt;Удалили хак для &lt;code&gt;HostIdentifier&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/10/04/selenide-7.11.1/#publish-jars-without-signing"&gt;Публикуйте джарники без подписи&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/10/04/selenide-7.11.1/#update-to-selenium-4.36.0"&gt;Обновили Selenium с 4.35.0 на 4.36.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/10/04/selenide-7.11.1/#update-to-junit-6.0.0"&gt;Обновили JUnit с 5.x до 6.0.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h3 id="disable-smooth-scrolling-by-default"&gt;Выключаем плавную прокрутку&lt;/h3&gt;
&lt;p&gt;Иногда тесты могут &lt;a href="https://www.youtube.com/watch?v=zOiSo1hYjF8"&gt;флакать&lt;/a&gt; из-за того, что пытаются кликнуть какой-то элемент - а он движется.
Движется из-за того, что дизайном предусмотрена плавная прокрутка (&amp;ldquo;smooth scrolling&amp;rdquo;).&lt;/p&gt;</description></item><item><title>Вышла Selenide 7.10.0</title><link>https://ru.selenide.org/2025/08/20/selenide-7.10.0/</link><pubDate>Wed, 20 Aug 2025 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2025/08/20/selenide-7.10.0/</guid><description>&lt;p&gt;Head õhtut!&lt;/p&gt;
&lt;p&gt;20 августа у Эстонии второй день рождения - День Восстановления Независимости.&lt;/p&gt;
&lt;p&gt;По традиции, в честь праздника мы бахнули релизец &lt;a href="https://github.com/selenide/selenide/milestone/227?closed=1"&gt;Selenide 7.10.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Теперь это второй день рождения и у нашего видео рекордера! (его прям сильно переделали)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/08/20/selenide-7.10.0/#speed-up-video-recorder"&gt;Ускорили видео рекордер&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/08/20/selenide-7.10.0/#take-screenshots-using-bidi-or-devtools"&gt;Скриншоты для видео рекордера через BiDi или DevTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/08/20/selenide-7.10.0/#scroll-with-options"&gt;Скроллинг с опциями &lt;code&gt;$.scrollIntoView(options)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/08/20/selenide-7.10.0/#static-methods-for-containers-initialization"&gt;Статические методы для создания контейнеров&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/08/20/selenide-7.10.0/#deep-shadow-annotation"&gt;Аннотация &lt;code&gt;@DeepShadow&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/08/20/selenide-7.10.0/#validate-increment-timeout"&gt;Валидация &lt;code&gt;incrementTimeout&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/08/20/selenide-7.10.0/#update-to-selenium-4.35.0"&gt;Обновили Selenium с 4.34.0 на 4.35.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h3 id="speed-up-video-recorder"&gt;Ускорили видео рекордер&lt;/h3&gt;
&lt;p&gt;В первых версиях видео рекордера мы использовали библиотеку &lt;code&gt;org.bytedeco:javacv&lt;/code&gt;, чтобы сливать все снятые скриншоты в видео файл.&lt;/p&gt;</description></item><item><title>Вышла Selenide 7.9.4</title><link>https://ru.selenide.org/2025/07/05/selenide-7.9.4/</link><pubDate>Sat, 05 Jul 2025 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2025/07/05/selenide-7.9.4/</guid><description>&lt;p&gt;Приветули!&lt;/p&gt;
&lt;p&gt;Я понимаю, июль, жара, не до работы. Но обновиться на &lt;a href="https://github.com/selenide/selenide/milestone/226?closed=1"&gt;Selenide 7.9.4&lt;/a&gt; надо.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/07/05/selenide-7.9.4/#update-to-selenium-4.34.0"&gt;Обновили Selenium с 4.33.0 на 4.34.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/07/05/selenide-7.9.4/#fix-colors-in-video-recorder-in-firefox"&gt;Исправили цвета в видео рекордере в Firefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/07/05/selenide-7.9.4/#change-return-type-to-selenide-appium-element"&gt;Изменили тип элемента на &lt;code&gt;SelenideAppiumElement&lt;/code&gt; в мобильных методах&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/07/05/selenide-7.9.4/#replace-context-aware"&gt;Заменили &lt;code&gt;ContextAware&lt;/code&gt; на &lt;code&gt;SupportsContextSwitching&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/07/05/selenide-7.9.4/#news"&gt;Новости&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h3 id="update-to-selenium-4.34.0"&gt;Обновили Selenium с 4.33.0 на 4.34.0&lt;/h3&gt;
&lt;p&gt;И подняли версию CDP с v137 до v138.&lt;br&gt;
И заодно ещё обновили Appium с 9.4.0 до 9.5.0&lt;/p&gt;
&lt;p&gt;Чертовски невероятно!&lt;/p&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/pull/3059"&gt;PR 3059&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;h3 id="fix-colors-in-video-recorder-in-firefox"&gt;Исправили цвета в видео рекордере в Firefox&lt;/h3&gt;
&lt;p&gt;Недавно мы уже &lt;a href="https://ru.selenide.org/2025/05/08/selenide-7.9.2/#fix-color-on-video"&gt;исправляли цвета в видео рекордере&lt;/a&gt;, но оказалось, что исправили их во всех браузерах, кроме Firefox.&lt;/p&gt;</description></item><item><title>Вышла Selenide 7.9.3</title><link>https://ru.selenide.org/2025/05/27/selenide-7.9.3/</link><pubDate>Tue, 27 May 2025 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2025/05/27/selenide-7.9.3/</guid><description>&lt;p&gt;Даров!&lt;/p&gt;
&lt;p&gt;Пока не началось лето, вы успеваете ещё обновиться на &lt;a href="https://github.com/selenide/selenide/milestone/225?closed=1"&gt;Selenide 7.9.3&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/05/27/selenide-7.9.3/#update-to-selenium-4.33.0"&gt;Обновили Selenium с 4.32.0 на 4.33.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/05/27/selenide-7.9.3/#click-holding-left-keys"&gt;Клик с нажатыми левыми клавишами&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/05/27/selenide-7.9.3/#fix-bug-with-focus-in-set-value"&gt;Исправили баг с фокусом в &lt;code&gt;$.setValue&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/05/27/selenide-7.9.3/#fix-page-object-initialization-without-webdriver"&gt;Исправили ленивую инициализацию пэдж обжектов&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/05/27/selenide-7.9.3/#fix-condition-texts-in-any-order"&gt;Исправили проверку &amp;ldquo;texts in any order&amp;rdquo; в режиме &lt;code&gt;FULL_TEXT&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h3 id="update-to-selenium-4.33.0"&gt;Обновили Selenium с 4.32.0 на 4.33.0&lt;/h3&gt;
&lt;p&gt;И подняли версию CDP с v136 до v137. С ума сойти, как это круто!&lt;/p&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/pull/3034"&gt;PR 3034&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;h3 id="click-holding-left-keys"&gt;Клик с нажатыми левыми клавишами&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://ru.selenide.org/2025/04/19/selenide-7.9.0/#click-holding-keys"&gt;Недавно&lt;/a&gt; мы запилили клик через JS с нажатой кнопкой &lt;code&gt;ALT&lt;/code&gt;, &lt;code&gt;CTRL&lt;/code&gt;, &lt;code&gt;SHIFT&lt;/code&gt; или &lt;code&gt;META&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 7.9.2</title><link>https://ru.selenide.org/2025/05/08/selenide-7.9.2/</link><pubDate>Thu, 08 May 2025 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2025/05/08/selenide-7.9.2/</guid><description>&lt;p&gt;Приветушки!&lt;/p&gt;
&lt;p&gt;Из трубы пошёл белый дым, а всё потому, что конклав решил зарелизить &lt;a href="https://github.com/selenide/selenide/milestone/224?closed=1"&gt;Selenide 7.9.2&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/05/08/selenide-7.9.2/#fix-color-on-video"&gt;Исправили цвета на видео&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/05/08/selenide-7.9.2/#optimize-video-recorder"&gt;Оптимизировали видео рекордер&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/05/08/selenide-7.9.2/#attach-video-recordings"&gt;Аттач видео файлов&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/05/08/selenide-7.9.2/#update-to-selenium-4.32.0"&gt;Обновились на Selenium 4.32.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/05/08/selenide-7.9.2/#fix-class-cast-in-selenide-appium"&gt;Исправили ClassCastException&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/05/08/selenide-7.9.2/#improve-loops-performance"&gt;Слегка улучшили производительность циклов&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h3 id="fix-color-on-video"&gt;Исправили цвета на видео&lt;/h3&gt;
&lt;p&gt;В ноябре мы добавили в селенид &lt;a href="https://ru.selenide.org/2024/11/24/selenide-7.6.0/#video-recorder"&gt;видео рекордер&lt;/a&gt;.
Это офигенно полезная фича для &lt;a href="https://www.youtube.com/watch?v=4Kh5yppP8zY&amp;amp;ab_channel=DEVCLUB.EU"&gt;отладки тестов&lt;/a&gt;, но в сгенерированных видосиках обнаружился брак с цветами.&lt;/p&gt;
&lt;h4 id="до"&gt;До&lt;/h4&gt;
&lt;p&gt;Слева - оригинальная веб-страничка, справа - как она выглядела на видео:&lt;/p&gt;</description></item><item><title>Вышла Selenide 7.9.0</title><link>https://ru.selenide.org/2025/04/19/selenide-7.9.0/</link><pubDate>Sat, 19 Apr 2025 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2025/04/19/selenide-7.9.0/</guid><description>&lt;p&gt;Ну здорово, квадроберы!&lt;/p&gt;
&lt;p&gt;У нас тут вышла версия &lt;a href="https://github.com/selenide/selenide/milestone/222?closed=1"&gt;Selenide 7.9.0&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/04/19/selenide-7.9.0/#screenshots-as-attachment"&gt;Прикрепляем скриншоты в отчёт Jenkins и GitLab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/04/19/selenide-7.9.0/#click-holding-keys"&gt;Клик с нажатыми клавишами&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/04/19/selenide-7.9.0/#update-to-selenium-4.31.0"&gt;Обновились на Selenium 4.31.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/04/19/selenide-7.9.0/#check-for-empty-expected-value"&gt;Проверка на пустой текст/значение&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Сами понимаете, пошлины в 104% на импорт новых фич ¯¯_(ツ)_/¯¯&lt;/p&gt;
&lt;br&gt;
&lt;h3 id="screenshots-as-attachment"&gt;Прикрепляем скриншоты в отчёт Jenkins и GitLab&lt;/h3&gt;
&lt;p&gt;Когда вы запускаете тесты, Селенид автоматические &lt;a href="https://ru.selenide.org/documentation/screenshots.html"&gt;сохраняет скриншоты&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Путь к скриншоту добавляется в сообщение об ошибке. Это очень удобно при локальном запуске, но когда тесты запускаются
на Gitlab, GitHub Actions или Jenkins, надо ещё как-то эти файлы сохранить (архивировать, загрузить артефакты и т.п.)&lt;/p&gt;</description></item><item><title>Вышла Selenide 7.8.0</title><link>https://ru.selenide.org/2025/04/02/selenide-7.8.0/</link><pubDate>Wed, 02 Apr 2025 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2025/04/02/selenide-7.8.0/</guid><description>&lt;p&gt;Mi amore, mi amore!&lt;/p&gt;
&lt;p&gt;Сегодня вечером мой &lt;em&gt;экстра&lt;/em&gt; зарелизил &lt;a href="https://github.com/selenide/selenide/milestone/220?closed=1"&gt;Selenide 7.8.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Интересно, мой &lt;em&gt;интра&lt;/em&gt; завтра утром откроет этот текст и узнает ли про новые возможности в Selenide?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/04/02/selenide-7.8.0/#new-appium-functions"&gt;Новые функции для Appium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/04/02/selenide-7.8.0/#remove-proxy-listeners"&gt;Удалять фильтры из прокси&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/04/02/selenide-7.8.0/#shadow-host-in-page-objects"&gt;Аннотация &lt;code&gt;@ShadowHost&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/04/02/selenide-7.8.0/#improve-combined-attributes-in-reports"&gt;Комбинированные атрибуты в отчётах&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/04/02/selenide-7.8.0/#upgrade-to-selenium-4.30.0"&gt;Обновились на Selenium 4.30.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/04/02/selenide-7.8.0/#news"&gt;Новости&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h3 id="new-appium-functions"&gt;Новые функции для Appium&lt;/h3&gt;
&lt;p&gt;Для фанатов мобилок мы добавили три функции:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;активировать приложение,&lt;/li&gt;
&lt;li&gt;остановить приложение,&lt;/li&gt;
&lt;li&gt;перезапустить приложение.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Все эти методы можете найти в классе &lt;code&gt;SelenideAppium&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Вышла Selenide 7.7.0</title><link>https://ru.selenide.org/2025/01/07/selenide-7.7.0/</link><pubDate>Tue, 07 Jan 2025 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2025/01/07/selenide-7.7.0/</guid><description>&lt;p&gt;Всех с Новым Годом!&lt;/p&gt;
&lt;p&gt;Мы начали год с релиза &lt;a href="https://github.com/selenide/selenide/milestone/216?closed=1"&gt;Selenide 7.7.0&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/01/07/selenide-7.7.0/#moon"&gt;Поддержка Moon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/01/07/selenide-7.7.0/#scroll-with-parameters"&gt;Метод &lt;code&gt;$.scroll()&lt;/code&gt; с параметрами&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/01/07/selenide-7.7.0/#fix-selenide-on-java-22"&gt;Починили Селенид на Java 22&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/01/07/selenide-7.7.0/#update-proxy-mitm-certificate"&gt;MITM сертификат для Selenide proxy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h3 id="moon"&gt;Запилили поддержку Moon&lt;/h3&gt;
&lt;p&gt;Когда-то ребята из Aerokube сделали Selenoid - типа Selenium Grid на стероидах. Selenoid позволял запускать браузеры в
докере, снимать видео и быстро стал популярным. И в Selenide 4 года назад мы запили поддержку Selenoid.&lt;/p&gt;
&lt;p&gt;Потом ребята сделали Moon - нечто очень похожее, но в Kubernetes. И переключились на него.
А теперь, похоже, поддержка Selenoid окончательно &lt;a href="https://github.com/aerokube/selenoid"&gt;прекращена&lt;/a&gt;:&lt;/p&gt;</description></item><item><title>Итоги года</title><link>https://ru.selenide.org/2025/01/03/year-summary/</link><pubDate>Fri, 03 Jan 2025 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2025/01/03/year-summary/</guid><description>&lt;p&gt;С Новым Годом!&lt;/p&gt;
&lt;p&gt;Чёртов 2024 наконец закончился, самое время подвести итоги года.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/01/03/year-summary/#milestones"&gt;Вехи&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/01/03/year-summary/#committers"&gt;Эльфы&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/01/03/year-summary/#playwrightium"&gt;Маги&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/01/03/year-summary/#videos"&gt;Палантиры&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/01/03/year-summary/#companies"&gt;Племена&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2025/01/03/year-summary/#statistics"&gt;Люди&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="milestones"&gt;Вехи&lt;/h2&gt;
&lt;p&gt;За этот год мы выпустили 18 релизов (от 7.0.5 до 7.6.1) и запилили несколько важных фич:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/11/24/selenide-7.6.0/#video-recorder"&gt;Видео рекордер&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/02/27/selenide-7.2.0/#download-files-to-folder-in-selenium-grid"&gt;Скачивание файлов из Selenium Grid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/02/07/selenide-7.1.0/#download-files-with-cdp"&gt;Новый способ скачивания файлов через CDP&lt;/a&gt; - причём ещё и &lt;a href="https://ru.selenide.org/2024/02/27/selenide-7.2.0/#download-files-remotely-with-cdp"&gt;для Grid и Selenoid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/09/15/selenide-7.5.0/#new-configuration-for-every-browser"&gt;Открывать браузер с новой конфигурацией&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Таки &lt;a href="https://ru.selenide.org/2024/02/07/selenide-7.1.0/#if-with-timeout"&gt;надругались над Селенидом ¯¯&lt;em&gt;(ツ)&lt;/em&gt;/¯¯&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h2 id="committers"&gt;Эльфы&lt;/h2&gt;
&lt;p&gt;Весь этот год неустанно трудились и складывали подарки под ёлочку вот эти ребята.
Это крайне важно для проекта, несмотря на то, что их имена зачастую даже не видны в пресс-релизах, ибо многие из этих
изменений внутренние или слишком технические. А иногда даже вовсе и не мержатся.&lt;/p&gt;</description></item><item><title>Вышла Selenide 7.6.0</title><link>https://ru.selenide.org/2024/11/24/selenide-7.6.0/</link><pubDate>Sun, 24 Nov 2024 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2024/11/24/selenide-7.6.0/</guid><description>&lt;p&gt;Всем привет!&lt;br&gt;
Мы выпустили &lt;a href="https://github.com/selenide/selenide/milestone/214?closed=1"&gt;Selenide 7.6.0&lt;/a&gt; с чем-то вкусненьким и интересненьким.&lt;br&gt;
Йоу-йоу, погнали обновляться!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Видосики — вещь серьезная.&lt;br&gt;
Если есть видосики, значит они что-то отражают.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Что нового:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/11/24/selenide-7.6.0/#video-recorder"&gt;Добавили видео рекордер&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/11/24/selenide-7.6.0/#add-because-for-webdriver-conditions"&gt;&lt;code&gt;because&lt;/code&gt; для условий вебдрайвера&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/11/24/selenide-7.6.0/#scroll-into-center"&gt;метод &lt;code&gt;$.scrollIntoCenter()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/11/24/selenide-7.6.0/#support-special-space-characters"&gt;Поддержка специальных пробелов&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/11/24/selenide-7.6.0/#fix-in-new-browser-with-custom-config"&gt;Исправили &lt;code&gt;inNewBrowser&lt;/code&gt; с кастомной конфигурацией&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/11/24/selenide-7.6.0/#fix-appium-page-factory"&gt;Исправили аппиумскую пэдж фактори&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/11/24/selenide-7.6.0/#less-selenide-logs"&gt;Уменьшили количество селенидовских логов&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/11/24/selenide-7.6.0/#fix-screenshot-behaviour"&gt;Подправили поведение &lt;code&gt;Selenide.screenshot(filename)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/11/24/selenide-7.6.0/#jspecify"&gt;JSR305 -&amp;gt; JSpecify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/11/24/selenide-7.6.0/#simplify-custom-commands"&gt;Упростили кастомные команды&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/11/24/selenide-7.6.0/#update-dependencies"&gt;Обновили зависимости&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/11/24/selenide-7.6.0/#news"&gt;Новости&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/11/24/selenide-7.6.0/#statistics"&gt;Статистика&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h3 id="video-recorder"&gt;Добавили видео рекордер&lt;/h3&gt;
&lt;p&gt;А вот наконец-то!&lt;/p&gt;</description></item><item><title>Вышла Selenide 7.5.0</title><link>https://ru.selenide.org/2024/09/15/selenide-7.5.0/</link><pubDate>Sun, 15 Sep 2024 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2024/09/15/selenide-7.5.0/</guid><description>&lt;p&gt;Давно не виделись, котаны!&lt;/p&gt;
&lt;p&gt;Последний пресс-релиз я писал в апреле. С тех пор мы выпустили &lt;a href="https://github.com/selenide/selenide/milestones?state=closed"&gt;несколько релизов&lt;/a&gt;,
из которых самый объёмный - &lt;a href="https://github.com/selenide/selenide/milestone/208?closed=1"&gt;7.4.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Но теперь по-любому пора обновиться на &lt;a href="https://github.com/selenide/selenide/milestone/212?closed=1"&gt;Selenide 7.5.0&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/09/15/selenide-7.5.0/#new-configuration-for-every-browser"&gt;Открывать браузер с новой конфигурацией&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/09/15/selenide-7.5.0/#raise-bubbleable-events-from-selects"&gt;Починили события в селектах&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/09/15/selenide-7.5.0/#builder-methods-for-download-options"&gt;Укоротили API для скачивания файлов&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/09/15/selenide-7.5.0/#do-not-close-windows-when-downloading-file"&gt;Больше не закрываем окна при скачивании файлов&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/09/15/selenide-7.5.0/#do-not-catch-all-errors"&gt;Больше не ловим вообще все ошибки&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/09/15/selenide-7.5.0/#generate-error-details-during-error-construction"&gt;Починили кастомные обработчики ошибок&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/09/15/selenide-7.5.0/#update-dependencies"&gt;Обновили зависимости&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/09/15/selenide-7.5.0/#news"&gt;Новости&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/09/15/selenide-7.5.0/#statistics"&gt;Статистика&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h3 id="new-configuration-for-every-browser"&gt;Можно открывать браузер с новой конфигурацией&lt;/h3&gt;
&lt;p&gt;В Селениде есть один нюанс, неочевидный для начинающих: все настройки в классе &lt;code&gt;Configuration&lt;/code&gt; - статические.
Поменяешь настройку в одном тесте - она повлияет на остальные. Особенно это важно при запуске параллельных тестов.&lt;/p&gt;</description></item><item><title>Вышла Selenide 7.3.1</title><link>https://ru.selenide.org/2024/04/28/selenide-7.3.1/</link><pubDate>Sun, 28 Apr 2024 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2024/04/28/selenide-7.3.1/</guid><description>&lt;p&gt;Добро утро!&lt;/p&gt;
&lt;p&gt;Мы выпустили &lt;a href="https://github.com/selenide/selenide/milestone/205?closed=1"&gt;Selenide 7.3.1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Релиз небольшой, так что обновиться будет прям легко. Приступаем к распаковке:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/04/28/selenide-7.3.1/#mock-specific-content-type"&gt;Мокать ответ сервера заданного типа&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/04/28/selenide-7.3.1/#fix-clear-in-appium"&gt;Исправили метод &lt;code&gt;$.clear()&lt;/code&gt; в мобилках&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/04/28/selenide-7.3.1/#fix-error-message-for-invalid-link"&gt;Исправили сообщение при клике на некорректную ссылку&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/04/28/selenide-7.3.1/#disable-warning-about-stolen-password"&gt;Отключили предупреждение Хрома про сворованные пароли&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/04/28/selenide-7.3.1/#fix-cdp-download-for-custom-webdrivers"&gt;Исправили загрузку файлов через CDP для кастомных вебдрайверов&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/04/28/selenide-7.3.1/#deprecate-setting-hold-browser-open"&gt;Задеприкейтили настройку &lt;code&gt;holdBrowserOpen&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/04/28/selenide-7.3.1/#upgrade-to-selenium-4.20.0"&gt;Обновили Selenium с 4.19.1 до 4.20.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/04/28/selenide-7.3.1/#statistics"&gt;Статистика&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h3 id="mock-specific-content-type"&gt;Мокать ответ сервера заданного типа&lt;/h3&gt;
&lt;p&gt;Как вы помните, Селенид позволяет через прокси &lt;a href="https://ru.selenide.org/2022/10/07/selenide-6.9.0/#proxy-mock-response"&gt;подменить ответ сервера&lt;/a&gt;:&lt;/p&gt;</description></item><item><title>Вышла Selenide 7.2.0</title><link>https://ru.selenide.org/2024/02/27/selenide-7.2.0/</link><pubDate>Tue, 27 Feb 2024 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2024/02/27/selenide-7.2.0/</guid><description>&lt;p&gt;Чёртов февраль.&lt;/p&gt;
&lt;p&gt;Чтобы хоть как-то отвлечься, попробуйте обновиться на &lt;a href="https://github.com/selenide/selenide/milestone/201?closed=1"&gt;Selenide 7.2.0&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/02/27/selenide-7.2.0/#download-files-to-folder-in-selenium-grid"&gt;Скачиваем файлы из Selenium Grid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/02/27/selenide-7.2.0/#download-files-remotely-with-cdp"&gt;Скачиваем файлы удалённо с помощью CDP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/02/27/selenide-7.2.0/#mobile-elements-collections"&gt;Коллекции элементов для мобилок&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/02/27/selenide-7.2.0/#disable-chrome-warning-about-stolen-passwords"&gt;Выключили предупреждение хрома про покраденные пароли&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/02/27/selenide-7.2.0/#improve-error-message-for-download-without-href"&gt;Сообщение об ошибке, если нет href&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/02/27/selenide-7.2.0/#upgraded-to-selenium-4.18.1"&gt;Обновили Selenium с 4.17.0 на 4.18.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h3 id="download-files-to-folder-in-selenium-grid"&gt;Скачиваем файлы из Selenium Grid&lt;/h3&gt;
&lt;p&gt;Наконец-то!&lt;br&gt;
Теперь вы можете скачивать файлы методом &lt;code&gt;FOLDER&lt;/code&gt; и из Selenium Grid.&lt;br&gt;
До сих пор &lt;code&gt;FOLDER&lt;/code&gt; работал только при локальном запуске и в Selenoid.&lt;/p&gt;</description></item><item><title>Вышла Selenide 7.1.0</title><link>https://ru.selenide.org/2024/02/07/selenide-7.1.0/</link><pubDate>Wed, 07 Feb 2024 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2024/02/07/selenide-7.1.0/</guid><description>&lt;p&gt;Всем привет!
С Новым Годом, с новыми надеждами!&lt;/p&gt;
&lt;p&gt;Сегодня у нас в меню свеженький блестящий &lt;a href="https://github.com/selenide/selenide/milestone/199?closed=1"&gt;Selenide 7.1.0&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/02/07/selenide-7.1.0/#download-files-with-cdp"&gt;Скачивание файлов с помощью CDP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/02/07/selenide-7.1.0/#animated-condition"&gt;Условие &lt;code&gt;animated&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/02/07/selenide-7.1.0/#if-with-timeout"&gt;IF с таймаутом ¯¯_(ツ)_/¯¯&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/02/07/selenide-7.1.0/#force-click"&gt;Можно кликать задизейбленные элементы&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/02/07/selenide-7.1.0/#method-unfocus"&gt;Метод &lt;code&gt;$.unfocus()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/02/07/selenide-7.1.0/#avoid-page-load-timeout-in-mobile"&gt;Исправили page load timeout в мобилках&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/02/07/selenide-7.1.0/#can-add-same-proxy-filter-many-times"&gt;Можно добавлять прокси фильтр многократно&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/02/07/selenide-7.1.0/#update-dependencies"&gt;Обновили зависимости&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2024/02/07/selenide-7.1.0/#statistics"&gt;Статистика&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h3 id="download-files-with-cdp"&gt;Скачивание файлов с помощью CDP&lt;/h3&gt;
&lt;p&gt;Не прошло и три года, как в Selenium завезли CDP, а мы уже сделали с помощью него скачивание файлов!
Как вы знаете, скачивать файлы в селениде можно несколькими способами: &lt;code&gt;HTTPGET&lt;/code&gt;, &lt;code&gt;FOLDER&lt;/code&gt;, &lt;code&gt;PROXY&lt;/code&gt;.
Теперь к ним добавился ещё и &lt;code&gt;CDP&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Вышла Selenide 7.0.1</title><link>https://ru.selenide.org/2023/10/26/selenide-7.0.1/</link><pubDate>Thu, 26 Oct 2023 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2023/10/26/selenide-7.0.1/</guid><description>&lt;p&gt;Вчера мы выпустили &lt;a href="https://ru.selenide.org/2023/10/25/selenide-7.0.0/"&gt;Selenide 7.0.0&lt;/a&gt; и, честно говоря, я ожидал волны жалоб насчёт Java 17.&lt;/p&gt;
&lt;p&gt;Но нет. На Java 17 никто пока не жаловался. И это здорово! Все обновили джаву, все молодцы.&lt;br&gt;
Но зато люди очень просили обратно циклы по коллекциям.&lt;/p&gt;
&lt;p&gt;Так и быть, в сегодняшнем &lt;a href="https://github.com/selenide/selenide/milestone/194?closed=1"&gt;Selenide 7.0.1&lt;/a&gt; мы кое-что вернули:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/26/selenide-7.0.1/#restore-collection-loop"&gt;Вернули циклы по коллекциям&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/26/selenide-7.0.1/#restore-collection-is-empty"&gt;Вернули метод &lt;code&gt;isEmpty()&lt;/code&gt; у коллекций&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/26/selenide-7.0.1/#restore-self-in-containers"&gt;Вернули поле &lt;code&gt;self&lt;/code&gt; в контейнерах&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/26/selenide-7.0.1/#rename-collection-condition"&gt;Переименовали &lt;code&gt;CollectionCondition&lt;/code&gt; в &lt;code&gt;WebElementsCondition&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/26/selenide-7.0.1/#upgrade-to-selenium-4.15.0"&gt;UPD 7.0.2: Обновились на Selenium 4.15.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h3 id="restore-collection-loop"&gt;Вернули циклы по коллекциям&lt;/h3&gt;
&lt;p&gt;Теперь вы можете снова использовать &lt;code&gt;for&lt;/code&gt; по коллекциям:&lt;/p&gt;</description></item><item><title>Вышла Selenide 7.0.0</title><link>https://ru.selenide.org/2023/10/25/selenide-7.0.0/</link><pubDate>Wed, 25 Oct 2023 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2023/10/25/selenide-7.0.0/</guid><description>&lt;p&gt;С днём рождения!&lt;/p&gt;
&lt;p&gt;Да-да, в этот день 12 лет назад был сделан первый коммит в проекте Selenide.
Если интересно, здесь &lt;a href="https://www.youtube.com/watch?v=DBkLFL4E5YA&amp;amp;ab_channel=DEVCLUB.EU"&gt;видос моего рассказа к 10-летию селенида&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;К празднику мы выпустили мажорный релиз &lt;a href="https://github.com/selenide/selenide/milestone/191?closed=1"&gt;Selenide 7.0.0&lt;/a&gt;
с обновлением аж сразу на Java 17.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/25/selenide-7.0.0/#java17"&gt;Обновились на Java 17&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/25/selenide-7.0.0/#update-dependencies"&gt;Обновили зависимости&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/25/selenide-7.0.0/#fix-deadlock-in-static-initialization"&gt;Дедлок при инициализации классов&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/25/selenide-7.0.0/#report-actual-value-at-the-moment-of-check"&gt;Актуальное значение на момент проверки&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/25/selenide-7.0.0/#remove-deprecated-condition-methods"&gt;Удалили старые методы в &lt;code&gt;Condition&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/25/selenide-7.0.0/#remove-deprecated-methods-from-collection-conditions"&gt;Удалили старые методы в &lt;code&gt;CollectionCondition&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/25/selenide-7.0.0/#remove-deprecated-methods-from-elements-collection"&gt;Удалили старые методы в &lt;code&gt;ElementsCollection&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/25/selenide-7.0.0/#replace-elements-container-by-container"&gt;Заменили &lt;code&gt;ElementsContainer&lt;/code&gt; на &lt;code&gt;Container&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/25/selenide-7.0.0/#replace-file-not-found-exception"&gt;Заменили &lt;code&gt;FileNotFoundException&lt;/code&gt; на &lt;code&gt;FileNotDownloadedError&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/25/selenide-7.0.0/#rename-exceptions-to-errors"&gt;Переименовали &lt;code&gt;*Exception&lt;/code&gt; в &lt;code&gt;*Error&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/25/selenide-7.0.0/#remove-deprecated-listener"&gt;Удалили поддержку устаревшего &lt;code&gt;WebDriverEventListener&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/25/selenide-7.0.0/#remove-deprecated-drag-and-drop-methods"&gt;Удалили старые методы для Drag&amp;rsquo;n&amp;rsquo;drop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/25/selenide-7.0.0/#remove-deprecated-get-selected-value-methods"&gt;Удалили устаревшие методы &lt;code&gt;$.getSelectedValue()&lt;/code&gt; и &lt;code&gt;$.getSelectedText()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/25/selenide-7.0.0/#remove-deprecated-testng-annotations"&gt;Удалили старые аннотации для TestNG &lt;code&gt;@Report&lt;/code&gt; и &lt;code&gt;@GlobalTextReport&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2023/10/25/selenide-7.0.0/#remove-other-deprecated-methods"&gt;Остальное&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h3 id="java17"&gt;Обновились на Java 17&lt;/h3&gt;
&lt;p&gt;Чума!
Этот день настал!&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.19.1</title><link>https://ru.selenide.org/2023/10/18/selenide-6.19.1/</link><pubDate>Wed, 18 Oct 2023 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2023/10/18/selenide-6.19.1/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Мир замер в ожидании, грядут большие изменения!&lt;br&gt;
Скоро будет Selenide 7.0.0 с обновлением на Java 11.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Эпоха Java8-лямбдовых куколдов проходит&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;А напоследок мы выкатили &lt;strong&gt;последнюю версию&lt;/strong&gt;, которая может ещё бегать на Java 8:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/selenide/selenide/milestone/193?closed=1"&gt;Selenide 6.19.1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;В основном там обновления зависимостей, в первую очередь Appium 8.6.0:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;bump Appium from 8.5.1 to 8.6.0 &lt;a href="https://github.com/selenide/selenide/pull/2494"&gt;(#2494)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bump BrowserUpProxy &lt;a href="https://github.com/selenide/selenide/pull/2510"&gt;(#2510)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bump Netty from 4.1.98.Final to 4.1.100.Final &lt;a href="https://github.com/selenide/selenide/pull/2484"&gt;(#2484)&lt;/a&gt; &lt;a href="https://github.com/selenide/selenide/pull/2498"&gt;(#2498)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bump LittleProxy from 2.0.21 to 2.0.22 &lt;a href="https://github.com/selenide/selenide/pull/2491"&gt;(#2491)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bump Guava from 32.1.2-jre to 32.1.3-jre &lt;a href="https://github.com/selenide/selenide/pull/2499"&gt;(#2499)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bump Jackson from 2.15.2 to 2.15.3 &lt;a href="https://github.com/selenide/selenide/pull/2502"&gt;(#2502)&lt;/a&gt; &lt;a href="https://github.com/selenide/selenide/pull/2503"&gt;(#2503)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bump commons-io from 2.13.0 to 2.14.0 &lt;a href="https://github.com/selenide/selenide/pull/2486"&gt;(#2486)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://asolntsev.github.io/"&gt;Андрей Солнцев&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.19.0</title><link>https://ru.selenide.org/2023/09/28/selenide-6.19.0/</link><pubDate>Thu, 28 Sep 2023 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2023/09/28/selenide-6.19.0/</guid><description>&lt;p&gt;Всем привет!
На излёте сентября вы выкатили &lt;a href="https://github.com/selenide/selenide/milestone/192?closed=1"&gt;Selenide 6.19.0&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Можешь сплетничать, ненавидеть, регистрировать баги, и обсуждать в чате.
Но мы же оба понимаем, что при встрече ты будешь мне мило слать пулреквест.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#add-highlight-method"&gt;Новый метод &lt;code&gt;$.highlight()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#strip-invisible-spaces-in-collections"&gt;Убираем невидимые пробелы в текстах коллекций&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#upgrade-to-selenium-4.13.0"&gt;Обновились на Selenium 4.13.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#remove-hub-url-check"&gt;Убрали строгую проверку на "/wd/hub"&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#replace-elements-container-by-container"&gt;Заменили &lt;code&gt;ElementsContainer&lt;/code&gt; на &lt;code&gt;Container&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#tap-double-tap"&gt;Методы &lt;code&gt;$.tap()&lt;/code&gt;, &lt;code&gt;$.doubleTap()&lt;/code&gt; для мобилок&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#add-selector-by-class-and-index"&gt;Селектор по классу и индексу для мобилок&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#news"&gt;Новости&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
 &lt;br&gt;
&lt;h3 id="add-highlight-method"&gt;Новый метод &lt;code&gt;$.highlight()&lt;/code&gt; для подсветки элемента&lt;/h3&gt;
&lt;p&gt;Чувствую, открываем очередной ящик Пандоры, но что поделать.&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.18.0</title><link>https://ru.selenide.org/2023/09/06/selenide-6.18.0/</link><pubDate>Wed, 06 Sep 2023 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2023/09/06/selenide-6.18.0/</guid><description>&lt;p&gt;Все уже перевернули календарь?&lt;br&gt;
Тогда при свете костров рябин можете обновиться на &lt;a href="https://github.com/selenide/selenide/milestone/190?closed=1"&gt;Selenide 6.18.0&lt;/a&gt;.&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#show-actual-texts-in-collections"&gt;Показываем актуальные тексты в коллекциях&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#update-to-selenium-4.12.1"&gt;Обновили Selenium с 4.11.0 на 4.12.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#restore-basic-auth-via-cdp"&gt;Вернули BasicAuth через DevTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#add-method-get-options"&gt;Добавили метод &lt;code&gt;$$.getOptions()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#get-focused-element-lazy-loaded"&gt;Метод &lt;code&gt;getFocusedElement()&lt;/code&gt; обленился&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#support-appium-elements-in-page-objects"&gt;Поля &lt;code&gt;SelenideAppiumElement&lt;/code&gt; в пэдж обжектах&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#exact-scroll-in-appium"&gt;Точечный скроллинг в мобилках&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#no-elements-container-for-page-object"&gt;Не наследовать пэдж обжект от &lt;code&gt;ElementsContainer&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#update-dependencies"&gt;Обновили зависимости&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#statistics"&gt;Статистика&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
 &lt;br&gt;
&lt;h3 id="show-actual-texts-in-collections"&gt;Показываем актуальные тексты в коллекциях&lt;/h3&gt;
&lt;p&gt;В релизе 6.16.0 мы &lt;a href="https://ru.selenide.org/2023/07/02/selenide-6.16.0/#speedup-collection-checks"&gt;ускорили проверки коллекций&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;.troubles&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;texts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Всё не то&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;всё не так&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ты мой друг&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;я твой враг&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Одна из оптимизаций была такая: если размер коллекции не совпадает, то селенид даже не начинает проверять тексты элементов,
а сразу кидает ошибку:&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.17.2</title><link>https://ru.selenide.org/2023/08/24/selenide-6.17.2/</link><pubDate>Thu, 24 Aug 2023 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2023/08/24/selenide-6.17.2/</guid><description>&lt;p&gt;Добрий вечір!&lt;/p&gt;
&lt;p&gt;Сегодня 24 августа - День Независимости Украины.&lt;br&gt;
И в честь этого праздника - маленький релизец &lt;a href="https://github.com/selenide/selenide/milestone/189?closed=1"&gt;Selenide 6.17.2&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;h3 id="отвисли-зависающий-вебдрайвер-ещё-раз"&gt;Отвисли зависающий вебдрайвер ещё раз&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://ru.selenide.org/2023/08/20/selenide-6.17.1/"&gt;В прошлом релизе&lt;/a&gt; мы исправили проблему с зависающим вебдрайвером &lt;em&gt;для большинства пользователей&lt;/em&gt;.&lt;br&gt;
Но остались несчастные, которые вынуждены открывать тестируемые сайты в Хроме через BasicAuth. И вот для них вебдрайвер
по-прежнему зависал.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Усилия по установлению потерянной с вебдрайвером связи&lt;br&gt;
не дали результатов.&lt;br&gt;
По предварительным данным, поток &amp;ldquo;CDP Connection&amp;rdquo; перешёл на нерасчётную орбиту и остановился, столкнувшись с зашаренным локом.&lt;br&gt;
Стактрейсы зависших потоков не поддаются визуальному опознанию.&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.17.1</title><link>https://ru.selenide.org/2023/08/20/selenide-6.17.1/</link><pubDate>Sun, 20 Aug 2023 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2023/08/20/selenide-6.17.1/</guid><description>&lt;p&gt;Доброе утро!&lt;/p&gt;
&lt;p&gt;Сегодня 20 августа - &lt;a href="https://www.visitestonia.com/ru/%D0%BF%D0%BE%D1%87%D0%B5%D0%BC%D1%83-%D1%8D%D1%81%D1%82%D0%BE%D0%BD%D0%B8%D1%8F/%D0%B4%D0%B5%D0%BD%D1%8C-%D0%B2%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D1%8D%D1%81%D1%82%D0%BE%D0%BD%D1%81%D0%BA%D0%BE%D0%B9-%D1%80%D0%B5%D1%81%D0%BF%D1%83%D0%B1%D0%BB%D0%B8%D0%BA%D0%B8"&gt;День Восстановления Независимости Эстонии&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;В честь этого праздника - небольшой релиз &lt;a href="https://github.com/selenide/selenide/milestone/188?closed=1"&gt;Selenide 6.17.1&lt;/a&gt;!&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#fix-hanging-webdriver"&gt;Отвисли зависающий вебдрайвер&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#support-type-in-mobile-apps"&gt;Добавили поддержку &lt;code&gt;$.type()&lt;/code&gt; в мобилках&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#fix-type-with-keys"&gt;Исправили метод &lt;code&gt;$.type(Keys.*)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#remove-spaces-from-texts"&gt;Убрали пробелы с концов в &lt;code&gt;$$.texts()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
 &lt;br&gt;
&lt;h3 id="fix-hanging-webdriver"&gt;Отвисли зависающий вебдрайвер&lt;/h3&gt;
&lt;p&gt;В релизе Selenide 6.16.0 (на самом деле &lt;a href="https://github.com/selenide/selenide/pull/2358"&gt;PR 2358&lt;/a&gt;), в селениде случайно появилась бага, из-за которой вебдрайвер мог легко зависнуть.
А именно, если вызвать два раза подряд &lt;code&gt;open(url, pageClass)&lt;/code&gt;, то вебдрайвер накрепко зависает.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;По предварительным данным, вебдрайвер перешел на нерасчётную орбиту и разбился, столкнувшись с дедлоком в параллельных потоках devtools.&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.17.0</title><link>https://ru.selenide.org/2023/08/02/selenide-6.17.0/</link><pubDate>Wed, 02 Aug 2023 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2023/08/02/selenide-6.17.0/</guid><description>&lt;p&gt;Привіт!&lt;/p&gt;
&lt;p&gt;Погнали оновлюватись на &lt;a href="https://github.com/selenide/selenide/milestone/187?closed=1"&gt;Selenide 6.17.0&lt;/a&gt;!&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#update-to-selenium-4.11.0"&gt;Обновились на Selenium 4.11.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#replace-webdrivermanager-by-selenium-manager"&gt;Заменили WebDriverManager на SeleniumManager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#support-java8-again"&gt;Вернули поддержку Java 8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#add-method-type"&gt;Добавили метод &lt;code&gt;$.type()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#click-with-long-press"&gt;Новый метод для мобилок: клик с долгим нажатием&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#swipe-right-and-left"&gt;Новый метод для мобилок: свайп влево и вправо&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#statistics"&gt;Статистика&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
 &lt;br&gt;
&lt;h3 id="update-to-selenium-4.11.0"&gt;Обновились на Selenium 4.11.0&lt;/h3&gt;
&lt;p&gt;Мы обновили версию Selenium с 4.10.0 на 4.11.0.&lt;/p&gt;
&lt;p&gt;Полный список изменений в Selenium &lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG"&gt;тут&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/pull/2393"&gt;PR 2393&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;h3 id="replace-webdrivermanager-by-selenium-manager"&gt;Заменили WebDriverManager на SeleniumManager&lt;/h3&gt;
&lt;p&gt;Начиная с версии 4.6.0, в Селениуме появился встроенный механизм для скачивания вебдрайверов - SeleniumManager.
Насколько я понимаю, делает его всё тот же &lt;a href="https://bonigarcia.dev/"&gt;Boni Garcia&lt;/a&gt;, который создал и WebDriverManager.
Только теперь он это делает официально как часть проекта Selenium.&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.16.1</title><link>https://ru.selenide.org/2023/07/24/selenide-6.16.1/</link><pubDate>Mon, 24 Jul 2023 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2023/07/24/selenide-6.16.1/</guid><description>&lt;p&gt;Привет, пипл!&lt;/p&gt;
&lt;p&gt;Мы выпустили небольшое обновление &lt;a href="https://github.com/selenide/selenide/milestone/186?closed=1"&gt;Selenide 6.16.1&lt;/a&gt;.&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#all-of-and-any-of-conditions"&gt;Добавили условия &lt;code&gt;allOf&lt;/code&gt; и &lt;code&gt;anyOf&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#add-checks-for-cookies"&gt;Добавили проверки для cookies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#update-webdrivermanager"&gt;Обновили WebDriverManager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#support-tspan-in-svg"&gt;Исправили проверку текстов &lt;code&gt;&amp;lt;tspan&amp;gt;&lt;/code&gt; в SVG&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
 &lt;br&gt;
&lt;h3 id="all-of-and-any-of-conditions"&gt;Добавили условия &lt;code&gt;allOf&lt;/code&gt; и &lt;code&gt;anyOf&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Теперь можно проверить одно из нескольких условий (OR):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#president&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;anyOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Ничтожество&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Трусливый бездарь&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;(на самом деле для этого и раньше был метод &lt;code&gt;Condition.or&lt;/code&gt;, но &lt;code&gt;anyOf&lt;/code&gt; как будто чуть удобнее).&lt;/p&gt;
&lt;p&gt;Также можно проверить совпадение всех условий сразу (AND):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#generals&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;allOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;бездарней&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ничтожней&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;(на самом деле это то же самое, что и &lt;code&gt;$(&amp;quot;#generals&amp;quot;).shouldHave(text(&amp;quot;бездарней&amp;quot;), text(&amp;quot;ничтожней&amp;quot;))&lt;/code&gt;,
но зато результат &lt;code&gt;allOf&lt;/code&gt; можно вынести в переменную или метод, создав таким образом своё условие).&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.16.0</title><link>https://ru.selenide.org/2023/07/02/selenide-6.16.0/</link><pubDate>Sun, 02 Jul 2023 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2023/07/02/selenide-6.16.0/</guid><description>&lt;p&gt;Доброй ночи!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;У меня к вам предложение, от которого лучше не отказываться.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Обновляйтесь на &lt;a href="https://github.com/selenide/selenide/milestone/185?closed=1"&gt;Selenide 6.16.0&lt;/a&gt;!&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#speedup-collection-checks"&gt;Ускорили проверки коллекций&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#improve-collections-error-messages"&gt;Улучшили сообщение об ошибках в коллекциях&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#new-date-checks"&gt;Новые проверки для дат &lt;code&gt;date(...)&lt;/code&gt; и &lt;code&gt;datetime(...)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#set-date-time-value"&gt;Новые методы для установки времени&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#full-stacktrace-in-soft-asserts"&gt;Полный стектрейс в софт ассертах&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#improve-basic-auth-in-chromium-browsers"&gt;BasicAuth в браузерах Chromium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#multiple-domains-in-basic-auth"&gt;Несколько доменов в BasicAuth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#fix-double-click-in-appium"&gt;Исправили &lt;code&gt;$.doubleClick()&lt;/code&gt; в Appium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#screenshot-before-after-each"&gt;Снимаем скриншот чуть раньше&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#update-dependencies"&gt;Обновили зависимости&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#news"&gt;Новости&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
 &lt;br&gt;
&lt;h3 id="speedup-collection-checks"&gt;Ускорили проверки коллекций&lt;/h3&gt;
&lt;p&gt;Вот это крутизна!&lt;/p&gt;
&lt;p&gt;Как вы знаете, одна из базовых возможностей в Селениде - это проверки коллекций. Одной строчкой можно проверить сразу кучу элементов:&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.15.0</title><link>https://ru.selenide.org/2023/05/29/selenide-6.15.0/</link><pubDate>Mon, 29 May 2023 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2023/05/29/selenide-6.15.0/</guid><description>&lt;p&gt;Доброй ночи!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Есть люди, которые постоянно деплоят, а есть люди, которые один раз в жизни где-то выучили, что должен быть РЕЛИЗ — и копят, копят, копят фичи для этого релиза. &lt;br&gt;
А счастливый дедушка-мейнтейнер думает, что ему хорошо.&lt;br&gt;
И как использовать опенсорс-проект, если вдруг случайно окажется, что этот дедушка — законченный мудак?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Как вы поняли, мы выпустили новую версию &lt;a href="https://github.com/selenide/selenide/milestone/184?closed=1"&gt;Selenide 6.15.0&lt;/a&gt;
с серьёзными такими внутренними переделками.&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#merge-selenide-selenoid-to-selenide"&gt;Влили проект &lt;code&gt;selenide-selenoid&lt;/code&gt; в &lt;code&gt;selenide&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#merge-selenide-appium-to-selenide"&gt;Влили проект &lt;code&gt;selenide-appium&lt;/code&gt; в &lt;code&gt;selenide&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#clicking-disable-element-fails"&gt;Клик теперь проверяет, что элемент не disabled&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#escape-newlines-in-report"&gt;Маскируем переводы строк в отчёте&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#combined-selectors-for-mobile-apps"&gt;Комбинированные селекторы для мобилок&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#conditions-for-mobile-apps"&gt;Новые проверки для мобилок&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#new-selectors-for-mobile-apps"&gt;Новые селекторы для мобилок&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#switch-context-in-mobile-apps"&gt;Переключение контекста в мобилках&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#refactor-collection-conditions"&gt;Переколбас CollectionCondition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#news"&gt;Новости&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
 &lt;br&gt;
&lt;h3 id="merge-selenide-selenoid-to-selenide"&gt;Влили проект &lt;code&gt;selenide-selenoid&lt;/code&gt; в &lt;code&gt;selenide&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Это позволит нам легче менять и релизить эти проекты.
Для вас поменяется объявление зависимости.
Вместо&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.14.0</title><link>https://ru.selenide.org/2023/05/08/selenide-6.14.0/</link><pubDate>Mon, 08 May 2023 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2023/05/08/selenide-6.14.0/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Пока не начался контрнаступ, давайте-ка обновимся на &lt;a href="https://github.com/selenide/selenide/milestone/181?closed=1"&gt;Selenide 6.14.0&lt;/a&gt; - а то потом будет не до него.&lt;/p&gt;
&lt;p&gt;В нём есть несколько изменений, которые как будто не очень большие, но могут чего-нибудь сломать.
&lt;em&gt;Поэтому очень советую не оттягивать и &lt;strong&gt;обновиться сейчас&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#speedup-debug"&gt;Ускорили дебаг&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#remove-flag--no-sandbox"&gt;Убрали флажок &lt;code&gt;--no-sandbox&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#add-step-method"&gt;Добавили метод &lt;code&gt;step&lt;/code&gt; для отчётиков&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#drag-and-drop-with-options"&gt;Добавили метод &lt;code&gt;$.dragAndDrop(DragAndDropOptions)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#allow-negative-browser-position"&gt;Браузер за экран&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#update-dependencies"&gt;Обновили зависимости&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#news"&gt;Новости&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#statistics"&gt;Статистика&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
 &lt;br&gt;
&lt;h3 id="speedup-debug"&gt;Ускорили дебаг&lt;/h3&gt;
&lt;p&gt;Когда дебажишь свой тест и останавливаешься на брейкпойнте, иногда можно заметить, что IDE очень долго отображаешь
значения полей в пэджобжекте. Вот в таком состоянии IDE может подвиснуть надолго:&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.13.0</title><link>https://ru.selenide.org/2023/04/04/selenide-6.13.0/</link><pubDate>Tue, 04 Apr 2023 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2023/04/04/selenide-6.13.0/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Сегодня у нас большой мажорный релиз &lt;a href="https://github.com/selenide/selenide/milestone/177?closed=1"&gt;Selenide 6.13.0&lt;/a&gt;.&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#add-method-cached"&gt;Добавили метод &lt;code&gt;$.cached()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#mock-response-with-http-status"&gt;Добавили http статус при моке ответа сервера&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#add-method-in-new-browser"&gt;Новый метод &lt;code&gt;inNewBrowser&lt;/code&gt; для запуска куска кода в новом браузере&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#add-method-doubleclick-with-options"&gt;Добавили метод &lt;code&gt;$.doubleClick(options)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#add-condition-inner-text"&gt;Добавили условие &lt;code&gt;$.shouldHave(innerText())&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#add-condition-attributes"&gt;Добавили условие для коллекций &lt;code&gt;$$.shouldHave(attributes(...))&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#clear-error-message-in-select"&gt;Ясное сообщение об ошибки в методах &lt;code&gt;$.select*()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#fix-method-sublist"&gt;Исправили ошибку в методе &lt;code&gt;$$.subList()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#update-dependencies"&gt;Обновили зависимости&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#news"&gt;Новости&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
 &lt;br&gt;
&lt;h3 id="add-method-cached"&gt;Добавили метод &lt;code&gt;$.cached()&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Иногда приходится воротить довольно сложный код для поиска элемента.
И он может работать &lt;strong&gt;медленно&lt;/strong&gt;, особенно если элемент ищется из какой-то большой коллекции с применением сложной фильтрации.
Что-то вроде такого:&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.13.0</title><link>https://ru.selenide.org/2023/04/01/selenide-6.13.0/</link><pubDate>Sat, 01 Apr 2023 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2023/04/01/selenide-6.13.0/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Ура, сегодня у нас новый релиз &lt;strong&gt;Selenide 6.13.0&lt;/strong&gt;&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#banners-support"&gt;Поддержка баннеров&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#news"&gt;Новости&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;h3 id="banners-support"&gt;Поддержка баннеров&lt;/h3&gt;
&lt;h4 id="проблема"&gt;Проблема&lt;/h4&gt;
&lt;p&gt;Очень часто люди спрашивают: &amp;ldquo;А что делать, если посреди теста на экране может выскочить баннер или какой-то ещё неожиданный элемент?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Ведь он может перекрыть другие элементы, закрыть важную кнопку и т.п. - и таким образом сломать тест.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://ru.selenide.org/2019/12/02/advent-calendar-how-to-abuse-selenide/"&gt;Я всегда на это люто ругался&lt;/a&gt;
и настоятельно советовал взять тестовую среду под контроль и самому из теста регулировать, когда баннеры должны появляться, а когда нет.&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.12.4</title><link>https://ru.selenide.org/2023/03/23/selenide-6.12.4/</link><pubDate>Thu, 23 Mar 2023 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2023/03/23/selenide-6.12.4/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;А вы следили за новостями 23 марта?
Молодцы!&lt;/p&gt;
&lt;p&gt;Сегодня у нас &lt;em&gt;Точка Отсчёта&lt;/em&gt; - релиз &lt;a href="https://github.com/selenide/selenide/milestone/180?closed=1"&gt;Selenide 6.12.4&lt;/a&gt;.&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#workaround-for-chromedriver-bug"&gt;Костыль для Хрома&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#support-jdk-http-client"&gt;Добавили поддержку jdk-http-client&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#restore-proxy-after-using"&gt;Исправили $.download(PROXY) после "using"&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#fix-clear-when-element-disappears"&gt;Исправили $.clear() при пропадании элемента&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#update-dependencies"&gt;Обновили зависимости&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#release-selenide-appium"&gt;Выпустили selenide-appium 2.7.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#release-selenide-selenoid"&gt;Выпустили selenide-selenoid 2.3.6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#news"&gt;Новости&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;h3 id="workaround-for-chromedriver-bug"&gt;Костыль для Хрома&lt;/h3&gt;
&lt;p&gt;Напоминание: если вы всё ещё роете интернет в поисках лекарства против&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Invalid Status code=403 text=Forbidden&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;то лекарство уже было выпущено в &lt;a href="https://ru.selenide.org/2023/03/09/selenide-6.12.2/"&gt;Selenide 6.12.2&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;h3 id="support-jdk-http-client"&gt;Добавили поддержку &lt;code&gt;jdk-http-client&lt;/code&gt; вместо &lt;code&gt;netty-client&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;По умолчанию по-прежнему используется &lt;code&gt;netty-client&lt;/code&gt;, но если
вы хотите &lt;a href="https://www.selenium.dev/blog/2022/using-java11-httpclient/"&gt;перейти на jdk-http-client&lt;/a&gt;,
то можете это легко сделать:&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.12.2</title><link>https://ru.selenide.org/2023/03/09/selenide-6.12.2/</link><pubDate>Thu, 09 Mar 2023 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2023/03/09/selenide-6.12.2/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Срочно обновляйтесь на &lt;a href="https://github.com/selenide/selenide/milestone/178?closed=1"&gt;Selenide 6.12.2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Он содержит один важный костыль для баги в Chromedriver 111.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Invalid Status code=403 text=Forbidden&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="в-чём-проблема"&gt;В чём проблема?&lt;/h3&gt;
&lt;p&gt;Недавно вышла новая версия Chrome и Chromedriver 111.
И у всех, кто на неё обновился, резко посыпались тесты.
Браузер открывался, но при этом тест получал от вебдрайвера ошибку и дальше не мог ничего
сделать, в том числе закрыть этот самый браузер.&lt;/p&gt;
&lt;p&gt;В логах было видно такое вот красноречивое сообщение:&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.12.0</title><link>https://ru.selenide.org/2023/02/24/selenide-6.12.0/</link><pubDate>Fri, 24 Feb 2023 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2023/02/24/selenide-6.12.0/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;В этот трагичный и одновременно праздничный день мы выпустили
релиз &lt;a href="https://github.com/selenide/selenide/milestone/173?closed=1"&gt;Selenide 6.12.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;В нём почти нет фич, но есть новый режим, который может сильно повлиять на ваши тесты.&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#new-headless-mode"&gt;Новый безбашенный режим&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#improve-logs-when-downloading-file"&gt;Улучшили логирование при скачивании файлов&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#improve-download-in-edge"&gt;Улучшили скачивание файлов в Edge под Windows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#update-dependencies"&gt;Обновили зависимости&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#rename-master-to-main"&gt;Переименовали master в main&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;h3 id="new-headless-mode"&gt;Новый безбашенный режим&lt;/h3&gt;
&lt;p&gt;В Chromium-браузерах появился новый безголовый (headless) режим.
Подробнее о нём &lt;a href="https://developer.chrome.com/articles/new-headless/"&gt;в их блоге&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Если вкратце, этот новый режим внутри использует тот же код, что и обычный headful, и поэтому должен вылечить все
болячки headless режима. А вот старый headless режим по сути был отдельным браузером со своими особенностями и багами.&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.11.1</title><link>https://ru.selenide.org/2023/01/20/selenide-6.11.1/</link><pubDate>Fri, 20 Jan 2023 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2023/01/20/selenide-6.11.1/</guid><description>&lt;p&gt;Хаюшки!&lt;/p&gt;
&lt;p&gt;Одна моя знакомая из Италии рассказала, что вышел новый
релиз &lt;a href="https://github.com/selenide/selenide/milestone/174?closed=1"&gt;Selenide 6.11.1&lt;/a&gt;.&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#truncate-webdriver-exception-message"&gt;Обрезаем только WebDriverException&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#fix-download-to-folder"&gt;Чутка подправили $.download(FOLDER)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#update-dependencies"&gt;Обновили зависимости&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#statistics"&gt;Статистика&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3 id="truncate-webdriver-exception-message"&gt;Обрезаем только сообщения &lt;code&gt;WebDriverException&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;В довольно редких ситуациях - если вы&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;используете кастомное действие (custom command),&lt;/li&gt;
&lt;li&gt;и из него кидаете какую-то свою ошибку (assertion error),&lt;/li&gt;
&lt;li&gt;и текст этой ошибки содержит несколько строк,&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;то Селенид обрезает этот текст, оставляя лишь первую строку.
Изначально планировалось обрезать только текст &lt;code&gt;WebDriverException&lt;/code&gt;, потому что он объективно содержит многострочный мусор:&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.11.0</title><link>https://ru.selenide.org/2023/01/03/selenide-6.11.0/</link><pubDate>Tue, 03 Jan 2023 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2023/01/03/selenide-6.11.0/</guid><description>&lt;center&gt;
 &lt;img src="https://ru.selenide.org/images/2023/01/selenide-6.11.0.png" width="700"/&gt;
&lt;/center&gt;
&lt;br&gt;
&lt;h1 id="с-новым-годом-друзья"&gt;С Новым Годом, друзья!&lt;/h1&gt;
&lt;p&gt;Дедушка Мороз принёс нам новый релиз &lt;a href="https://github.com/selenide/selenide/milestone/169?closed=1"&gt;Selenide 6.11.0&lt;/a&gt;.&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#added-copy-paste-methods"&gt;Методы для копирования текста&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#fix-download-with-credentials"&gt;Скачивание файла за BasicAuth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#download-large-files-via-proxy"&gt;Скачиваем большие файлы через прокси&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#can-handle-unexpected-alerts"&gt;Неожиданные алерты&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#fix-screenshot-file-permission"&gt;Пермиссии файла скриншота&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#support-as-annotation"&gt;Аннотация @As для полей без @FindBy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#last-page-source"&gt;Последний исходник страницы&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#page-url-in-error-message"&gt;URL страницы в ошибке&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3 id="added-copy-paste-methods"&gt;Добавили методы для копирования текста&lt;/h3&gt;
&lt;p&gt;Мы добавили два новых метода:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Selenide.copy()&lt;/code&gt; - копирует выделенный текст в буфер обмена, и&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$.paste()&lt;/code&gt; вставляет текст из буфера обмена в поле ввода.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://best-propaganda-quotes.ru&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#solovjov&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;doubleClick&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// select the quote text&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Selenide&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;[name=q]&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;paste&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;[name=q]&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Обсираться мелкими алмазами на берегу озера Комо&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Известные ограничения: пока что эти методы не работают на серверных линуксах (без графического окружения).
Но запуск xvfb должен помочь.&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.10.2</title><link>https://ru.selenide.org/2022/12/08/selenide-6.10.2/</link><pubDate>Thu, 08 Dec 2022 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2022/12/08/selenide-6.10.2/</guid><description>&lt;br&gt;
&lt;h1 id="всем-привет"&gt;Всем привет!&lt;/h1&gt;
&lt;p&gt;У нас вышел новый мини-релиз &lt;a href="https://github.com/selenide/selenide/milestone/171?closed=1"&gt;Selenide 6.10.2&lt;/a&gt;.&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#added-method-press"&gt;Добавили метод $.press()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#trigger-change-events-by-select-methods"&gt;Генерируем события change в методах $.select*&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#friendly-select-option-in-reports"&gt;selectOption в отчётах&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#friendly-local-storage-in-reports"&gt;localStorage в отчётах&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#news"&gt;Новости&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3 id="added-method-press"&gt;Добавили метод &lt;code&gt;$.press()&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;По сути это то же самое, что &lt;code&gt;sendKeys()&lt;/code&gt;, только он не &lt;code&gt;void&lt;/code&gt;. То есть его можно &lt;em&gt;чейнить&lt;/em&gt; с другими методами:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#username&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;press&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;x&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;press&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TAB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CONTROL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ALT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENTER&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;should&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;disappear&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Спасибо &lt;a href="https://github.com/amuthansakthivel"&gt;Amuthan Sakthivel&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/2032"&gt;PR 2032&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;h3 id="trigger-change-events-by-select-methods"&gt;Генерируем события &lt;code&gt;change&lt;/code&gt; в методах &lt;code&gt;$.select*&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Как вы помните, в предыдущем релизе мы &lt;a href="https://ru.selenide.org/2022/11/21/selenide-6.10.0/#select-options-using-javascript"&gt;переделали работу с селектами на JavaScript&lt;/a&gt;.
Но при этом забыли, что надо ещё и генерировать события &lt;code&gt;focus&lt;/code&gt;, &lt;code&gt;click&lt;/code&gt;, &lt;code&gt;change&lt;/code&gt;. Теперь генерируем.&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.10.0</title><link>https://ru.selenide.org/2022/11/21/selenide-6.10.0/</link><pubDate>Mon, 21 Nov 2022 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2022/11/21/selenide-6.10.0/</guid><description>&lt;br&gt;
&lt;h1 id="недобрый-вечер"&gt;Недобрый вечер!&lt;/h1&gt;
&lt;p&gt;Вышел новый релиз &lt;a href="https://github.com/selenide/selenide/milestone/167?closed=1"&gt;Selenide 6.10.0&lt;/a&gt;.&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#slow-download-in-firefox"&gt;Улучшили алгоритм скачивания файлов&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#fail-download-early"&gt;Ускорили отрицательное скачивание файла&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#select-options-using-javascript"&gt;Выбираем опции через JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#make-click-chainable"&gt;Сделали клик "чейнебл"&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#fix-size-for-new-tabs"&gt;Размер окна для новых вкладок&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#encode-basic-auth-credentials-in-url"&gt;BasicAuth со спецсимволами&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#news"&gt;Новости&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3 id="slow-download-in-firefox"&gt;Улучшили алгоритм скачивания файлов&lt;/h3&gt;
&lt;p&gt;Один из алгоритмов скачивания в Selenide - это FOLDER.
Чтобы скачать файл, он кликает нужную кнопку и ждёт, пока в папке &amp;ldquo;Downloads&amp;rdquo; появится нужный файл.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;еноты&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#stolenRaccoonsReport&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;download&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;using&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FOLDER&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;assertThat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;еноты&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;hasName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;еноты.xls&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Проблема в том, что этот алгоритм не очень хорошо работал в Firefox, когда скачивание идёт очень медленно.
Оказалось, что Firefox сразу создаёт в папке два файла: &amp;ldquo;еноты.xls&amp;rdquo; и &amp;ldquo;еноты.xls.part&amp;rdquo;, и оба пустые.
И лишь затем начинает их потихоньку заполнять.&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.9.0</title><link>https://ru.selenide.org/2022/10/07/selenide-6.9.0/</link><pubDate>Fri, 07 Oct 2022 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2022/10/07/selenide-6.9.0/</guid><description>&lt;br&gt;
&lt;h1 id="привет"&gt;Привет!&lt;/h1&gt;
&lt;p&gt;Позвольте прервать ваш думскроллинг хорошей новостью.&lt;/p&gt;
&lt;p&gt;Вы выпустили &lt;a href="https://github.com/selenide/selenide/milestone/166?closed=1"&gt;Selenide 6.9.0&lt;/a&gt;!
В основном прокачали прокси и обновили селениум.&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#proxy-mock-response"&gt;Подменяем ответ сервера в прокси&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#secure-authorization-header"&gt;Заголовок авторизации&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#resolve-proxy-hostname"&gt;Подкрутили имя прокси хоста&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#upgrade-to-selenium-4.5.0"&gt;Обновились на Selenium 4.5.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#remove-opera-support"&gt;Выкинули поддержку Opera&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#news"&gt;Новости&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3 id="proxy-mock-response"&gt;Научили прокси подменять ответ сервера&lt;/h3&gt;
&lt;p&gt;Как вы знаете, селенид умеет запускать свой встроенный прокси между браузером и тестируемым приложением. До сих пор мы
использовали его в основном для отслеживания запросов (логирования, скачивания файлов), но теперь ещё и добавили возможность
подменить ответ сервера. Это удобно, например, чтобы замокать ответ какого-то сервиса.&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.8.1</title><link>https://ru.selenide.org/2022/09/27/selenide-6.8.1/</link><pubDate>Tue, 27 Sep 2022 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2022/09/27/selenide-6.8.1/</guid><description>&lt;br&gt;
&lt;h1 id="добре"&gt;Добре!&lt;/h1&gt;
&lt;p&gt;Ловите мини-багфикс &lt;a href="https://github.com/selenide/selenide/milestone/165?closed=1"&gt;Selenide 6.8.1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Это касается только тех, кто напрямую вызывает в своих тестах&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RemoteWebDriver&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и словил &lt;code&gt;NoClassDefFoundError&lt;/code&gt; после обновления на &lt;a href="https://ru.selenide.org/2022/09/24/selenide-6.8.0/"&gt;Selenide 6.8.0&lt;/a&gt;.&lt;/p&gt;
&lt;br/&gt;
&lt;h3 id="pre-history"&gt;Предыстория&lt;/h3&gt;
&lt;p&gt;Что такое OpenTelemetry?
Это какая-то штука, которую зачем-то добавили в Selenium 4, но людям забыли сообщить, зачем это вообще нужно и как
этим пользоваться. Ну и по факту всем пофиг, никто не пользуется.&lt;/p&gt;
&lt;p&gt;Да и в самом селениде мы её явно выпилили в &lt;a href="https://github.com/selenide/selenide/pull/1763"&gt;PR 1763&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.8.0</title><link>https://ru.selenide.org/2022/09/24/selenide-6.8.0/</link><pubDate>Sat, 24 Sep 2022 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2022/09/24/selenide-6.8.0/</guid><description>&lt;br&gt;
&lt;h1 id="недоброе-утро"&gt;Недоброе утро!&lt;/h1&gt;
&lt;p&gt;Пока в мире творится здипец, мы выпускаем релиз &lt;a href="https://github.com/selenide/selenide/milestone/161?closed=1"&gt;Selenide 6.8.0&lt;/a&gt;.&lt;br&gt;
Фич немного, больше обновление зависимостей.&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#deep-shadow-selectors"&gt;Рекурсивный поиск по shadow dom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#add-page-without-class"&gt;Метод page() без параметров&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#as-annotation"&gt;Аннотация @As&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#news"&gt;Новости&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3 id="deep-shadow-selectors"&gt;Рекурсивный поиск по shadow dom&lt;/h3&gt;
&lt;p&gt;Как вы знаете, в селениде &lt;a href="https://ru.selenide.org/2020/03/18/selenide-5.10.0"&gt;есть возможность&lt;/a&gt; искать элементы внутри shadow dom.
И даже в нескольких вложенных shadow dom:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shadowCss&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#reportButton&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#shadow-host&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#inner-shadow-host&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="na"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Хорошо, что это возможно, но это по-прежнему требует ваших временных затрат на то, чтобы изучить dom и найти точные
локаторы для всех этих теневых элементов.&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.7.4</title><link>https://ru.selenide.org/2022/09/05/selenide-6.7.4/</link><pubDate>Mon, 05 Sep 2022 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2022/09/05/selenide-6.7.4/</guid><description>&lt;br&gt;
&lt;h1 id="привет"&gt;Привет!&lt;/h1&gt;
&lt;br&gt;
&lt;p&gt;Я календарь перевернул,
и снова релиз &lt;a href="https://github.com/selenide/selenide/milestone/164?closed=1"&gt;Selenide 6.7.4&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;h3 id="add-remote-read-setting"&gt;Добавили настройку &lt;code&gt;remoteReadTimeout&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Ещё недавно &lt;a href="https://www.youtube.com/watch?v=iIIsZRHya-w&amp;amp;ab_channel=DEVCLUB.EU"&gt;я жаловался&lt;/a&gt; на то, что в селениде и так
слишком много настроек, но нам не оставили выбора.&lt;/p&gt;
&lt;p&gt;В общем, мы добавили ещё одну настройку &lt;code&gt;Configuration.remoteReadTimeout&lt;/code&gt; (также известную как &lt;code&gt;-Dselenide.remoteReadTimeout&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Она пригодится тем, кто запускает браузер удалённо, но при этом браузеров на сервере не хватает, и приходится ждать в
очереди. И поэтому дефалтового таймаута в 1.5 минуты оказывается недостаточно, чтобы элементарно открыть браузер.&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.7.3</title><link>https://ru.selenide.org/2022/08/27/selenide-6.7.3/</link><pubDate>Sat, 27 Aug 2022 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2022/08/27/selenide-6.7.3/</guid><description>&lt;br&gt;
&lt;h1 id="привет"&gt;Привет!&lt;/h1&gt;
&lt;br&gt;
&lt;p&gt;Вы читаете пресс-релиз &lt;a href="https://github.com/selenide/selenide/milestone/163?closed=1"&gt;Selenide 6.7.3&lt;/a&gt; в пиратском переводе.&lt;/p&gt;
&lt;p&gt;А что делать, &lt;em&gt;все хотят кушать&lt;/em&gt;&amp;hellip;&lt;/p&gt;
&lt;br&gt;
&lt;h3 id="condition-partial-value"&gt;Добавили условие &lt;code&gt;partialValue&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;По аналогии с &lt;code&gt;$.shouldHave(partialText(&amp;quot;Добрый ко&amp;quot;))&lt;/code&gt; теперь появилась и &lt;code&gt;$.shouldHave(partialValue(&amp;quot;cola&amp;quot;))&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Это если вы установили настройку &lt;code&gt;Configuration.textCheck = FULL_TEXT&lt;/code&gt;, но хотите проверить значение какого-то инпута
или textarea частично, а не полностью.&lt;/p&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/issues/1923"&gt;issue 1923&lt;/a&gt; и &lt;a href="https://github.com/selenide/selenide/pull/1924"&gt;PR 1924&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;h3 id="condition-tag-name"&gt;Добавили условие &lt;code&gt;tagName&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Наверное, оно нечасто нужно, т.к. мы часто ищем элемент по тэгу, и уж потом проверяем другие атрибуты.
Да и вообще, тэг - это внутренности, которые пользователь не видит, поэтому, может, и проверять его не нужно.&lt;/p&gt;</description></item><item><title>Selenide puzzler</title><link>https://ru.selenide.org/2022/08/22/selenide-puzzler/</link><pubDate>Mon, 22 Aug 2022 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2022/08/22/selenide-puzzler/</guid><description>&lt;br&gt;
&lt;h1 id="привет"&gt;Привет!&lt;/h1&gt;
&lt;p&gt;Вы любите пазлеры?
Соскучались по пазлерам?
В последний раз мы показывали пазлеры аж в 2017 году, кто не смотрел - &lt;a href="https://www.youtube.com/watch?v=y-ZyxTWHH08&amp;amp;ab_channel=Heisenbug"&gt;смотрим&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;И вот наконец мы &lt;a href="https://twitter.com/selenide/status/1560192824536088580"&gt;опубликовали в твиттере&lt;/a&gt; новый пазлер:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Одинаково ли работают эти строки? Или есть какая-то разница?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;.btn&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldBe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;visible&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;.btn&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldBe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;visible&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldBe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="варианты-ответов"&gt;Варианты ответов&lt;/h3&gt;
&lt;p&gt;Люди в твиттере и чатиках накидали разных вариантов:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;обе строчки работают одинаково (самый популярный ответ)&lt;/li&gt;
&lt;li&gt;первый случай: логическое or, второй: логический and&lt;/li&gt;
&lt;li&gt;Второй работает на %ожидание по умолчанию% дольше.&lt;/li&gt;
&lt;li&gt;Первый должен отработать с одним тайм-аутом, второй должен с двумя тайм-аутами&lt;/li&gt;
&lt;li&gt;в первом случае упадёт, если отсутствует любое из условий, во втором - если не visible, но enabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="правильный-ответ"&gt;Правильный ответ&lt;/h3&gt;
&lt;p&gt;В большинстве случаев оба варианта работают одинаково.&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.7.2</title><link>https://ru.selenide.org/2022/08/14/selenide-6.7.2/</link><pubDate>Sun, 14 Aug 2022 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2022/08/14/selenide-6.7.2/</guid><description>&lt;br&gt;
&lt;h1 id="привет"&gt;Привет!&lt;/h1&gt;
&lt;br&gt;
&lt;p&gt;Мы выпустили мини-релиз &lt;a href="https://github.com/selenide/selenide/milestone/162?closed=1"&gt;Selenide 6.7.2&lt;/a&gt; с исправлением
утечек памяти.&lt;/p&gt;
&lt;p&gt;Да-да, мы серьёзные ребята, у нас тоже бывают утечки.&lt;/p&gt;
&lt;p&gt;Но не пугайтесь, они некритические. Вряд ли кто-то из вас их вообще замечал.&lt;/p&gt;
&lt;h3 id="fix-selenide-memory-leak"&gt;Исправили утечки с shutdown hooks в Selenide&lt;/h3&gt;
&lt;p&gt;Если в тесте много-много раз открывать и закрывать вебдрайвер&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;about:blank&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;closeWebDriver&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;то расход памяти потихоньку растёт:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://user-images.githubusercontent.com/279773/184475079-bbf8ee0f-d245-43ec-8e72-a010262e099c.png"
style="width: 100%" alt="Memory consumption: before"/&gt;&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.7.0</title><link>https://ru.selenide.org/2022/08/04/selenide-6.7.0/</link><pubDate>Thu, 04 Aug 2022 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2022/08/04/selenide-6.7.0/</guid><description>&lt;br&gt;
&lt;h1 id="привет"&gt;Привет!&lt;/h1&gt;
&lt;br&gt;
&lt;p&gt;У нас случился толстенький релиз &lt;a href="https://github.com/selenide/selenide/milestone/154?closed=1"&gt;Selenide 6.7.0&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="holy-whole-string"&gt;Теперь &lt;code&gt;$.shouldHave(text)&lt;/code&gt; может проверять текст целиком&lt;/h3&gt;
&lt;p&gt;Испокон веков команда &lt;code&gt;$.shouldHave(text)&lt;/code&gt; проверяла не текст целиком, а только подстроку:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;freedom-to&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Britney Spears&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#freedom-to&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Brit&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// was OK&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Когда-то это показалось удачной идеей, потому что веб-страничка часто содержит всякие левые символы
(переводы строк, символы табуляции, непереносимые пробелы, множественные пробелы и т.п.).&lt;/p&gt;
&lt;p&gt;Но похоже, это всё-таки была неудачная идея, т.к. новички по умолчанию предполагают, что текст проверяется целиком, и
выхватывают свою порцию WTF, когда обнаруживают, что все их проверки проверяли немного не то. :)&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.6.6</title><link>https://ru.selenide.org/2022/07/01/selenide-6.6.6/</link><pubDate>Fri, 01 Jul 2022 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2022/07/01/selenide-6.6.6/</guid><description>&lt;br&gt;
&lt;h1 id="добър-вечер"&gt;Добър вечер!&lt;/h1&gt;
&lt;br&gt;
&lt;p&gt;У нас вышел ещё один мини-релиз &lt;a href="https://github.com/selenide/selenide/milestone/160?closed=1"&gt;Selenide 6.6.6&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="remove-deprecated-capabilities"&gt;Удалили старые капабилити&lt;/h3&gt;
&lt;p&gt;Некоторые настройки вебдрайвера (которые селенид проставлял с испокон веков) были помечены как устаревшие, а с недавних
пор селениум начал ругаться на нах в логах.&lt;/p&gt;
&lt;p&gt;Теперь селенид их больше не проставляет: &lt;code&gt;acceptSslCerts&lt;/code&gt;, &lt;code&gt;handlesAlerts&lt;/code&gt;, &lt;code&gt;javascriptEnabled&lt;/code&gt;, &lt;code&gt;takesScreenshot&lt;/code&gt;.
Мы не забудем вас, друзья! Вы служили нам верой и правдой больше 10 лет.&lt;/p&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/issues/1862"&gt;issue 1862&lt;/a&gt;, &lt;a href="https://github.com/selenide/selenide/issues/1866"&gt;issue 1866&lt;/a&gt;
и &lt;a href="https://github.com/selenide/selenide/pull/1870"&gt;PR 1870&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;h3 id="fix-clear-with-shortcut"&gt;Исправили ClearWithShortcut&lt;/h3&gt;
&lt;p&gt;&amp;hellip; при работе с вебдрайвером, завёрнутым в листенеры. Редкая ситуация, не заморачивайтесь.&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.6.4</title><link>https://ru.selenide.org/2022/06/20/selenide-6.6.4/</link><pubDate>Mon, 20 Jun 2022 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2022/06/20/selenide-6.6.4/</guid><description>&lt;br&gt;
&lt;h1 id="приветос"&gt;Приветос!&lt;/h1&gt;
&lt;br&gt;
&lt;p&gt;У нас вышел ещё один мини-релиз &lt;a href="https://github.com/selenide/selenide/milestone/158?closed=1"&gt;Selenide 6.6.4&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="exact-texts-case-sensitive"&gt;Добавили условие &lt;code&gt;exactTextsCaseSensitive&lt;/code&gt; для коллекций&lt;/h3&gt;
&lt;p&gt;В селениде есть несколько проверок для текстов коллекций:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;li&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;texts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;foo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;bar&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;baz&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;li&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;textsInAnyOrder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;foo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;bar&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;baz&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;li&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;exactTexts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;foo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;bar&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;baz&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// и др.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Теперь к ним добавилась ещё одна:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;li&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;exactTextsCaseSensitive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;foo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;bar&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;baz&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Спасибо &lt;a href="https://github.com/ben-nc2"&gt;Ben Heap&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/1861"&gt;PR 1861&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;h3 id="selected-option-lazy-loaded"&gt;Сделали метод &lt;code&gt;$.getSelectedOption()&lt;/code&gt; ленивым&lt;/h3&gt;
&lt;p&gt;По задумке, (почти) все методы Селенида &lt;a href="https://github.com/selenide/selenide/wiki/Lazy-loading"&gt;должны быть ленивыми&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Например, просто вызов &lt;code&gt;$(&amp;quot;#nope&amp;quot;)&lt;/code&gt; не должен падать, если элемента нет. Это позволяет писать отрицательные условия:&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.6.3</title><link>https://ru.selenide.org/2022/06/12/selenide-6.6.3/</link><pubDate>Sun, 12 Jun 2022 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2022/06/12/selenide-6.6.3/</guid><description>&lt;br&gt;
&lt;h1 id="здравствуйте-друзья"&gt;Здравствуйте, друзья!&lt;/h1&gt;
&lt;br&gt;
&lt;p&gt;Мы выпустили мини-релиз &lt;a href="https://github.com/selenide/selenide/milestone/157?closed=1"&gt;Selenide 6.6.3&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="improve-click-timeout"&gt;Доработали таймаут для клика&lt;/h3&gt;
&lt;p&gt;В версии 6.6.0 мы добавили опциональный параметр - таймаут для метода &lt;code&gt;$.click()&lt;/code&gt;.&lt;br&gt;
Но оказалось, что тот параметр решал &lt;a href="https://ru.selenide.org/2022/06/08/selenide-6.6.0/#click-timeout"&gt;лишь половину проблемы&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Теперь мы исправили и вторую половину: вызов&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#slow-link&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;usingDefaultMethod&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ofSeconds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ждёт до 8 секунд как появления элемента &lt;code&gt;#slow-link&lt;/code&gt;, так и последующей загрузки страницы.&lt;/p&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/issues/1572"&gt;issue 1572&lt;/a&gt; и &lt;a href="https://github.com/selenide/selenide/pull/1853"&gt;PR 1853&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;h3 id="selenide-6.6.2"&gt;Selenide 6.6.2&lt;/h3&gt;
&lt;p&gt;А чуть раньше мы выпустили мини-релиз &lt;a href="https://github.com/selenide/selenide/milestone/156?closed=1"&gt;Selenide 6.6.2&lt;/a&gt; с обновлением на Selenium 4.2.2&lt;/p&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/pull/1851"&gt;PR 1851&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.6.0</title><link>https://ru.selenide.org/2022/06/08/selenide-6.6.0/</link><pubDate>Wed, 08 Jun 2022 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2022/06/08/selenide-6.6.0/</guid><description>&lt;br&gt;
&lt;h1 id="здравствуйте-друзья"&gt;Здравствуйте, друзья!&lt;/h1&gt;
&lt;br&gt;
&lt;p&gt;Мы выпустили релиз &lt;a href="https://github.com/selenide/selenide/milestone/152?closed=1"&gt;Selenide 6.6.0&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="selenide-clear-with-shortcut"&gt;Появился новый плагин &lt;code&gt;selenide-clear-with-shortcut&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;В Selenide 6.5.0 мы поменяли реализацию &lt;code&gt;$.clear()&lt;/code&gt; со стандартной селениумовской на шорткат (&amp;ldquo;Выделить всё&amp;rdquo; - Удалить).
Оказалось, что этот шорткат не работал достаточно стабильно во всех браузерах, пришлось его доработать. Вроде
стабилизировался, но стал медленнее, чем просто &lt;code&gt;WebElement.clear()&lt;/code&gt;. А поскольку это не всем нужно, решили в конце концов
в Селениде оставить старую добрую селениумовскую реализацию.&lt;/p&gt;
&lt;p&gt;А кому нужна очистка шорткатом - может подключить себе наш новый плагин:&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.5.0</title><link>https://ru.selenide.org/2022/05/17/selenide-6.5.0/</link><pubDate>Tue, 17 May 2022 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2022/05/17/selenide-6.5.0/</guid><description>&lt;br&gt;
&lt;h1 id="здравствуйте-друзья"&gt;Здравствуйте, друзья!&lt;/h1&gt;
&lt;br&gt;
&lt;p&gt;Мы выпустили релиз &lt;a href="https://github.com/selenide/selenide/milestone/151?closed=1"&gt;Selenide 6.5.0&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="теперь-можно-маскировать-пароли-в-отчётах"&gt;Теперь можно маскировать пароли в отчётах&lt;/h3&gt;
&lt;p&gt;Иногда в автотестах приходится вбивать в поля пароли и другие секретные данные. И некоторые люди
переживают, что эти данные потом видны в отчётах (Allure или TextReport). И просят их как-нибудь скрыть.&lt;/p&gt;
&lt;p&gt;Лично я не понимаю, почему кого-то должен волновать пароль от тестовой среды.
(Вы же не используете одни и те же пароли во всех средах? Вы же не гоняете тесты на продакшине?)&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.4.0</title><link>https://ru.selenide.org/2022/04/07/selenide-6.4.0/</link><pubDate>Thu, 07 Apr 2022 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2022/04/07/selenide-6.4.0/</guid><description>&lt;br&gt;
&lt;h1 id="здравствуйте-друзья"&gt;Здравствуйте, друзья!&lt;/h1&gt;
&lt;br&gt;
&lt;p&gt;Мы выпустили релиз &lt;a href="https://github.com/selenide/selenide/milestone/145?closed=1"&gt;Selenide 6.4.0&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="показываем-и-алиас-и-локатор-при-падении-тестов"&gt;Показываем и алиас, и локатор при падении тестов&lt;/h3&gt;
&lt;p&gt;Как вы знаете, в Селениде с помощью метода &lt;code&gt;as&lt;/code&gt; можно задавать элементам &amp;ldquo;алиас&amp;rdquo;, или понятное имя.
Это полезно в тех случаях, когда нет хорошего локатора, и приходится писать какой-нибудь длинный сложный xpath, который
потом в отчётах сложно читать.&lt;/p&gt;
&lt;p&gt;Например:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$x&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/long/ugly/xpath/div[2]/span[3]/li[4]&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;as&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Login button&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И у нас всегда была дилемма: нужно ли&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;показывать только алиас (плюс: легко читается, минус: не видно селектора - вдруг он нужен?)&lt;/li&gt;
&lt;li&gt;показывать и алиас, и селектор (плюс: видно селектор, минус: трудно читается).&lt;/li&gt;
&lt;/ol&gt;
&lt;br/&gt;
&lt;p&gt;И вот наконец мы поняли, как правильно.
Начиная с версии 6.4.0, селенид будет:&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.3.0</title><link>https://ru.selenide.org/2022/02/07/selenide-6.3.0/</link><pubDate>Mon, 07 Feb 2022 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2022/02/07/selenide-6.3.0/</guid><description>&lt;br&gt;
&lt;h1 id="здравствуйте-друзья"&gt;Здравствуйте, друзья!&lt;/h1&gt;
&lt;br&gt;
&lt;p&gt;Мы зарелизили &lt;a href="https://github.com/selenide/selenide/milestone/143?closed=1"&gt;Selenide 6.3.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Приготовьте бутеры и погнали!&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="добавили-метод-switchtoframetimeout-с-кастомным-таймаутом"&gt;Добавили метод &lt;code&gt;switchTo().frame(timeout)&lt;/code&gt; с кастомным таймаутом&lt;/h1&gt;
&lt;p&gt;В селениде есть метод &lt;code&gt;switchTo().frame(name)&lt;/code&gt; для переключения между фреймами. Как всегда, со встроенной ожидалкой и другими плюшками.
Но что, если фрейм грузится дольше, чем таймаут по умолчанию (4 секунды)?&lt;/p&gt;
&lt;p&gt;Теперь вы можете передать дополнительный параметр &lt;code&gt;Duration&lt;/code&gt; - таймаут для переключения во фрейм:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;switchTo&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ifrm&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// по умолчанию ждёт до 4 секунд&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;switchTo&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ifrm&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Duration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ofSeconds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;6&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// а вот теперь до 6 секунд&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Спасибо &lt;a href="https://github.com/donesvad"&gt;@donesvad&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/1722"&gt;PR 1722&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.2.0</title><link>https://ru.selenide.org/2022/01/10/selenide-6.2.0/</link><pubDate>Mon, 10 Jan 2022 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2022/01/10/selenide-6.2.0/</guid><description>&lt;br&gt;
&lt;h1 id="с-новым-годом"&gt;С новым годом!&lt;/h1&gt;
&lt;br&gt;
&lt;p&gt;Мы зарелизили &lt;a href="https://github.com/selenide/selenide/milestone/140?closed=1"&gt;Selenide 6.2.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Давайте посмотрим, что нам приготовил первый релиз в новом году.&lt;/p&gt;
&lt;p&gt;Наливайте чай и погнали!
&lt;br&gt;&lt;/p&gt;
&lt;h1 id="добавили-ссылку-click-to-see-difference-для-большинства-селенидовских-ошибок"&gt;Добавили ссылку &amp;ldquo;&amp;lt;Click to see difference&amp;gt;&amp;rdquo; для большинства селенидовских ошибок&lt;/h1&gt;
&lt;p&gt;Как вы помните, в &lt;a href="https://ru.selenide.org/2021/09/28/selenide-5.25.0/"&gt;Selenide 5.25.0&lt;/a&gt; мы добавили поддержку OpenTest4J, в результате чего у
селенидовских ошибок в IDE появилась ссылочка &amp;ldquo;&amp;lt;Click to see difference&amp;gt;&amp;rdquo;, позволяющая удобно посмотреть различия
между ожидаемым и актуальным значением.&lt;/p&gt;
&lt;p&gt;Но тогда мы всё порефакторить не успели, и ссылочка появилась не у всех типов ошибок.&lt;br&gt;
А теперь должна появиться у всех.&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.1.1</title><link>https://ru.selenide.org/2021/11/24/selenide-6.1.1/</link><pubDate>Wed, 24 Nov 2021 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2021/11/24/selenide-6.1.1/</guid><description>&lt;br&gt;
&lt;h1 id="tere-hommikust"&gt;TERE HOMMIKUST!&lt;/h1&gt;
&lt;br&gt;
&lt;p&gt;Мы зарелизили &lt;a href="https://github.com/selenide/selenide/milestone/141?closed=1"&gt;Selenide 6.1.1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;В этом маленьком релизе мы исправили сразу пачку проблем с настройками браузеров.&lt;br&gt;
Они все всплыли после обновления на Selenium 4, в котором &lt;code&gt;ChromeOptions&lt;/code&gt; и другие &lt;code&gt;Capabilities&lt;/code&gt; были серьёзно переработаны.&lt;/p&gt;
&lt;p&gt;Ну вот, теперь мы погрузились в тему и разом все проблемы исправили.&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="early-conflicts-detection"&gt;Раннее обнаружение конфликтов&lt;/h1&gt;
&lt;p&gt;Если вы попытаетесь открыть хром с настройками файерфокса:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;browser&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;chrome&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;browserCapabilities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setCapability&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FIREFOX_OPTIONS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FirefoxOptions&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;то Селенид версии 5.x ругался, а Селенид 6.0.x перестал ругаться.
Теперь мы ругань восстановили, и вы снова увидите старое доброе&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.1.0</title><link>https://ru.selenide.org/2021/11/23/selenide-6.1.0/</link><pubDate>Tue, 23 Nov 2021 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2021/11/23/selenide-6.1.0/</guid><description>&lt;br&gt;
&lt;h1 id="tere"&gt;TERE!&lt;/h1&gt;
&lt;br&gt;
&lt;p&gt;Мы зарелизили &lt;a href="https://github.com/selenide/selenide/milestone/137?closed=1"&gt;Selenide 6.1.0&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="добавили-поддержку-selenideproperties"&gt;Добавили поддержку &lt;code&gt;selenide.properties&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;Теперь Селенид умеет читать настройки из отдельного файлика &lt;code&gt;selenide.properties&lt;/code&gt;, если таковой найдётся в classpath.&lt;/p&gt;
&lt;p&gt;NB! Лично я всё ещё не вижу пользы от этого, ведь проще задать настройки&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;прямо в коде: &lt;code&gt;Configuration.timeout = 8000;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;или через system properties: &lt;code&gt;-Dselenide.timeout=8000&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Прошу, не надо резко ломиться генерировать эти файлики. Используйте &lt;code&gt;selenide.properties&lt;/code&gt;, только если у вас есть хорошие причины для этого, а не просто потому, что теперь это модно или &amp;ldquo;так красиво&amp;rdquo;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 6.0.1</title><link>https://ru.selenide.org/2021/10/25/selenide-6.0.1/</link><pubDate>Mon, 25 Oct 2021 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2021/10/25/selenide-6.0.1/</guid><description>&lt;br&gt;
&lt;h1 id="день-рождения"&gt;День рождения!&lt;/h1&gt;
&lt;p&gt;Ура! Сложно поверить, но сегодня Селениду исполняется&amp;hellip; 10 лет!&lt;br&gt;
Именно в этот день 10 лет назад был сделан &lt;a href="https://github.com/selenide/selenide/commit/3716078fc7fda8c5da01d871882d513cbd97cd0e"&gt;первый коммит&lt;/a&gt; в репозитории.&lt;/p&gt;
&lt;p&gt;Огромное спасибо всем, кто участвовал в проекте, коммитил, репортил баги, предлагал идеи, отвечал на вопросы в форумах,
критиковал и рассказывал про селенид на конференциях и митапах. Да и просто решился использовать селенид в своих проектах.
Вы все - часть этого движения.&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;Ну а мы в честь юбилея зарелизили мажорную версию &lt;a href="https://github.com/selenide/selenide/milestone/136?closed=1"&gt;Selenide 6.0.1&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.25.0</title><link>https://ru.selenide.org/2021/09/28/selenide-5.25.0/</link><pubDate>Tue, 28 Sep 2021 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2021/09/28/selenide-5.25.0/</guid><description>&lt;p&gt;Добрый вечер!&lt;/p&gt;
&lt;p&gt;Мы зарелизили &lt;a href="https://github.com/selenide/selenide/milestone/131?closed=1"&gt;Selenide 5.25.0&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Очень советую обновиться&lt;/strong&gt;,&lt;br&gt;
потому что за этим релизом грядут ещё большие изменения, включая полноценный релиз Selenium 4.&lt;br&gt;
Если не обновитесь сейчас, потом будет намного сложнее разгребать завалы!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Это прямо большой релиз с кучей изменений, так что запаситесь попкорном и заварите чаю. Погнали!&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#support-webdriver-4.0.0.RC1"&gt;Поддержка Selenium Webdriver 4.0.0 RC1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#opentest4j"&gt;Добавили поддержку OpenTest4j&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#stacktrace-in-soft-asserts"&gt;Показываем стектрейс под каждой ошибкой в SoftAsserts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#get-shadow-root"&gt;Добавили метод &lt;code&gt;$.shadowRoot()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#get-ancestor"&gt;Добавили метод &lt;code&gt;$.ancestor()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#enrich-ancestor"&gt;Обогатили методы &lt;code&gt;$.closest()&lt;/code&gt; и &lt;code&gt;$.ancestor()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#fixed-element-screenshot"&gt;Починили метод &lt;code&gt;$.screenshot()&lt;/code&gt; на маках&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#actual-value-at-the-moment-of-last-check"&gt;При падении текстовых проверок селенид выдаёт точное значение на момент падения&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#empty-text-not-allowed"&gt;Запретили пустой аргумент в методе &lt;code&gt;$.matchText("")&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#check-webdriver-title"&gt;Добавили проверку &lt;code&gt;webdriver().shouldHave(title(...))&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#release-selenide-selenoid-1.2.0"&gt;selenide-selenoid 1.2.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#release-selenide-appium-1.7.0"&gt;selenide-appium 1.7.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#news"&gt;Ссылки&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#statistics"&gt;Статистика использования Селенида&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#selenide-anniversary"&gt;Юбилей Selenide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;h1 id="support-webdriver-4.0.0.RC1"&gt;Поддержка Selenium Webdriver 4.0.0 RC1&lt;/h1&gt;
&lt;p&gt;Мы выпустили две сборки Selenide 5.25.0: обычную и хипстерскую.&lt;br&gt;
Можете сами выбрать:&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.24.0</title><link>https://ru.selenide.org/2021/08/29/selenide-5.24.0/</link><pubDate>Sun, 29 Aug 2021 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2021/08/29/selenide-5.24.0/</guid><description>&lt;p&gt;Добрый вечер!&lt;/p&gt;
&lt;p&gt;29 августа 1997 года компьютерная система Скайнет вышла из-под контроля и нанесла ядерный удар по России.
Так началась война между терминаторами и человечеством.&lt;/p&gt;
&lt;p&gt;С тех прошло 24 года, с ума сойти! Мы живём в будущем! И пока ещё мы управляем компьютерами.&lt;/p&gt;
&lt;p&gt;Я каждый год отмечаю этот день, и сегодня в честь праздника мы зарелизили &lt;a href="https://github.com/selenide/selenide/milestone/130?closed=1"&gt;Selenide 5.24.0&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="добавили-метод-executecommand-duration"&gt;Добавили метод &lt;code&gt;$.execute(Command, Duration)&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;для запуска самопальных команд с заданным таймаутом.&lt;/p&gt;
&lt;p&gt;В &lt;a href="https://ru.selenide.org/2019/09/02/selenide-5.3.0/"&gt;Selenide 5.3.0&lt;/a&gt; мы добавили возможность легко запускать самопальные команды с помощью метода &lt;code&gt;$.execute()&lt;/code&gt;. Но тогда не было возможности задать кастомный таймаут. Теперь можно.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.23.0</title><link>https://ru.selenide.org/2021/07/16/selenide-5.23.0/</link><pubDate>Fri, 16 Jul 2021 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2021/07/16/selenide-5.23.0/</guid><description>&lt;p&gt;Добрый вечер!&lt;/p&gt;
&lt;p&gt;16 июля вышел релиз
&lt;a href="https://github.com/selenide/selenide/milestone/125?closed=1"&gt;Selenide 5.23.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;В нём появилось кое-что существенно новое для селенида.&lt;/p&gt;
&lt;h1 id="проверки-нового-поколения"&gt;Проверки нового поколения&lt;/h1&gt;
&lt;p&gt;Теперь в селениде есть встроенные проверки не только для веб-элементов, но и
для некоторых других штук. С автоматическими ожиданиями, понятными сообщениями об ошибках, попаданием в отчёт и т.д. Всё как вы любите.&lt;/p&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/issues/1442"&gt;issue 1442&lt;/a&gt;.
Спасибо &lt;a href="https://github.com/dbudim"&gt;Dmitriy Budim&lt;/a&gt; за запуск всей этой эпопеи в &lt;a href="https://github.com/selenide/selenide/pull/1478"&gt;PR 1478&lt;/a&gt;.&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;Давайте посмотрим, что же это за проверки.&lt;/p&gt;
&lt;h2 id="проверки-для-url"&gt;Проверки для URL&lt;/h2&gt;
&lt;p&gt;До сих пор в селениде было только два метода, позволяющие получить URL текущей страницы или текущего фрейма (в большинстве случаев это одно и то же).&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.22.3</title><link>https://ru.selenide.org/2021/07/05/selenide-5.22.3/</link><pubDate>Mon, 05 Jul 2021 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2021/07/05/selenide-5.22.3/</guid><description>&lt;p&gt;Добрый вечер!&lt;/p&gt;
&lt;p&gt;На этом месте был пресс-релиз, который мог больно задеть чувства большого числа наших пользователей и коммитеров. Мы сожалеем, что так получилось, и считаем эту публикацию своей ошибкой, ставшей проявлением непрофессионализма отдельных мейнтейнеров. Никоим образом мы не хотели стать источником раздора и ненависти.&lt;/p&gt;
&lt;p&gt;Просто обновляйтесь на &lt;a href="https://github.com/selenide/selenide/milestone/126?closed=1"&gt;Selenide 5.22.3&lt;/a&gt; с самыми свежими и вкусными багфиксами.&lt;/p&gt;
&lt;h3 id="5223-released-05072021"&gt;5.22.3 (released 05.07.2021)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/selenide/selenide/issues/1474"&gt;#1474&lt;/a&gt; add workaround for NPE in RemoteWebElement.isDisplayed() &amp;ndash; see &lt;a href="https://github.com/selenide/selenide/pull/1498"&gt;PR #1498&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="5222-released-30062021"&gt;5.22.2 (released 30.06.2021)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/selenide/selenide/issues/1493"&gt;#1493&lt;/a&gt; support uploading files from inside of JAR files &amp;ndash; see &lt;a href="https://github.com/selenide/selenide/pull/1494"&gt;PR #1494&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;fix command &lt;code&gt;./gradlew&lt;/code&gt; - now it installs jars to a local maven repo &amp;ndash; see &lt;a href="https://github.com/selenide/selenide/pull/1489"&gt;PR #1489&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;add support for okhttp 4.9.1 &amp;ndash; see &lt;a href="https://github.com/selenide/selenide/pull/1488"&gt;PR #1488&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="5221-released-18062021"&gt;5.22.1 (released 18.06.2021)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Add mime type &amp;ldquo;binary/octet-stream&amp;rdquo; to download binary files in FireFox&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;center&gt;
 &lt;a href="https://www.spletnik.ru/buzz/chronicle/102227-skandal-vokrug-vkusvill-s-lesbiyskoy-paroy-khronologiya-reaktciya.html"&gt;
 &lt;img src="https://ru.selenide.org/images/2021/07/selenide-5.22.3.png" width="800"/&gt;
 &lt;/a&gt;
&lt;/center&gt;
&lt;h3 id="беззаботного-лета"&gt;Беззаботного лета!&lt;/h3&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://asolntsev.github.io/"&gt;Андрей Солнцев&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.22.0</title><link>https://ru.selenide.org/2021/06/08/selenide-5.22.0/</link><pubDate>Tue, 08 Jun 2021 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2021/06/08/selenide-5.22.0/</guid><description>&lt;p&gt;Добрый вечер!&lt;/p&gt;
&lt;p&gt;Лучший подарок - сделанный своими коммитами.&lt;br&gt;
В мой день 40 рождения мы выпустили юбилейный релиз &lt;a href="https://github.com/selenide/selenide/milestone/124?closed=1"&gt;Selenide 5.22.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Развернём упаковку?&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="теперь-можно-закрыть-алерт-перед-скачиванием-файла"&gt;Теперь можно закрыть алерт перед скачиванием файла&lt;/h1&gt;
&lt;p&gt;В Селениде есть метод &lt;code&gt;$.download()&lt;/code&gt;, который работает по простому принципу:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Кликни.&lt;/li&gt;
&lt;li&gt;Подожди, пока в папке появится нужный файл.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Проблема в том, что на некоторых сайтах после клика появляется алерт, который нужно закрыть, чтобы началось скачивание.
Ну или вообще, нужно совершить ещё какое-то действие после или вместо клика, чтобы запустить скачивание файла.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.21.0</title><link>https://ru.selenide.org/2021/05/15/selenide-5.21.0/</link><pubDate>Sat, 15 May 2021 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2021/05/15/selenide-5.21.0/</guid><description>&lt;p&gt;Добрый вечер!&lt;/p&gt;
&lt;p&gt;За окошком месяц май, а на экране релиз &lt;a href="https://github.com/selenide/selenide/milestone/123?closed=1"&gt;Selenide 5.21.0&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="убрали-повторные-скриншоты-и-шаги-в-отчёте-для-цепочи-локаторов"&gt;Убрали повторные скриншоты и шаги в отчёте для цепочи локаторов&lt;/h1&gt;
&lt;p&gt;Большинство методов Селенида устроены так, что их можно вызвать несколько штук подряд, в одну строку.
Это позволяет писать лаконичные тесты.&lt;/p&gt;
&lt;p&gt;Что-то вроде&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;table#id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;tbody&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;2&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;tr.active&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;td&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Ну вот&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Правда, с ними была одна проблема. При падении такой проверки Селенид делал несколько скриншотов, а
в отчёт (в т.ч. числе в аллюровский отчёт) добавлялось несколько шагов (один для &lt;code&gt;&amp;quot;table#id&amp;quot;&lt;/code&gt;, второй для &lt;code&gt;&amp;quot;tbody&amp;quot;&lt;/code&gt; и т.д.),
хотя по сути это один шаг.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.20.1</title><link>https://ru.selenide.org/2021/03/23/selenide-5.20.1/</link><pubDate>Tue, 23 Mar 2021 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2021/03/23/selenide-5.20.1/</guid><description>&lt;p&gt;Добрый вечер!&lt;/p&gt;
&lt;p&gt;Джо Байдена спросили, считает ли он &lt;code&gt;$$.as&lt;/code&gt; киллер-фичей. «Ммм, хмм, да», — ответил Байден.&lt;/p&gt;
&lt;p&gt;Это сдвоенный обзор на релиз &lt;a href="https://github.com/selenide/selenide/milestone/118?closed=1"&gt;Selenide 5.20.0&lt;/a&gt; и
&lt;a href="https://github.com/selenide/selenide/milestone/119?closed=1"&gt;Selenide 5.20.1&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="добавили-методы-для-операций-с-буфером-обмена"&gt;Добавили методы для операций с буфером обмена&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Selenide.clipboard().setText(&amp;quot;111&amp;quot;);&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;assertEquals(&amp;quot;Hello World&amp;quot;, Selenide.clipboard().getText());&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Имейте в виду, что на линуксе буфер обмена не будет работать без иксов. Либо запускайте xvfb, либо ещё как-то выкручивайтесь.&lt;/p&gt;
&lt;p&gt;Спасибо &lt;a href="https://github.com/dbudim"&gt;Dmitriy Budim&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/1409"&gt;PR 1409&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;NB! Эти методы переопределены в плагине &lt;a href="https://github.com/selenide/selenide-selenoid"&gt;selenide-selenoid&lt;/a&gt;, так что они корректно
работают с селеноидом. Для него мы тоже выпустили версию &lt;a href="https://github.com/selenide/selenide-selenoid/releases/tag/v1.1.0"&gt;1.1.0&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.19.0</title><link>https://ru.selenide.org/2021/02/24/selenide-5.19.0/</link><pubDate>Wed, 24 Feb 2021 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2021/02/24/selenide-5.19.0/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Вы, наверное, не знали, но сегодня, 24 февраля, в Эстонии чуть ли не главный праздник -
&lt;a href="https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BD%D1%8C_%D0%BD%D0%B5%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%AD%D1%81%D1%82%D0%BE%D0%BD%D0%B8%D0%B8"&gt;День Независимости&lt;/a&gt;.
Ровно 103 года назад Эстония была провозглашена независимым демократическим государством.&lt;/p&gt;
&lt;p&gt;А спустя 93 года в Эстонии, в казематах компании &lt;a href="https://codeborne.com/"&gt;Codeborne&lt;/a&gt; родилась библиотека Selenide. Это ли не чудо?&lt;/p&gt;
&lt;p&gt;Дню независимости мы и посвящаем наш новый релиз &lt;a href="https://github.com/selenide/selenide/milestone/116?closed=1"&gt;Selenide 5.19.0&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="наконец-таки-починили-draganddrop"&gt;Наконец-таки починили drag&amp;rsquo;and&amp;rsquo;drop&lt;/h1&gt;
&lt;p&gt;В селениде уже давно есть метод &lt;code&gt;$.dragAndDropTo()&lt;/code&gt;, но он фактически не работает. Под капотом он использует
селениумовский механизм &lt;code&gt;Actions&lt;/code&gt;, и что-то там явно сломано. Ну не тащит элемент и всё.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.18.1</title><link>https://ru.selenide.org/2021/02/11/selenide-5.18.1/</link><pubDate>Thu, 11 Feb 2021 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2021/02/11/selenide-5.18.1/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Как сказал бы рэпер Гнойный, &amp;ldquo;релизай, а не накапливай!&amp;rdquo;&lt;br&gt;
Вот и мы релизнули небольшое обновление &lt;a href="https://github.com/selenide/selenide/milestone/115?closed=1"&gt;Selenide 5.18.1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Давайте заглянем туда с фонариком:&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="добавили-метод-selenidegetsessionstorage"&gt;Добавили метод &lt;code&gt;Selenide.getSessionStorage()&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;по аналогии с &lt;code&gt;Selenide.getLocalStorage()&lt;/code&gt;, который появился ранее в версии 5.15.0.&lt;/p&gt;
&lt;p&gt;У них одинаковый набор методов: &lt;code&gt;getItem&lt;/code&gt;, &lt;code&gt;setItem&lt;/code&gt;, &lt;code&gt;removeItem&lt;/code&gt;, &lt;code&gt;clear&lt;/code&gt; и т.д.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Иногда полезно положить &lt;code&gt;sessionStorage&lt;/code&gt; или &lt;code&gt;localStorage&lt;/code&gt;, скажем, хитрый флаг, чтобы эмулировать какое-нибудь
действие пользователя или включить-выключить какие-то фичи или настройки.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Спасибо &lt;a href="https://github.com/dbudim"&gt;Dmitriy Budim&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/1400"&gt;PR 1400&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.18.0</title><link>https://ru.selenide.org/2021/01/23/selenide-5.18.0/</link><pubDate>Sat, 23 Jan 2021 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2021/01/23/selenide-5.18.0/</guid><description>&lt;p&gt;Ура, товарищи!&lt;/p&gt;
&lt;p&gt;На дворе 23 января.&lt;/p&gt;
&lt;p&gt;Несанкционированные релизы сейчас запрещены, поэтому сегодня у нас просто негативное падение номера версии.
Обновляйтесь: &lt;a href="https://github.com/selenide/selenide/milestone/113?closed=1"&gt;Selenide 5.18.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Приглашаю вас на маленькую виртуальную экскурсию по изменениям в 5.18.0.&lt;br&gt;
Устраивайтесь поудобнее.&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="выключили-логи-вебдрайвера-по-умолчанию"&gt;Выключили логи вебдрайвера по умолчанию&lt;/h1&gt;
&lt;p&gt;Начиная с версии 5.13.0, Selenide писал логи вебдрайвера в файлы &lt;code&gt;build/reports/tests/webdriver.uuid.log&lt;/code&gt;.&lt;br&gt;
Тогда это казалось полезным, но оказалось, что логи эти занимают довольно много места и особо никого не интересуют.
Поэтому мы всё-таки решили не включать их по умолчанию.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.17.2</title><link>https://ru.selenide.org/2020/12/30/selenide-5.17.2/</link><pubDate>Wed, 30 Dec 2020 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2020/12/30/selenide-5.17.2/</guid><description>&lt;p&gt;Доброе утро!&lt;br&gt;
Гномики всё никак не успокоятся. Завтра утром они принесут в ваши носочки последний подарочек:
релиз &lt;a href="https://github.com/selenide/selenide/milestone/110?closed=1"&gt;Selenide 5.17.2&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="теперь-commands-возвращают-selenideelement-вместо-webelement"&gt;Теперь &lt;code&gt;Commands&lt;/code&gt; возвращают &lt;code&gt;SelenideElement&lt;/code&gt; вместо &lt;code&gt;WebElement&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;Это даёт возможность &lt;em&gt;чейнить&lt;/em&gt; вызовы методов &lt;code&gt;$.execute(Command)&lt;/code&gt; с другими селенидовскими метода, делая ваши тесты
ещё лаконичнее и экспрессивнее:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;.lupa&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ScrollToCenter&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="na"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;.pupa&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Спасибо &lt;a href="https://github.com/BorisOsipov"&gt;Boris Osipov&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/1355"&gt;PR 1355&lt;/a&gt;.&lt;/p&gt;
&lt;br/&gt;
&lt;h1 id="починили-метод-setvaluenull"&gt;Починили метод &lt;code&gt;$.setValue(null)&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/issues/1356"&gt;issue 1356&lt;/a&gt;.
Спасибо &lt;a href="https://github.com/dzem"&gt;Dmitriy Zemlyanitsyn&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/1357"&gt;PR 1357&lt;/a&gt;.&lt;/p&gt;
&lt;br/&gt;
&lt;h1 id="включили-soft-asserts-в-методах-beforeall-и-afterall-в-junit-5"&gt;Включили soft asserts в методах @BeforeAll и @AfterAll (в JUnit 5)&lt;/h1&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/issues/981"&gt;issue 981&lt;/a&gt;,
&lt;a href="https://github.com/selenide/selenide/issues/1070"&gt;issue 1070&lt;/a&gt; и
&lt;a href="https://github.com/selenide/selenide/pull/1359"&gt;PR 1359&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.17.0</title><link>https://ru.selenide.org/2020/12/26/selenide-5.17.0/</link><pubDate>Sat, 26 Dec 2020 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2020/12/26/selenide-5.17.0/</guid><description>&lt;p&gt;Доброй ночи!&lt;/p&gt;
&lt;p&gt;Я трепетно отношусь к Католическому Рождеству.&lt;br&gt;
Потому, что именно в Рождество террористы захватили небоскрёб Накатоми, и Брюс замочил Ханса Грубера.
А потом взорвал самолёт зажигалкой.&lt;/p&gt;
&lt;p&gt;Поэтому ловите рождественский релиз &lt;a href="https://github.com/selenide/selenide/milestone/108?closed=1"&gt;Selenide 5.17.0&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="добавили-метод-asname"&gt;Добавили метод $.as(&amp;ldquo;name&amp;rdquo;)&lt;/h1&gt;
&lt;p&gt;Чувствую, что открываю ящик пандоры, но что уж поделаешь&amp;hellip;&lt;/p&gt;
&lt;p&gt;В общем, мы добавили метод &lt;code&gt;as&lt;/code&gt;, позволяющий давать элементам читаемые имена.&lt;/p&gt;
&lt;p&gt;Чтобы продемонстрировать эффект, давайте сравним эти две строки в тесте:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;By&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;xpath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/long/ugly/xpath[1][2][3]&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="na"&gt;shouldNot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;exist&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;By&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;xpath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/long/ugly/xpath[1][2][3]&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="na"&gt;as&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Login button&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldNot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;exist&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Результат в отчёте будет таким:&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.16.2</title><link>https://ru.selenide.org/2020/11/25/selenide-5.16.2/</link><pubDate>Wed, 25 Nov 2020 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2020/11/25/selenide-5.16.2/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Мы выпустили релиз &lt;a href="https://github.com/selenide/selenide/milestone/109?closed=1"&gt;Selenide 5.16.2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Нет, вы не подумайте, что в недавнем крупном релизе &lt;a href="https://ru.selenide.org/2020/11/20/selenide-5.16.0/"&gt;Selenide 5.16.0&lt;/a&gt; была куча багов.
Вовсе нет.&lt;/p&gt;
&lt;p&gt;Данный релиз 5.16.2 - это исправление кучи старых мелких бажочков, просто сейчас дошли до них руки.&lt;/p&gt;
&lt;p&gt;Итак, коротко:&lt;/p&gt;
&lt;h2 id="selenide-5.16.2"&gt;Релиз &lt;a href="https://github.com/selenide/selenide/milestone/109?closed=1"&gt;5.16.2&lt;/a&gt; (вышел 25.11.2020)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/selenide/selenide/issues/1332"&gt;#1332&lt;/a&gt; return old click(int, int) command logic &amp;ndash; thanks to Petro Ovcharenko for PR &lt;a href="https://github.com/selenide/selenide/pull/1333"&gt;#1333&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;make SoftAssertsExtension thread-safe &amp;ndash; thanks to @dtuchs for PR &lt;a href="https://github.com/selenide/selenide/pull/1334"&gt;#1334&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/selenide/selenide/issues/1258"&gt;#1258&lt;/a&gt; fix soft asserts with ParameterizedTest in jUnit5 &amp;ndash; see PR &lt;a href="https://github.com/selenide/selenide/pull/1328"&gt;#1328&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/selenide/selenide/issues/1293"&gt;#1293&lt;/a&gt; don&amp;rsquo;t report &amp;ldquo;Element not found&amp;rdquo; in case of other errors &amp;ndash; see PR &lt;a href="https://github.com/selenide/selenide/pull/1326"&gt;#1326&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/selenide/selenide/issues/1290"&gt;#1290&lt;/a&gt; don&amp;rsquo;t show unused page object fields in report &amp;ndash; see PR &lt;a href="https://github.com/selenide/selenide/pull/1327"&gt;#1327&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;upgrade to littleproxy:2.0.1 &amp;ndash; see PR &lt;a href="https://github.com/selenide/selenide/pull/1325"&gt;#1325&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="selenide-5.16.1"&gt;Релиз &lt;a href="https://github.com/selenide/selenide/milestone/106?closed=1"&gt;5.16.1&lt;/a&gt; (вышел 23.11.2020)&lt;/h2&gt;
&lt;p&gt;Тут было два исправления, чтобы хром можно было запускать с расширениями.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.16.0</title><link>https://ru.selenide.org/2020/11/20/selenide-5.16.0/</link><pubDate>Fri, 20 Nov 2020 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2020/11/20/selenide-5.16.0/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Мы выпустили релиз &lt;a href="https://github.com/selenide/selenide/milestone/105?closed=1"&gt;Selenide 5.16.0&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="плагины"&gt;Плагины&lt;/h2&gt;
&lt;p&gt;В начале 2020 года на конференции &lt;a href="https://seleniumcamp.com/materials/"&gt;SeleniumCamp&lt;/a&gt; я рассказывал
про &lt;a href="https://seleniumcamp.com/talk/bof-glorious-past-and-promising-future-of-selenide/"&gt;roadmap селенида&lt;/a&gt;.
Одна из ключевых идей на этот год была создать в селениде возможность подключать сторонние плагины.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;И вот этот день настал!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;На данный момент доступно два плагина:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/selenide/selenide-appium"&gt;selenide-appium 1.5.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/selenide/selenide-selenoid"&gt;selenide-selenoid 1.0.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Расскажем о них в отдельных постах.&lt;/p&gt;
&lt;p&gt;Вероятно, дальше стоит оформить в виде плагинов поддержку Allure, JUnit, TestNG, AShot.&lt;br&gt;
&lt;em&gt;Накидывайте ещё идеи!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/issues/1051"&gt;issue #1051&lt;/a&gt; и
&lt;a href="https://github.com/selenide/selenide/pull/1264"&gt;PR #1264&lt;/a&gt;,
&lt;a href="https://github.com/selenide/selenide/pull/1317"&gt;PR 1317&lt;/a&gt; и
&lt;a href="https://github.com/selenide/selenide/pull/1321"&gt;PR 1321&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Почему прокси не работает в Selenoid?</title><link>https://ru.selenide.org/2020/11/17/why-proxy-does-not-work-in-selenoid/</link><pubDate>Tue, 17 Nov 2020 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2020/11/17/why-proxy-does-not-work-in-selenoid/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Сегодня мы наконец-то раскроем тайну, почему у многих не работает прокси в Selenoid.&lt;/p&gt;
&lt;h3 id="задача-скачать-файл"&gt;Задача: скачать файл&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Мы запускаем тесты, в которых браузер бежит в контейнере Selenoid (обычно также и на Selenide, но необязательно).&lt;/li&gt;
&lt;li&gt;В ходе теста мы хотим скачать файл.&lt;/li&gt;
&lt;li&gt;Метод по умолчанию &lt;code&gt;$.download()&lt;/code&gt; не подходит (например, потому, что скачивание происходит не по прямой ссылке).&lt;/li&gt;
&lt;li&gt;Поэтому мы хотим &lt;a href="https://ru.selenide.org/2019/12/10/advent-calendar-download-files/"&gt;скачать файл через прокси&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="наши-действия"&gt;Наши действия&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Создаём проект&lt;/li&gt;
&lt;li&gt;Добавляем в проект зависимость BrowserUpProxy, как указано в документации Selenide:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;dependencies&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;testRuntimeOnly&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;com.browserup:browserup-proxy-core:2.1.1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="3"&gt;
&lt;li&gt;Копипастим типичный бойлерплейт для запуска браузера в Selenoid:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;proxyHost&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;192.168.0.10&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;remote&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://localhost:4444/wd/hub&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DesiredCapabilities&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capabilities&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DesiredCapabilities&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;capabilities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setBrowserName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;chrome&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;capabilities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setVersion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;85.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;capabilities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setCapability&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;enableVNC&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;capabilities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setCapability&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;enableVideo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;capabilities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setCapability&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;enableLog&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;browserCapabilities&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capabilities&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;fileDownload&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FileDownloadMode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;PROXY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;proxyEnabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="4"&gt;
&lt;li&gt;Ну и пишем тест, что-то вроде&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://the-internet.herokuapp.com/download&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;byText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;some-file.txt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="na"&gt;download&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;assertThat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="na"&gt;isEqualTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;some-file.txt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="проблема"&gt;Проблема&lt;/h3&gt;
&lt;p&gt;И получаем ошибку при открытии браузера:&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.15.0</title><link>https://ru.selenide.org/2020/09/26/selenide-5.15.0/</link><pubDate>Sat, 26 Sep 2020 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2020/09/26/selenide-5.15.0/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Мы выпустили релиз &lt;a href="https://github.com/selenide/selenide/milestone/104?closed=1"&gt;Selenide 5.15.0&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2020/09/26/selenide-5.15.0/#page-load-timeout"&gt;Настройка &lt;code&gt;Configuration.pageLoadTimeout&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2020/09/26/selenide-5.15.0/#click-with-options"&gt;Клик с параметрами&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2020/09/26/selenide-5.15.0/#download-with-options"&gt;Скачивание файла с параметрами&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2020/09/26/selenide-5.15.0/#local-storage"&gt;Работа с LocalStorage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2020/09/26/selenide-5.15.0/#own-text"&gt;Текст элемента без потомков&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2020/09/26/selenide-5.15.0/#speed-up-collections"&gt;Ускорили большие фильтрованные коллекции&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2020/09/26/selenide-5.15.0/#href-checks"&gt;Добавили проверку &amp;ldquo;href&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2020/09/26/selenide-5.15.0/#no-sandbox"&gt;Добавили опцию хрома &amp;ldquo;&amp;ndash;no-sandbox&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2020/09/26/selenide-5.15.0/#news"&gt;Новости&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="page-load-timeout"&gt;Добавили настройку &lt;code&gt;Configuration.pageLoadTimeout&lt;/code&gt; &lt;br/&gt; (по умолчанию 30 секунд)&lt;/h2&gt;
&lt;p&gt;Бывает так, что вебдрайвер надолго подвисает, пытаясь загрузить какую-то страницу, либо картинку на этой странице, или ещё какой-то элемент.
Теряется время, сессия обрывается по таймауту и т.д.&lt;/p&gt;
&lt;p&gt;В этом случае хорошо бы прервать тест пораньше, но таймаут для загрузки страницы в Selenium по умолчанию слишком большой: 5 минут.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.14.0</title><link>https://ru.selenide.org/2020/08/17/selenide-5.14.0/</link><pubDate>Mon, 17 Aug 2020 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2020/08/17/selenide-5.14.0/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Мы выпустили релиз &lt;a href="https://github.com/selenide/selenide/milestone/101?closed=1"&gt;Selenide 5.14.0&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="стабилизировали-новый-способ-скачивания-файлов-folder"&gt;Стабилизировали новый способ скачивания файлов &lt;code&gt;FOLDER&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&amp;hellip; который появился в &lt;a href="https://ru.selenide.org/2020/07/08/selenide-5.13.0/"&gt;Selenide 5.13.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Вот что поменялось в 5.14.0:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Каждый раз, когда селенид открывает браузер, он создаёт для него уникальную папку для скачиваний.
Это помогает избежать ситуаций, когда параллельные тесты одновременно скачивают файлы в одну и ту же папку, и невозможно понять, где чей файл.&lt;/p&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/issues/1220"&gt;issue 1220&lt;/a&gt; и &lt;a href="https://github.com/selenide/selenide/pull/1221"&gt;PR 1221&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Увы, это не работает для IE и Safari (которые в принципе не позволяют задать папку для скачивания файлов)&lt;/li&gt;
&lt;li&gt;Также это работает только для тех браузеров, которые открывает селенид.&lt;/li&gt;
&lt;li&gt;Если же вы сами открываете браузер и передаёте его селениду, вам нужно будет создать уникальную папку самостоятельно и передать её селениду:
&lt;ul&gt;
&lt;li&gt;Либо с помощью нового метода &lt;code&gt;setWebDriver(driver, proxy, downloadsFolder)&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;либо конструктора &lt;code&gt;SelenideDriver(..., downloadsFolder)&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Перед началом каждого скачивания файла селенид очищает папку &amp;ndash; см. &lt;a href="https://github.com/selenide/selenide/pull/1252"&gt;PR 1252&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.13.0</title><link>https://ru.selenide.org/2020/07/08/selenide-5.13.0/</link><pubDate>Wed, 08 Jul 2020 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2020/07/08/selenide-5.13.0/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Лето не повод расслабляться! Мы выпустили релиз &lt;a href="https://github.com/selenide/selenide/milestone/98?closed=1"&gt;Selenide 5.13.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Будьте осторожны, он может сломать ваши тесты (если они были неаккуратно сделаны).&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#should-have-empty-text"&gt;Запретили &lt;code&gt;shouldHave(text(""))&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#remove-unneeded-allure-logs"&gt;Убрали лишние логи из аллюра&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#improve-collection-error-messages"&gt;Сообщение об ошибках для коллекций&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#fix-upload-without-form"&gt;Скачиваем файлы без &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#download-files-with-quotes"&gt;Скачиваем файлы с кавычками в имени&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#write-webdriver-logs-to-file"&gt;Пишем логи вебдрайвера в файл&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#new-file-download-mode-folder"&gt;Новый способ скачивания файлов &lt;code&gt;FOLDER&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#get-wrapped-element-waits-for-element"&gt;Метод &lt;code&gt;$.getWrappedElement()&lt;/code&gt; снова ждёт появления элемента&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#statistics"&gt;Статистика&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 id="should-have-empty-text"&gt;Метод &lt;code&gt;$.shouldHave(text(&amp;quot;&amp;quot;))&lt;/code&gt; кидает ошибку&lt;/h2&gt;
&lt;p&gt;Возможно, самый популярный метод селенида - это &lt;code&gt;$.shouldHave(text(&amp;quot;что-то&amp;quot;))&lt;/code&gt;. Но даже если вы используете его каждый день,
возможно, вы не подозреваете, что он проверяет &lt;em&gt;подстроку&lt;/em&gt;. Т.е. проверка &lt;code&gt;$(&amp;quot;h1&amp;quot;).shouldHave(text(&amp;quot;ello&amp;quot;))&lt;/code&gt; сработает и для
элемента &lt;code&gt;&amp;lt;h1&amp;gt;Hello World&amp;lt;/h1&amp;gt;&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.12.2</title><link>https://ru.selenide.org/2020/05/29/selenide-5.12.2/</link><pubDate>Fri, 29 May 2020 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2020/05/29/selenide-5.12.2/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Ловите ещё один мини-релиз &lt;a href="https://github.com/selenide/selenide/milestone/99?closed=1"&gt;Selenide 5.12.2&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="подправили-аннотации-nonnull"&gt;Подправили аннотации @Nonnull&lt;/h2&gt;
&lt;p&gt;&amp;hellip; для некоторых методов &lt;code&gt;SelenideElement&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;После обновления на Selenide 5.12.0 некоторые пользователи котлина начали жаловаться, что их проекты переставил компилироваться.&lt;br&gt;
Всё дело в том, что мы пометили все методы &lt;code&gt;SelenideElement&lt;/code&gt; аннотациями &lt;code&gt;@Nullable&lt;/code&gt;/&lt;code&gt;@Nonnull&lt;/code&gt;, а котлин к ним чуток.&lt;/p&gt;
&lt;p&gt;Для следующих методов мы теперь прописали &lt;code&gt;@Nonnull&lt;/code&gt;, потому что дополнительная проверка показала, что они никогда не возвращают null:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;$.getText()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$.text()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$.innerText()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$.innerHtml()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$.getSelectedText()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Теперь в котлине их можно по-прежнему пихать в ненулевые переменные (хоть мне и кажутся сомнительными такие конструкции в тестах).&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.12.1</title><link>https://ru.selenide.org/2020/05/25/selenide-5.12.1/</link><pubDate>Mon, 25 May 2020 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2020/05/25/selenide-5.12.1/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;По горячим следам вы выпустили багфикс релиз &lt;a href="https://github.com/selenide/selenide/milestone/97?closed=1"&gt;Selenide 5.12.1&lt;/a&gt;
с парочкой мелких исправлений для &lt;a href="https://ru.selenide.org/2020/05/23/selenide-5.12.0/"&gt;Selenide 5.12.0&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="исправили-concurrent-modification-exception-при-инициализации-вебдрайвера"&gt;Исправили &lt;em&gt;Concurrent modification exception&lt;/em&gt; при инициализации вебдрайвера&lt;/h2&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/issues/1170"&gt;issue 1170&lt;/a&gt; и &lt;a href="https://github.com/selenide/selenide/pull/1171"&gt;PR 1171&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="исправили-мержинг-настройки-excludeswitches-разных-типов"&gt;Исправили мержинг настройки &amp;ldquo;excludeSwitches&amp;rdquo; разных типов&lt;/h2&gt;
&lt;p&gt;Оказывается, настройку &lt;code&gt;excludeSwitches&lt;/code&gt; можно задать и как массив, и как список:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chromeOptions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setExperimentalOption&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;excludeSwitches&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;enable-automation&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;load-extension&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chromeOptions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setExperimentalOption&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;excludeSwitches&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;asList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;enable-automation&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;load-extension&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Селенид 5.12.0 ломался, если задать вперемежку и так, и так. Починили.&lt;/p&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/issues/1169"&gt;issue 1169&lt;/a&gt; и &lt;a href="https://github.com/selenide/selenide/pull/1174"&gt;PR 1174&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="новости"&gt;Новости&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Мы опубликовали &lt;a href="https://github.com/selenide/selenide/wiki/Selenide-Roadmap"&gt;Selenide Roadmap&lt;/a&gt;. Ждём ваших отзывов!&lt;/li&gt;
&lt;li&gt;Видео с митапа &lt;a href="https://www.youtube.com/watch?v=1d-nKyeTH2Y"&gt;pro:TEST&lt;/a&gt; - Чехия, 28.04.2020&lt;/li&gt;
&lt;li&gt;Видео с митапа &lt;a href="https://www.youtube.com/watch?v=aFqZ6dbUJIw&amp;amp;feature=emb_logo"&gt;QA meetup&lt;/a&gt; - Словакия, 12.05.2020&lt;/li&gt;
&lt;li&gt;Всеволод Брекелов и Артём Ерошенко запустили шоу &lt;a href="https://meetup.jugru.org/qa-survival-bias-1"&gt;&amp;ldquo;Ошибка выжившего&amp;rdquo;&lt;/a&gt;. Я посмотрел первые 4 выпуска - годно!&lt;/li&gt;
&lt;li&gt;Ребята и девчонки из jug.ru запустили шоу &amp;ldquo;Тяжелое утро с Heisenbug&amp;rdquo;.&lt;br&gt;
Ближайший выпуск будет &lt;strong&gt;со мной&lt;/strong&gt;, ура-ура! &lt;a href="https://meetup.jugru.org/qa-heisenbug-breakfast-2"&gt;27 мая 2020&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://asolntsev.github.io/"&gt;Андрей Солнцев&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.12.0</title><link>https://ru.selenide.org/2020/05/23/selenide-5.12.0/</link><pubDate>Sat, 23 May 2020 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2020/05/23/selenide-5.12.0/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Ура, релиз &lt;a href="https://github.com/selenide/selenide/milestone/95?closed=1"&gt;Selenide 5.12.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Большая часть изменений касается настроек браузеров.&lt;/p&gt;
&lt;h2 id="порешали-старинную-проблему-с-configurationbrowsercapabilities"&gt;Порешали старинную проблему с &lt;code&gt;Configuration.browserCapabilities&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Люди давно уже жаловались на то, что часть настроек в &lt;code&gt;ChromeOptions&lt;/code&gt; теряется (при некоторых условиях).
Вызвана она была &lt;a href="https://github.com/SeleniumHQ/selenium/issues/5279"&gt;старой багой в Selenium&lt;/a&gt;, которой никто особо не занимается.
И мы не хотели ввязываться.&lt;/p&gt;
&lt;p&gt;Но кажется, нам удалось найти простой костыль.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Если вам помогло - делитесь.&lt;/li&gt;
&lt;li&gt;Если не помогло - тем более делитесь, будем докостыливать дальше.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/issues/676"&gt;issue 676&lt;/a&gt;, &lt;a href="https://github.com/selenide/selenide/issues/1097"&gt;issue 1097&lt;/a&gt;
и &lt;a href="https://github.com/selenide/selenide/pull/1155"&gt;PR 1155&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.11.1</title><link>https://ru.selenide.org/2020/04/21/selenide-5.11.1/</link><pubDate>Tue, 21 Apr 2020 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2020/04/21/selenide-5.11.1/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Похоже, релиз &lt;a href="https://github.com/selenide/selenide/milestone/94?closed=1"&gt;Selenide 5.11.0&lt;/a&gt; всё-таки сломал слишком
много устоев, и мы решили сбавить обороты. :)&lt;/p&gt;
&lt;p&gt;Меняем ваше возмущение на &lt;a href="https://github.com/selenide/selenide/milestone/96?closed=1"&gt;Selenide 5.11.1&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="slf4j"&gt;SLF4J&lt;/h2&gt;
&lt;p&gt;Народные массы возмутил тот факт, что в версии 5.11.0 селенид безусловно стал требовать правильной зависимости slf4j.
Народные массы не хотят настраивать slf4j и в гробу видали наши логи. :)&lt;/p&gt;
&lt;p&gt;Для нас это было неожиданно, но мы идём навстречу трудящимся.&lt;/p&gt;
&lt;p&gt;Теперь селенид требует slf4j не всегда, а только в тех редких случаях, когда без него точно никак.
А именно, если вы включите &lt;a href="https://ru.selenide.org/2016/09/26/selenide-3.10/"&gt;фичу &lt;code&gt;TextReport&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.11.0</title><link>https://ru.selenide.org/2020/04/19/selenide-5.11.0/</link><pubDate>Sun, 19 Apr 2020 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2020/04/19/selenide-5.11.0/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Мы выпустили &lt;a href="https://github.com/selenide/selenide/milestone/94?closed=1"&gt;Selenide 5.11.0&lt;/a&gt;.&lt;br&gt;
Это уже второй карантинный релиз Selenide.
И чтобы вам не засохнуть от скуки, мы сделали парочку существенных изменений.&lt;/p&gt;
&lt;h2 id="поменяли-поведение-shouldnot-проверок-для-несуществующего-элемента"&gt;Поменяли поведение &lt;code&gt;shouldNot*&lt;/code&gt; проверок для несуществующего элемента&lt;/h2&gt;
&lt;p&gt;Просто взгляните на следующую таблицу, чтобы понять, что поменялось.&lt;br&gt;
Предположим, что элемент &lt;code&gt;h1&lt;/code&gt; &lt;strong&gt;не найден&lt;/strong&gt; на странице.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Проверка&lt;/th&gt;
 &lt;th&gt;Selenide 5.10-&lt;/th&gt;
 &lt;th&gt;Selenide 5.11+&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;h1.shouldNot(exist)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;ok&lt;/td&gt;
 &lt;td&gt;ok&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;h1.shouldNotBe(visible)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;ok&lt;/td&gt;
 &lt;td&gt;ok&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;h1.shouldBe(hidden)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;ok&lt;/td&gt;
 &lt;td&gt;ok&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;h1.shouldNotHave(text(&amp;quot;foo&amp;quot;))&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;ok&lt;/td&gt;
 &lt;td&gt;FAIL&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;h1.shouldNotHave(attribute(&amp;quot;bar&amp;quot;))&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;ok&lt;/td&gt;
 &lt;td&gt;FAIL&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;h1.find(&amp;quot;h2&amp;quot;).shouldNot(exist)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;ok&lt;/td&gt;
 &lt;td&gt;ok&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;h1.find(&amp;quot;h2&amp;quot;).shouldNotHave(text(&amp;quot;foo&amp;quot;))&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;ok&lt;/td&gt;
 &lt;td&gt;FAIL&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;br/&gt;
&lt;h4 id="старая-логика"&gt;Старая логика&lt;/h4&gt;
&lt;p&gt;Когда-то давно в селениде было принято такое решение: проверка &lt;code&gt;h1.shouldNotHave(text(&amp;quot;foo&amp;quot;))&lt;/code&gt; не должна падать:
нет элемента - нет и текста. Значит, условие &amp;ldquo;should not&amp;rdquo; выполнено.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.10.0</title><link>https://ru.selenide.org/2020/03/18/selenide-5.10.0/</link><pubDate>Wed, 18 Mar 2020 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2020/03/18/selenide-5.10.0/</guid><description>&lt;p&gt;Здоровендос!&lt;/p&gt;
&lt;p&gt;Шёл третий день карантина.&lt;/p&gt;
&lt;p&gt;Чтобы вам не было одиноко, мы выпустили &lt;a href="https://github.com/selenide/selenide/milestone/93?closed=1"&gt;Selenide 5.10.0&lt;/a&gt; с
кучей улучшений, некоторые из которых даже окажутся капельку обратно несовместимыми. Ну, чтобы вы не скучали в своих берлогах.&lt;/p&gt;
&lt;div class="blogpost-menu"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#add-shadow-dom-support"&gt;Добавили поддержку Shadow DOM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#exclude-bup-by-default"&gt;не тянем BrowserUpProxy по умолчанию&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#replace-guava"&gt;Поменяли Guava API на Java API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#add-quotes-to-report"&gt;Селенидовский отчёт в Allure красивее&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#add-image-condition"&gt;Добавили условие shouldBe(image)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#video"&gt;Видосики&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 id="add-shadow-dom-support"&gt;Добавили поддержку Shadow DOM&lt;/h2&gt;
&lt;p&gt;См. примеры &lt;a href="https://github.com/selenide/selenide/blob/master/src/test/java/integration/ShadowElementTest.java"&gt;в тестах&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shadowCss&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#anyButton&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#shadow-host&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="na"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shadowCss&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;p&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#shadow-host&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Inside Shadow-DOM&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shadowCss&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;p&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#shadow-host&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#inner-shadow-host&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;The Shadow-DOM inside another shadow tree&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;Firefox&lt;/em&gt;: Вызов &lt;code&gt;setValue(&amp;quot;test&amp;quot;)&lt;/code&gt; / &lt;code&gt;val(&amp;quot;text&amp;quot;)&lt;/code&gt; на input элементе выкидывает ошибку &amp;ldquo;not reachable by keyboard&amp;rdquo;.&lt;br&gt;
Как временное решение, можно использовать &lt;code&gt;fastSetValue=true&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.9.0</title><link>https://ru.selenide.org/2020/03/10/selenide-5.9.0/</link><pubDate>Tue, 10 Mar 2020 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2020/03/10/selenide-5.9.0/</guid><description>&lt;p&gt;Здоровендос!&lt;/p&gt;
&lt;p&gt;По всему миру объявлена пандемия &lt;a href="https://www.youtube.com/watch?v=jLG3RXECQU8"&gt;flaky тестов&lt;/a&gt;, и мы ищем новые лекарства для борьбы с ними.&lt;/p&gt;
&lt;p&gt;Сегодня мы выпустили &lt;a href="https://github.com/selenide/selenide/milestone/92?closed=1"&gt;Selenide 5.9.0&lt;/a&gt; с одной фичей, которая может помочь справиться с моргающими тестами.&lt;/p&gt;
&lt;h2 id="добавили-фильтр-для-скачивания-файлов-downloadfilefilter"&gt;Добавили фильтр для скачивания файлов: &lt;code&gt;$.download(FileFilter)&lt;/code&gt;&lt;/h2&gt;
&lt;h4 id="проблема"&gt;Проблема&lt;/h4&gt;
&lt;p&gt;При скачивании файлов &lt;em&gt;через прокси&lt;/em&gt; селенид может иногда скачать не тот файл.&lt;br&gt;
Селенид ведь как скачивает файлы: кликает на кнопку &amp;ldquo;Скачать&amp;rdquo; и перехватывает ответ сервера браузеру.&lt;/p&gt;
&lt;p&gt;Но иногда в этот момент между браузером и сервером могут лететь какие-нибудь левые запросы, никак не связанные со скачиванием.
Например, хром решает проверить обновления. Или ваше приложение шлёт запросы в google analytics. Или просто какие-то фоновые запросы.
Это создаёт плодотворную почву для появления &lt;a href="https://www.youtube.com/watch?v=jLG3RXECQU8"&gt;flaky тестов&lt;/a&gt;, которые у вас на машине работают, а на дженкинсе иногда падают.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.8.0</title><link>https://ru.selenide.org/2020/02/28/selenide-5.8.0/</link><pubDate>Fri, 28 Feb 2020 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2020/02/28/selenide-5.8.0/</guid><description>&lt;p&gt;Приветос!&lt;/p&gt;
&lt;p&gt;Мы подбили ещё пачку пуллреквестов и выпустили &lt;a href="https://github.com/selenide/selenide/milestone/90?closed=1"&gt;Selenide 5.8.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Какие же обновления нас ждут?&lt;/p&gt;
&lt;h2 id="упростили-создание-своих-условий-с-помощью-лямбд"&gt;Упростили создание своих условий с помощью лямбд&lt;/h2&gt;
&lt;p&gt;В классе &lt;code&gt;Condition&lt;/code&gt; появился новый метод &lt;code&gt;match&lt;/code&gt;, который позволяет добавлять свои проверки, не создавая подклассов &lt;code&gt;Condition&lt;/code&gt;.
Ему надо просто скормить лямбду.&lt;/p&gt;
&lt;p&gt;См. примеры &lt;a href="https://github.com/selenide/selenide/blob/master/src/test/java/integration/ConditionsTest.java"&gt;в тестах&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#multirowTable&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;should&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;border=1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;el&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;border&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Также появились похожие методы для коллекций &lt;code&gt;anyMatch&lt;/code&gt;, &lt;code&gt;allMatch&lt;/code&gt; и &lt;code&gt;noneMatch&lt;/code&gt;.
См. примеры &lt;a href="https://github.com/selenide/selenide/blob/master/src/test/java/integration/CollectionMethodsTest.java"&gt;в тестах&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;input&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldBe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;anyMatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;value==dog&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;el&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;value&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dog&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;input&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldBe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;allMatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;value==cat&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;el&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;value&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;cat&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;input&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldBe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;noneMatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;value==bird&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;el&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;value&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;bird&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/issues/662"&gt;issue 662&lt;/a&gt;.&lt;br&gt;
Спасибо &lt;a href="https://github.com/dstekanov"&gt;Dmytro Stekanov&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/1059"&gt;PR 1059&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.7.0</title><link>https://ru.selenide.org/2020/02/07/selenide-5.7.0/</link><pubDate>Fri, 07 Feb 2020 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2020/02/07/selenide-5.7.0/</guid><description>&lt;p&gt;Приветос!&lt;/p&gt;
&lt;p&gt;Неожиданно нас завалили пуллреквестами с кучей полезных изменений. В этом сила опенсорса!&lt;/p&gt;
&lt;p&gt;Мы подбили всё это в кучу и выпустили &lt;a href="https://github.com/selenide/selenide/milestone/89?closed=1"&gt;Selenide 5.7.0&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="мы-добавили-новую-настройку-configurationdownloadsfolder"&gt;Мы добавили новую настройку &lt;code&gt;Configuration.downloadsFolder&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Раньше файлы скачивались в папку &lt;code&gt;build/reports&lt;/code&gt; - в ту самую, где генерируются отчёты о прохождении тестов.&lt;br&gt;
А людям иногда хочется разделять (и властвовать?).&lt;br&gt;
Для них мы сделали отдельную настройку &lt;code&gt;Configuration.downloadsFolder&lt;/code&gt; - именно туда теперь будут сохраняться файлы.&lt;/p&gt;
&lt;p&gt;По умолчанию это папка &lt;code&gt;build/downloads&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/issues/1025"&gt;issue 1025&lt;/a&gt;.&lt;br&gt;
Спасибо &lt;a href="https://github.com/dstekanov"&gt;Dmytro Stekanov&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/1041"&gt;PR 1041&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.6.1</title><link>https://ru.selenide.org/2020/01/14/selenide-5.6.1/</link><pubDate>Tue, 14 Jan 2020 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2020/01/14/selenide-5.6.1/</guid><description>&lt;p&gt;Всех с Новым Годом!&lt;/p&gt;
&lt;p&gt;Новый год - новый релиз. Встречайте &lt;a href="https://github.com/selenide/selenide/milestone/88?closed=1"&gt;Selenide 5.6.1&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id="добавили-метод-selenideexecuteasyncscript"&gt;Добавили метод &lt;code&gt;Selenide.executeAsyncScript()&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;Нет такого человека, который ни разу не запускал бы метод &lt;code&gt;Selenide.executeJavaScript()&lt;/code&gt;.
JavaScript позволяет выйти &lt;a href="https://ru.selenide.org/2019/12/24/advent-calendar-javascript-tricks/"&gt;на новый уровень сумрака&lt;/a&gt; в автоматизации.&lt;/p&gt;
&lt;p&gt;А теперь мы добавили ещё и метод &lt;code&gt;Selenide.executeAsyncScript()&lt;/code&gt;. Правда, я плохо представляю, в каких случаях он
может понадобится, но если кому надо - теперь он есть.&lt;/p&gt;
&lt;p&gt;Обратите внимание, его использование сложнее, чем обычного &lt;code&gt;executeJavaScript()&lt;/code&gt;.
После исполнения асинхронного JS кода нужно вызвать callback с результатом. А callback нужно получить из &lt;em&gt;последнего&lt;/em&gt; аргумента:&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.6.0</title><link>https://ru.selenide.org/2019/12/26/selenide-5.6.0/</link><pubDate>Thu, 26 Dec 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/12/26/selenide-5.6.0/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Под конец года мы выпустили &lt;a href="https://github.com/selenide/selenide/milestone/87?closed=1"&gt;Selenide 5.6.0&lt;/a&gt; с одним обновлением.&lt;/p&gt;
&lt;p&gt;Мы поменяли &lt;code&gt;BrowserMobProxy&lt;/code&gt; (который больше не поддерживается) на его форк &lt;code&gt;BrowserUpProxy&lt;/code&gt; (текущая версия 2.0.1).&lt;/p&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/issues/1019"&gt;issue 1019&lt;/a&gt;.&lt;br&gt;
Спасибо &lt;a href="https://github.com/rosolko"&gt;Aliaksandr Rasolka&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/1020"&gt;PR 1020&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="что-хорошего-в-этом-browserupproxy"&gt;Что хорошего в этом &lt;code&gt;BrowserUpProxy&lt;/code&gt;?&lt;/h2&gt;
&lt;p&gt;Он&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Поддерживает Brotli Compression (а не только gzip)&lt;/li&gt;
&lt;li&gt;Поддерживает HTTP/2&lt;/li&gt;
&lt;li&gt;Основан на поддерживаемом форке &lt;a href="https://github.com/mrog/LittleProxy"&gt;LittleProxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Использует какой-то улучшенный &lt;a href="https://github.com/sdstoehr/har-reader"&gt;HAR reader&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Умеет фильтровать записи в HAR&lt;/li&gt;
&lt;li&gt;Поддерживает версионированные заголовки для JSON типа &lt;code&gt;Content-Type=application/something-v1+json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Имеет встроенные ассерты для сетевых запросов (что это вообще?)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Полный список изменений &lt;code&gt;BrowserUpProxy&lt;/code&gt; (по сравнению с BrowserMobProxy) есть &lt;a href="https://github.com/browserup/browserup-proxy/blob/master/CHANGELOG.md"&gt;тут&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Трюки с JavaScript</title><link>https://ru.selenide.org/2019/12/24/advent-calendar-javascript-tricks/</link><pubDate>Tue, 24 Dec 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/12/24/advent-calendar-javascript-tricks/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;На дворе 24 декабря, католическое рождество. А это значит, что Advent Calendar подошёл к концу.&lt;/p&gt;
&lt;p&gt;И напоследок мы поиграемся с JavaScript.&lt;/p&gt;
&lt;p&gt;Как язык JavaScript, конечно, дно, но он даёт большие возможности при написании автотестов.&lt;br&gt;
Он позволяет залезть в такие дыры, куда с обычным вебдрайвером и не снилось.&lt;/p&gt;
&lt;p&gt;Приведу несколько примеров из реальных проектов.&lt;/p&gt;
&lt;h2 id="выбрать-дату"&gt;Выбрать дату&lt;/h2&gt;
&lt;p&gt;Есть масса всевозможных элементов для выбора даты - т.н. &amp;ldquo;date picker&amp;rdquo;. И выбрать в них нужную дату - это вечная головная боль.&lt;/p&gt;</description></item><item><title>Defaŭlta lingvo</title><link>https://ru.selenide.org/2019/12/22/advent-calendar-defaulta-lingvo/</link><pubDate>Sun, 22 Dec 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/12/22/advent-calendar-defaulta-lingvo/</guid><description>&lt;h1 id="defaŭlta-lingvo"&gt;Defaŭlta lingvo&lt;/h1&gt;
&lt;p&gt;Название сегодняшней темы пришло из языка Эсперанто и означает &amp;ldquo;язык по умолчанию&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Вы могли заметить, что некоторые веб-приложения и сайты автоматически меняют свой язык в зависимости от настроек вашего браузера или вашего местоположения.&lt;/p&gt;
&lt;h2 id="проблема"&gt;Проблема&lt;/h2&gt;
&lt;p&gt;В том случае, когда у вас в команде интернационал разработчиков, которые пишут и запускают тесты на разных компьютерах, вы могли обратить внимание, что иногда одни и те же тесты начинают падать из-за того, приложение запустилось не на том языке, для которого писались тесты.&lt;/p&gt;</description></item><item><title>Теория большого вейта</title><link>https://ru.selenide.org/2019/12/20/advent-calendar-big-wait-theory/</link><pubDate>Fri, 20 Dec 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/12/20/advent-calendar-big-wait-theory/</guid><description>&lt;h1 id="теория-большого-вейта"&gt;Теория большого вейта&lt;/h1&gt;
&lt;p&gt;Тема ожиданий вызывает много обсуждений и споров.&lt;br&gt;
Современные веб-сайты создают проблемы для &lt;em&gt;написателей&lt;/em&gt; автотестов. Возникает много ситуаций, в которых стандартные методы Selenium неэффективны.&lt;/p&gt;
&lt;p&gt;Если вы читали документацию Selenide, вы уже знаете, что классические явные ожидания типа&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;element&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WebDriverWait&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;driver&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;timeOutForElement&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;until&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ExpectedConditions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;presenceOfElementLocated&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;By&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;cssSelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;cssSelector&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;или&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;element&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WebDriverWait&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;driver&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;timeOutForElement&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;until&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ExpectedConditions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;visibilityOfElementLocated&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;By&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;cssSelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;cssSelector&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;были заменены в Selenide более коротким конструкциями типа&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;element&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;cssSelector&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;should&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;exist&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;element&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;cssSelector&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldBe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;visible&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Как известно, ассерты в Selenide - это новая версия явных ожиданий, что хорошо описано в &lt;a href="https://selenide.org/documentation.html"&gt;документации&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Как получить сетевые запросы с помощью прокси</title><link>https://ru.selenide.org/2019/12/18/advent-calendar-network-logs-with-proxy/</link><pubDate>Wed, 18 Dec 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/12/18/advent-calendar-network-logs-with-proxy/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;В предыдущих постах нашего рождественского календаря мы рассмотрели два способа получить сетевые запросы между браузером и приложением.&lt;br&gt;
Оба нас расстроили тем, что не позволяют прочитать тело запроса/ответа.&lt;/p&gt;
&lt;p&gt;Наконец, дошла очередь до третьего способа - через встроенный прокси-сервер.&lt;/p&gt;
&lt;h3 id="перед-тестом"&gt;Перед тестом&lt;/h3&gt;
&lt;p&gt;Как вы знаете, в селениде уже есть встроенный прокси-сервер, надо его всего лишь включить:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;proxyEnabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И ещё нужно сказать прокси-серверу, чтобы он начал отслеживать запросы:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BrowserMobProxy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WebDriverRunner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getSelenideProxy&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;getProxy&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// запоминать тело запросов (по умолчанию тело не запоминается, ибо может быть большим)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bmp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setHarCaptureTypes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CaptureType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAllContentCaptureTypes&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// запоминать как запросы, так и ответы&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bmp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;enableHarCaptureTypes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CaptureType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;REQUEST_CONTENT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CaptureType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;RESPONSE_CONTENT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// начинай запись!&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bmp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;newHar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;pofig&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="после-теста"&gt;После теста&lt;/h3&gt;
&lt;p&gt;Теперь нужно получить HAR и анализировать все записи в нём:&lt;/p&gt;</description></item><item><title>Как получить логи браузера через JavaScript</title><link>https://ru.selenide.org/2019/12/17/advent-calendar-browser-logs-with-js/</link><pubDate>Tue, 17 Dec 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/12/17/advent-calendar-browser-logs-with-js/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;В прошлом посте нашего рождественского календаря мы пробовали получить логи хрома с помощью &lt;em&gt;капабилити&lt;/em&gt; &amp;ldquo;goog:loggingPrefs&amp;rdquo;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;UPD Позже был реализован метод, который работает и в Firefox, и в Chromium браузерах:&lt;br&gt;
&lt;a href="https://ru.selenide.org/2025/10/29/selenide-7.12.0/#browser-logs-with-bidi"&gt;Собираем логи браузера с помощью DevTools/BiDi&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;А сегодня попробуем другой способ - с помощью JavaScript.&lt;/p&gt;
&lt;p&gt;Итак, надо всего лишь в конце теста дёрнуть такой вот JavaScript:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;js&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;var performance = window.performance || window.mozPerformance&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34; || window.msPerformance || window.webkitPerformance || {};&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34; return performance.getEntries() || {};&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;netData&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;executeJavaScript&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;js&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Network traffic: {}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;netData&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Результат получается примерно такой:&lt;/p&gt;</description></item><item><title>Как получить логи браузера</title><link>https://ru.selenide.org/2019/12/16/advent-calendar-browser-logs/</link><pubDate>Mon, 16 Dec 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/12/16/advent-calendar-browser-logs/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Мы продолжаем наш рождественский календарь.&lt;br&gt;
На сей раз мы посмотрим, как можно взглянуть хрому под вкладку &amp;ldquo;developer tools&amp;rdquo;.&lt;br&gt;
Это на случай, если вы хотите понять, какие ошибки писались и какие сетевые запросы летели из тестируемого приложения во время прогона тестов.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;UPD Позже был реализован метод, который работает и в Firefox, и в Chromium браузерах:&lt;br&gt;
&lt;a href="https://ru.selenide.org/2025/10/29/selenide-7.12.0/#browser-logs-with-bidi"&gt;Собираем логи браузера с помощью DevTools/BiDi&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;Chromedriver предлагает следующий рецепт.&lt;/p&gt;
&lt;h3 id="1-добавить-щепотку-строк-при-открытии-браузера"&gt;1. Добавить щепотку строк при открытии браузера:&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;LoggingPreferences&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;logPrefs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LoggingPreferences&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;logPrefs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;enable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LogType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;BROWSER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Level&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ALL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;logPrefs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;enable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LogType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;PERFORMANCE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Level&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ALL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;capabilities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setCapability&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;goog:loggingPrefs&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;logPrefs&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;До какой-то версии эта &lt;em&gt;капабилитя&lt;/em&gt; называлась &amp;ldquo;loggingPrefs&amp;rdquo;, потом переименовали в &amp;ldquo;goog:loggingPrefs&amp;rdquo;.&lt;br&gt;
Не знаю, как в других браузерах.&lt;/p&gt;</description></item><item><title>Drag and Drop</title><link>https://ru.selenide.org/2019/12/15/advent-calendar-drag-and-drop/</link><pubDate>Sun, 15 Dec 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/12/15/advent-calendar-drag-and-drop/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;В сегодняшнем выпуске рождественского календаря мы посмотрим короткое, но весёлое видео о том, как перетаскивать элементы в Selenide.&lt;/p&gt;
&lt;h3 id="селенид-умеет-перетаскивать-элементы"&gt;Селенид умеет перетаскивать элементы?&lt;/h3&gt;
&lt;p&gt;Да, в селениде есть метод Drag&amp;rsquo;n&amp;rsquo;Drop. Вот скучное описание из блога селенида:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#from&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;dragAndDropTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#to&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А вот весёленькое описание от Martin Škarbala:&lt;/p&gt;
&lt;iframe width="800" height="490" src="https://www.youtube.com/embed/OSnwiosrMq0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;
&lt;p&gt;Вот это подача!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://asolntsev.github.io/"&gt;Андрей Солнцев&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ru.selenide.org&lt;/p&gt;</description></item><item><title>Actions</title><link>https://ru.selenide.org/2019/12/12/advent-calendar-actions/</link><pubDate>Thu, 12 Dec 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/12/12/advent-calendar-actions/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;В сегодняшнем выпуске рождественского календаря мы рассмотрим, как можно использовать &amp;ldquo;действия&amp;rdquo; (Actions) в Selenide.&lt;/p&gt;
&lt;p&gt;Иногда при написании автотестов мы сталкиваемся со странными проблемами. Уверен на 100%, каждый из нас испытывал или
будет испытывать необычные проблемы, которые блокируют нашу работу.
Например, у нас часто не получается кликнуть на какой-то элемент, и стандартная селениумовская/селенидовская команда типа&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;не работает. Причин, по которым клик может не срабатывать - множество. Но мы не можем сдаться просто так, мы должны
найти какое-то решение. В Selenium для таких случаев есть класс &lt;code&gt;Actions&lt;/code&gt;, который позволяет выполнить клик иначе:&lt;/p&gt;</description></item><item><title>Как скачать файл с помощью Selenide</title><link>https://ru.selenide.org/2019/12/10/advent-calendar-download-files/</link><pubDate>Tue, 10 Dec 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/12/10/advent-calendar-download-files/</guid><description>&lt;p&gt;Добрый вечер!&lt;/p&gt;
&lt;p&gt;На дворе декабрь, и в сегодняшнем посте рождественского календаря Selenide мы поговорим о том, какие возможности
для скачивания файлов есть в Selenide.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD&lt;/strong&gt;&lt;br&gt;
Ниже описаны только два способа скачивания - &lt;a href="https://ru.selenide.org/2019/12/10/advent-calendar-download-files/#HTTPGET"&gt;&lt;code&gt;HTTPGET&lt;/code&gt;&lt;/a&gt; и &lt;a href="https://ru.selenide.org/2019/12/10/advent-calendar-download-files/#PROXY"&gt;&lt;code&gt;PROXY&lt;/code&gt;&lt;/a&gt;.
Позже появились &lt;a href="https://ru.selenide.org/2020/07/08/selenide-5.13.0/#new-file-download-mode-folder"&gt;третий способ &lt;code&gt;FOLDER&lt;/code&gt;&lt;/a&gt; и &lt;a href="https://ru.selenide.org/2024/02/07/selenide-7.1.0/#download-files-with-cdp"&gt;четвёртый способ &lt;code&gt;CDP&lt;/code&gt;&lt;/a&gt;.
Возможно, вам нужен как раз один из них, если у вашей ссылки нет атрибута &lt;code&gt;href&lt;/code&gt;, и прокси у вас не заводится.&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="как-я-могу-скачать-файл-в-моём-тесте"&gt;Как я могу скачать файл в моём тесте?&lt;/h1&gt;
&lt;p&gt;В какой-то момент нашей карьеры каждый из нас сталкивается с необходимостью скачать какой-то файл в тесте.&lt;/p&gt;</description></item><item><title>Почему статики запретили, а потом разрешили?</title><link>https://ru.selenide.org/2019/12/09/advent-calendar-statics/</link><pubDate>Mon, 09 Dec 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/12/09/advent-calendar-statics/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;9 день рождественского календаря Selenide.&lt;br&gt;
Расскажу о том, что сильнее всего волнует общественность.&lt;/p&gt;
&lt;h1 id="почему-статики-запретили-в-500-а-потом-снова-разрешили"&gt;Почему статики запретили в 5.0.0, а потом снова разрешили?&lt;/h1&gt;
&lt;p&gt;Короткий ответ: запретили случайно. Но правильно сделали. &lt;/p&gt;
&lt;p&gt;А теперь подробнее. &lt;/p&gt;
&lt;h3 id="коротко-о-хранении-вебдрайверов-в-селениде"&gt;Коротко о хранении вебдрайверов в селениде&lt;/h3&gt;
&lt;p&gt;Селенид изначально хранил вебдрайверы в ThreadLocal.&lt;br&gt;
Это позволяет запускать тесты параллельно: в разных потоках - разные вебдрайверы. Код выглядит примерно так:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;WebDriverRunner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ThreadLocal&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;WebDriver&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;webdriver&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ThreadLocal&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ThreadLocal&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;SelenideProxyServer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;proxy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ThreadLocal&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Скажем, метод &lt;code&gt;$(&amp;quot;a&amp;quot;).click()&lt;/code&gt; работает примерно так:&lt;/p&gt;</description></item><item><title>Как протестировать защиту от CSRF атаки</title><link>https://ru.selenide.org/2019/12/07/advent-calendar-csrf-protection/</link><pubDate>Sat, 07 Dec 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/12/07/advent-calendar-csrf-protection/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Сегодня 7 день рождественского календаря Selenide.&lt;br&gt;
И сегодня мы поговорим о тестировании безопасности.&lt;/p&gt;
&lt;h1 id="что-такое-csrf"&gt;Что такое CSRF?&lt;/h1&gt;
&lt;p&gt;Одна из самых распространённых атак - это CSRF (Cross-Site Request Forgery), или подделка межсайтовых запросов.
Подробно о ней я рассказывал в видосике &lt;a href="https://www.youtube.com/watch?v=z-aEjd22BGU"&gt;WTF Security&lt;/a&gt;, а сейчас для нас
важно то, что защиту от этой атаки легко протестировать вашими обычными автотестами.&lt;/p&gt;
&lt;p&gt;Для того, чтобы веб-приложение было защищено от CSRF-атак, с каждым его POST-запросом должен посылаться один хитрый
параметр. Он обычно называется &lt;code&gt;authenticityToken&lt;/code&gt; (хотя и не обязательно). Когда вы заходите в одной вкладке, скажем,
в свой интернет-банк, а в другой вкладке на сайт с котиками, зловредный код на этом сайте может послать POST-запрос вашему
банку для совершения платежа на счёт хакера. Хакер может послать счёт и сумму, а также все cookies из вашей вкладки, но
он не сможет послать &lt;code&gt;authenticityToken&lt;/code&gt; (потому, что он уникальный для каждой сессии и не хранится в cookies).&lt;/p&gt;</description></item><item><title>Как визуализировать клик</title><link>https://ru.selenide.org/2019/12/06/advent-calendar-visualize-click/</link><pubDate>Fri, 06 Dec 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/12/06/advent-calendar-visualize-click/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;На дворе 6 декабря, мы продолжаем рождественский календарь Selenide.&lt;br&gt;
И сегодня я покажу один простой способ поймать некоторые нестабильные тесты.&lt;/p&gt;
&lt;h1 id="что-не-так-с-кликами"&gt;Что не так с кликами?&lt;/h1&gt;
&lt;p&gt;Вечная проблема - флейки тесты (моргающие, нестабильные).&lt;br&gt;
Одна из типичных причин - клик не срабатывает.&lt;br&gt;
Как я подробно рассказывал &lt;a href="https://www.youtube.com/watch?v=ibx8nVvt-Js"&gt;в этом видео&lt;/a&gt; на DelEx 2019, клик в селениуме
часто не срабатывает потому, что элемент в этот момент двигался, растягивался, сжимался, или внезапно появился какой-то
другой элемент и перекрыл наш. И клик попал в него.&lt;/p&gt;</description></item><item><title>Как быстро проверить размер?</title><link>https://ru.selenide.org/2019/12/04/advent-calendar-effective-size-check/</link><pubDate>Wed, 04 Dec 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/12/04/advent-calendar-effective-size-check/</guid><description>&lt;p&gt;Драсьте!&lt;/p&gt;
&lt;p&gt;На дворе 4 декабря, перед вами открыт рождественский календарь Selenide, и в сегодняшнем посте я покажу один простой трюк, как сделать некоторые проверки быстрее.&lt;/p&gt;
&lt;h1 id="как-быстро-проверить-размер-коллекции"&gt;Как быстро проверить размер коллекции?&lt;/h1&gt;
&lt;p&gt;В Selenide есть удобные методы для проверки коллекций. Например, вот так можно проверить, что в некотором списке книг ровно три книги:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#books .book&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А если страница реализована так, что в HTML книг больше, а ненужные книги просто прячутся, то можно отфильтровать коллекцию перед проверкой:&lt;/p&gt;</description></item><item><title>setWebDriver или WebDriverProvider?</title><link>https://ru.selenide.org/2019/12/03/advent-calendar-set-webdriver-vs-webdriver-provider/</link><pubDate>Tue, 03 Dec 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/12/03/advent-calendar-set-webdriver-vs-webdriver-provider/</guid><description>&lt;p&gt;Добрый вечер!&lt;/p&gt;
&lt;p&gt;На дворе 3 декабря, перед вами открыт рождественский календарь Selenide, и в сегодняшнем посте я отвечу на один простой вопрос.&lt;/p&gt;
&lt;h1 id="что-выбрать-setwebdriver-или-webdriverprovider"&gt;Что выбрать, &lt;code&gt;setWebDriver()&lt;/code&gt; или &lt;code&gt;WebDriverProvider&lt;/code&gt;?&lt;/h1&gt;
&lt;p&gt;Как вы знаете, Selenide по умолчанию сам открывает и закрывает браузер. Вам для этого ничего не надо делать.&lt;/p&gt;
&lt;p&gt;Но иногда вам хочется открыть браузер с какими-то специфичными настройками.
Для этого в селениде предусмотрены два разных метода. Так уж сложилось, что я никогда нигде не писал, почему понадобилось два, и как выбрать один из них.&lt;/p&gt;</description></item><item><title>Как надругаться над Селенидом</title><link>https://ru.selenide.org/2019/12/02/advent-calendar-how-to-abuse-selenide/</link><pubDate>Mon, 02 Dec 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/12/02/advent-calendar-how-to-abuse-selenide/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;На дворе 2 декабря, и мы продолжаем рождественский календарь постом про злоупотребление селенидом.&lt;/p&gt;
&lt;h1 id="как-надругаться-над-селенидом"&gt;Как надругаться над Селенидом&lt;/h1&gt;
&lt;h3 id="и-почему-это-у-многих-вызывает-трудности"&gt;(и почему это у многих вызывает трудности)&lt;/h3&gt;
&lt;p&gt;Я часто получаю жалобу, что у людей не ловится ошибка вот в таком коде:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;.banner&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldBe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;visible&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;.banner .close&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// System.out.println(&amp;#34;Элемент не найден - значит, баннер в этот раз не появился&amp;#34;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Этот тест хочет проверить, появился ли рекламный баннер. Но не сразу, а немножко подождать: вдруг баннер появится с задержкой.
И если появился, надо его закрыть.&lt;/p&gt;</description></item><item><title>Главный Алгоритм</title><link>https://ru.selenide.org/2019/12/01/advent-calendar-main-algorithm/</link><pubDate>Sun, 01 Dec 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/12/01/advent-calendar-main-algorithm/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;В западном мире начался период &amp;ldquo;Адвент&amp;rdquo;, или ожидание Рождества.&lt;/p&gt;
&lt;p&gt;Дети распаковывают свои &amp;ldquo;рождественские календари&amp;rdquo;, в которых открывают каждый день по окошечку (и находят под ним шоколадку).
В Java мире, например, ведут &lt;a href="https://www.javaadvent.com/"&gt;Java Advent Calendar&lt;/a&gt;, в котором разные авторы каждый день публикуют по статье.
Я тоже в нём участвовал пару раз (&lt;a href="https://www.javaadvent.com/2017/12/flaky-tests.html"&gt;2017&lt;/a&gt; и
&lt;a href="https://www.javaadvent.com/2018/12/wtf-connection-pools.html"&gt;2018&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Я тоже решил не отставать и замутить Selenide Advent Calendar. Каждый день по статье. С 1 по 25 декабря.
Начну я, а вы можете присоединиться - сообщите о себе любым способом.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.5.1</title><link>https://ru.selenide.org/2019/11/29/selenide-5.5.1/</link><pubDate>Fri, 29 Nov 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/11/29/selenide-5.5.1/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Соскучились?&lt;/p&gt;
&lt;p&gt;Чтобы вы не расслаблялись, мы выпустили &lt;a href="https://github.com/selenide/selenide/milestone/86?closed=1"&gt;Selenide 5.5.1&lt;/a&gt; с парочкой новых фич.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2019/11/29/selenide-5.5.1/#mobile-browser-emulation"&gt;Эмуляция мобильного браузера&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2019/11/29/selenide-5.5.1/#deprecated-selenide-close"&gt;Пометили метод &lt;code&gt;Selenide.close()&lt;/code&gt; как устаревший&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2019/11/29/selenide-5.5.1/#news"&gt;Новости&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt; 
&lt;h1 id="mobile-browser-emulation"&gt;Добавили эмуляцию мобильного браузера&lt;/h1&gt;
&lt;p&gt;Иногда хочется запустить тесты не на обычном хроме, а &amp;ldquo;как будто в мобилке&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Как будто этот хром открыли бы на мобильном телефоне или планшете.&lt;/p&gt;
&lt;p&gt;(Например, сайт selenide.org открывается на мобилке очень криво. :( Мы работаем над этим.)&lt;/p&gt;
&lt;p&gt;Теперь это легко сделать, добавив такую вот System property перед запуском вебдрайвера:&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.5.0</title><link>https://ru.selenide.org/2019/10/31/selenide-5.5.0/</link><pubDate>Thu, 31 Oct 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/10/31/selenide-5.5.0/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;А как вы празднуете Хэллоуин?&lt;/p&gt;
&lt;p&gt;Мы вот выпустили &lt;a href="https://github.com/selenide/selenide/milestone/85?closed=1"&gt;Selenide 5.5.0&lt;/a&gt; с несколькими &lt;em&gt;обратно несовместимым изменениями&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;СТРАШНО?&lt;/p&gt;
&lt;br/&gt; 
&lt;h1 id="перешли-с-jul-на-slf4j"&gt;Перешли с JUL на SLF4J&lt;/h1&gt;
&lt;p&gt;Иногда селениду нужно записать в лог какие-то вспомогательные сообщения: &amp;ldquo;я нашёл бинарник браузера там-то&amp;rdquo;,
&amp;ldquo;я не смог сохранить скриншот туда-то&amp;rdquo; и т.д.&lt;/p&gt;
&lt;p&gt;До сих пор Селенид писал свои логи через стандартный Java механизм &lt;code&gt;java.util.logging&lt;/code&gt; (т.н. JUL).
Всем известно, что у него есть недостатки, и поэтому в Java мире давно появилась целая куча библиотек, в которых сложно разобраться: Log4J, Slf4j, Logback, JCL.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.4.1</title><link>https://ru.selenide.org/2019/10/16/selenide-5.4.0/</link><pubDate>Wed, 16 Oct 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/10/16/selenide-5.4.0/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Нет ничего унылее октября. Давайте же скрашивать его хорошими новостями!&lt;/p&gt;
&lt;p&gt;Сегодня мы выпустили Selenide 5.4.0 с парочкой существенных изменений, &lt;em&gt;о которых многие из вас давно просили&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD&lt;/strong&gt; В 5.4.0 была ошибка, так что обновляйтесь сразу на &lt;strong&gt;5.4.1&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD 2&lt;/strong&gt; В 5.4.1 тоже нашлась малюсенькая ошибочка: опция &lt;code&gt;Configuration.holdBrowserOpen&lt;/code&gt; не работает. Исправим в следующей версии. Надеюсь, вы не используете её часто.&lt;/p&gt;
&lt;br/&gt; 
&lt;h1 id="fix-illegal-state-exception"&gt;1. Исправили ошибку &amp;ldquo;IllegalStateException WebDriver has been closed&amp;rdquo;&lt;/h1&gt;
&lt;p&gt;Начиная с Selenide 5.0.0 (т.е. примерно год назад), многие пользователи стали жаловаться на ошибку
&lt;code&gt;IIlegalStateException WebDriver has been closed...&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.3.1</title><link>https://ru.selenide.org/2019/09/07/selenide-5.3.1/</link><pubDate>Sat, 07 Sep 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/09/07/selenide-5.3.1/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;На днях случилась сенсация.&lt;/p&gt;
&lt;h4 id="презентация-нового-айфона-прошла-незамеченной"&gt;Презентация нового айфона прошла незамеченной!&lt;/h4&gt;
&lt;p&gt;Потому, что мы выпустили Selenide 5.3.1. Тоже с улучшенными снимками :)&lt;/p&gt;
&lt;p&gt;В этой версии мы исправили ровно одну проблему, зато какую!&lt;/p&gt;
&lt;br/&gt;
&lt;h1 id="maven-где-мои-скриншоты"&gt;Maven, где мои скриншоты?&lt;/h1&gt;
&lt;p&gt;Недавно мы обнаружили, что пользователи мавена и свежего &lt;code&gt;maven-surefire-plugin:2.22.2&lt;/code&gt; были лишены одной из самых важных фич селенида:
имя скриншота не добавлялось к сообщению об ошибке при падении теста.&lt;/p&gt;
&lt;p&gt;Вот это нежданчик!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Как вы вообще жили без этого, бедняги?&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.3.0</title><link>https://ru.selenide.org/2019/09/02/selenide-5.3.0/</link><pubDate>Mon, 02 Sep 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/09/02/selenide-5.3.0/</guid><description>&lt;div style="text-align: right;"&gt;
В Selenide 5.2.8, как в игру,&lt;br/&gt;
На холодном ветру&lt;br/&gt;
Поиграли с тобой,&lt;br/&gt;
Но пришёл сам собой&lt;br/&gt;
Selenide 5.3.0
&lt;/div&gt;
&lt;br/&gt;
&lt;h1 id="968-запускаем-кустарные-команды"&gt;#968 Запускаем кустарные команды&lt;/h1&gt;
&lt;p&gt;Эта фича придётся вам по вкусу.&lt;/p&gt;
&lt;p&gt;Наверняка ваш код полон самодельных команд для операций над веб-элементами. Какие-нибудь хитрые двойные клики, выбор
из радиобаттона на реакте или загрузка файла из спрятанного поля.&lt;/p&gt;
&lt;p&gt;Так вот, мы добавили удобный способ запускать такие команды, особенно несколько команд в одну строку.
Для этого достаточно вызвать метод &lt;code&gt;$.execute&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.2.7</title><link>https://ru.selenide.org/2019/08/01/selenide-5.2.7/</link><pubDate>Thu, 01 Aug 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/08/01/selenide-5.2.7/</guid><description>&lt;p&gt;Всем летний привет!&lt;/p&gt;
&lt;p&gt;Мы выпустили несколько минорных обновлений Selenide: 5.2.5-5.2.7.
Давайте расскажу, зачем понадобилось несколько.&lt;/p&gt;
&lt;br/&gt;
&lt;h1 id="подправили-сообщения-об-ошибках-при-запуске-selenideappium"&gt;Подправили сообщения об ошибках при запуске Selenide+Appium&lt;/h1&gt;
&lt;p&gt;Appium - это вебдрайвер для мобилок (&lt;code&gt;AndroidDriver&lt;/code&gt;, &lt;code&gt;IOSDriver&lt;/code&gt;).
Казалось бы, хорошая идея - использовать для тестирования мобилок знакомый протокол Selenium WebDriver.
Только вот многие вещи, казавшиеся логичными и стандартными в вебе, в мобилках работают по-другому или вовсе не работают.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Appium для Selenium - это как геометрия Лобачевского для геометрии евклидовой: всё круглое и через жопу.&lt;/p&gt;</description></item><item><title>Простота кода</title><link>https://ru.selenide.org/2019/07/08/code-simplicity/</link><pubDate>Mon, 08 Jul 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/07/08/code-simplicity/</guid><description>&lt;p&gt;Давайте поговорим о простоте кода.
Наверное, все согласны с тем, что простой код - хороший код.
Только все понимают &amp;ldquo;простоту&amp;rdquo; по-разному.&lt;/p&gt;
&lt;p&gt;Я хочу показать пример, всплывший в комментариях к нашему сайту, чтобы вы могли сравнить, что такое сложно, а что такое просто.&lt;/p&gt;
&lt;h3 id="задача"&gt;Задача&lt;/h3&gt;
&lt;p&gt;Есть некий список типа &amp;ldquo;Gmail&amp;rdquo; с чекбоксами и заголовками. Требуется пэджобжект, который позволил бы найти по заголовку и
кликнуть один или несколько чекбоксов.&lt;/p&gt;
&lt;h3 id="структура-html"&gt;Структура HTML&lt;/h3&gt;
&lt;p&gt;не важна, но схематично выглядит она так:&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.2.4</title><link>https://ru.selenide.org/2019/06/20/selenide-5.2.4/</link><pubDate>Thu, 20 Jun 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/06/20/selenide-5.2.4/</guid><description>&lt;p&gt;Всем привет из лета!&lt;/p&gt;
&lt;p&gt;Пока в Эстонии празднуют Иванову Ночь и День Победы, мы выпускаем Selenide 5.2.4&lt;/p&gt;
&lt;p&gt;Что нового?&lt;/p&gt;
&lt;br/&gt;
&lt;h1 id="исправили-работу-прокси-с-приложением-на-localhost"&gt;Исправили работу прокси с приложением на localhost&lt;/h1&gt;
&lt;p&gt;Как вы знаете, Селенид может запускать свой встроенный прокси-сервер для некоторых функций (скачивание файлов, авторизация, логирование и т.п.).
Последние версии популярных браузеров (Chrome72+ и Firefox 67+) начали по умолчанию запрещать прокси перехватывать запросы на &lt;code&gt;localhost&lt;/code&gt;.
Типа из соображений безопасности.&lt;/p&gt;
&lt;p&gt;Из-за этого сломалось скачивание файлов у тех ребят, которые запускают AUT на &lt;code&gt;http://localhost:port&lt;/code&gt; (как я).&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.2.3</title><link>https://ru.selenide.org/2019/05/07/selenide-5.2.3/</link><pubDate>Tue, 07 May 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/05/07/selenide-5.2.3/</guid><description>&lt;p&gt;Когда, если не на майских?&lt;/p&gt;
&lt;p&gt;Мы выпустили Selenide 5.2.3 с небольшими, не обратно несовместимым изменениями.&lt;/p&gt;
&lt;p&gt;Испугались?&lt;/p&gt;
&lt;p&gt;Саечку за испуг!&lt;/p&gt;
&lt;p&gt;Всё не так страшно. Подробности ниже:&lt;/p&gt;
&lt;br/&gt;
&lt;h1 id="добавили-метод-selenideloggerbeforeevent"&gt;Добавили метод &lt;code&gt;SelenideLogger.beforeEvent()&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;Иногда нужно что-то логировать ДО совершения действия. Например, писать что-то в лог ПЕРЕД любым кликом.
У Селенида есть для этого интерфейс &lt;code&gt;SelenideLogger&lt;/code&gt;, но до сих пор в нём было только один метод &lt;code&gt;onEvent()&lt;/code&gt;, срабатывающий ПОСЛЕ действия.
Теперь же мы добавили метод &lt;code&gt;beforeEvent&lt;/code&gt;. А &lt;code&gt;onEvent&lt;/code&gt; переименовали в &lt;code&gt;afterEvent&lt;/code&gt;, чтобы было понятнее.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.2.0</title><link>https://ru.selenide.org/2019/02/19/selenide-5.2.0/</link><pubDate>Tue, 19 Feb 2019 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2019/02/19/selenide-5.2.0/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;А вот подоспел и пресс-релиз версии Selenide 5.2.0, которая вышла 19.02.2019.&lt;/p&gt;
&lt;p&gt;Давайте быстренько глянем, что там под капотом, и побежим вперёд к следующим версиям.&lt;/p&gt;
&lt;br/&gt;
&lt;h1 id="добавили-алиасы-для-котлина"&gt;Добавили алиасы для Котлина&lt;/h1&gt;
&lt;p&gt;Поскольку в Kotlin нельзя использовать &lt;code&gt;$&lt;/code&gt; и &lt;code&gt;$$&lt;/code&gt; в качестве названия метода, использование Selenide на Kotlin изначально было не таким уж радужным, как на Java.
&lt;a href="https://github.com/selenide-examples/kotlin/blob/main/src/test/kotlin/SelenideUsersTest.kt"&gt;Здесь&lt;/a&gt; можно посмотреть некоторые варианты, как это можно было решить.&lt;/p&gt;
&lt;p&gt;После долгих споров и изысканий мы остановились на просто и понятном варианте: заменить &lt;code&gt;$&lt;/code&gt; и &lt;code&gt;$$&lt;/code&gt; методами &lt;code&gt;element&lt;/code&gt; и &lt;code&gt;elements&lt;/code&gt;.
Чуть длиннее, чем &lt;code&gt;$&lt;/code&gt;, но зато предложение читается по-человечески:&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.1.1</title><link>https://ru.selenide.org/2018/12/31/selenide-5.1.1/</link><pubDate>Mon, 31 Dec 2018 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2018/12/31/selenide-5.1.1/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;С большим запозданием мы публикуем пресс-релиз Selenide 5.1.1
Давайте быстренько глянем, что там под капотом, и побежим вперёд к следующим версиям.&lt;/p&gt;
&lt;h1 id="selenide-позволяет-кликать-по-прозрачным-элементам"&gt;Selenide позволяет кликать по прозрачным элементам&lt;/h1&gt;
&lt;p&gt;До сих пор Selenide не позволял кликать по прозрачным элементам (у которых &lt;code&gt;opacity: 0&lt;/code&gt;).
Это казалось разумным, ведь реальный пользователь тоже не может кликнуть элемент, который он не видит.&lt;br&gt;
Но выяснилось, что иногда это нужно - например, когда под прозрачным элементом располагается поле для загрузки файла.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.0.1</title><link>https://ru.selenide.org/2018/11/07/selenide-5.0.1/</link><pubDate>Wed, 07 Nov 2018 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2018/11/07/selenide-5.0.1/</guid><description>&lt;p&gt;Привет!
Прошёл месяц с выхода Selenide 5.0.0. Пока не слышно о каких-то громких фейлах. Никто по-большому не жалуется.&lt;/p&gt;
&lt;p&gt;Поэтому громких багфиксов не будет. Мы просто выпустили Selenide 5.0.1 с небольшими исправлениями старых болячек.&lt;/p&gt;
&lt;h1 id="генерируем-случайное-имя-файла-если-нет-никакого"&gt;Генерируем случайное имя файла, если нет никакого&lt;/h1&gt;
&lt;p&gt;Как вы знаете, в Selenide есть удобный метод для скачивания файла по прямой ссылке:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Selenide&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;download&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://utdirect.utexas.edu/apps/pts/parking/citations/nlogon/images/6584836/&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Он пытается получить имя файла из http заголовка или урла. Но если нет ни того, ни другого - метод падал.
А теперь больше не падает, а просто генерирует случайное имя файла. Хотя я бы рассматривал это как багу в приложении.&lt;/p&gt;</description></item><item><title>Вышла Selenide 5.0.0</title><link>https://ru.selenide.org/2018/10/10/selenide-5.0.0/</link><pubDate>Wed, 10 Oct 2018 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2018/10/10/selenide-5.0.0/</guid><description>&lt;p&gt;Ура!
Наконец-то это случилось. Мы выпустили мажорную версию Selenide 5.0.0&lt;/p&gt;
&lt;p&gt;Самое большое изменение в Selenide 5.0.0 - это большой рефакторинг. То есть внутренние изменения. Вас это почти не должно задеть.
Кому интересно - детали рефакторинга будут в отдельном посте.&lt;/p&gt;
&lt;p&gt;Какие же изменения ждут вас в Selenide 5.0.0?&lt;/p&gt;
&lt;h1 id="возможность-открывать-два-браузера-в-одном-тесте"&gt;Возможность открывать два браузера в одном тесте&lt;/h1&gt;
&lt;p&gt;Прежде всего: &lt;em&gt;не используйте эту возможность&lt;/em&gt;!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Открывать два браузера в одном тесте - это в большинстве случаев &lt;strong&gt;плохая практика&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.14.0</title><link>https://ru.selenide.org/2018/08/29/selenide-4.14.0/</link><pubDate>Wed, 29 Aug 2018 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2018/08/29/selenide-4.14.0/</guid><description>&lt;p&gt;29 августа 1997 года компьютерная система Скайнет вышла из-под контроля и нанесла ядерный удар по России.
Так началась война между терминаторами и человечеством.&lt;/p&gt;
&lt;p&gt;С тех прошёл - страшно подумать - 21 год! И раз мы до сих пор живы, мы решили в этот исторический день зарелизить Selenide 4.14.0&lt;/p&gt;
&lt;p&gt;Изменений немного, и они касаются в основном селенидовского прокси-сервера.&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="реализовали-basicauth-через-прокси"&gt;Реализовали BasicAuth через прокси&lt;/h1&gt;
&lt;p&gt;Часто тестовые сервера закрыты паролем (т.н. BasicAuth).
(Зачем это нужно - остаётся для меня загадкой, ведь они и так в интранете! Но что поделаешь, есть как есть.)&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.13.0</title><link>https://ru.selenide.org/2018/08/20/selenide-4.13.0/</link><pubDate>Mon, 20 Aug 2018 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2018/08/20/selenide-4.13.0/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;20 августа в Эстонии отмечается уникальный праздник - День Восстановления Независимости. 20.08.1991 Эстония заново обрела независимость.
Прямо сейчас у меня за окном многотысячный хор поёт патриотические песни и гремит салют.&lt;/p&gt;
&lt;p&gt;А я под звуки салюта выкатываю &amp;hellip; Selenide 4.13.0&lt;/p&gt;
&lt;p&gt;Изменений оказалось больше, чем мне казалось. :)&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="добавили-метод-lastchild"&gt;Добавили метод &lt;code&gt;$.lastChild()&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;Находит последний дочерний элемент данного элемента. Типа &lt;code&gt;$(&amp;quot;table&amp;quot;).lastChild().shouldHave(cssClass(&amp;quot;lastRow&amp;quot;));&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/blob/master/src/test/java/integration/LastChildTest.java"&gt;примеры в тестах селенида&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Спасибо &lt;a href="https://github.com/symonk"&gt;SymonK&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/771"&gt;PR 771&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="добавили-проверки-для-коллекций-с-кастомным-таймаутом"&gt;Добавили проверки для коллекций с кастомным таймаутом&lt;/h1&gt;
&lt;p&gt;Как вы знаете, в Селениде издревле был метод &lt;code&gt;$.waitUntil(условие, таймаут)&lt;/code&gt; для ожидания события с нестандартным таймаутом.
Теперь мы добавили аналогичный метод и для коллекций.
Правда, мы решили не называть его &lt;code&gt;waitUntil&lt;/code&gt;, потому что это название неудачное в плане английской грамматики -
&lt;code&gt;$$.waitUntil(texts(&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;))&lt;/code&gt; просто не звучит. В итоге метод называется так же, как и все предыдущие методы:&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.12.3</title><link>https://ru.selenide.org/2018/07/17/selenide-4.12.3/</link><pubDate>Tue, 17 Jul 2018 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2018/07/17/selenide-4.12.3/</guid><description>&lt;p&gt;Всем привет!
Наконец-то чемпионат закончился, и мы можем вернуться к своим любимым опен-сорсным проектам.&lt;/p&gt;
&lt;p&gt;Сегодня мы выкатили Selenide 4.12.3&lt;/p&gt;
&lt;p&gt;Пробежимся по изменениям?&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="добавили-поддержку-junit-5"&gt;Добавили поддержку JUnit 5&lt;/h1&gt;
&lt;p&gt;Как вы знаете, в Selenide есть специальная поддержка для двух самых распространённых тестовых фреймворков JUnit4 и TestNG.
Это специальные &amp;ldquo;правила&amp;rdquo; или &amp;ldquo;Listeners&amp;rdquo;, которые позволяют периодически переоткрывать браузер, делать скриншоты и т.д.&lt;/p&gt;
&lt;p&gt;Теперь мы добавили аналогичную поддержку и для JUnit 5:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;BrowserStrategyExtension&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ScreenShooterExtension&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SoftAssertsExtension&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TextReportExtension&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Спасибо &lt;a href="https://github.com/rosolko"&gt;Aliaksandr Rasolka&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/757"&gt;PR 757&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.12.2</title><link>https://ru.selenide.org/2018/06/27/selenide-4.12.2/</link><pubDate>Wed, 27 Jun 2018 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2018/06/27/selenide-4.12.2/</guid><description>&lt;p&gt;Мы выкатили Selenide 4.12.2&lt;/p&gt;
&lt;p&gt;Пробежимся по изменениям?&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="добавили-метод-because-к-коллекциям"&gt;Добавили метод &lt;code&gt;because&lt;/code&gt; к коллекциям&lt;/h1&gt;
&lt;p&gt;Как вы знаете, в Selenide есть метод &lt;code&gt;because&lt;/code&gt;, позволяющий написать пояснение, почему автор теста ожидает именно такое поведение:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#login&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldBe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;visible&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;because&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;After 3 wrong answers user should be logged out&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Теперь метод &lt;code&gt;because&lt;/code&gt; появился и для коллекций:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;.error&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;3&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;because&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;A separate error message per wrong answer&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/issues/440"&gt;issue 440&lt;/a&gt; - спасибо &lt;a href="https://github.com/sidelnikovmike"&gt;Mikhail Sidelnikov&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/749"&gt;PR 749&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="селенид-больше-не-будет-пытаться-открыть-браузер"&gt;Селенид больше не будет пытаться открыть браузер&lt;/h1&gt;
&lt;p&gt;&amp;hellip; при выключенной настройке &lt;code&gt;Configuration.reopenBrowserOnFail&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.12.1</title><link>https://ru.selenide.org/2018/06/02/selenide-4.12.1/</link><pubDate>Sat, 02 Jun 2018 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2018/06/02/selenide-4.12.1/</guid><description>&lt;p&gt;С большим опозданием выкладываем описание релиза Selenide 4.12.1&lt;/p&gt;
&lt;p&gt;Лето, футбол - сами понимаете. Не оторваться.&lt;/p&gt;
&lt;p&gt;Итак,&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="исправили-имя-скачиваемого-файла"&gt;Исправили имя скачиваемого файла&lt;/h1&gt;
&lt;p&gt;В случае, если файл скачивается по ссылке, содержащей &lt;code&gt;?&lt;/code&gt; и параметры (типа &lt;code&gt;/download/me/selenide-4.11.5.md?sessioncookie=12345&lt;/code&gt;),
то Selenide пытался создать локальный файл с именем &lt;code&gt;selenide-4.11.5.md?sessioncookie=12345&lt;/code&gt;.
Теперь Selenide будет обрезать всё, что после вопросительного знака. В данном случае он создаст файл &lt;code&gt;selenide-4.11.5.md&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/issues/735"&gt;issue 735&lt;/a&gt; - спасибо &lt;a href="https://github.com/rosolko"&gt;Aliaksandr Rasolka&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/735"&gt;PR 735&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="поменяли-реализацию-метода-seleniderefresh"&gt;Поменяли реализацию метода &lt;code&gt;Selenide.refresh()&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;Люди жаловались, что иногда этот метод не обновлял страницу.
Мы не знали, как это повторить, но на всякий случай поменяли реализацию на вызов
стандартного селениумовского метода &lt;code&gt;webdriver.navigate().refresh()&lt;/code&gt; - и вроде как заработало.&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.11.4</title><link>https://ru.selenide.org/2018/05/09/selenide-4.11.4/</link><pubDate>Wed, 09 May 2018 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2018/05/09/selenide-4.11.4/</guid><description>&lt;p&gt;Реактивно вышел мини-релиз Selenide 4.11.4&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="убрали-спам-в-логах-от-firefox-драйвера"&gt;Убрали спам в логах от Firefox драйвера&lt;/h1&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/issues/673"&gt;issue 673&lt;/a&gt; - спасибо &lt;a href="https://github.com/rosolko"&gt;Aliaksandr Rasolka&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/732"&gt;PR 732&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="обновили-зависимости"&gt;Обновили зависимости&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;selenium 3.12.0&lt;/li&gt;
&lt;li&gt;gson:2.8.4&lt;/li&gt;
&lt;li&gt;guava:25.0&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://asolntsev.github.io/"&gt;Андрей Солнцев&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ru.selenide.org&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.11.3</title><link>https://ru.selenide.org/2018/05/08/selenide-4.11.3/</link><pubDate>Tue, 08 May 2018 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2018/05/08/selenide-4.11.3/</guid><description>&lt;p&gt;8 мая - День работников Федеральной службы по военно-техническому сотрудничеству России.
Специально к этому дню мы приурочили релиз Selenide 4.11.3.&lt;/p&gt;
&lt;p&gt;И вот какие новинки вас ждут:&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="reveal-selenide-proxy-server"&gt;Открыли доступ к прокси-серверу&lt;/h1&gt;
&lt;p&gt;Как вы знаете, Selenide запускает встроенный прокси-сервер (BrowserMobProxy).
Но до сих пор у вас не было к нему доступа, Selenide использовал его только для скачивания файлов.&lt;/p&gt;
&lt;p&gt;Теперь мы сделали публичный метод, с помощью которого вы можете получить инстанс &lt;code&gt;BrowserMobProxy&lt;/code&gt; и использовать как угодно:&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.11.2</title><link>https://ru.selenide.org/2018/04/25/selenide-4.11.2/</link><pubDate>Wed, 25 Apr 2018 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2018/04/25/selenide-4.11.2/</guid><description>&lt;p&gt;Друзья!&lt;/p&gt;
&lt;p&gt;Мы выпустили версию Selenide 4.11.2. Не терпится узнать, какие обновления вас ждут?&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="теперь-можно-делать-скриншоты-элементов-внутри-iframe"&gt;Теперь можно делать скриншоты элементов внутри &lt;code&gt;iframe&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;За примерами можно сходить в &lt;a href="https://github.com/selenide/selenide/blob/master/statics/src/test/java/integration/ScreenshotInIframeTest.java"&gt;ScreenshotInIframeTest&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;SelenideElement&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iframe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#iframe_page&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;SelenideElement&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;element&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#small_div&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Screenshots&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;takeScreenShot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;iframe&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;element&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;спасибо &lt;a href="https://github.com/andrejska"&gt;Andrejs Kalnačs&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/705"&gt;PR 705&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="добавили-метод-atbottom"&gt;Добавили метод &lt;code&gt;atBottom()&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;Он позволяет проверить, что страница проскроллена до самого низа:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;assertFalse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;atBottom&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;executeJavaScript&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;return window.scrollTo(0, document.body.scrollHeight);&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;assertTrue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;atBottom&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Примеры в &lt;a href="https://github.com/selenide/selenide/blob/master/statics/src/test/java/integration/PageAtBottomTest.java"&gt;PageAtBottomTest&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;спасибо &lt;a href="https://github.com/pavelpp"&gt;pavelpp&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/646"&gt;PR 646&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="добавили-настройку-setvaluechangeevent"&gt;Добавили настройку &lt;code&gt;setValueChangeEvent&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;Как известно, методы &lt;code&gt;$.append()&lt;/code&gt; и &lt;code&gt;$.setValue()&lt;/code&gt; после установки значения генерировали несколько событий, в том числе &lt;code&gt;change&lt;/code&gt;.
Недавно мы пришли к выводу, что это неправильно, потому что событие &lt;code&gt;change&lt;/code&gt; должен триггерить браузер в зависимости от
действий пользователя. К тому же иногда это вызывало и реальные проблемы - например, когда это искусственное событие &lt;code&gt;change&lt;/code&gt; вызывало
переход фокуса к следующему в DOM элементу, который был вне viewPort.&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.11.1</title><link>https://ru.selenide.org/2018/04/03/selenide-4.11.1/</link><pubDate>Tue, 03 Apr 2018 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2018/04/03/selenide-4.11.1/</guid><description>&lt;p&gt;Друзья!
С недавних пор мы перешли на &amp;ldquo;Semantic versioning&amp;rdquo;. Теперь версии будут называться 4.11.x и выходить чаще.&lt;/p&gt;
&lt;p&gt;В версии Selenide 4.11.1 было всего одно исправление:&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="исправили-проблему-с-зависающим-хромом-на-windows"&gt;Исправили проблему с зависающим хромом на Windows&lt;/h1&gt;
&lt;p&gt;Бедолаги, сидящие на Windows, стали жаловаться, что после вызова метода &lt;code&gt;Selenide.close()&lt;/code&gt; процесс &lt;code&gt;chrome.exe&lt;/code&gt; остаётся висеть в списке задач.
И хотя это не ошибка селенида, мы смогли подкрутить настройки вебдрайвера, так чтобы хром закрывался.&lt;/p&gt;
&lt;p&gt;спасибо &lt;a href="https://github.com/rosolko"&gt;Aliaksandr Rasolka&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/711"&gt;PR 711&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;На этом пока всё, Selenide 4.11.2 не за горами!&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.11.0</title><link>https://ru.selenide.org/2018/04/02/selenide-4.11/</link><pubDate>Mon, 02 Apr 2018 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2018/04/02/selenide-4.11/</guid><description>&lt;p&gt;Привет, друзья!&lt;/p&gt;
&lt;p&gt;Ой, сколько всего хочется рассказать, аж не терпится!&lt;/p&gt;
&lt;p&gt;Но начнём с релиза 4.11.0&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Итак, какие обновления прилетели в Selenide 4.11.0?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2018/04/02/selenide-4.11/#updade-to-selenium-3.11.0"&gt;Обновились до selenium 3.11.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2018/04/02/selenide-4.11/#texts-in-any-order"&gt;Добавили условие &lt;code&gt;textsInAnyOrder&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2018/04/02/selenide-4.11/#browser-position"&gt;Местоположение браузера на экране&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2018/04/02/selenide-4.11/#download-files-with-cyrillic-letters"&gt;Скачивать файлы с русскими буквами в названии&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2018/04/02/selenide-4.11/#chrome-prefs"&gt;Добавили возможность передавать &lt;code&gt;chromeoptions.prefs&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2018/04/02/selenide-4.11/#proxy-filters"&gt;Перехватчики запросов/ответов в прокси&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2018/04/02/selenide-4.11/#deprecate-follow-link"&gt;Метод &lt;code&gt;$.followLink()&lt;/code&gt; помечен как deprecated&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2018/04/02/selenide-4.11/#null-pointer-in-selenide-report"&gt;NullPointerException в SelenideReport&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2018/04/02/selenide-4.11/#take-screenshot-for-soft-asserts"&gt;Скриншот для софт ассертов&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2018/04/02/selenide-4.11/#news"&gt;Новости&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ru.selenide.org/2018/04/02/selenide-4.11/#resources"&gt;Ресурсы&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;h1 id="updade-to-selenium-3.11.0"&gt;Обновились до selenium 3.11.0&lt;/h1&gt;
&lt;p&gt;Главные &lt;a href="https://selenium2.ru/news/199-selenium-311.html"&gt;изменения в этом релизе&lt;/a&gt; связаны с браузером Internet Explorer и платформой Windows.&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.10</title><link>https://ru.selenide.org/2018/01/12/selenide-4.10/</link><pubDate>Fri, 12 Jan 2018 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2018/01/12/selenide-4.10/</guid><description>&lt;p&gt;Категорический привет!&lt;/p&gt;
&lt;p&gt;Новогодние каникулы оказались очень плодотворными. Мы успели смержить кучу пуллреквестов, которые долго ждали своего часа.&lt;/p&gt;
&lt;p&gt;Итак, с чем мы встречаем старый новый год?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Что вы получите, обновившись на Selenide 4.10&lt;/strong&gt;?&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="добавили-метод-scrollintoview"&gt;Добавили метод &lt;code&gt;$.scrollIntoView()&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;Его удобно использовать, чтобы прокрутить браузер к нужному месту.
Например, это бывает полезно, чтобы обойти баги браузеров, которые иногда не могут кликнуть на элемент, находящийся за областью видимости.&lt;/p&gt;
&lt;p&gt;Если конкретнее, метод &lt;code&gt;$.scrollIntoView()&lt;/code&gt; даёт команду браузеру проскроллить страницу так, чтобы данный элемент оказался в видимой области экрана.&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.9</title><link>https://ru.selenide.org/2017/12/20/selenide-4.9/</link><pubDate>Wed, 20 Dec 2017 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2017/12/20/selenide-4.9/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Под звуки салютов 31 декабря мы выпустили новую версию Selenide 4.9.&lt;/p&gt;
&lt;p&gt;Что под капотом?&lt;/p&gt;
&lt;h1 id="обновились-до-selenium-381"&gt;Обновились до selenium 3.8.1&lt;/h1&gt;
&lt;p&gt;Там есть &lt;a href="https://raw.githubusercontent.com/SeleniumHQ/selenium/master/java/CHANGELOG"&gt;обратно-несовместимые изменения&lt;/a&gt;, так что будьте внимательны.
Ребята из selenium любят удалять существующий функционал :)&lt;/p&gt;
&lt;p&gt;А здесь есть описание &lt;a href="https://selenium2.ru/news/196-selenium-38.html"&gt;по-русски&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Спасибо &lt;a href="https://github.com/rosolko"&gt;Aleksandr Rasolka&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/638"&gt;pull request 638&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="включили-marionette-по-умолчанию"&gt;Включили marionette по умолчанию&lt;/h1&gt;
&lt;p&gt;Как вы знаете, испокон веков дефалтовым браузером в Selenide был Firefox.
Причина проста: это был единственный вебдрайвер, не требующий скачивания отдельного бинарника для управления браузером.
Потом ситуация изменилась. FireFoxDriver больше не работает с новыми версиями Firefox, ему на замену пришёл GeckoDriver (aka Marionette).
Он требует скачивания бинарника, но теперь Selenide умеет скачивать его автоматически.&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.8</title><link>https://ru.selenide.org/2017/10/08/selenide-4.8/</link><pubDate>Sun, 08 Oct 2017 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2017/10/08/selenide-4.8/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Мы выпустили новую версию Selenide 4.8. В основном это обновление Selenium.&lt;/p&gt;
&lt;h1 id="обновились-до-selenium-36"&gt;Обновились до selenium 3.6&lt;/h1&gt;
&lt;p&gt;В этой версии селениума появились кое-какие обратно несовместимые изменения, поэтому мы решили с сделать отдельный релиз.&lt;/p&gt;
&lt;p&gt;Спасибо &lt;a href="https://github.com/ostap-oleksyn"&gt;Ostap Oleksyn&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/611"&gt;pull request 611&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Кстати, заодно мы обновились до &lt;code&gt;guava 23.0&lt;/code&gt; и &lt;code&gt;org.apache.httpcomponents:httpcore:4.4.7&lt;/code&gt;. Мало ли, вдруг кому важно.&lt;/p&gt;
&lt;h1 id="исправили-ошибку-с-софт-ассертами"&gt;Исправили ошибку с софт ассертами&lt;/h1&gt;
&lt;p&gt;Спасибо &lt;a href="https://github.com/ostap-oleksyn"&gt;Ostap Oleksyn&lt;/a&gt; за исправление &lt;a href="https://github.com/selenide/selenide/issues/614"&gt;issue 614&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;Вот и всё. В этот раз обновление должно быть лёгким, так что не откладывайте!&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.7</title><link>https://ru.selenide.org/2017/09/30/selenide-4.7/</link><pubDate>Sat, 30 Sep 2017 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2017/09/30/selenide-4.7/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Мы выпустили новую версию Selenide 4.7 с самой долгожданной фичей за последний год.&lt;/p&gt;
&lt;p&gt;Теперь-то уж заживём!&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="встроенный-webdrivermanager"&gt;Встроенный WebDriverManager&lt;/h1&gt;
&lt;p&gt;Теперь Selenide поставляется вместе со встроенным &lt;a href="https://github.com/bonigarcia/webdrivermanager"&gt;WebDriverManager&lt;/a&gt;.
Это такая библиотека, которая умеет автоматически скачивать свежий бинарник вебдрайвера.
То есть вам больше не нужно заботиться о том, откуда скачать &lt;code&gt;geckodriver.exe&lt;/code&gt; или &lt;code&gt;chromedriver.exe&lt;/code&gt; и в какую папку положить, чтобы он оказался в &lt;code&gt;PATH&lt;/code&gt;.
Selenide позаботится об этом.&lt;/p&gt;
&lt;p&gt;Есть один нюанс. WebDriverManager сработает только в том случае, если:&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.6</title><link>https://ru.selenide.org/2017/09/09/selenide-4.6/</link><pubDate>Sat, 09 Sep 2017 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2017/09/09/selenide-4.6/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Мы выпустили новую версию Selenide 4.6!&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="метод-shouldhaveexactvalue-foo---больше-не-обрезает-пробелы-в-начале-и-конце-строки"&gt;Метод &lt;code&gt;$.shouldHave(exactValue(&amp;quot; foo &amp;quot;))&lt;/code&gt; больше не обрезает пробелы в начале и конце строки&lt;/h1&gt;
&lt;p&gt;Как известно, метод &lt;code&gt;$.shouldHave(value(&amp;quot; foo &amp;quot;))&lt;/code&gt;, который все мы используем в большинстве случаев, обрезает начальные и конечные пробелы в строке.
Это удобно, потому что браузеры тоже так делают. Но вот оказалось, что то же самое делал и метод &lt;code&gt;exactValue()&lt;/code&gt;, а это уже нелогично.&lt;/p&gt;
&lt;p&gt;Предположим, у вас на страничке есть &lt;code&gt;&amp;lt;textarea value=&amp;quot;Regression test description &amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;/code&gt;.
Проверка &lt;code&gt;$(&amp;quot;textarea&amp;quot;).shouldHave(exactValue(&amp;quot;Regression test description &amp;quot;));&lt;/code&gt; раньше валилась, а теперь нет.&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.5</title><link>https://ru.selenide.org/2017/06/26/selenide-4.5/</link><pubDate>Mon, 26 Jun 2017 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2017/06/26/selenide-4.5/</guid><description>&lt;p&gt;Привет, друзья!&lt;/p&gt;
&lt;p&gt;Мы выпустили новую версию Selenide 4.5!
В основном этот релиз посвящён улучшению производительности самого селенида.&lt;/p&gt;
&lt;br&gt;
&lt;h1 id="ускорили-метод-setvalue"&gt;Ускорили метод &lt;code&gt;$.setValue()&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;В Selenide была крутая фича, про которую, как оказалось, никто не знал: метод &lt;code&gt;$.setValue()&lt;/code&gt; был настолько умным, что умел
проставлять значение не только для простых текстовых полей, но и для выпадающих списков и радио-кнопок. Идея была в том,
что тест должен оставаться стабильным, когда разработчики поменяют тип элемента, скажем, с &lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt; на &lt;code&gt;&amp;lt;input type=&amp;quot;radio&amp;quot;&amp;gt;&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.3</title><link>https://ru.selenide.org/2017/02/09/selenide-4.3/</link><pubDate>Thu, 09 Feb 2017 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2017/02/09/selenide-4.3/</guid><description>&lt;p&gt;Привет, друзья!
Давно не виделись.&lt;/p&gt;
&lt;p&gt;В феврале у нас вышел релиз Selenide 4.3&lt;/p&gt;
&lt;br/&gt;
&lt;h1 id="исправили-метод-find"&gt;Исправили метод &lt;code&gt;$$().find()&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;Точнее, он и раньше искал элементы правильно, но некорректно сообщал об ошибке.
Сообщение об ошибке могло ввести в заблуждение.
Теперь ругается как надо.&lt;/p&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/pull/426"&gt;pull request 426&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Спасибо &lt;a href="https://github.com/juliaviluhina"&gt;Юлии Илюхиной&lt;/a&gt; за исправление!&lt;/p&gt;
&lt;br/&gt;
&lt;h1 id="исправили-поля-по-selenideelement-без-аннотации-findby"&gt;Исправили поля ПО &lt;code&gt;SelenideElement&lt;/code&gt; без аннотации &lt;code&gt;@FindBy&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;Оказалось, все эти годы Selenide вёл себя неожиданно, когда его пытались использовать неожиданно. :)&lt;/p&gt;
&lt;p&gt;Представим, что вы создали пэдж обжект с полями типа &lt;code&gt;SelenideElement&lt;/code&gt; (без аннотации &lt;code&gt;@FindBy&lt;/code&gt;):&lt;/p&gt;</description></item><item><title>Selenide 4.2.1 released</title><link>https://ru.selenide.org/2017/01/26/selenide-4.2.1/</link><pubDate>Thu, 26 Jan 2017 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2017/01/26/selenide-4.2.1/</guid><description>&lt;p&gt;&lt;a href="https://selenide.org/2017/01/26/selenide-4.2.1/"&gt;На английском языке.&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.2</title><link>https://ru.selenide.org/2016/12/30/selenide-4.2/</link><pubDate>Fri, 30 Dec 2016 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2016/12/30/selenide-4.2/</guid><description>&lt;br/&gt;
&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;И снова эксперименты. Этот анонс написан не Андреем Солнцевым, а другими участниками Selenide комьюнити!&lt;/p&gt;
&lt;p&gt;Версии 4.х только начинают добавлять полезности для общение Selenide с постоянно меняющимся окружающим миром,
но в этой версии нам удалось сделать большой шаг вперед по поддержке последних экспериментов британских учёных над браузерами.&lt;/p&gt;
&lt;h2 id="поддержка-legacy-firefox-driver-431"&gt;Поддержка legacy Firefox driver. &lt;a href="https://github.com/selenide/selenide/issues/431"&gt;#431&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Как известно, Firefox, начиная с версии 48, не поддерживается встроенным драйвером Selenium, и вы должны
использовать marionnete/gecko драйвер. Новый драйвер работает также и со старыми версиями Firefox, однако,
во многих случаях он недостаточно стабилен. Проекты с большим количеством написанных тестов на данный момент
часто используют Firefox 45 ESR, потому что затраты на анализ проблем и исправление тестов с gecko драйвером
могут быть крайне высоки. В версии 4.2, мы даем вам возможность выбирать какой драйвер использовать для Firefox версий &amp;lt;=47.&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.1</title><link>https://ru.selenide.org/2016/12/01/selenide-4.1/</link><pubDate>Thu, 01 Dec 2016 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2016/12/01/selenide-4.1/</guid><description>&lt;p&gt;Свершилось!&lt;/p&gt;
&lt;p&gt;Ура!
Настал тот день. Вышел релиз Selenide 4.1, в котором всё сделано вашими руками, дорогие читатели. Ваши пуллреквесты.&lt;/p&gt;
&lt;br/&gt;
&lt;h1 id="428-improve-byattribute-method-for-search-via-css-selectors"&gt;#428 Improve byAttribute method for search via css selectors&lt;/h1&gt;
&lt;p&gt;Метод &lt;code&gt;byAttribute&lt;/code&gt; (или короче &lt;code&gt;by&lt;/code&gt;) стал мощнее.
Раньше его можно было использовать для того, чтобы искать элементы по атрибуту:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;first-name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;john macclane&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Теперь же его можно использовать, чтобы искать атрибут по подстроке:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;first-name*&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;hn maccl&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;по началу атрибута:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;first-name^&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;joh&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;по концу атрибута:&lt;/p&gt;</description></item><item><title>Доклад о Selenide на TopConf 2016</title><link>https://ru.selenide.org/2016/11/16/selenide-on-topconf/</link><pubDate>Wed, 16 Nov 2016 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2016/11/16/selenide-on-topconf/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Выложу &lt;a href="http://topconf.com/tallinn-2016/trackevent/selenide-concise-ui-tests-in-java/"&gt;презентацию про Selenide&lt;/a&gt; на недавней конференции TopConf в Таллинне.&lt;/p&gt;
&lt;p&gt;Видео доклада:&lt;/p&gt;
&lt;iframe src="//www.youtube.com/embed/hHwFIONnVRs" width="960" height="569" frameborder="0"&gt;&lt;/iframe&gt; 
&lt;p&gt;И презентация:&lt;/p&gt;
&lt;div class="wrapper-content center"&gt;
&lt;iframe src="https://docs.google.com/presentation/d/1kH4tQuZujMYgW_gcHI0-ekNxV7dGspZbNIb4DVUgURs/embed?start=false&amp;loop=false&amp;delayms=3000" frameborder="0" width="960" height="569" allow="fullscreen" mozallowfullscreen="true" webkitallowfullscreen="true"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;br/&gt;
&lt;p&gt;Andrei Solntsev&lt;/p&gt;
&lt;p&gt;ru.selenide.org&lt;/p&gt;</description></item><item><title>Обёртка или чистый вебдрайвер?</title><link>https://ru.selenide.org/2016/10/20/selenide-vs-pure-selenium/</link><pubDate>Thu, 20 Oct 2016 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2016/10/20/selenide-vs-pure-selenium/</guid><description>&lt;p&gt;Бытует мнение, что для настоящего автоматизатора использовать Selenide - несерьёзно.
Настоящий труёвый автоматизатор должен использовать чистый вебдрайвер - чтобы знать, как оно там внутри работает.&lt;/p&gt;
&lt;p&gt;И вот почему это плохо.&lt;/p&gt;
&lt;h2 id="вам-шашечки-или-ехать"&gt;Вам шашечки или ехать?&lt;/h2&gt;
&lt;p&gt;Представьте себе: вы очень торопитесь на самолёт. Садитесь в такси, говорите: &amp;ldquo;Срочно в аэропорт!&amp;rdquo;
А таксист вам говорит: сейчас я поставлю на раму мотор, прикручу колёса, залью топливо - и мы поедем!&lt;/p&gt;
&lt;p&gt;Ты офигеваешь, но ок, раз в этой индустрии так принято - значит, надо подождать.&lt;/p&gt;</description></item><item><title>Вышла Selenide 4.0</title><link>https://ru.selenide.org/2016/10/15/selenide-4.0/</link><pubDate>Sat, 15 Oct 2016 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2016/10/15/selenide-4.0/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Это свершилось!&lt;/p&gt;
&lt;p&gt;После трёх лет ожидания вышел Selenium Webdriver 3.0!&lt;/p&gt;
&lt;p&gt;А мы выпустили Selenide 4.0.&lt;/p&gt;
&lt;h2 id="что-изменилось"&gt;Что изменилось?&lt;/h2&gt;
&lt;p&gt;Собственно, для вас ничего не должно поменяться - они просто подчистили
какой-то старый мусор из селениума (который в Selenide никогда и не использовался).&lt;/p&gt;
&lt;p&gt;Но что важно - теперь Selenide требует Java 8.&lt;/p&gt;
&lt;p&gt;Ура, теперь весь QA мир перейдёт наконец на Java 8.&lt;/p&gt;
&lt;p&gt;Вот мы теперь с лямбдами-то заживём!&lt;/p&gt;
&lt;h2 id="а-можно-поподробнее"&gt;А можно поподробнее?&lt;/h2&gt;
&lt;p&gt;Конечно. Вот полный &lt;a href="http://selenium2.ru/news/183-selenium-3-0.html"&gt;список изменений Selenium WebDriver 3.0.0&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 3.11</title><link>https://ru.selenide.org/2016/10/14/selenide-3.11/</link><pubDate>Fri, 14 Oct 2016 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2016/10/14/selenide-3.11/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Мы выпустили Selenide 3.11!
Не то чтобы тут много чего поменялось, скорее это просто исторический релиз.
Это последний релиз из серии 3.x - последний, что работает на Java 7 и с Selenium WebDriver 2.x&lt;/p&gt;
&lt;p&gt;Дальше будет Selenide 4.x: Selenium WebDriver 3.x и Java 8.&lt;/p&gt;
&lt;p&gt;Итак, что же вошло в последнюю троечку:&lt;/p&gt;
&lt;h2 id="добавили-условие-checked"&gt;Добавили условие &lt;code&gt;checked&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Теперь можно написать нормальное условие для проверки чекбокса:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#i-agree&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldBe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;checked&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Раньше приходилось писать &lt;code&gt;$.shouldBe(selected)&lt;/code&gt;, что неочевидно.
Раз есть чекбокс - значит, он должен быть &amp;ldquo;checked&amp;rdquo;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 3.10</title><link>https://ru.selenide.org/2016/09/26/selenide-3.10/</link><pubDate>Mon, 26 Sep 2016 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2016/09/26/selenide-3.10/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Мы выпустили Selenide 3.10!&lt;/p&gt;
&lt;h2 id="прокси-сервер-выключен-по-умолчанию"&gt;Прокси-сервер выключен по умолчанию&lt;/h2&gt;
&lt;p&gt;Мне грустно говорить об этом, но эксперимент с прокси-сервером, кажется, пока не удался.&lt;/p&gt;
&lt;p&gt;Проблема с новым способом скачивания файлов через встроенный в Selenide прокси-сервер.
На всех моих проектах он работает, но многие жалуются, что у них не взлетело.
Почему - пока неясно. Возможно, не работает у тех, кто использует Selenium Grid.&lt;/p&gt;
&lt;p&gt;В общем, &lt;a href="https://github.com/selenide/selenide/issues/402"&gt;пока вернули&lt;/a&gt; старый способ скачивания по умолчанию.
Кто хочет - включайте скачивание через прокси с помощью настройки:&lt;/p&gt;</description></item><item><title>Вышла Selenide 3.9.2</title><link>https://ru.selenide.org/2016/09/03/selenide-3.9.2/</link><pubDate>Sat, 03 Sep 2016 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2016/09/03/selenide-3.9.2/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Мы выпустили Selenide 3.9.2!&lt;/p&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;h2 id="скачивать-файлы-можно-по-разному"&gt;Скачивать файлы можно по-разному&lt;/h2&gt;
&lt;p&gt;Как вы знаете, в Selenide 3.9 вы изменили способ скачивания файлов.
Отзывы пользователей были кардинально разные: для одних новый способ
работал там, где старый не работал, но у других, наоборот, новый способ
не работает там, где старый работал.&lt;/p&gt;
&lt;p&gt;Поэтому мы решили дать пользователю выбор.&lt;/p&gt;
&lt;p&gt;Теперь вы можете выбирать, каким способом скачивать файлы.&lt;/p&gt;
&lt;h3 id="новый-способ---proxy"&gt;&amp;ldquo;Новый&amp;rdquo; способ - PROXY&lt;/h3&gt;
&lt;p&gt;Это способ включен по умолчанию.&lt;/p&gt;</description></item><item><title>Вышла Selenide 3.9.1</title><link>https://ru.selenide.org/2016/08/27/selenide-3.9.1/</link><pubDate>Sat, 27 Aug 2016 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2016/08/27/selenide-3.9.1/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Мы выпустили Selenide 3.9.1!&lt;/p&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;h3 id="киллер-фича-selenide-умеет-скачивать-любые-файлы-откуда-угодно"&gt;Киллер фича! Selenide умеет скачивать любые файлы! Откуда угодно.&lt;/h3&gt;
&lt;p&gt;Мы хотели сделать это давно, и вот наконец свершилось!
Бесконечные проблемы со скачиванием файлов в селениуме ушли в прошлое.
Теперь это легко. Всегда. Один простой метод на все случаи жизни:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;input#submit&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;download&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В Selenide метод &lt;code&gt;download&lt;/code&gt; существует давно.
Но до сих пор он умел скачивать файлы только по ссылке с атрибутом href: &lt;code&gt;&amp;lt;a href&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Вышла Selenide 3.8</title><link>https://ru.selenide.org/2016/08/06/selenide-3.8/</link><pubDate>Sat, 06 Aug 2016 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2016/08/06/selenide-3.8/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Мы выпустили Selenide 3.8! В нём мы подправили много мелких недочётов и сделали некоторые небольшие, но полезные полезности.&lt;/p&gt;
&lt;br/&gt;
&lt;h3 id="исправлена-загрузка-файлов-upload-на-удалённых-браузерах-в-гриде"&gt;Исправлена загрузка файлов (upload) на удалённых браузерах в гриде&lt;/h3&gt;
&lt;p&gt;Спасибо &lt;a href="https://github.com/vinogradoff"&gt;Alexei Vinogradov&lt;/a&gt; за исправление грида!&lt;/p&gt;
&lt;h3 id="теперь-можно-отключать-создание-html-файлов"&gt;Теперь можно отключать создание *.html файлов&lt;/h3&gt;
&lt;p&gt;Когда ваш драгоценный тест падает, по умолчанию Selenide создаёт 2 файла:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Скриншот - файл *.png&lt;/li&gt;
&lt;li&gt;Исходный код текущий страницы - файл *.html&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Оказалось, что не все хотят сохранять *.html-файлы. Например, в случае одностраничных приложений
в этот html-файл попадал html-код всех-превсех страниц приложения, то есть файлы получались
большими и бессмысленными.&lt;/p&gt;</description></item><item><title>Вышла Selenide 3.7</title><link>https://ru.selenide.org/2016/07/08/selenide-3.7/</link><pubDate>Fri, 08 Jul 2016 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2016/07/08/selenide-3.7/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Мы выпустили Selenide 3.7!&lt;/p&gt;
&lt;h2 id="обновились-на-selenium-2531"&gt;Обновились на Selenium 2.53.1&lt;/h2&gt;
&lt;p&gt;Это должно исправить очередную проблему с Firefox 47.&lt;/p&gt;
&lt;h2 id="добавили-поддержку-браузера-marionette"&gt;Добавили поддержку браузера Marionette&lt;/h2&gt;
&lt;p&gt;Чтобы запустить свои тесты с браузером Marionette, используйте параметр в командной строке (или билд-скрипте):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code&gt;-Dselenide.browser=marionette&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;или задайте браузер прямо в тестах:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;browser&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;marionette&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;см. &lt;a href="https://github.com/selenide/selenide/pull/349"&gt;pull request #349&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Спасибо &lt;a href="https://github.com/ridiekel"&gt;Geroen Dierckx&lt;/a&gt; за этот pull request!&lt;/p&gt;
&lt;h2 id="добавили-поддержку-драйверов-для-не-браузеров"&gt;Добавили поддержку драйверов для не-браузеров&lt;/h2&gt;
&lt;p&gt;В последнее время появились драйверы для не-браузеров, а, например,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;нативных Windows приложений (&lt;a href="https://github.com/2gis/Winium"&gt;Winium&lt;/a&gt;),&lt;/li&gt;
&lt;li&gt;Java Swing приложений (&lt;a href="https://marathontesting.com/seleniumwebdriver-bindings/"&gt;Marathon&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;и даже мобильных приложений (&lt;a href="http://appium.io/"&gt;Appium&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Естественно, такие
драйверы не поддерживают JavaScript. Оказалось, что Selenide на это не был рассчитан и без
JavaScript отказывался работать.&lt;/p&gt;</description></item><item><title>Вышла Selenide 3.6</title><link>https://ru.selenide.org/2016/06/01/selenide-3.6/</link><pubDate>Wed, 01 Jun 2016 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2016/06/01/selenide-3.6/</guid><description>&lt;p&gt;Привет вам, рыцари ордена качества!&lt;/p&gt;
&lt;p&gt;В последний день весны мы всё-таки выпустили Selenide 3.6!&lt;/p&gt;
&lt;h2 id="вернули-стратегию-загрузки-страницы-обратно-на-normal"&gt;Вернули стратегию загрузки страницы обратно на &lt;code&gt;normal&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;В Selenide 3.5 мы прописали дефалтовую стратегию страницы в &lt;code&gt;none&lt;/code&gt;.
Для некоторых пользователей это ускорило тесты,
но другие стали жаловаться, что тесты повалились, и они вынуждены были вернуться на Selenide 3.4&lt;/p&gt;
&lt;p&gt;Теперь мы вернулись обратно на &lt;code&gt;normal&lt;/code&gt;, а кто хочет ускорения тестов, прописывайте&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-Dselenide.page-load-strategy&lt;span class="o"&gt;=&lt;/span&gt;none
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;или&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;pageLoadStrategy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;none&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;см. &lt;a href="https://github.com/selenide/selenide/issues/321"&gt;issue #321&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Реальный опыт с Selenide: покупка авиабилетов</title><link>https://ru.selenide.org/2016/04/17/airtickets/</link><pubDate>Sun, 17 Apr 2016 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2016/04/17/airtickets/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Иногда хочется посмотреть использование фреймворка в реальных боевых условиях, а не только хелловорды на кошечках.
А почему бы нет!&lt;/p&gt;
&lt;p&gt;В серии &lt;a href="https://github.com/selenide-examples"&gt;Selenide Examples&lt;/a&gt; сегодня мы протестируем совершенно настоящий
сайт &lt;a href="http://airtickets.ru"&gt;airtickets.ru&lt;/a&gt; с настоящими покупками, деньгами и карточками. Всё как в жизни.&lt;/p&gt;
&lt;p&gt;Для разнообразия попробуем использовать шаблон PageObject, причём в разных вариациях:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PageObject a&amp;rsquo;la Selenide style, &lt;a href="http://ru.selenide.org/documentation/page-objects.html"&gt;предложенный Андреем Солнцевым&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;классический PageObject&lt;/li&gt;
&lt;li&gt;PageObject с блоками (a&amp;rsquo;la HtmlElements)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="что-тестируем"&gt;Что тестируем&lt;/h2&gt;
&lt;p&gt;Тест покупает авиабилеты СПб-Москва туда и обратно, вводя все необходимые значения,
и доходит до кнопки “Купить” после заполнения данных кредитной карточки.&lt;/p&gt;</description></item><item><title>Вышла Selenide 3.5</title><link>https://ru.selenide.org/2016/03/31/selenide-3.5/</link><pubDate>Thu, 31 Mar 2016 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2016/03/31/selenide-3.5/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Вышла в свет Selenide 3.5 с поддержкой резиновых коллекций. А именно,&lt;/p&gt;
&lt;h2 id="добавили-гибкие-условия-для-проверки-размера-коллекций"&gt;Добавили гибкие условия для проверки размера коллекций&lt;/h2&gt;
&lt;p&gt;Раньше в Selenide можно было только проверять точный размер коллекции:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;.man.angry&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;12&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Теперь же - на радость шурупозабивателям - можно проверять и более гибко: больше, меньше и т.п.
А именно:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;.man.angry&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sizeLessThan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;13&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;.man.angry&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sizeLessThanOrEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;12&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;.man.angry&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sizeGreaterThan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;11&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;.man.angry&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sizeGreaterThanOrEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;12&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;.man.angry&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sizeNotEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;42&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Спасибо &lt;a href="https://github.com/vasilevichra"&gt;vasilevichra&lt;/a&gt; за этот pull request!&lt;/p&gt;
&lt;p&gt;P.S. Вообще-то мне до сих пор это кажется сомнительной идеей.
Я думаю, что тест должен подготавливать требуемые пред-условия перед запуском тестируемого кода.
То есть тест всегда должен точно знать, сколько и каких объектов должно быть на экране.
Но народ просил - мы сделали.&lt;/p&gt;</description></item><item><title>Вышла Selenide 3.3</title><link>https://ru.selenide.org/2016/02/11/selenide-3.3/</link><pubDate>Thu, 11 Feb 2016 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2016/02/11/selenide-3.3/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Вышла в свет Selenide 3.3 с поддержкой коллекций. А именно,&lt;/p&gt;
&lt;h2 id="улучшена-поддержка-аякс-для-коллекций"&gt;Улучшена поддержка аякс для коллекций&lt;/h2&gt;
&lt;p&gt;Теперь методы для работы с коллекциями (оператор &lt;code&gt;$$&lt;/code&gt;) ждут, пока элементы коллекции загрузятся.
Это полезно для тех случаев, когда коллекция подгружается асинхронно каким-нибудь очередным аяксом.&lt;/p&gt;
&lt;p&gt;См. &lt;a href="https://github.com/selenide/selenide/issues/277"&gt;issue #277&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="добавился-отдельный-таймаут-для-коллекций"&gt;Добавился отдельный таймаут для коллекций&lt;/h2&gt;
&lt;p&gt;Мы добавили два новых параметра для коллекций:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;collectionsTimeout&lt;/code&gt; (по умолчанию 6 секунд)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;collectionsPollingInterval&lt;/code&gt; (по умолчанию 0.2 секунды)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Это связано с тем, что в большинстве случаев коллекции грузятся дольше, чем одиночные элементы (ведь в них больше элементов).
Поэтому им требуется больший таймаут.&lt;/p&gt;</description></item><item><title>Вышла Selenide 3.2</title><link>https://ru.selenide.org/2016/01/29/selenide-3.2/</link><pubDate>Fri, 29 Jan 2016 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2016/01/29/selenide-3.2/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Вышел в свет Selenide 3.2 - давайте знакомится!&lt;/p&gt;
&lt;h2 id="теперь-selenide-пишет-в-логе-версию-браузера"&gt;Теперь Selenide пишет в логе версию браузера&lt;/h2&gt;
&lt;p&gt;Добавили INFO лог с версией браузера, Selenium и Selenide:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code&gt;00:32:45 INFO BrowserName=chrome Version=48.0.2564.109 Platform=MAC
00:32:45 INFO Selenide v. 3.2
00:32:45 INFO Selenium WebDriver v. 2.51.0 build time: 2016-02-05 11:20:57&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="улучшен-отчёт"&gt;Улучшен отчёт&lt;/h2&gt;
&lt;p&gt;Мы переименовали FAILED-&amp;gt;FAIL, PASSED-&amp;gt;PASS в отчёте тестов, чтобы не путать с &lt;code&gt;PASSED&lt;/code&gt; и &lt;code&gt;FAILED&lt;/code&gt;, которые обычно пишут Maven и другие тулы.
Теперь отчёт Selenide чуть проще анализировать в Jenkins.&lt;/p&gt;</description></item><item><title>Вышла Selenide 3.1</title><link>https://ru.selenide.org/2016/01/17/selenide-3.1/</link><pubDate>Sun, 17 Jan 2016 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2016/01/17/selenide-3.1/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Год обещает быть плодотворным. Не успела страна очнуться после каникул, а мы уже выпустили Selenide 3.1.
Посмотрим, что новенького?&lt;/p&gt;
&lt;h2 id="мы-обновили-документацию"&gt;Мы обновили документацию&lt;/h2&gt;
&lt;p&gt;Мы дополнили и исправили &lt;a href="https://ru.selenide.org/documentation.html"&gt;документацию&lt;/a&gt; на сайте.&lt;/p&gt;
&lt;p&gt;Спасибо &lt;a href="https://github.com/vinogradoff"&gt;Алексею Виноградову&lt;/a&gt; и Эрику Халимову за проделанную работу!&lt;/p&gt;
&lt;h2 id="метод-download-не-любит-невидимые-ссылки"&gt;Метод &lt;code&gt;$().download()&lt;/code&gt; не любит невидимые ссылки&lt;/h2&gt;
&lt;p&gt;Раньше метод &lt;code&gt;$().download()&lt;/code&gt; (по недосмотру) позволял скачивать файлы и с невидимых ссылок.
Теперь мы эту оплошность &lt;a href="https://github.com/selenide/selenide/issues/263"&gt;ликвидировали&lt;/a&gt;.
Спасибо &lt;a href="https://github.com/dimand58"&gt;@dimand58&lt;/a&gt; за &lt;a href="https://github.com/selenide/selenide/pull/264"&gt;pull request&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="методы-switchto-теперь-умеют-ждать"&gt;Методы &lt;code&gt;switchTo(...)&lt;/code&gt; теперь умеют ждать&lt;/h2&gt;
&lt;p&gt;Теперь методы &lt;code&gt;switchTo(alert())&lt;/code&gt;, &lt;code&gt;switchTo(frame())&lt;/code&gt;, &lt;code&gt;switchTo(window())&lt;/code&gt; стали умнее и умеют чуть-чуть подождать, если
&lt;a href="https://github.com/selenide/selenide/issues/206"&gt;алерт&lt;/a&gt;, &lt;a href="https://github.com/selenide/selenide/issues/206"&gt;фрейм&lt;/a&gt;
или &lt;a href="https://github.com/selenide/selenide/issues/271"&gt;окно&lt;/a&gt; ещё не загрузилось. Как обычно, по умолчанию таймаут 4 секунды.&lt;/p&gt;</description></item><item><title>Вышла Selenide 3.0</title><link>https://ru.selenide.org/2015/11/30/selenide-3.0/</link><pubDate>Mon, 30 Nov 2015 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2015/11/30/selenide-3.0/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Наконец-то мы выпустили Selenide 3.0. Уффф. Свершилось.&lt;/p&gt;
&lt;p&gt;Внимание, версия 3.0 - это полный апгрейдец, то есть кое-что может перестать работать.&lt;/p&gt;
&lt;p&gt;Не пугайтесь, если вы использовали только публичный API и не использовали @Deprecated методы, то для вас ничего не изменится.
А если лезли в кишки, то читайте внимательно.&lt;/p&gt;
&lt;h2 id="исторический-экскурс"&gt;Исторический экскурс&lt;/h2&gt;
&lt;p&gt;Версия Selenide 1.0 была создана в 2011 году в казематах Codeborne и широко не рекламировалась.
Примерно год Selenide мариновался и зрел. Мы пробовали использовать его в разных проектах - на Java, Scala, Groovy.
Каждый раз обнаруживали, что API опять неудобен и требует доработок. :)&lt;/p&gt;</description></item><item><title>Изменения в Selenide 2.25</title><link>https://ru.selenide.org/2015/11/30/selenide-2.25/</link><pubDate>Mon, 30 Nov 2015 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2015/11/30/selenide-2.25/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Мы выпустили Selenide 2.25. Это последняя версия в линейке 2.*, даже будет большой рефакторинг, чистка deprecated и релиз Selenide 3.0.&lt;/p&gt;
&lt;p&gt;Пожалуйста, пробегитесь по своим тестам и убедитесь, что вы не используете @Deprecated методы. Мы планируем их удалить в Selenide 3.0.&lt;/p&gt;
&lt;p&gt;А пока - новинки в Selenide 2.25:&lt;/p&gt;
&lt;h2 id="добавили-профайлер-selenide-для-testng"&gt;Добавили &amp;ldquo;Профайлер Selenide&amp;rdquo; для TestNG&lt;/h2&gt;
&lt;p&gt;Эта штука, которую вы знали под названием &lt;a href="http://ru.selenide.org/2015/05/05/selenide-2.16-and-2.17/"&gt;PrettyReportCreator&lt;/a&gt;,
прежде была доступна только для JUnit.&lt;/p&gt;
&lt;p&gt;Кстати, мы переименовали его в &lt;code&gt;TextReport&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Selenide меняет лицензию на MIT</title><link>https://ru.selenide.org/2015/11/16/selenide-changes-license-to-mit/</link><pubDate>Mon, 16 Nov 2015 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2015/11/16/selenide-changes-license-to-mit/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Мы долго сомневались, но всё-таки поменяли лицензию Selenide на MIT.&lt;/p&gt;
&lt;p&gt;Если вкратце, это значит, что с исходным кодом Selenide можно делать всё, что угодно.&lt;/p&gt;
&lt;p&gt;MIT - наиболее &lt;strong&gt;свободная лицензия&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://choosealicense.com/"&gt;Вот тут&lt;/a&gt; есть иллюстративное сравнение опен-сорсных лицензий MIT, Apache и GPL.&lt;/p&gt;
&lt;h3 id="чем-не-устраивал-lgpl"&gt;Чем не устраивал LGPL?&lt;/h3&gt;
&lt;p&gt;Вообще-то LGPL нас устраивал. Лицензия LGPL обязывает вас выкладывать свой код в опен-сорс,
&lt;strong&gt;если&lt;/strong&gt; вы включаете код Selenide в свой продукт. Но поскольку вы используете Selenide только в своих тестах, то
вы не включаете Selenide в свой продукт, который вы доставляете пользователям. Следовательно,
вы не обязаны выкладывать свой код в опен-сорс.&lt;/p&gt;</description></item><item><title>Презентация Selenide на Devoxx 2015</title><link>https://ru.selenide.org/2015/11/13/selenide-on-devoxx/</link><pubDate>Fri, 13 Nov 2015 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2015/11/13/selenide-on-devoxx/</guid><description>&lt;p&gt;Теперь - и в Европе!&lt;/p&gt;
&lt;p&gt;Эта неделя ознаменовалась громким событием в Java-мире - конференцией Devoxx, крупнейшей в Европе.&lt;/p&gt;
&lt;p&gt;Я сделал доклад про Selenide на этой конференции. И эти ребята уже выложили видео - они просто нереально быстрые:&lt;/p&gt;
&lt;div class="wrapper-content center"&gt;
&lt;iframe width="840" height="473" src="https://www.youtube.com/embed/BjEW08vDUfI" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;А тут слайды:&lt;/p&gt;
&lt;div class="wrapper-content center"&gt;
&lt;iframe src="https://docs.google.com/presentation/d/1qA_0wC2pV9IQZu3DoLwm8yGQ_9DlM1WdNzUYgAWFGiQ/embed?start=false&amp;loop=false&amp;delayms=3000" frameborder="0" width="960" height="569" allow="fullscreen" mozallowfullscreen="true" webkitallowfullscreen="true"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/channel/UCCBVCTuk6uJrN3iFV_3vurg"&gt;А вот тут&lt;/a&gt; есть видео остальных докладов Devoxx 2015.&lt;/p&gt;
&lt;p&gt;Андрей Солнцев&lt;/p&gt;
&lt;p&gt;ru.selenide.org&lt;/p&gt;</description></item><item><title>Изменения в Selenide 2.24</title><link>https://ru.selenide.org/2015/11/08/selenide-2.24/</link><pubDate>Sun, 08 Nov 2015 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2015/11/08/selenide-2.24/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Вышел небольшой релиз Selenide 2.24. По сусекам поскребли, по амбару намели.&lt;/p&gt;
&lt;h2 id="обновились-до-selenium-java-2482"&gt;Обновились до selenium-java 2.48.2&lt;/h2&gt;
&lt;p&gt;Список &lt;a href="https://raw.githubusercontent.com/SeleniumHQ/selenium/master/java/CHANGELOG"&gt;изменений в selenium 2.48.2&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="новый-метод-pressescape"&gt;Новый метод &lt;code&gt;$.pressEscape()&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;В дополнение к методам&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;input&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;pressEnter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;input&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;pressTab&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Появился новый метод:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;input&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;pressEscape&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="исправили-работу-мягких-ассертов-в-testng"&gt;Исправили работу мягких ассертов в TestNG&lt;/h2&gt;
&lt;p&gt;Возможно, вы не знали, но в Selenide есть &lt;a href="http://ru.selenide.org/2015/05/05/selenide-2.16-and-2.17/"&gt;мягкие ассерты&lt;/a&gt; (soft asserts).
В какой-то версии они оказались сломанными, если запускать тесты на TestNG. Теперь починились.&lt;/p&gt;
&lt;h2 id="логику-для-создания-вебдрайвера-выделили-в-отдельный-класс-webdriverfactory"&gt;Логику для создания вебдрайвера выделили в отдельный класс WebDriverFactory&lt;/h2&gt;
&lt;p&gt;Раньше созданием вебдрайвера занимался &lt;code&gt;WebDriverRunner&lt;/code&gt;, но со временем он разросся: помимо создания вебдрайвера,
появилась логика для закрытия, проверки, отслеживания зависших браузеров и т.д.&lt;/p&gt;</description></item><item><title>Доклад о Selenide на SeleniumConf 2015</title><link>https://ru.selenide.org/2015/09/23/selenide-on-seleniumconf/</link><pubDate>Wed, 23 Sep 2015 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2015/09/23/selenide-on-seleniumconf/</guid><description>&lt;p&gt;Наконец-то!&lt;/p&gt;
&lt;p&gt;У меня появился шанс представить Selenide на ежегодной конференции SeleniumConf, которая в этом году проходила
в Портленде, США.&lt;/p&gt;
&lt;p&gt;Вот видео моего доклада:&lt;/p&gt;
&lt;div class="wrapper-content center"&gt;
&lt;iframe width="840" height="473" src="https://www.youtube.com/embed/fR8CyLcxBZ0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;И слайды:&lt;/p&gt;
&lt;div class="wrapper-content center"&gt;
&lt;iframe src="https://docs.google.com/presentation/d/1ZksjuL2vPN_pkhMuon0HH4gm7KNmjU50pByRRGzgVko/embed?start=false&amp;loop=false&amp;delayms=3000" frameborder="0" width="960" height="569" allow="fullscreen" mozallowfullscreen="true" webkitallowfullscreen="true"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a href="http://confengine.com/selenium-conf-2015/schedule"&gt;А здесь&lt;/a&gt; можно посмотреть видео других докладов с SeleniumConf.&lt;/p&gt;
&lt;p&gt;Наслаждайтесь!&lt;/p&gt;
&lt;p&gt;Andrei Solntsev&lt;/p&gt;
&lt;p&gt;selenide.org&lt;/p&gt;</description></item><item><title>Изменения в Selenide 2.23</title><link>https://ru.selenide.org/2015/09/15/selenide-2.23/</link><pubDate>Tue, 15 Sep 2015 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2015/09/15/selenide-2.23/</guid><description>&lt;p&gt;Категорически приветствую!&lt;/p&gt;
&lt;p&gt;Сентябрь ознаменовался выходом Selenide 2.23. Пробежимся по новинкам?&lt;/p&gt;
&lt;h2 id="новый-метод-selectradio"&gt;Новый метод &lt;code&gt;$.selectRadio()&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Чтобы выбрать кнопку radio, раньше можно было использовать метод&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Selenide&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;selectRadio&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;By&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;gender&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;male&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Теперь появился новый метод, похожий на остальные методы Selenide:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;By&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;gender&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="na"&gt;selectRadio&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;male&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И в лучших традициях Selenide, этот метод умеет ждать, если элемент доступен не сразу.&lt;/p&gt;
&lt;h2 id="метод-setvalue-теперь-понимает-и-кнопки-radio"&gt;Метод &lt;code&gt;$.setValue()&lt;/code&gt; теперь понимает и кнопки radio&lt;/h2&gt;
&lt;p&gt;Мы стремимся делать Selenide максимально универсальным, так чтобы вам приходилось меньше думать о технических деталях
веб-элементов. В частности, метод &lt;code&gt;$.setValue()&lt;/code&gt; понимает, какому элементу вы пытаетесь присвоить значение:
&lt;code&gt;input&lt;/code&gt;, &lt;code&gt;select&lt;/code&gt; или &lt;code&gt;textarea&lt;/code&gt;, и действует соответственно.&lt;/p&gt;</description></item><item><title>Изменения в Selenide 2.21 и 2.22</title><link>https://ru.selenide.org/2015/08/29/selenide-2.22/</link><pubDate>Sat, 29 Aug 2015 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2015/08/29/selenide-2.22/</guid><description>&lt;p&gt;Доброй субботы!&lt;/p&gt;
&lt;p&gt;Недавно мы зарелизили Selenide 2.21 и 2.22. Там были немногочисленные, но кардинальные изменения, о которых вам нужно знать.&lt;/p&gt;
&lt;h2 id="переход-на-java-7"&gt;Переход на Java 7&lt;/h2&gt;
&lt;p&gt;Начиная с версии 2.21, Selenide работает только на Java 7 или выше.&lt;/p&gt;
&lt;p&gt;Если вы до сих пор работали на Java 6, пора обновляться - больше ждать невозможно!&lt;/p&gt;
&lt;h2 id="обновились-на-selenium-2471"&gt;Обновились на Selenium 2.47.1&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Она-то и требует Java 7.&lt;/li&gt;
&lt;li&gt;поддержка нативных событий только до FireFox 31, а для более новых FireFox есть только синтетические события.&lt;/li&gt;
&lt;li&gt;Добавилась экспериментальная поддержка нового браузера &amp;ldquo;Microsoft Edge&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://github.com/SeleniumHQ/selenium/blob/master/dotnet/CHANGELOG"&gt;Список изменений 2.47.1&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Изменения в Selenide 2.20</title><link>https://ru.selenide.org/2015/07/27/selenide-2.20/</link><pubDate>Mon, 27 Jul 2015 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2015/07/27/selenide-2.20/</guid><description>&lt;p&gt;Здрасьте!&lt;/p&gt;
&lt;p&gt;Сегодня мы зарелизили Selenide 2.20. Что новенького нас ждёт?&lt;/p&gt;
&lt;h2 id="защита-от-зависания-вебдрайвера-при-открытиизакрытии-браузера"&gt;Защита от зависания вебдрайвера при открытии/закрытии браузера&lt;/h2&gt;
&lt;p&gt;Иногда при открытии или открытии браузера вебдрайвер зависает. Видимо, какие-то баги в вебдрайвере.
Просто этот поток бесконечно висит в одном и том же состоянии: &amp;ldquo;Forwarding newSession on session null to remote&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Мы добавили защиту против этой проблемы. Теперь Selenide запускаете открытие/закрытие браузера в отдельном потоке и ждёт ограниченное время (не дольше 15 секунд при открытии и не 5 секунд при закрытии). При неудаче пробует снова (до 3 раз) и лишь потом вылетает с ошибкой.&lt;/p&gt;</description></item><item><title>Изменения в Selenide 2.19</title><link>https://ru.selenide.org/2015/06/21/selenide-2.19/</link><pubDate>Sun, 21 Jun 2015 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2015/06/21/selenide-2.19/</guid><description>&lt;p&gt;Категорически приветствую!&lt;/p&gt;
&lt;p&gt;Вышел Selenide 2.19.&lt;/p&gt;
&lt;p&gt;Исправлено несколько мелких проблем, в основном касающихся работы с фреймами и борьбой с самоподписанными сертификатами.&lt;/p&gt;
&lt;h2 id="работа-с-вложенными-фреймами"&gt;Работа с вложенными фреймами&lt;/h2&gt;
&lt;p&gt;Дьявол отлично поработал в начале девяностых. Венец его творчества - это &lt;strong&gt;фреймы&lt;/strong&gt;.
На дворе 2015 год - биты, бандиты, рэкетиры и бригады остались в прошлом, а фреймы живы и здоровы и до сих пор больно бьют.&lt;/p&gt;
&lt;p&gt;Selenium Webdriver умеет худо-бедно переключаться во фрейм, но оказывается, фреймы бывают вложенные! И тут вебдрайвер
сдаётся и заставляет пользователей последовательно переключаться сначала в один фрейм, потом во фрейм внутри него и т.д. по цепочке.&lt;/p&gt;</description></item><item><title>Изменения в Selenide 2.18</title><link>https://ru.selenide.org/2015/05/06/selenide-2.18/</link><pubDate>Wed, 06 May 2015 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2015/05/06/selenide-2.18/</guid><description>&lt;p&gt;Здрасьте!&lt;/p&gt;
&lt;p&gt;В конце апреля мы наконец-то выпустили Selenide 2.18.
Это был непростой релиз. Мы полностью переписали алгоритм умных ожиданий, так что теперь-то уж наверняка он отлавливает
все StaleElementException.&lt;/p&gt;
&lt;p&gt;Давайте я расскажу всё подробно.&lt;/p&gt;
&lt;h2 id="механизм-ожиданий"&gt;Механизм ожиданий&lt;/h2&gt;
&lt;p&gt;Selenide всегда боролся с StaleElementException и другими проблемами, вызванными ajax и таймаутами.
Но всё-таки в некоторых редких ситуациях StaleElementException всё ещё можно было получить в предыдущих версиях Selenide.&lt;/p&gt;
&lt;p&gt;В Selenide 2.18 мы переписали механизм ожиданий, так что теперь StaleElementException стал почти совсем невозможен.&lt;/p&gt;</description></item><item><title>Изменения в Selenide 2.16 и 2.17</title><link>https://ru.selenide.org/2015/05/05/selenide-2.16-and-2.17/</link><pubDate>Tue, 05 May 2015 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2015/05/05/selenide-2.16-and-2.17/</guid><description>&lt;p&gt;Здрасьте!&lt;/p&gt;
&lt;p&gt;Мы долго не писали в блог. За это время вышло аж три версии Selenide.
Сегодня расскажу про изменениях в версиях 2.16 и 2.17&lt;/p&gt;
&lt;h3 id="soft-asserts"&gt;Soft asserts&lt;/h3&gt;
&lt;p&gt;Мы наконец-то добавили SoftAsserts в Selenide. Я до сих пор не уверен, что это хорошая идея, но уж очень много просили. :)&lt;/p&gt;
&lt;p&gt;По сути, режим SoftAssert означает, что все проверки типа &lt;code&gt;$.shouldHave(text(&amp;quot;xxx&amp;quot;))&lt;/code&gt; будут валиться не сразу, а только в конце теста.
Это позволяет разом накопить все фейлы, разом их исправить и один раз перезапустить тест.
Наверное, это удобно, если каждый запуск тестов обходится вам слишком дорого.&lt;/p&gt;</description></item><item><title>Как тестировать GMail</title><link>https://ru.selenide.org/2014/12/28/how-to-test-gmail/</link><pubDate>Sun, 28 Dec 2014 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2014/12/28/how-to-test-gmail/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Вы когда-нибудь задумывались, а как бы вы стали тестировать GMail, если б были разработчиком Google?
Это отличное упражнение для тестировщика, непременно попробуйте!&lt;/p&gt;
&lt;p&gt;Тестирование GMail нетривиально, т.к. в нём на каждый чих используется Ajax, грузится долго, всё генерируется динамически и
нет разумных селекторов/айдишек. Замучаешься везде проставлять wait!&lt;/p&gt;
&lt;h3 id="проект-gmail-test"&gt;Проект GMail test&lt;/h3&gt;
&lt;p&gt;Но счастье возможно! В серии &lt;a href="https://github.com/selenide-examples"&gt;Selenide Examples&lt;/a&gt; мы представляем
&lt;a href="https://github.com/selenide-examples/gmail"&gt;проект на гитхабе&lt;/a&gt;, в котором написан тест для GMail.
Он проверяет содержимое инбокса и пишет новое письмо. Причём ещё и делает &amp;ldquo;Undo&amp;rdquo;, редактирует и снова посылает. И в
конце ждёт, пока кнопка &amp;ldquo;Undo&amp;rdquo; пропадёт.&lt;/p&gt;</description></item><item><title>Где взять время на рефакторинг</title><link>https://ru.selenide.org/2014/12/17/time-for-refactoring/</link><pubDate>Wed, 17 Dec 2014 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2014/12/17/time-for-refactoring/</guid><description>&lt;p&gt;Один из самых животрепещущих вопросов начинающих идеалистов - где взять время на рефакторинг?&lt;/p&gt;
&lt;p&gt;Он возникает и у разработчиков, и у тестировщиков. И у тех, и у других очень быстро возникает куча грязного кода и
куча запутанных, медленных, нечитаемых тестов. Жить с ними всё сложнее. Разработка/тестирование всё замедляется,
мотивация всё падает. Иногда удаётся что-то подчистить в нерабочее время, но&amp;hellip; это же не по-человечески?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Где справедливость?&lt;/li&gt;
&lt;li&gt;Это что, мне одному надо?&lt;/li&gt;
&lt;li&gt;Почему начальство не даёт времени на рефакторинг?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Я знаю. Я тоже через это прошёл.&lt;/p&gt;</description></item><item><title>The fast and the continuous @ SQA Days 16</title><link>https://ru.selenide.org/2014/12/13/the-fast-and-the-continuous/</link><pubDate>Sat, 13 Dec 2014 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2014/12/13/the-fast-and-the-continuous/</guid><description>&lt;p&gt;Видео моего доклада &lt;a href="http://sqadays.com/ru/talk/25882"&gt;&amp;ldquo;The fast and the continuous&amp;rdquo;&lt;/a&gt; на недавней конференции SQA Days 16 в Санкт-Петербурге.&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Вы всё ещё гоняете все свои тесты на Selenium?&lt;/li&gt;
&lt;li&gt;Вы всё ещё считаете, что TestNG круче, чем JUnit?&lt;/li&gt;
&lt;li&gt;Вы всё ещё пытаетесь распараллелить свои тесты?&lt;/li&gt;
&lt;li&gt;Вы всё ещё мечтаете иметь собственный Selenium Grid с 30 машинами и прогонять тесты всего лишь за пару часов?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Тогда мы идём к вам!&lt;/p&gt;
&lt;p&gt;Я поделюсь нашим опытом автоматизации тестирования, расскажу, как нам удаётся командой из нескольких человек писать и код, и тесты, и прогонять полный цикл автотестов всего лишь за 5 минут без гридов и прочих монстров.&lt;/p&gt;</description></item><item><title>Вы находите не те ошибки</title><link>https://ru.selenide.org/2014/12/09/you-find-wrong-bugs/</link><pubDate>Tue, 09 Dec 2014 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2014/12/09/you-find-wrong-bugs/</guid><description>&lt;p&gt;На недавней конференции SQA Days в Санкт-Петербурге произошёл один инцидент, который поначалу остался незамеченным.
Я не нашёлся сразу, что ответить, лишь улыбнулся в ответ. Но какое-то зерно сомнения проронилось в мой мозг и проросло
лишь через несколько дней.&lt;/p&gt;
&lt;h3 id="в-общем"&gt;В общем,&lt;/h3&gt;
&lt;p&gt;после того, как я оттарабанил &lt;a href="http://sqadays.com/ru/talk/25882"&gt;свой доклад&lt;/a&gt; о том, каким я вижу по-настоящему эффективное тестирование софта, один товарищ
взял микрофон и начала пулять вопросами. После нескольких моих ответов он покачал головой и бросил, садясь:&lt;/p&gt;</description></item><item><title>Изменения в Selenide 2.15</title><link>https://ru.selenide.org/2014/11/03/selenide-2.15/</link><pubDate>Mon, 03 Nov 2014 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2014/11/03/selenide-2.15/</guid><description>&lt;p&gt;Здрасьте!&lt;/p&gt;
&lt;p&gt;Хорошие новости: вышла новая версия Selenide 2.15. На сей раз нас ждёт много нового. Садитесь поудобнее, начинаем обзор новинок!&lt;/p&gt;
&lt;h3 id="sizzle-селекторы-css3"&gt;Sizzle селекторы (CSS3)&lt;/h3&gt;
&lt;p&gt;Теперь в Selenide можно использовать &lt;a href="http://sizzlejs.com/"&gt;CSS3 селекторы&lt;/a&gt; для поиска элементов!&lt;/p&gt;
&lt;p&gt;Например:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;:contains(&amp;#39;Tere Martin!&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldBe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;visible&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;:not(a#id)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;:not(div,p)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;[value!=&amp;#39;johnny&amp;#39;]&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;div:has(span)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;:input&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;:text&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;:checkbox&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;:file&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;:password&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;:image&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;:header&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;:first&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;:last&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;:even&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Возможность пока новая и мало исследованная, поэтому по умолчанию она выключена. Включить её можно такой командой:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;selectorMode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Sizzle&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Попробуете - расскажите, как получилось.&lt;/p&gt;</description></item><item><title>Доклад про Selenide на конференции ConfeT&amp;QA</title><link>https://ru.selenide.org/2014/10/12/selenide-at-confetqa/</link><pubDate>Sun, 12 Oct 2014 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2014/10/12/selenide-at-confetqa/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;В ноябре 2013 прошла онлайн-конференция по тестированию ConfeT&amp;amp;QA.&lt;/p&gt;
&lt;p&gt;Я чрезвычайно горд тем, что мне удалось там поучаствовать, и более того, занять первое место по результатам
зрительского голосования.&lt;/p&gt;
&lt;h3 id="selenide-лаконичные-и-стабильные-ui-тесты-на-java"&gt;&lt;a href="http://software-testing.ru/library/testing/general-testing/1880-selenide----ui---java"&gt;Selenide: лаконичные и стабильные UI тесты на Java&lt;/a&gt;&lt;/h3&gt;
&lt;iframe width="800" height="415" src="//www.youtube.com/embed/MTHhflyh8Ck" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;p&gt;Конечно, стоит упомянуть, что на ConfeT&amp;amp;QA 2013 было и много других &lt;a href="http://www.youtube.com/results?search_query=&amp;#43;ConfeT%26QA&amp;#43;2013"&gt;очень полезных докладов&lt;/a&gt;.
Спасибо организаторам за организацию и участникам за участие! Надеюсь, не в последний раз.&lt;/p&gt;
&lt;p&gt;Вообще оказалось, что онлайн-конференция - жутко удобная вещь. Не надо никуда ехать, не надо тратиться на самолёт
и гостиницу, и даже почти не надо тратить время. Всего-то три дня подряд заканчиваешь работу на два часа
раньше и надеваешь наушники. Это здорово помогает отвлечься от работы, получить массу новых идей и с понедельника
выйти на работу с желанием всё перевернуть.&lt;/p&gt;</description></item><item><title>Изменения в Selenide 2.13 и 2.14</title><link>https://ru.selenide.org/2014/09/28/selenide-2.13-and-2.14/</link><pubDate>Sun, 28 Sep 2014 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2014/09/28/selenide-2.13-and-2.14/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;В сентябре мы успели зарелизить сразу две версии: Selenide 2.13 и 2.14. Функций там немного, но есть одна принципиально важная, с неё и начнём.&lt;br/&gt; &lt;br/&gt;&lt;/p&gt;
&lt;h3 id="быстрый-метод-setvalue"&gt;Быстрый метод $.setValue&lt;/h3&gt;
&lt;p&gt;Мы в Codeborne анализировали производительность тестов на реальных проектах и заметили, что самая медленная операция -
это не поиск по XPath, как многие думают, а заполнение текстовых полей. То есть функция &lt;code&gt;$.setValue&lt;/code&gt; (она же
&lt;code&gt;WebElement.sendKeys&lt;/code&gt;). Дело в том, что по умолчанию Selenium при заполнении поля эмулирует нажатия каждой отдельной
клавиши со всеми сопутствующими событиями: keyDown, keyUp и пр. - что делает метод &lt;code&gt;sendKeys&lt;/code&gt; относительно медленным.&lt;/p&gt;</description></item><item><title>Как начать писать UI тесты за 10 минут</title><link>https://ru.selenide.org/2014/09/25/how-to-start-writing-ui-tests/</link><pubDate>Thu, 25 Sep 2014 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2014/09/25/how-to-start-writing-ui-tests/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Очень часто я слышу этот вопрос: как научиться писать тесты? С чего начать? Как написать первый тест на Selenium?&lt;/p&gt;
&lt;p&gt;И вот наконец у нас есть ответ!&lt;/p&gt;
&lt;p&gt;В этом видео-уроке показано, как создать проект на Maven и написать тест, который открывает Google в браузере, вбивает слово для поиска и проверяет результаты.&lt;/p&gt;
&lt;center&gt;
&lt;iframe src="//player.vimeo.com/video/106867878" width="800" height="450" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt; &lt;p&gt;&lt;a href="https://vimeo.com/106867878"&gt;Как написать UI тест за 10 минут&lt;/a&gt; from &lt;a href="https://vimeo.com/user20427140"&gt;Selenide&lt;/a&gt; on &lt;a href="https://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Туториал по Selenide&lt;/p&gt;
&lt;/center&gt;
&lt;p&gt;&lt;a href="https://ru.selenide.org/users.html#contact"&gt;Конструктивная критика&lt;/a&gt; приветствуется.&lt;/p&gt;
&lt;br /&gt;</description></item><item><title>Заметки об использовании Selenide: IE, TestNG, Bootstrap dropdown</title><link>https://ru.selenide.org/2014/08/25/selenide-usage-notes/</link><pubDate>Mon, 25 Aug 2014 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2014/08/25/selenide-usage-notes/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Меня зовут Сергей Шимкив, и я хочу поделиться с вами своими заметками об использовании Selenide/Selenium. &lt;br/&gt; &lt;br/&gt;&lt;/p&gt;
&lt;h3 id="заметки-об-ie"&gt;Заметки об IE&lt;/h3&gt;
&lt;p&gt;IE 11 x32/x64. В некоторых случаях после действий с HTML элементами (например, &lt;code&gt;click()&lt;/code&gt;) вы можете получить ошибку. &lt;br /&gt;
Проблема в использовании синтетических событиях. Решение - использовать нативные события для IE:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;capabilities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setCapability&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;nativeEvents&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;См. &lt;a href="https://code.google.com/p/selenium/wiki/InternetExplorerDriver"&gt;https://code.google.com/p/selenium/wiki/InternetExplorerDriver&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h3 id="один-способ-добавить-скриншоты-selenide-в-testng-html-репорт"&gt;Один способ добавить скриншоты Selenide в TestNG HTML репорт&lt;/h3&gt;
&lt;p&gt;Иногда было бы неплохо добавить скриншоты Selenide от упавших тестов в ваш TestNG HTML отчёт.&lt;/p&gt;</description></item><item><title>Укороти свой код!</title><link>https://ru.selenide.org/2014/08/08/shorten-your-code/</link><pubDate>Fri, 08 Aug 2014 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2014/08/08/shorten-your-code/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Вашему вниманию представляется &lt;em&gt;Prezi&lt;/em&gt; презентация про Selenide от &lt;a href="http://prezi.com/user/-yv8ll42j1_i/"&gt;Ashwin Dalvi&lt;/a&gt;.&lt;/p&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;h3 id="плюсы-минусы-и-мифы"&gt;Плюсы, Минусы и Мифы:&lt;/h3&gt;
&lt;iframe src="http://prezi.com/embed/d18jggopjyaj/?bgcolor=ffffff&amp;amp;lock_to_path=0&amp;amp;autoplay=0&amp;amp;autohide_ctrls=0&amp;amp;features=undefined&amp;amp;disabled_features=undefined&amp;amp;html5=1" width="800" height="600" frameBorder="0" webkitAllowFullScreen mozAllowFullscreen allowfullscreen&gt;&lt;/iframe&gt;
&lt;br/&gt;
&lt;p&gt;Selenide: Укороти свой код!&lt;/p&gt;
&lt;br/&gt;</description></item><item><title>Изменения в Selenide 2.12</title><link>https://ru.selenide.org/2014/07/05/selenide-2.12/</link><pubDate>Sat, 05 Jul 2014 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2014/07/05/selenide-2.12/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Хорошие новости: мы зарелизили Selenide 2.12. Давайте посмотрим, что там новенького. &lt;br/&gt; &lt;br/&gt;&lt;/p&gt;
&lt;h3 id="добавилась-функция-uploadfilefile"&gt;Добавилась функция $.uploadFile(File)&lt;/h3&gt;
&lt;p&gt;Новая функция позволяет загрузить файл.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;src/test/resources/cv.pdf&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#cvFileUpload&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;uploadFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cv&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Раньше в Selenide уже была похожая функция &lt;code&gt;$.uploadFromClasspath(String fileName)&lt;/code&gt;. Она искала файл для загрузки в
classpath. Нам всегда казалось, что держать тестовые файлы вместе с кодом самих тестов - это правильно (а значит, при
сборке проектов эти файлы будут попадать в classpath). Но оказалось, что иногда удобно и загрузить какой-то
файл из другого места.&lt;/p&gt;</description></item><item><title>Изменения в Selenide 2.11</title><link>https://ru.selenide.org/2014/05/23/selenide-2.11/</link><pubDate>Fri, 23 May 2014 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2014/05/23/selenide-2.11/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Мы выпустили версию Selenide 2.11. В ней почти нет новых функций, зато удалены старые неиспользуемые функции,
которые иногда мешали нам жить и затрудняли дальнейшее развитие. &lt;br/&gt; &lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Пожалуйста, попробуйте запустить свои тесты с Selenide 2.11 и дайте знать, если что-то сломалось. &lt;br/&gt; &lt;br/&gt;&lt;/p&gt;
&lt;h2 id="что-мы-подчистили"&gt;Что мы подчистили&lt;/h2&gt;
&lt;h3 id="убрали-зависимость-от-jquery"&gt;Убрали зависимость от jQuery&lt;/h3&gt;
&lt;p&gt;Раньше методы $.selectOption() и $.selectOptionByValue() пытались с помощью jQuery сгенерировать событие &amp;ldquo;change&amp;rdquo;.
Это было сделано когда-то давно для борьбы с тестами, падающими под Windows в IE. Теперь это уже неактуально - во
всяком случае, все тесты в наших проектах проходят и так. &lt;br/&gt; &lt;br/&gt;&lt;/p&gt;</description></item><item><title>Изменения в Selenide 2.10</title><link>https://ru.selenide.org/2014/04/27/selenide-2.10/</link><pubDate>Sun, 27 Apr 2014 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2014/04/27/selenide-2.10/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Недавно вышла версия Selenide 2.10. Что новенького нас ждёт?&lt;/p&gt;
&lt;h2 id="новые-функции"&gt;Новые функции&lt;/h2&gt;
&lt;h3 id="работа-с-вкладками-и-окнами"&gt;Работа с вкладками и окнами&lt;/h3&gt;
&lt;p&gt;В Selenium WebDriver неудобно работать с окнами. Selenium предлагает только метод getWindowHandles(), который
возвращает множество (Set) строк - идентификаторов открытых окон. Найти среди них нужное - нетривиальная задача.
&lt;br/&gt;
&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Поскольку задача Selenide - освободить голову программиста от технических вопросов, мы хотим сделать работу с
окнами/вкладками максимально простой и интуитивной. Начали мы с простого: добавили метод&lt;/p&gt;</description></item><item><title>Изменения в Selenide 2.9</title><link>https://ru.selenide.org/2014/03/15/selenide-2.9/</link><pubDate>Sat, 15 Mar 2014 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2014/03/15/selenide-2.9/</guid><description>&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Сегодня вышла версия Selenide 2.9. Давайте посмотрим, что хорошего несёт с собой новая версия.&lt;/p&gt;
&lt;h2 id="что-новенького-нас-ждёт"&gt;Что новенького нас ждёт&lt;/h2&gt;
&lt;h3 id="добавлена-поддержка-браузера-safari"&gt;Добавлена поддержка браузера Safari&lt;/h3&gt;
&lt;p&gt;Но сам Safari всё ещё кажется нестабильным. Во всяком случае, не все тесты самого Selenide проходят на Safari.&lt;/p&gt;
&lt;p&gt;И ещё он не поддерживает &lt;code&gt;alert&lt;/code&gt;&amp;lsquo;ы и не умеет открывать локальные файла типа &lt;code&gt;file://c:/tmp.txt&lt;/code&gt;.
А какой у вас опыт работы с вебдрайвером Safari?&lt;/p&gt;
&lt;h3 id="добавлен-condition-or"&gt;Добавлен condition &lt;code&gt;or&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Теперь можно писать так:&lt;/p&gt;</description></item><item><title>Selenide downloads: 200 уникальных IP</title><link>https://ru.selenide.org/2014/03/12/selenide-downloads/</link><pubDate>Wed, 12 Mar 2014 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2014/03/12/selenide-downloads/</guid><description>&lt;p&gt;Не все знают, но Central Maven Repo раз в месяц публикует статистику скачиваний разных артефактов.&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;Сегодня опубликована статистика скачиваний Selenide за февраль. На картинке - количество уникальных IP-адресов, с
которых скачивался selenide.jar из центрального репозитория.&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;Похоже, мы сделали большой скачок! Ура!&lt;/p&gt;
&lt;br/&gt;
&lt;center&gt;
&lt;img src="https://ru.selenide.org/images/2014/03/selenide_downloads.unique_ips.png" width="800"/&gt;
&lt;/center&gt;
&lt;br/&gt;</description></item><item><title>Selenide за пять минут от Glen Smith</title><link>https://ru.selenide.org/2014/03/11/selenide-in-5-minutes/</link><pubDate>Tue, 11 Mar 2014 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2014/03/11/selenide-in-5-minutes/</guid><description>&lt;p&gt;Ух ты!&lt;/p&gt;
&lt;p&gt;Glen Smith презентовал библиотеку Selenide на JUG в Канберре.&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;Это классная 5-минутная живая демонстрация Selenide. За пять минут Глен успел и рассказать, и написать, и запустить
полноценный рабочий тест, причём не для чего-нибудь, а для гуглового сервиса поиска картинок. А это, знаете, не так
просто: там ведь аякс и всё такое.&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;Наслаждайтесь!&lt;/p&gt;
&lt;br/&gt;
&lt;center&gt;
&lt;iframe src="//www.youtube.com/embed/6LW4h5y6Iw4" height="473" width="630" allowfullscreen="" frameborder="0"&gt;&lt;/iframe&gt;
&lt;br/&gt;
&lt;p&gt;Оригинальный пост: &lt;a href="http://blogs.bytecode.com.au/glen/2014/02/13/selenide-in-five-minutes-a-lightning-talk.html"&gt;Selenide in Five Minutes: A lightning talk&lt;/a&gt;&lt;/p&gt;
&lt;/center&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a href="http://blogs.bytecode.com.au/glen/about"&gt;Глен Смит&lt;/a&gt; - инженер из Австралии, соавтор книги &amp;ldquo;Grails in Action&amp;rdquo;.&lt;/p&gt;</description></item><item><title>Футболка Selenide</title><link>https://ru.selenide.org/2013/10/04/selenide-tshirt/</link><pubDate>Fri, 04 Oct 2013 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2013/10/04/selenide-tshirt/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Как вы уже успели заметить, у Selenide появилось новое лого и новый дизайн.&lt;/p&gt;
&lt;p&gt;И даже свои футболки. Всё по-взрослому!&lt;/p&gt;
&lt;p&gt;Три такие замечательные футболки мы разыграем уже на следующей неделе
на конференции &lt;a href="http://xpdays.com.ua/program/"&gt;XP Days&lt;/a&gt; в Киеве.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ru.selenide.org/images/2013/10/selenide_front.jpg"&gt;&lt;img src="https://ru.selenide.org/images/2013/10/selenide_front.thumb.jpg" alt="front"&gt;&lt;/a&gt;
&lt;a href="https://ru.selenide.org/images/2013/10/selenide_back.jpg"&gt;&lt;img src="https://ru.selenide.org/images/2013/10/selenide_back.thumb.jpg" alt="back"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Selenide Harlem Shake</title><link>https://ru.selenide.org/2013/08/29/selenide-harlem-shake/</link><pubDate>Thu, 29 Aug 2013 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2013/08/29/selenide-harlem-shake/</guid><description>&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Это видео, демонстрирующее, насколько легко начать писать автоматические тесты с Selenide.&lt;/p&gt;
&lt;p&gt;Мы хотели создать скринкаст, который был бы коротким, весёлым и в то же время информативным. И кстати, это реальный проект, а не какой-нибудь там Hello Word.&lt;/p&gt;
&lt;p&gt;Смотреть со звуком!&lt;/p&gt;
&lt;iframe src="//player.vimeo.com/video/73128965" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;
&lt;/iframe&gt;
&lt;p&gt;
 &lt;a href="https://vimeo.com/73128965"&gt;Selenide Harlem Shake&lt;/a&gt; from
 &lt;a href="https://vimeo.com/user20427140"&gt;Selenide&lt;/a&gt; on
 &lt;a href="https://vimeo.com"&gt;Vimeo&lt;/a&gt;.
&lt;/p&gt;</description></item><item><title>Может ли PhantomJS делать скриншоты?</title><link>https://ru.selenide.org/2013/07/15/can-phantomjs-take-screenshots/</link><pubDate>Mon, 15 Jul 2013 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2013/07/15/can-phantomjs-take-screenshots/</guid><description>&lt;p&gt;Многие думают, что PhantomJS как headless-браузер не умеет делать снимки экрана.&lt;/p&gt;
&lt;p&gt;А вот и неправда!&lt;/p&gt;
&lt;p&gt;Согласно &lt;a href="https://github.com/ariya/phantomjs/wiki/Screen-Capture"&gt;документации PhantomJS&lt;/a&gt;, он умеет делать скриншоты.&lt;/p&gt;
&lt;p&gt;Давайте-ка попробуем.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;com.codeborne.selenide.Selenide.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TestPhantomScreenshot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;browser&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;phantomjs&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://google.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;screenshot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;google-com-screenshot&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Это работает!&lt;/p&gt;
&lt;p&gt;Впрочем, работает неидеально. Скриншоты &lt;a href="https://ru.selenide.org/images/2013/07/google-com-screenshot.png"&gt;google.com&lt;/a&gt;,
&lt;a href="https://ru.selenide.org/images/2013/07/habrahabr-ru-screenshot.png"&gt;habrahabr.ru&lt;/a&gt; и
&lt;a href="https://ru.selenide.org/images/2013/07/skype-com-screenshot.png"&gt;skype.com&lt;/a&gt; выглядят неплохо, но вот скриншот
&lt;a href="https://ru.selenide.org/images/2013/07/selenide-org-screenshot.png"&gt;selenide.org&lt;/a&gt; смотрится весьма странно.&lt;/p&gt;
&lt;p&gt;Значит ли это, что PhantomJS ещё недостаточно зрелый продукт?
Не знаю. Но всяком случае теперь мы знаем точно, что PhantomJS умеет делать скриншоты.&lt;/p&gt;</description></item><item><title>Видео: Selenide на SeleniumCamp 2013</title><link>https://ru.selenide.org/2013/05/09/video-selenide-on-seleniumcamp/</link><pubDate>Thu, 09 May 2013 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2013/05/09/video-selenide-on-seleniumcamp/</guid><description>&lt;p&gt;Наш доклад про Selenide на конференции &lt;a href="https://seleniumcamp.com/archive/selenium-camp-2013/materials/"&gt;SeleniumCamp 2013&lt;/a&gt; в Киеве&lt;/p&gt;
&lt;p&gt;Часть первая, введение в Selenide:&lt;/p&gt;
&lt;iframe src="//www.youtube.com/embed/4TegXkNWbqw" width="800" height="490" frameborder="0"&gt;&lt;/iframe&gt;
&lt;p&gt;Часть вторая, живая демонстрация Selenide:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;парное программирование&lt;/li&gt;
&lt;li&gt;ping-pong programming&lt;/li&gt;
&lt;li&gt;программируем настоящий интернет-банк&lt;/li&gt;
&lt;/ul&gt;
&lt;iframe src="//www.youtube.com/embed/x3osTlsU82g" width="800" height="490" frameborder="0"&gt;&lt;/iframe&gt;</description></item><item><title>Что такое Selenide</title><link>https://ru.selenide.org/2013/04/23/what-is-selenide/</link><pubDate>Tue, 23 Apr 2013 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/2013/04/23/what-is-selenide/</guid><description>&lt;p&gt;Многие слышали про &lt;a href="https://github.com/seleniumhq/selenium/"&gt;Selenium WebDriver&lt;/a&gt; - один из самых популярных инструментов для написания приёмочных/интеграционных тестов.&lt;/p&gt;
&lt;p&gt;Написание UI тестов - непростая задача. Есть ряд проблем, с которыми сталкиваются все без исключения -
это Ajax-запросы, динамические страницы и, чёрт их подери, таймауты.
Главная цель Selenide - решить эти проблемы.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://ru.selenide.org/images/selenide-logo-100x100.png" alt="right"&gt;&lt;/p&gt;
&lt;h3 id="что-такое-selenide"&gt;Что такое Selenide&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://selenide.org"&gt;Selenide&lt;/a&gt; - это обёртка вокруг Selenium WebDriver, позволяющая быстро и просто его использовать при написании тестов, сосредоточившись на логике, а не суете с браузером.&lt;/p&gt;</description></item><item><title/><link>https://ru.selenide.org/contacts.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/contacts.html</guid><description>&lt;script&gt;
 window.location = '/users.html#contact';
&lt;/script&gt;</description></item><item><title/><link>https://ru.selenide.org/documentation/clouds.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/documentation/clouds.html</guid><description>&lt;div class="left-menu-icon"&gt;
 &lt;img src="https://ru.selenide.org/images/burger-menu-left.svg" width="32" alt="Menu"/&gt;
&lt;/div&gt;
&lt;div class="left-menu"&gt;
 &lt;div&gt;Доки&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation.html"&gt;API&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/page-objects.html"&gt;Page Objects&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/screenshots.html"&gt;Скриншоты&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/reports.html"&gt;Отчёты&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/clouds.html"&gt;Облака&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/selenide-vs-selenium.html"&gt;Selenide vs Selenium&lt;/a&gt;&lt;/div&gt;

 &lt;br/&gt;
 &lt;div&gt;Ресурсы&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://prezi.com/d18jggopjyaj/selenide-shorten-your-code/" target="_blank" class="external-link"&gt;Shorten your code!&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://www.methodsandtools.com/tools/selenide.php" target="_blank" class="external-link"&gt;Methods &amp; Tools&lt;/a&gt;&lt;/div&gt;
 
 &lt;div&gt;✓ &lt;a href="https://habrahabr.ru/post/143269/" target="_blank" class="external-link"&gt;Хабр&lt;/a&gt;&lt;/div&gt;
 

 &lt;br/&gt;
 &lt;div&gt;Видео&lt;/div&gt;
 
 &lt;div&gt;✓ &lt;a class="video" href="https://vimeo.com/106867878"&gt;UI тест за 10 минут&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a class="video" href="https://www.youtube.com/watch?v=MTHhflyh8Ck"&gt;ConfeT Q&amp;A 2013&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a target="_blank" href="https://seleniumcamp.com/archive/selenium-camp-2013/materials/tdd-with-selenide/"&gt;SeleniumCamp 2013&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a target="_blank" href="https://www.youtube.com/watch?v=zOiSo1hYjF8"&gt;Flaky tests&lt;/a&gt;&lt;/div&gt;
 
&lt;/div&gt;

&lt;br&gt;
&lt;h4 id="-selenium-grid"&gt;&lt;a href="https://ru.selenide.org/documentation/clouds.html#selenium-grid"&gt;&amp;gt; Selenium Grid&lt;/a&gt;&lt;/h4&gt;
&lt;h4 id="-testcontainers"&gt;&lt;a href="https://ru.selenide.org/documentation/clouds.html#testcontainers"&gt;&amp;gt; TestContainers&lt;/a&gt;&lt;/h4&gt;
&lt;h4 id="-testmu-ai-ex-lambdatest"&gt;&lt;a href="https://ru.selenide.org/documentation/clouds.html#testmu-ai"&gt;&amp;gt; TestMu AI (ex. LambdaTest)&lt;/a&gt;&lt;/h4&gt;
&lt;h4 id="-browserstack"&gt;&lt;a href="https://ru.selenide.org/documentation/clouds.html#browserstack"&gt;&amp;gt; BrowserStack&lt;/a&gt;&lt;/h4&gt;
&lt;h4 id="-saucelabs"&gt;&lt;a href="https://ru.selenide.org/documentation/clouds.html#saucelabs"&gt;&amp;gt; Saucelabs&lt;/a&gt;&lt;/h4&gt;
&lt;h4 id="-moon"&gt;&lt;a href="https://ru.selenide.org/documentation/clouds.html#moon"&gt;&amp;gt; Moon&lt;/a&gt;&lt;/h4&gt;
&lt;h4 id="-selenoid"&gt;&lt;a href="https://ru.selenide.org/documentation/clouds.html#selenoid"&gt;&amp;gt; Selenoid&lt;/a&gt;&lt;/h4&gt;
&lt;h4 id="-другие-облачные-провайдеры"&gt;&lt;a href="https://ru.selenide.org/documentation/clouds.html#other"&gt;&amp;gt; Другие облачные провайдеры&lt;/a&gt;&lt;/h4&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;Самый простой, быстрый и надёжный способ - запускать браузер рядом с тестом (т.н. &amp;ldquo;локальный&amp;rdquo; запуск).
В крайнем случае - в докере на той же машине.&lt;/p&gt;</description></item><item><title/><link>https://ru.selenide.org/documentation/page-objects.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/documentation/page-objects.html</guid><description>&lt;div class="left-menu-icon"&gt;
 &lt;img src="https://ru.selenide.org/images/burger-menu-left.svg" width="32" alt="Menu"/&gt;
&lt;/div&gt;
&lt;div class="left-menu"&gt;
 &lt;div&gt;Доки&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation.html"&gt;API&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/page-objects.html"&gt;Page Objects&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/screenshots.html"&gt;Скриншоты&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/reports.html"&gt;Отчёты&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/clouds.html"&gt;Облака&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/selenide-vs-selenium.html"&gt;Selenide vs Selenium&lt;/a&gt;&lt;/div&gt;

 &lt;br/&gt;
 &lt;div&gt;Ресурсы&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://prezi.com/d18jggopjyaj/selenide-shorten-your-code/" target="_blank" class="external-link"&gt;Shorten your code!&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://www.methodsandtools.com/tools/selenide.php" target="_blank" class="external-link"&gt;Methods &amp; Tools&lt;/a&gt;&lt;/div&gt;
 
 &lt;div&gt;✓ &lt;a href="https://habrahabr.ru/post/143269/" target="_blank" class="external-link"&gt;Хабр&lt;/a&gt;&lt;/div&gt;
 

 &lt;br/&gt;
 &lt;div&gt;Видео&lt;/div&gt;
 
 &lt;div&gt;✓ &lt;a class="video" href="https://vimeo.com/106867878"&gt;UI тест за 10 минут&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a class="video" href="https://www.youtube.com/watch?v=MTHhflyh8Ck"&gt;ConfeT Q&amp;A 2013&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a target="_blank" href="https://seleniumcamp.com/archive/selenium-camp-2013/materials/tdd-with-selenide/"&gt;SeleniumCamp 2013&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a target="_blank" href="https://www.youtube.com/watch?v=zOiSo1hYjF8"&gt;Flaky tests&lt;/a&gt;&lt;/div&gt;
 
&lt;/div&gt;

&lt;h2 id="page-objects---это-просто"&gt;Page Objects - это просто!&lt;/h2&gt;
&lt;p&gt;В мире тестирования очень популярен шаблон &lt;a href="https://github.com/SeleniumHQ/selenium/wiki/PageFactory"&gt;Page Objects&lt;/a&gt;.
Суть его в том, что для каждой страницы тестируемого приложения создаётся отдельный объект, методы которого инкапсулируют логику работы с отдельными элементами.
Считается, что Page Object позволяет избежать дублирования локаторов в тестах.&lt;/p&gt;</description></item><item><title/><link>https://ru.selenide.org/documentation/reports.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/documentation/reports.html</guid><description>&lt;div class="left-menu-icon"&gt;
 &lt;img src="https://ru.selenide.org/images/burger-menu-left.svg" width="32" alt="Menu"/&gt;
&lt;/div&gt;
&lt;div class="left-menu"&gt;
 &lt;div&gt;Доки&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation.html"&gt;API&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/page-objects.html"&gt;Page Objects&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/screenshots.html"&gt;Скриншоты&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/reports.html"&gt;Отчёты&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/clouds.html"&gt;Облака&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/selenide-vs-selenium.html"&gt;Selenide vs Selenium&lt;/a&gt;&lt;/div&gt;

 &lt;br/&gt;
 &lt;div&gt;Ресурсы&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://prezi.com/d18jggopjyaj/selenide-shorten-your-code/" target="_blank" class="external-link"&gt;Shorten your code!&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://www.methodsandtools.com/tools/selenide.php" target="_blank" class="external-link"&gt;Methods &amp; Tools&lt;/a&gt;&lt;/div&gt;
 
 &lt;div&gt;✓ &lt;a href="https://habrahabr.ru/post/143269/" target="_blank" class="external-link"&gt;Хабр&lt;/a&gt;&lt;/div&gt;
 

 &lt;br/&gt;
 &lt;div&gt;Видео&lt;/div&gt;
 
 &lt;div&gt;✓ &lt;a class="video" href="https://vimeo.com/106867878"&gt;UI тест за 10 минут&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a class="video" href="https://www.youtube.com/watch?v=MTHhflyh8Ck"&gt;ConfeT Q&amp;A 2013&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a target="_blank" href="https://seleniumcamp.com/archive/selenium-camp-2013/materials/tdd-with-selenide/"&gt;SeleniumCamp 2013&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a target="_blank" href="https://www.youtube.com/watch?v=zOiSo1hYjF8"&gt;Flaky tests&lt;/a&gt;&lt;/div&gt;
 
&lt;/div&gt;

&lt;br&gt;
&lt;h4 id="-yagni"&gt;&lt;a href="https://ru.selenide.org/documentation/reports.html#yagni"&gt;&amp;gt; YAGNI&lt;/a&gt;&lt;/h4&gt;
&lt;h4 id="-text-report"&gt;&lt;a href="https://ru.selenide.org/documentation/reports.html#text-report"&gt;&amp;gt; Text report&lt;/a&gt;&lt;/h4&gt;
&lt;h4 id="-allure-report"&gt;&lt;a href="https://ru.selenide.org/documentation/reports.html#allure-report"&gt;&amp;gt; Allure report&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a name="yagni"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="yagni"&gt;YAGNI&lt;/h2&gt;
&lt;p&gt;Для начала хочу предупредить, что возможно, вам вовсе не нужны никакие отчёты.&lt;/p&gt;
&lt;p&gt;И Maven, и Gradle генерируют достаточно хороший отчёт о прохождении тестов, в который включены все ошибки.&lt;br&gt;
При падении теста Селенид генерирует подробное сообщение об ошибке (включая &lt;a href="https://ru.selenide.org/documentation/screenshots.html"&gt;скриншот&lt;/a&gt; и html страницы).
Как правило, этого достаточно, чтобы понять, почему тест упал:&lt;/p&gt;</description></item><item><title/><link>https://ru.selenide.org/documentation/screenshots.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/documentation/screenshots.html</guid><description>&lt;div class="left-menu-icon"&gt;
 &lt;img src="https://ru.selenide.org/images/burger-menu-left.svg" width="32" alt="Menu"/&gt;
&lt;/div&gt;
&lt;div class="left-menu"&gt;
 &lt;div&gt;Доки&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation.html"&gt;API&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/page-objects.html"&gt;Page Objects&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/screenshots.html"&gt;Скриншоты&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/reports.html"&gt;Отчёты&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/clouds.html"&gt;Облака&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/selenide-vs-selenium.html"&gt;Selenide vs Selenium&lt;/a&gt;&lt;/div&gt;

 &lt;br/&gt;
 &lt;div&gt;Ресурсы&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://prezi.com/d18jggopjyaj/selenide-shorten-your-code/" target="_blank" class="external-link"&gt;Shorten your code!&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://www.methodsandtools.com/tools/selenide.php" target="_blank" class="external-link"&gt;Methods &amp; Tools&lt;/a&gt;&lt;/div&gt;
 
 &lt;div&gt;✓ &lt;a href="https://habrahabr.ru/post/143269/" target="_blank" class="external-link"&gt;Хабр&lt;/a&gt;&lt;/div&gt;
 

 &lt;br/&gt;
 &lt;div&gt;Видео&lt;/div&gt;
 
 &lt;div&gt;✓ &lt;a class="video" href="https://vimeo.com/106867878"&gt;UI тест за 10 минут&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a class="video" href="https://www.youtube.com/watch?v=MTHhflyh8Ck"&gt;ConfeT Q&amp;A 2013&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a target="_blank" href="https://seleniumcamp.com/archive/selenium-camp-2013/materials/tdd-with-selenide/"&gt;SeleniumCamp 2013&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a target="_blank" href="https://www.youtube.com/watch?v=zOiSo1hYjF8"&gt;Flaky tests&lt;/a&gt;&lt;/div&gt;
 
&lt;/div&gt;

&lt;h2 id="как-сделать-скриншот-в-тесте"&gt;Как сделать скриншот в тесте?&lt;/h2&gt;
&lt;p&gt;Обычно это не нужно, так как &lt;strong&gt;Selenide автоматически делает скриншоты&lt;/strong&gt; при падении тестов. Это очень удобно для анализа ошибки.&lt;/p&gt;
&lt;p&gt;По умолчанию Selenide складывает скриншоты в папку &lt;code&gt;build/reports/tests&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="можно-ли-сказать-selenide-сохранять-скриншоты-в-другую-папку"&gt;Можно ли сказать Selenide сохранять скриншоты в другую папку?&lt;/h3&gt;
&lt;p&gt;Да. Для этого используйте ключик &lt;code&gt;-Dselenide.reportsFolder=test-result/reports&lt;/code&gt; и укажите путь к нужной папке.
Для версии 4 и ниже используйте &lt;code&gt;-Dselenide.reports=test-result/reports&lt;/code&gt;
Альтернативный вариант - установить путь к скриншотам прямо в своём коде:&lt;/p&gt;</description></item><item><title/><link>https://ru.selenide.org/documentation/selenide-vs-selenium.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/documentation/selenide-vs-selenium.html</guid><description>&lt;div class="left-menu-icon"&gt;
 &lt;img src="https://ru.selenide.org/images/burger-menu-left.svg" width="32" alt="Menu"/&gt;
&lt;/div&gt;
&lt;div class="left-menu"&gt;
 &lt;div&gt;Доки&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation.html"&gt;API&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/page-objects.html"&gt;Page Objects&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/screenshots.html"&gt;Скриншоты&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/reports.html"&gt;Отчёты&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/clouds.html"&gt;Облака&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://ru.selenide.org/documentation/selenide-vs-selenium.html"&gt;Selenide vs Selenium&lt;/a&gt;&lt;/div&gt;

 &lt;br/&gt;
 &lt;div&gt;Ресурсы&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://prezi.com/d18jggopjyaj/selenide-shorten-your-code/" target="_blank" class="external-link"&gt;Shorten your code!&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a href="https://www.methodsandtools.com/tools/selenide.php" target="_blank" class="external-link"&gt;Methods &amp; Tools&lt;/a&gt;&lt;/div&gt;
 
 &lt;div&gt;✓ &lt;a href="https://habrahabr.ru/post/143269/" target="_blank" class="external-link"&gt;Хабр&lt;/a&gt;&lt;/div&gt;
 

 &lt;br/&gt;
 &lt;div&gt;Видео&lt;/div&gt;
 
 &lt;div&gt;✓ &lt;a class="video" href="https://vimeo.com/106867878"&gt;UI тест за 10 минут&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a class="video" href="https://www.youtube.com/watch?v=MTHhflyh8Ck"&gt;ConfeT Q&amp;A 2013&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a target="_blank" href="https://seleniumcamp.com/archive/selenium-camp-2013/materials/tdd-with-selenide/"&gt;SeleniumCamp 2013&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;✓ &lt;a target="_blank" href="https://www.youtube.com/watch?v=zOiSo1hYjF8"&gt;Flaky tests&lt;/a&gt;&lt;/div&gt;
 
&lt;/div&gt;

&lt;h2 id="мотивация"&gt;Мотивация&lt;/h2&gt;
&lt;p&gt;Selenium WebDriver - отличный инструмент. Но это не инструмент для тестирования. Это инструмент для управления браузером.&lt;/p&gt;
&lt;p&gt;А Selenide - удобный инструмент для автоматических тестов, построенный на базе Selenium WebDriver.&lt;/p&gt;
&lt;h3 id="почему-понадобился-ещё-один-враппер-для-selenium"&gt;Почему понадобился ещё один враппер для Selenium?&lt;/h3&gt;
&lt;p&gt;Да, есть и другие &amp;ldquo;обёртки&amp;rdquo; для Selenium webdriver. Но нам кажется, что все они не решают главные проблемы UI тестов.
А именно, нестабильность тестов, веб-приложения с динамическим контентом, JavaScript, Ajax, таймауты и т.д.
Selenide был создан для решения этих проблем.&lt;/p&gt;</description></item><item><title/><link>https://ru.selenide.org/todo-contributing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/todo-contributing/</guid><description>&lt;h2 id="а-ты-помог-selenide"&gt;А ты помог Selenide?&lt;/h2&gt;
&lt;p&gt;Дорогой друг! И ты тоже можешь помочь проекту Selenide. Для этого даже не надо быть семи пядей во лбу или иметь 20 лет опыта в разработке.&lt;/p&gt;
&lt;p&gt;Вот что ты можешь сделать:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Просмотреть открытые &lt;a href="https://github.com/selenide/selenide/pulls"&gt;пуллреквесты&lt;/a&gt; и дать свою оценку в комментариях, можно ли мержить эти изменения в Selenide&lt;/li&gt;
&lt;li&gt;Просмотреть открытые &lt;a href="https://github.com/selenide/selenide/issues"&gt;тикеты&lt;/a&gt; и дать свою оценку в комментариях:
&lt;ul&gt;
&lt;li&gt;не фигню ли просят&lt;/li&gt;
&lt;li&gt;не сделано ли это уже&lt;/li&gt;
&lt;li&gt;стоит ли это делать&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Дописать недостающую документацию&lt;/li&gt;
&lt;li&gt;Написать блог-пост&lt;/li&gt;
&lt;li&gt;Дописать недостающие тесты&lt;/li&gt;
&lt;li&gt;Добавить свои примеры использования Selenide с другими инструментами на &lt;a href="https://github.com/selenide-examples"&gt;github.com/selenide-examples&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Найти добровольца-дизайнера для редизайна сайта (в первую очередь под мобильники)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Любая помощь приветствуется. Как говорится, нас - рать!&lt;/p&gt;</description></item><item><title/><link>https://ru.selenide.org/todo-medvedev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/todo-medvedev/</guid><description>&lt;p&gt;post medvedeva ot 04.11.2022:
ПОЧЕМУ НАШЕ ДЕЛО ПРАВОЕ
Ответы на простые вопросы
в День народного единства&lt;/p&gt;
&lt;p&gt;За что мы воюем? Россия – огромная и богатая страна. Нам не нужны чужие территории, у нас всего в достатке. Но есть наша земля, которая для нас священна, на которой жили наши предки и на которой сегодня живут наши люди. И которую мы никому не отдадим. Мы защищаем наших людей. Мы воюем за всех своих, за свою землю, за свою тысячелетнюю историю.&lt;/p&gt;</description></item><item><title/><link>https://ru.selenide.org/todo-simonjan/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/todo-simonjan/</guid><description>&lt;p&gt;post simonjan ot 04.11.2022:
Автор Маргарита Симоньян.&lt;/p&gt;
&lt;p&gt;Настанет день, и мы снова приедем в гостеприимный, веселый, светлый и сытый Киев. Наши мужья будут снова сворачивать шеи, заглядываясь на чернобровых Оксан. Мы все будем снова хором спевать в шинке тремя незнакомыми друг с другом столами песню &amp;lsquo;Ніч яка місячна&amp;rsquo;, самую красивую на земле, украинскую песню, которую знает каждый русский, песню из великого советского фильма о нашей общей войне, общем горе и общей гордости.&lt;/p&gt;</description></item><item><title/><link>https://ru.selenide.org/todo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/todo/</guid><description>&lt;h3 id="news"&gt;News&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;У меня было много выступлений про нестабильные UI тесты.
А теперь пришла очередь юнит-тестов!
&amp;ldquo;Flaky unit-tests&amp;rdquo;: &lt;a href="https://www.youtube.com/watch?v=qwfKHfSAqyk"&gt;https://www.youtube.com/watch?v=qwfKHfSAqyk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;21.01.2026
&amp;ldquo;Если вас нет за столом - то вы в меню&amp;rdquo;. Премьер Канады фактически процитировал Вацлава Гавела и объявил о наступлении нового мира&lt;/p&gt;
&lt;p&gt;11.01.2026
«Я в одиночку завершил восемь войн, но Норвегия, член НАТО, по глупости не дала мне Нобелевскую премию, но это неважно. Важно, что я спас миллионы жизней», — написал Трамп в своей соцсети Truth Social 7 января.
&lt;a href="https://ircity.ru/text/world/2026/01/10/76209472/"&gt;https://ircity.ru/text/world/2026/01/10/76209472/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>javadoc</title><link>https://ru.selenide.org/javadoc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/javadoc.html</guid><description>&lt;iframe src="https://ru.selenide.org/javadoc/current/" style="width: 100%" height="600px" seamless="true"&gt;&lt;/iframe&gt;</description></item><item><title>Кто использует Selenide</title><link>https://ru.selenide.org/users.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/users.html</guid><description/></item><item><title>Мы говорим СПАСИБО</title><link>https://ru.selenide.org/thanks.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/thanks.html</guid><description>&lt;script&gt;
 window.location = '/users.html#thanks';
&lt;/script&gt;</description></item><item><title>С чего начать?</title><link>https://ru.selenide.org/quick-start.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/quick-start.html</guid><description>&lt;a class="video right" href="https://vimeo.com/106867878"&gt;
 Как написать UI тест за 10 минут
&lt;/a&gt;
&lt;h3 id="для-пользователей-maven"&gt;Для пользователей Maven:&lt;/h3&gt;
&lt;p&gt;Добавь в файл pom.xml:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.codeborne&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;selenide&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;7.16.0&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;test&lt;span class="nt"&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="для-пользователей-gradle"&gt;Для пользователей Gradle:&lt;/h3&gt;
&lt;p&gt;Добавь в файл build.gradle:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-groovy" data-lang="groovy"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;dependencies&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;testImplementation&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;com.codeborne:selenide:7.16.0&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="начинай-писать-тест"&gt;Начинай писать тест&lt;/h2&gt;
&lt;p&gt;Вот так просто! Больше никакой волокиты, начинай писать тест.&lt;/p&gt;
&lt;p&gt;Импортируй нужный класс:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;com.codeborne.selenide.Selenide.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;com.codeborne.selenide.Condition.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и пиши тест:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Test&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;userCanLoginByUsername&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/login&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;By&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;user.name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="na"&gt;setValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;johny&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#submit&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;.loading_progress&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;should&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;disappear&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Само подождёт, пока элемент исчезнет&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#username&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;shouldHave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello, Johny!&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Само подождёт, пока у элемента появится нужный текст&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И готово!&lt;/p&gt;</description></item><item><title>ЧАВО</title><link>https://ru.selenide.org/faq.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/faq.html</guid><description>&lt;h2 id="мотивация"&gt;Мотивация&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Почему недостаточно Selenium webdriver&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Зачем понадобилась ещё одна обёртка над Selenium?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Вкратце: короче код, лучше читается, не надо переизобретать велосипед.&lt;/p&gt;
&lt;p&gt;И куча дополнительных фич для тестирования.&lt;br&gt;
И автоматические скриншоты и отчёты.&lt;br&gt;
И запись видео.&lt;br&gt;
И тесты для мобилок.&lt;br&gt;
И много чего ещё&amp;hellip;&lt;/p&gt;
&lt;p&gt;Подробный ответ &lt;a href="https://ru.selenide.org/documentation/selenide-vs-selenium.html"&gt;здесь&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="page-objects"&gt;Page Objects&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Можно ли использовать Пэдж Обжекты с Selenide?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Да! Вы можете использовать Пэдж Обжекты с Selenide.&lt;/p&gt;
&lt;p&gt;Более того, с Selenide ваши page objects станут &lt;strong&gt;короче и читабельнее&lt;/strong&gt;. &lt;a href="https://ru.selenide.org/documentation/page-objects.html"&gt;Тут подробности&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Что говорят о Selenide</title><link>https://ru.selenide.org/quotes.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>andrei.solntsev@gmail.com (Andrei Solntsev)</author><guid>https://ru.selenide.org/quotes.html</guid><description>&lt;br&gt;
&lt;blockquote&gt;
 &lt;p&gt;
 "I use Selenide for 4 years already and I can't stop praising it. It's much simpler and clearer, adds syntactic sugar, I don't need to reinvent the wheel and create custom methods. I'm very grateful to those who contribute to Selenide!"
 &lt;/p&gt;
 Lana Petrenko&lt;br/&gt;
 Senior Software Engineer In Test at Aledade, Inc. 
 &lt;br&gt;
&lt;p&gt;[&lt;a href="https://www.linkedin.com/feed/update/urn:li:ugcPost:6892107657344618497?commentUrn=urn%3Ali%3Acomment%3A%28ugcPost%3A6892107657344618497%2C6893925779655184384%29"&gt;source&lt;/a&gt;]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr class="divider"/&gt;
&lt;blockquote&gt;
 &lt;p&gt;
 "Selenide is an open-source library that can make a huge impact on and accelerate software delivery by introducing a concise API, shorter expressions, and many other capabilities. It is a wrapper around Selenium WebDriver and is designed to solve problems that Selenium cannot address."
 &lt;/p&gt;</description></item></channel></rss>