Как использовать 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="/8003826-fallback-for-cdn-hosted-jquery" title="Резервный вариант для jQuery, размещенного в CDN - CSS-хитрости" rel="bookmark"><img src="https://cdn.css-code.org/4991451/fallback_for_cdn_hosted_jquery_css-tricks.png.webp" loading="lazy" alt="Резервный вариант для jQuery, размещенного в CDN - CSS-хитрости" title="Резервный вариант для jQuery, размещенного в CDN - 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="/8003826-fallback-for-cdn-hosted-jquery" title="Резервный вариант для jQuery, размещенного в CDN - CSS-хитрости" rel="bookmark">Резервный вариант для jQuery, размещенного в CDN - 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="/8003827-find-and-wrap-ampersands" title="Найти и завернуть амперсанды - CSS-хитрости" rel="bookmark"><img src="https://cdn.css-code.org/6436888/find_and_wrap_ampersands_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="/8003827-find-and-wrap-ampersands" 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="/8003828-fire-event-when-user-is-idle" title="Пожар, когда пользователь бездействует - CSS-хитрости" rel="bookmark"><img src="https://cdn.css-code.org/6581216/fire_event_when_user_is_idle_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="/8003828-fire-event-when-user-is-idle" 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="/8003626-iphone-catcher" title="IPhone Catcher - CSS-хитрости" rel="bookmark">IPhone Catcher - 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="/8003627-password-protect-folders" title="Папка (и) защитить паролем - CSS-хитрости" rel="bookmark">Папка (и) защитить паролем - 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="/8003628-php-error-logging" title="Регистрация ошибок PHP - CSS-хитрости" rel="bookmark">Регистрация ошибок PHP - 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="/8003629-force-files-to-download-not-open-in-browser" title="Принудительно загрузить файлы (не открываются в браузере) - CSS-хитрости" rel="bookmark">Принудительно загрузить файлы (не открываются в браузере) - 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="/8003631-prevent-image-hotlinking" title="Предотвратить хотлинкинг изображений - CSS-хитрости" rel="bookmark">Предотвратить хотлинкинг изображений - 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="/8003632-using-font-face" title="Использование @ font-face - CSS-хитрости" rel="bookmark">Использование @ font-face - 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="/8003633-serve-svg-with-the-correct-content-type" title="Обслуживать SVG с правильным типом контента - CSS-хитрости" rel="bookmark">Обслуживать SVG с правильным типом контента - 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="/8003634-temporary-maintenance-using-mod-rewrite" title="Временное обслуживание с использованием Mod_Rewrite - CSS-хитрости" rel="bookmark">Временное обслуживание с использованием Mod_Rewrite - 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="/8003635-set-expires" title="Срок действия набора истекает - CSS-хитрости" rel="bookmark">Срок действия набора истекает - 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="/8003637-shock-teenage-gangsters-with-wp-config-redirect" title="Шокируйте подростков-гангстеров с помощью wp-config Redirect - CSS-хитрости" rel="bookmark">Шокируйте подростков-гангстеров с помощью wp-config Redirect - 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="/8003638-subdirectories-url-internally-redirect-to-query-string" title="URL-адреса подкаталогов для внутренней переадресации на строку запроса - CSS-хитрости" rel="bookmark">URL-адреса подкаталогов для внутренней переадресации на строку запроса - 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="/8003639-use-php-inside-javascript" title="Используйте PHP внутри JavaScript - CSS-хитрости" rel="bookmark">Используйте PHP внутри JavaScript - 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="/8003640-www-no-www" title="WWW / No-WWW - CSS-хитрости" rel="bookmark">WWW / No-WWW - 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="/8003641-remove-file-extention-from-urls" title="Удалить расширение файла из URL-адресов - CSS-хитрости" rel="bookmark">Удалить расширение файла из URL-адресов - 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="/8003642-add-body-class-just-for-ie" title="Добавить класс тела только для IE - CSS-хитрости" rel="bookmark">Добавить класс тела только для IE - 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="/8003779-test-if-mac-or-pc-with-javascript" title="Проверьте Mac или ПК с помощью JavaScript - CSS-хитрости" rel="bookmark"><img src="https://cdn.css-code.org/4284415/test_if_mac_or_pc_with_javascript_css-tricks.png.webp" loading="lazy" alt="Проверьте Mac или ПК с помощью JavaScript - CSS-хитрости" title="Проверьте Mac или ПК с помощью JavaScript - 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="/8003779-test-if-mac-or-pc-with-javascript" title="Проверьте Mac или ПК с помощью JavaScript - CSS-хитрости" rel="bookmark">Проверьте Mac или ПК с помощью JavaScript - 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="/8003780-the-classlist-api" title="API .classList () - CSS-хитрости" rel="bookmark"><img src="https://cdn.css-code.org/9347717/the_classlist_api_css-tricks.png.webp" loading="lazy" alt="API .classList () - CSS-хитрости" title="API .classList () - 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="/8003780-the-classlist-api" title="API .classList () - CSS-хитрости" rel="bookmark">API .classList () - 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="/8003781-validate-html-bookmarklet" title="Проверить букмарклет HTML - CSS-хитрости" rel="bookmark"><img src="https://cdn.css-code.org/5255496/validate_html_bookmarklet_css-tricks.png.webp" loading="lazy" alt="Проверить букмарклет HTML - CSS-хитрости" title="Проверить букмарклет HTML - 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="/8003781-validate-html-bookmarklet" title="Проверить букмарклет HTML - CSS-хитрости" rel="bookmark">Проверить букмарклет HTML - 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="/8224432-angularjs-form-validation-textbox-button-click-example" title="Проверка формы AngularJS: текстовое поле, нажатие кнопки (пример)" rel="bookmark">Проверка формы AngularJS: текстовое поле, нажатие кнопки (пример)</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8224434-angularjs-routing-with-parameters-single-page-application-example" title="Маршрутизация AngularJS с параметрами: пример одностраничного приложения" rel="bookmark">Маршрутизация AngularJS с параметрами: пример одностраничного приложения</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8224435-top-75-angularjs-interview-questions-and-answers" title="75 лучших вопросов и ответов на собеседовании по AngularJS" rel="bookmark">75 лучших вопросов и ответов на собеседовании по AngularJS</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8224436-what-is-asp-net-and-its-architecture" title="Что такое ASP.NET? и это АРХИТЕКТУРА" rel="bookmark">Что такое ASP.NET? и это АРХИТЕКТУРА</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8224438-asp-net-application-and-page-life-cycle" title="Приложение ASP.NET & Жизненный цикл СТРАНИЦЫ" rel="bookmark">Приложение ASP.NET & Жизненный цикл СТРАНИЦЫ</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="/8222767-how-to-use-functions-in-qtpuft-in-3-easy-steps" title="Как использовать функции в QTP / UFT за 3 простых шага" rel="bookmark">Как использовать функции в QTP / UFT за 3 простых шага</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8222768-how-to-use-transactions-in-qtpuft" title="Как использовать транзакции в QTP / UFT" rel="bookmark">Как использовать транзакции в QTP / UFT</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8222769-how-to-use-recovery-scenario-in-qtpuft-with-example" title="Как использовать сценарий восстановления в QTP / UFT с примером" rel="bookmark">Как использовать сценарий восстановления в QTP / UFT с примером</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8222770-optional-step-in-qtpuft-with-example" title="Необязательный шаг в QTP / UFT с примером" rel="bookmark">Необязательный шаг в QTP / UFT с примером</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8222771-object-spy-getroproperty-gettoproperty-in-qtpuft-with-example" title="Object Spy, GetRoProperty, GetToProperty в QTP / UFT с примером" rel="bookmark">Object Spy, GetRoProperty, GetToProperty в QTP / UFT с примером</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="/8223700-sap-monitoring-and-performance-checks-complete-tutorial-with-tcodes" title="SAP Monitoring & Проверки производительности: полное руководство с кодами" rel="bookmark">SAP Monitoring & Проверки производительности: полное руководство с кодами</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8223701-how-to-configure-and-test-rfc-connection-in-sap-sm59" title="Как настроить & Тестирование RFC-соединения в SAP - SM59" rel="bookmark">Как настроить & Тестирование RFC-соединения в SAP - SM59</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8223702-mb1c-how-to-create-material-stock-in-sap" title="MB1C: Как создать запас материала в SAP" rel="bookmark">MB1C: Как создать запас материала в SAP</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8223704-what-is-sap-lsmw-steps-to-migrate-data-using-lsmw" title="Что такое SAP LSMW? Шаги по переносу данных с помощью LSMW" rel="bookmark">Что такое SAP LSMW? Шаги по переносу данных с помощью LSMW</a></h3> </div> </div> </li><li class="post-list-small__item"> <div> <div> <h3 class="post-list-small__entry-title"><a href="/8223705-how-to-create-partner-function-and-partner-determination-sap-vopan" title="Как создать партнерскую функцию & Определение партнера: SAP VOPAN" rel="bookmark">Как создать партнерскую функцию & Определение партнера: SAP VOPAN</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>