Как использовать Selenium IDE со скриптами & Команды (Утвердить, Проверить)

Содержание:

Anonim

Мы будем использовать веб-сайт Mercury Tours в качестве тестируемого веб-приложения. Это онлайн-система бронирования авиабилетов, которая содержит все элементы, необходимые для этого руководства. Его URL-адрес - http://demo.guru99.com/test/newtours/, и это будет наш базовый URL-адрес.

Создать сценарий путем записи

Давайте теперь создадим наш первый тестовый скрипт в Selenium IDE наиболее распространенным методом - записью. После этого мы выполним наш скрипт, используя функцию воспроизведения.

Шаг 1

  • Запустите Firefox и Selenium IDE.
  • Введите значение для нашего базового URL: http://demo.guru99.com/test/newtours/.
  • Включите кнопку записи (если она еще не включена по умолчанию).
Шаг 2

В Firefox перейдите по адресу http://demo.guru99.com/test/newtours/. Firefox должен перенаправить вас на страницу, подобную показанной ниже.

Шаг 3
  • Щелкните правой кнопкой мыши любое пустое место на странице, например, логотип Mercury Tours в верхнем левом углу. Это вызовет контекстное меню Selenium IDE. Примечание. Не нажимайте на объекты или изображения с гиперссылками.
  • Выберите параметр «Показать доступные команды».
  • Затем выберите «assertTitle exact: Welcome: Mercury Tours». Это команда, которая проверяет правильность заголовка страницы.
Шаг 4
  • В текстовом поле «Имя пользователя» Mercury Tours введите недопустимое имя пользователя «invalidUNN».
  • В текстовом поле «Пароль» введите неверный пароль «invalidPWD».
Шаг 5
  • Щелкните по кнопке «Войти». Firefox должен перенаправить вас на эту страницу.
ШАГ 6

Отключите кнопку записи, чтобы остановить запись. Теперь ваш сценарий должен выглядеть так, как показано ниже.

Шаг 7.

Теперь, когда мы закончили с нашим тестовым скриптом, мы сохраним его в тестовом примере. В меню "Файл" выберите "Сохранить тестовый набор". Кроме того, вы можете просто нажать Ctrl + S.

Шаг 8
  • Выберите желаемое местоположение и назовите тестовый набор «Invalid_login».
  • Нажмите кнопку «Сохранить».
Шаг 9.

Обратите внимание, что файл был сохранен как HTML.

Шаг 10.

Вернитесь в Selenium IDE и нажмите кнопку «Воспроизведение», чтобы выполнить весь скрипт. Selenium IDE должна уметь безупречно все реплицировать.

Введение в команды Selenium - Selenese

  • Команды Selenese могут иметь до двух параметров: цель и значение.
  • Параметры не требуются постоянно. Это зависит от того, сколько понадобится команде.

3 типа команд

Действия

Это команды, которые напрямую взаимодействуют с элементами страницы.

Пример: команда «щелкнуть» - это действие, потому что вы напрямую взаимодействуете с элементом, на который щелкаете.

Команда «type» также является действием, потому что вы помещаете значения в текстовое поле, а текстовое поле показывает их вам взамен. Между вами и текстовым полем существует двустороннее взаимодействие.

Аксессоры

Это команды, позволяющие сохранять значения в переменной.

Пример: команда storeTitle является средством доступа, потому что она только «считывает» заголовок страницы и сохраняет его в переменной. Он не взаимодействует ни с одним элементом на странице.

Утверждения

Это команды, которые проверяют выполнение определенного условия.

3 типа утверждений

  • Утвердить . Когда команда «assert» терпит неудачу, тест немедленно останавливается.
  • Проверить . Когда команда «verify» терпит неудачу, Selenium IDE регистрирует эту ошибку и продолжает выполнение теста.
  • WaitFor . Прежде чем перейти к следующей команде, команды "waitFor" сначала дождутся выполнения определенного условия.
    • Если условие выполняется в течение периода ожидания, шаг проходит.
    • Если условие не выполняется, шаг не выполняется. Ошибка регистрируется, и выполнение теста переходит к следующей команде.
    • По умолчанию значение тайм-аута составляет 30 секунд. Вы можете изменить это в диалоговом окне «Параметры Selenium IDE» на вкладке «Общие».

Утвердить против проверки

Общие команды

Командование Количество параметров Описание
открыто 0–2

Открывает страницу по URL-адресу.

щелкнуть / щелкнутьAndWait 1

Щелкает по указанному элементу.

type / typeKeys 2

Набирает последовательность символов.

verifyTitle / assertTitle 1

Сравнивает фактический заголовок страницы с ожидаемым значением.

verifyTextPresent 1

Проверяет, есть ли на странице определенный текст.

verifyElementPresent 1

Проверяет наличие определенного элемента.

verifyTable 2

Сравнивает содержимое таблицы с ожидаемыми значениями.

waitForPageToLoad 1

Приостанавливает выполнение до полной загрузки страницы.

waitForElementPresent 1

Приостанавливает выполнение до тех пор, пока указанный элемент не появится.

Создайте скрипт вручную с помощью Firebug

Теперь мы воссоздадим тот же тестовый пример вручную, введя команды. На этот раз нам нужно будет использовать Firebug.

Шаг 1
  • Откройте Firefox и Selenium IDE.
  • Введите базовый URL (http://demo.guru99.com/test/newtours/).
  • Кнопка записи должна быть ВЫКЛЮЧЕНА.
Шаг 2: Щелкните самую верхнюю пустую строку в редакторе.

Введите «open» в текстовое поле «Команда» и нажмите Enter.

Шаг 3
  • Перейдите в Firefox по нашему базовому URL-адресу и активируйте Firebug.
  • На панели Selenium IDE Editor выберите вторую строку (строка под командой «open») и создайте вторую команду, набрав «assertTitle» в поле «Команда».
  • Не стесняйтесь использовать функцию автозаполнения.
Шаг 4
  • В Firebug разверните тег , чтобы отобразить тег .</li> <li>Щелкните значение тега <title> («Добро пожаловать: Mercury Tours») и вставьте его в поле «Цель» в редакторе.</li> </ul> </td> </tr> <tr> <td><strong>Шаг 5</strong> <ul> <li>Чтобы создать третью команду, щелкните третью пустую строку в редакторе и введите «тип» в текстовом поле «Команда».</li> <li>В Firebug нажмите кнопку «Проверить».</li> </ul> </td> </tr> <tr> <td>Щелкните текстовое поле «Имя пользователя». Обратите внимание, что Firebug автоматически показывает вам HTML-код для этого элемента.</td> </tr> <tr> <td><strong>ШАГ 6</strong> <p>Обратите внимание, что в текстовом поле «Имя пользователя» нет идентификатора, но есть атрибут NAME. Поэтому мы будем использовать его ИМЯ в качестве локатора. Скопируйте значение NAME и вставьте его в поле Target в Selenium IDE.</p> <p>Все еще в текстовом поле Target префикс «userName» с «name =», указывающий, что Selenium IDE должна нацеливаться на элемент, атрибут NAME которого равен «userName».</p> <p>Введите «invalidUN» в текстовое поле «Значение» в Selenium IDE. Ваш тестовый сценарий теперь должен выглядеть, как на изображении ниже. Мы закончили с третьей командой. Примечание. Вместо invalidUN вы можете ввести любую другую текстовую строку. Но Selenium IDE чувствителен к регистру, и вы вводите значения / атрибуты точно так же, как в приложении.</p> </td> </tr> <tr> <td><strong>Шаг 7.</strong> <ul> <li>Чтобы создать четвертую команду, введите «тип» в текстовом поле «Команда».</li> <li>Опять же, используйте кнопку Firebug «Inspect», чтобы получить указатель для текстового поля «Пароль».</li> </ul> <ul> <li> <p>Вставьте атрибут NAME («пароль») в поле «Цель» и добавьте к нему префикс «name =».</p> </li> <li> <p>Введите «invalidPW» в поле «Значение» в Selenium IDE. Ваш тестовый сценарий теперь должен выглядеть как на изображении ниже.</p> </li> </ul> </td> </tr> <tr> <td><strong>Шаг 8</strong> <ul> <li>Для пятой команды введите «clickAndWait» в текстовом поле «Команда» в Selenium IDE.</li> <li>Используйте кнопку Firebug «Проверить», чтобы получить указатель кнопки «Войти».</li> </ul> <ul> <li>Вставьте значение атрибута NAME («логин») в текстовое поле «Цель» и добавьте к нему префикс «name =».</li> <li>Ваш тестовый сценарий теперь должен выглядеть как на изображении ниже.</li> </ul> </td> </tr> </tbody> </table> <p><strong>Шаг 9:</strong> Сохраните тестовый пример так же, как мы делали в предыдущем разделе.</p> <a id="menu-6"></a> <h2>Использование кнопки поиска</h2> <p><strong>Кнопка «Найти» в Selenium IDE используется для проверки того, действительно ли то, что мы поместили в текстовое поле «Цель», является правильным элементом пользовательского интерфейса.</strong></p> <p>Давайте воспользуемся тестовым примером Invalid_login, который мы создали в предыдущих разделах. Щелкните любую команду с записью Target, например третью команду.</p> <p>Щелкните по кнопке "Найти". Обратите внимание, что текстовое поле «Имя пользователя» на странице Mercury Tours выделяется на секунду.</p> <p>Это указывает на то, что Selenium IDE смогла правильно обнаружить ожидаемый элемент и получить к нему доступ. Если кнопка «Найти» выделила другой элемент или вообще не выделила его, значит, с вашим скриптом что-то не так.</p> <a id="menu-7"></a> <h2>Выполнить команду</h2> <p><strong>Это позволяет выполнять любую отдельную команду без запуска всего тестового примера</strong> . Просто щелкните строку, которую хотите выполнить, а затем либо щелкните «Действия> Выполнить эту команду» в строке меню, либо просто нажмите «X» на клавиатуре.</p> <p><strong>Шаг 1.</strong> Убедитесь, что ваш браузер находится на главной странице Mercury Tours. Щелкните команду, которую хотите выполнить. В этом примере щелкните строку «type | userName | invalidUN».</p> <p><strong>Шаг 2.</strong> Нажмите «X» на клавиатуре.</p> <p><strong>Шаг 3.</strong> Обратите внимание, что текстовое поле для имени пользователя заполняется текстом «invalidUN».</p> <p><strong>Выполнение команд таким способом сильно зависит от страницы, отображаемой Firefox в данный момент</strong> . Это означает, что если вы попробуете приведенный выше пример с отображаемой домашней страницей Google вместо Mercury Tours, тогда ваш шаг не удастся, потому что на главной странице Google нет текстового поля с атрибутом userName.</p> <a id="menu-8"></a> <h2>Точка отсчета</h2> <p><strong>Начальная точка - это индикатор, который сообщает Selenium IDE, какие строки будут запускаться</strong> . <strong>Его горячая клавиша - «S».</strong></p> <p>В приведенном выше примере воспроизведение начнется с третьей строки (введите | пароль | invalidPW). <strong>В одном тестовом сценарии может быть только одна начальная точка.</strong></p> <p>Начальная точка похожа на «Выполнить команду» в том смысле, что они зависят от текущей отображаемой страницы. Начальная точка не сработает, если вы перейдете не на ту страницу.</p> <a id="menu-9"></a> <h2>Контрольные точки</h2> <p>Точки останова - это индикаторы, которые сообщают Selenium IDE, где автоматически приостановить тест. <strong>Сочетание клавиш - «B».</strong></p> <p>Желтое выделение означает, что текущий шаг отложен. Это доказывает, что Selenium IDE приостановила выполнение на этом этапе. <strong>В одном тестовом примере может быть несколько точек останова.</strong></p> <a id="menu-10"></a> <h2>Шаг</h2> <p>Это позволяет вам выполнять последующие команды по одной после приостановки тестового примера. Воспользуемся сценарием из предыдущего раздела «Точки останова».</p> <table> <tbody> <tr> <td width="50%"> </td> <td> <p><strong>Перед нажатием кнопки «Шаг».</strong></p> <p>Тестовый пример останавливается на строке «clickAndWait | login».</p> </td> </tr> <tr> <td width="50%"> </td> <td> <p><strong>После нажатия «Шаг».</strong></p> <p>Строка «clickAndWait | login» запускается и переходит к следующей команде (verifyTitle | Sign-on: Mercury Tours).</p> <p>Обратите внимание, что следующая строка приостанавливается, даже если там нет точки останова. Это основная цель функции Step - она ​​выполняет последующие команды по одной, чтобы дать вам больше времени для проверки результата после каждого шага.</p> </td> </tr> </tbody> </table> <a id="menu-11"></a> <h2>Важные моменты, на которые следует обратить внимание при использовании других форматов в режиме просмотра исходного кода</h2> <p><strong>Selenium IDE хорошо работает только с HTML - другие форматы все еще находятся в экспериментальном режиме</strong> . Это <strong>НЕ рекомендуется</strong> создавать и редактировать тесты с использованием других форматов в Source View , потому что есть еще много работы , необходимо , чтобы сделать ее более стабильной. Ниже приведены известные ошибки версии 1.9.1.</p> <ul> <li>Вы не сможете ни воспроизвести, ни вернуться к просмотру таблицы, если не вернетесь к HTML.</li> <li>Единственный способ безопасно добавить команды в исходный код - это записать их.</li> <li>Если вы измените исходный код вручную, он будет утерян при переключении на другой формат.</li> <li>Хотя вы можете сохранить свой тестовый пример в режиме просмотра исходного кода, Selenium IDE не сможет его открыть.</li> </ul> <p><strong>Рекомендуемый способ конвертировать тесты Selenese - использовать параметр «Экспортировать тестовый набор как…» в меню «Файл», а не через представление исходного кода.</strong></p> <a id="menu-12"></a> <h2>Резюме</h2> <ul> <li>Сценарии тестирования могут быть созданы путем записи или ввода команд и параметров вручную.</li> <li>При создании скриптов вручную Firebug используется для получения локатора.</li> <li>Кнопка «Найти» используется для проверки того, что команда может получить доступ к правильному элементу.</li> <li>В табличном представлении тестовый сценарий отображается в табличной форме, а в представлении «Исходный код» - в формате HTML.</li> <li>Изменение представления исходного кода в формат, отличный от HTML, все еще является экспериментальным.</li> <li>Не используйте представление исходного кода при создании тестов в других форматах. Вместо этого используйте функции экспорта.</li> <li>Параметры не требуются постоянно. Это зависит от команды.</li> <li>Есть три типа команд:</li> <ul> <li>Действия - напрямую взаимодействует с элементами страницы.</li> <li>Аксессоры - «считывают» свойство элемента и сохраняют его в переменной.</li> <li>Утверждения - сравнивает фактическое значение с ожидаемым.</li> </ul> <li>Утверждения бывают трех типов:</li> <ul> <li>Утверждение - при неудаче последующие шаги больше не выполняются</li> <li>Проверить - в случае сбоя последующие шаги по-прежнему выполняются.</li> <li>WaitFor - проходит, если указанное условие выполняется в течение периода ожидания; в противном случае он потерпит неудачу</li> </ul> <li>Наиболее распространенные команды:</li> <ul> <li>открыто</li> <li>щелкнуть / щелкнутьAndWait</li> <li>type / typeKeys</li> <li>verifyTitle / assertTitle</li> <li>verifyTextPresent</li> <li>verifyElementPresent</li> <li>verifyTable</li> <li>waitForPageToLoad</li> <li>waitForElementPresent</li> </ul> </ul> </div> </article> <div id="container-5533149ee6411a5f99b370c693e87966"></div> </div> </div> </div> </div> </div> <aside class="col-lg-4 sidebar sidebar--right"> <div class="widget widget-popular-posts"> <h2 class="widget-title">Популярные посты</h2> <ul class="post-list-small"> <li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__img-holder"> <div class="thumb-container thumb-100"><a href="/8003491-css3-zebra-striping-a-table" title="CSS3 "зебра" разбивает таблицу на полосы - CSS-хитрости" rel="bookmark"><img src="https://cdn.css-code.org/7992604/css3_zebra_striping_a_table_css-tricks.png.webp" loading="lazy" alt="CSS3 "зебра" разбивает таблицу на полосы - CSS-хитрости" title="CSS3 "зебра" разбивает таблицу на полосы - CSS-хитрости" class="post-list-small__img--rounded" style="width:88px;height:88px" /></a></div> </div> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8003491-css3-zebra-striping-a-table" title="CSS3 "зебра" разбивает таблицу на полосы - CSS-хитрости" rel="bookmark">CSS3 "зебра" разбивает таблицу на полосы - CSS-хитрости 2025</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__img-holder"> <div class="thumb-container thumb-100"><a href="/8003492-css-font-families" title="Семейства шрифтов CSS - CSS-хитрости" rel="bookmark"><img src="https://cdn.css-code.org/8269132/css_font_families_css-tricks.png.webp" loading="lazy" alt="Семейства шрифтов CSS - CSS-хитрости" title="Семейства шрифтов CSS - CSS-хитрости" class="post-list-small__img--rounded" style="width:88px;height:88px" /></a></div> </div> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8003492-css-font-families" title="Семейства шрифтов CSS - CSS-хитрости" rel="bookmark">Семейства шрифтов CSS - CSS-хитрости 2025</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__img-holder"> <div class="thumb-container thumb-100"><a href="/8003493-css-diagnostics" title="Диагностика CSS - CSS-хитрости" rel="bookmark"><img src="https://cdn.css-code.org/5952702/css_diagnostics_css-tricks.png.webp" loading="lazy" alt="Диагностика CSS - CSS-хитрости" title="Диагностика CSS - CSS-хитрости" class="post-list-small__img--rounded" style="width:88px;height:88px" /></a></div> </div> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8003493-css-diagnostics" title="Диагностика CSS - CSS-хитрости" rel="bookmark">Диагностика CSS - CSS-хитрости 2025</a></h3> </div> </div> </li> </ul> </div> <div class="widget widget-popular-posts"> <h2 class="widget-title">Лучшие обзоры за месяц</h2> <ul class="post-list-small"> <li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226412-top-23-cassandra-interview-questions-and-answers" title="23 самых популярных вопроса на собеседовании с Кассандрой & Ответы" rel="bookmark">23 самых популярных вопроса на собеседовании с Кассандрой & Ответы</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226413-what-is-business-intelligence-definition-and-example" title="Что такое бизнес-аналитика? Определение & Пример" rel="bookmark">Что такое бизнес-аналитика? Определение & Пример</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226414-database-vs-data-warehouse-key-differences" title="База данных и хранилище данных: основные различия" rel="bookmark">База данных и хранилище данных: основные различия</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226415-20-best-it-asset-management-software-2021-reviews" title="20+ ЛУЧШИХ программ для управления ИТ-активами (Обзоры за 2021 год)" rel="bookmark">20+ ЛУЧШИХ программ для управления ИТ-активами (Обзоры за 2021 год)</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226416-etl-vs-elt-must-know-differences" title="ETL против ELT: нужно знать различия" rel="bookmark">ETL против ELT: нужно знать различия</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226417-data-warehouse-architecture-concepts-and-components" title="Архитектура, концепции и компоненты хранилища данных" rel="bookmark">Архитектура, концепции и компоненты хранилища данных</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226418-etl-extract-transform-and-load-process-in-data-warehouse" title="Процесс ETL (извлечение, преобразование и загрузка) в хранилище данных" rel="bookmark">Процесс ETL (извлечение, преобразование и загрузка) в хранилище данных</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226419-molap-multidimensional-olap-in-data-warehouse" title="MOLAP: многомерный OLAP в хранилище данных" rel="bookmark">MOLAP: многомерный OLAP в хранилище данных</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226422-data-modelling-conceptual-logical-physical-data-model-types" title="Моделирование данных: концептуальные, логические, физические типы моделей данных" rel="bookmark">Моделирование данных: концептуальные, логические, физические типы моделей данных</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226423-data-warehouse-vs-data-mart-know-the-difference" title="Хранилище данных против витрины данных: знайте разницу" rel="bookmark">Хранилище данных против витрины данных: знайте разницу</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226424-star-and-snowflake-schema-in-data-warehouse-with-examples" title="Схема звезды и снежинки в хранилище данных с примерами" rel="bookmark">Схема звезды и снежинки в хранилище данных с примерами</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226425-data-lake-vs-data-warehouse-whats-the-difference" title="Озеро данных и хранилище данных: в чем разница?" rel="bookmark">Озеро данных и хранилище данных: в чем разница?</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226426-what-is-data-lake-its-architecture" title="Что такое озеро данных? Это архитектура" rel="bookmark">Что такое озеро данных? Это архитектура</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226427-cassandra-tutorial-pdf-download-definitive-guide" title="Учебник по Кассандре PDF: Загрузить полное руководство" rel="bookmark">Учебник по Кассандре PDF: Загрузить полное руководство</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8226428-what-is-data-reconciliation-definition-process-tools" title="Что такое сверка данных? Определение, процесс, инструменты" rel="bookmark">Что такое сверка данных? Определение, процесс, инструменты</a></h3> </div> </div> </li> </ul> </div> <div id="container-5533149ee6411a5f99b370c693e87966"></div> <div class="widget widget-popular-posts"> <h2 class="widget-title">Лучшие статьи</h2> <ul class="post-list-small"> <li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__img-holder"> <div class="thumb-container thumb-100"><a href="/8003499-css-repeating-gradients" title="Повторяющиеся градиенты CSS - CSS-хитрости" rel="bookmark"><img src="https://cdn.css-code.org/5990364/css_repeating_gradients_css-tricks.png.webp" loading="lazy" alt="Повторяющиеся градиенты CSS - CSS-хитрости" title="Повторяющиеся градиенты CSS - CSS-хитрости" class="post-list-small__img--rounded" style="width:88px;height:88px" /></a></div> </div> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8003499-css-repeating-gradients" title="Повторяющиеся градиенты CSS - CSS-хитрости" rel="bookmark">Повторяющиеся градиенты CSS - CSS-хитрости 2025</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__img-holder"> <div class="thumb-container thumb-100"><a href="/8003501-custom-radio-buttons" title="Пользовательские радиокнопки - CSS-хитрости" rel="bookmark"><img src="https://cdn.css-code.org/6391727/custom_radio_buttons_css-tricks.png.webp" loading="lazy" alt="Пользовательские радиокнопки - CSS-хитрости" title="Пользовательские радиокнопки - CSS-хитрости" class="post-list-small__img--rounded" style="width:88px;height:88px" /></a></div> </div> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8003501-custom-radio-buttons" title="Пользовательские радиокнопки - CSS-хитрости" rel="bookmark">Пользовательские радиокнопки - CSS-хитрости 2025</a></h3> </div> </div> </li><li class="post-list-small__item"> <div class="post-list-small__entry clearfix"> <div class="post-list-small__img-holder"> <div class="thumb-container thumb-100"><a href="/8003502-css-box-shadow" title="CSS Box Shadow - CSS-хитрости" rel="bookmark"><img src="https://cdn.css-code.org/7462254/css_box_shadow_css-tricks.png.webp" loading="lazy" alt="CSS Box Shadow - CSS-хитрости" title="CSS Box Shadow - CSS-хитрости" class="post-list-small__img--rounded" style="width:88px;height:88px" /></a></div> </div> <div class="post-list-small__body"> <h3 class="post-list-small__entry-title"><a href="/8003502-css-box-shadow" title="CSS Box Shadow - CSS-хитрости" rel="bookmark">CSS Box Shadow - CSS-хитрости 2025</a></h3> </div> </div> </li> </ul> </div> </aside> </div> </div> <footer class="footer footer--dark"> <div class="container"> <div class="footer__widgets"> <div class="row"> <div class="col-lg-4"> <div class="widget"> <h2 class="widget-title">Популярные посты</h2> <ul class="post-list-small"> <li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003141-not" title=": не () - CSS-хитрости" rel="bookmark">: не () - CSS-хитрости</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003143-marker" title=":: маркер - CSS-хитрости" rel="bookmark">:: маркер - CSS-хитрости</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003146-root" title=": корень - CSS-хитрости" rel="bookmark">: корень - CSS-хитрости</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003147-required" title=": обязательно - CSS-хитрости" rel="bookmark">: обязательно - CSS-хитрости</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003149-target" title=": цель - CSS-хитрости" rel="bookmark">: цель - CSS-хитрости</a></h3> </div> </div> </li> </ul> </div> </div> <div class="col-lg-4"> <div class="widget"> <h2 class="widget-title">Выбор редакции</h2> <ul class="post-list-small"> <li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8225871-what-is-hacking-types-of-hackers-introduction-to-cybercrime" title="Что такое взлом? Типы хакеров - Введение в киберпреступность" rel="bookmark">Что такое взлом? Типы хакеров - Введение в киберпреступность</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8225872-what-is-social-engineering-attacks-techniques-and-prevention" title="Что такое социальная инженерия? Атаки, методы и действия Профилактика" rel="bookmark">Что такое социальная инженерия? Атаки, методы и действия Профилактика</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8225873-skills-required-to-become-a-ethical-hacker" title="Навыки, необходимые для того, чтобы стать этичным хакером" rel="bookmark">Навыки, необходимые для того, чтобы стать этичным хакером</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8225874-cryptography-tutorial-cryptanalysis-rc4-cryptool" title="Учебное пособие по криптографии: криптоанализ, RC4, CrypTool" rel="bookmark">Учебное пособие по криптографии: криптоанализ, RC4, CrypTool</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8225875-how-to-crack-a-password" title="Как взломать пароль" rel="bookmark">Как взломать пароль</a></h3> </div> </div> </li> </ul> </div> </div> <div class="col-lg-4"> <div class="widget"> <h2 class="widget-title">Лучшие статьи</h2> <ul class="post-list-small"> <li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003107-dir" title=": dir () - CSS-хитрости" rel="bookmark">: dir () - CSS-хитрости</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003108-class" title="Класс - CSS-хитрости" rel="bookmark">Класс - CSS-хитрости</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003109-enabled" title=": включено - CSS-хитрости" rel="bookmark">: включено - CSS-хитрости</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003110-child" title="Ребенок - CSS-хитрости" rel="bookmark">Ребенок - CSS-хитрости</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003111-empty" title=": пусто - CSS-хитрости" rel="bookmark">: пусто - CSS-хитрости</a></h3> </div> </div> </li> </ul> </div> </div> </div> <p>© Copyright ru.css-code.org, 2025 Апрель | <a href="https://ru.css-code.org/about-site" title="О сайте">О сайте</a> | <a href="https://ru.css-code.org/contacts" title="Контакты">Контакты</a> | <a href="https://ru.css-code.org/privacy-policy" title="Политика конфиденциальности">Политика конфиденциальности</a>. </p> </div> </div> </footer> <link href="https://css-code.org/template/css/style.min.css" rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'" /> </body> </html>