Как использовать 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="/8003604-truncate-string-with-ellipsis" title="Усечь строку с многоточием - CSS-хитрости" rel="bookmark"><img src="https://cdn.css-code.org/2957351/truncate_string_with_ellipsis_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="/8003604-truncate-string-with-ellipsis" 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="/8003605-two-color-three-dimensional-blocks-and-text" title="Двухцветные трехмерные блоки и текст - CSS-хитрости" rel="bookmark"><img src="https://cdn.css-code.org/3073225/two-color_three-dimensional_blocks_and_text_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="/8003605-two-color-three-dimensional-blocks-and-text" 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="/8003606-unordered-list-as-a-timeline" title="Неупорядоченный список как временная шкала - CSS-хитрости" rel="bookmark"><img src="https://cdn.css-code.org/2489536/unordered_list_as_a_timeline_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="/8003606-unordered-list-as-a-timeline" title="Неупорядоченный список как временная шкала - CSS-хитрости" rel="bookmark">Неупорядоченный список как временная шкала - 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="/8003395-117-custom-header-for-deals" title="# 117: Пользовательский заголовок для сделок - CSS-хитрости" rel="bookmark"># 117: Пользовательский заголовок для сделок - CSS-хитрости</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="/8003396-118-viewing-live-site-with-theme-switcher-plugin" title="# 118: Просмотр живого сайта с помощью плагина переключения тем - CSS-хитрости" rel="bookmark"># 118: Просмотр живого сайта с помощью плагина переключения тем - CSS-хитрости</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="/8003397-119-custom-header-for-videos" title="# 119: Пользовательский заголовок для видео - CSS-хитрости" rel="bookmark"># 119: Пользовательский заголовок для видео - CSS-хитрости</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="/8003398-120-choosing-a-membership-plugin-for-wordpress" title="# 120: Выбор плагина членства для WordPress - CSS-хитрости" rel="bookmark"># 120: Выбор плагина членства для WordPress - CSS-хитрости</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="/8003399-121-a-template-for-generic-pages" title="# 121: Шаблон для общих страниц - CSS-хитрости" rel="bookmark"># 121: Шаблон для общих страниц - CSS-хитрости</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="/8003400-124-building-the-demos-archive" title="# 124: Создание архива демонстраций - CSS-хитрости" rel="bookmark"># 124: Создание архива демонстраций - CSS-хитрости</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="/8003402-123-building-the-videos-archive-part-2-navigation" title="# 123: Создание архива видео, часть 2 (Навигация) - CSS-хитрости" rel="bookmark"># 123: Создание архива видео, часть 2 (Навигация) - CSS-хитрости</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="/8003403-122-building-the-videos-archive-part-1" title="# 122: Создание архива видео, часть 1 - CSS-хитрости" rel="bookmark"># 122: Создание архива видео, часть 1 - CSS-хитрости</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="/8003404-125-photoshopping-the-single-video-page" title="# 125: Фотошоп одной страницы с видео - CSS-хитрости" rel="bookmark"># 125: Фотошоп одной страницы с видео - CSS-хитрости</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="/8003405-127-building-the-single-video-page-part-2" title="# 127: Создание единой страницы видео, часть 2 - CSS-хитрости" rel="bookmark"># 127: Создание единой страницы видео, часть 2 - CSS-хитрости</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="/8003406-126-building-the-single-video-page-part-1" title="# 126: Создание единой страницы видео, часть 1 - CSS-хитрости" rel="bookmark"># 126: Создание единой страницы видео, часть 1 - CSS-хитрости</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="/8003407-128-styling-the-deals-page" title="# 128: Стилизация страницы предложений - CSS-хитрости" rel="bookmark"># 128: Стилизация страницы предложений - CSS-хитрости</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="/8003408-129-photoshopping-more-homepage-modules" title="# 129: Фотосъемка дополнительных модулей на главной странице - CSS-хитрости" rel="bookmark"># 129: Фотосъемка дополнительных модулей на главной странице - CSS-хитрости</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="/8003409-130-styling-the-article-archives-page" title="# 130: Стилизация страницы архива статей - CSS-хитрости" rel="bookmark"># 130: Стилизация страницы архива статей - CSS-хитрости</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="/8003410-131-building-more-homepage-modules" title="# 131: Создание дополнительных модулей домашней страницы - CSS-хитрости" rel="bookmark"># 131: Создание дополнительных модулей домашней страницы - CSS-хитрости</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="/8003340-043-responsive-izing-search" title="# 043: Адаптивный поиск - CSS-хитрости" rel="bookmark"><img src="https://cdn.css-code.org/8279798/043_responsive-izing_search_css-tricks.png.webp" loading="lazy" alt="# 043: Адаптивный поиск - CSS-хитрости" title="# 043: Адаптивный поиск - 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="/8003340-043-responsive-izing-search" title="# 043: Адаптивный поиск - CSS-хитрости" rel="bookmark"># 043: Адаптивный поиск - 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="/8003341-046-flexible-sidebar-ads" title="# 046: Гибкая реклама на боковой панели - CSS-хитрости" rel="bookmark"><img src="https://cdn.css-code.org/1818360/046_flexible_sidebar_ads_css-tricks.png.webp" loading="lazy" alt="# 046: Гибкая реклама на боковой панели - CSS-хитрости" title="# 046: Гибкая реклама на боковой панели - 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="/8003341-046-flexible-sidebar-ads" title="# 046: Гибкая реклама на боковой панели - CSS-хитрости" rel="bookmark"># 046: Гибкая реклама на боковой панели - 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="/8003342-048-building-the-poll-module-part-2" title="# 048: Создание модуля опроса, часть 2 - CSS-хитрости" rel="bookmark"><img src="https://cdn.css-code.org/2723766/048_building_the_poll_module-_part_2_css-tricks.png.webp" loading="lazy" alt="# 048: Создание модуля опроса, часть 2 - CSS-хитрости" title="# 048: Создание модуля опроса, часть 2 - 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="/8003342-048-building-the-poll-module-part-2" title="# 048: Создание модуля опроса, часть 2 - CSS-хитрости" rel="bookmark"># 048: Создание модуля опроса, часть 2 - 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="/8003669-meta-tag-for-forcing-ie-8-to-behave-like-ie-7" title="Мета-тег для принуждения IE 8 к поведению IE 7 - CSS-хитрости" rel="bookmark">Мета-тег для принуждения IE 8 к поведению IE 7 - CSS-хитрости</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8003670-meta-tag-to-prevent-search-engine-bots" 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="/8003671-meta-tags-for-instructing-search-bots" 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="/8003672-multiple-file-input" 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="/8003673-proper-tags-for-displaying-content-edits" 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="/8224946-telnet-vs-ssh-key-differences" title="Telnet против SSH: ключевые различия" rel="bookmark">Telnet против SSH: ключевые различия</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8224947-pipe-grep-and-sort-command-in-linuxunix-with-examples" title="Команда Pipe, Grep и Sort в Linux / Unix с примерами" rel="bookmark">Команда Pipe, Grep и Sort в Linux / Unix с примерами</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8224948-linux-regular-expression-tutorial-grep-regex-example" title="Учебное пособие по регулярным выражениям в Linux: пример Grep Regex" rel="bookmark">Учебное пособие по регулярным выражениям в Linux: пример Grep Regex</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8224949-vi-editor-with-commands-in-linuxunix-tutorial" title="Редактор VI с командами в Linux / Unix Учебное пособие" rel="bookmark">Редактор VI с командами в Linux / Unix Учебное пособие</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8224950-linuxunix-process-management-ps-kill-top-df-free-nice-commands" title="Управление процессами Linux / Unix: команды ps, kill, top, df, free, nice" rel="bookmark">Управление процессами Linux / Unix: команды ps, kill, top, df, free, nice</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="/8226549-fuzzy-logic-tutorial-what-is-architecture-application-example" 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="/8226550-confusion-matrix-in-machine-learning-with-example" 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="/8226551-top-50-machine-learning-interview-questions-and-answers" title="50 самых популярных вопросов на собеседовании по машинному обучению & Ответы" rel="bookmark">50 самых популярных вопросов на собеседовании по машинному обучению & Ответы</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8226553-20-best-ai-chatbots-artificial-intelligence-chatbot-in-2021" title="20 лучших чат-ботов с искусственным интеллектом в 2021 году" rel="bookmark">20 лучших чат-ботов с искусственным интеллектом в 2021 году</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8226554-data-science-vs-machine-learning-must-know-differences" title="Наука о данных против машинного обучения: нужно знать различия!" rel="bookmark">Наука о данных против машинного обучения: нужно знать различия!</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>