Автотесты с помощью Selenium webdriver

Ожидание

Ожидать максимум 500 мс, пока не появится элемент:

driver.wait(until.elementLocated({css: '[data-test="create-new"]'}), 500);

или не загрузится страницы, содержащая в URL подстроку:

driver.wait(until.urlContains('?view=form'), 500);

или полный URL:

driver.wait(until.urlIs('http://site.ru/catalog/'), 500);

Просто выждать 500 мс, например, после щелчка на «закрыть» colorbox:

driver.sleep(500);

Действия

Щелчок

Щелкнуть по элементу:

driver.findElement({css: '[data-test="create-new"]'}).click();

Если элемент находится за пределами «видимости» окна браузера (требуется проскроллить страницу до него), то click не будет работать. Поэтому скроллими и кликаем:

driver.executeScript("$('html, body').animate({scrollTop: $('.js-signform [type=\"submit\"]').offset().top}, 0);");
driver.findElement({css: '.js-signform [type="submit"]'}).click();

Заполнить текстом

Заполнить поле типа input или textarea, текст добавляется в конец:

driver.findElement({css: '[name="email"]'}).sendKeys("test@test.ru");

Очистить поле:

driver.findElement({css: '[name="email"]'}).clear();

Выбрать файл

driver.findElement({css: '[name="VFile"]'}).sendKeys(__dirname + '/../files/test.xlsx');

Выбрать из выпадающего списка

Выбрать опцию option выпадающего списка select и запустить действия, которые происходят при смене с помощью браузерного JavaScript с jQuery на странице:

driver.executeScript("$('[name=\"docSetType\"]').val('1').trigger('change')");

Если список организован через HTML + JS, то «вручную» его раскрываем:

driver.executeScript("$('.js-doc-confirm').first().parentsUntil('.actions').parent().css({'max-height': '500px', '-webkit-transform': 'none', '-webkit-transform-origin': 'none'});");

Закрыть alert

driver.switchTo().alert().then(
  function() {
    // закрыть
    driver.switchTo().alert().accept();
  },
  function() {
    // если не было alert
    assert(false === 'Должно быть предупреждение alert');
  }
);

JavaScript

Запустить JavaScript и получить результат:

driver.executeScript("var retJSVar = {}; \
  retJSVar.text = $('[name=\"headInn\"]').siblings('.js-signform-alert').text(); \
  return retJSVar;").then(
function(ret) {
  assert(ret.text == 'Неправильно указано ИНН. Правильный формат: 10 или 12 цифр. Пример: 1234567890');
});

Проверяем существование ресурса по адресу (полезно, когда он не доступен без авторизации):

driver.executeScript("var retJSVar = {}; \
  retJSVar.UriThumbnail = $('.js-sign-thumbnail-img a').attr('href'); \
  $.ajax({url: retJSVar.UriThumbnail, type: 'GET', cache: false, async: false, \
    complete: function (XMLHttpRequest, textStatus) {retJSVar.thumbnailCode = XMLHttpRequest.status;} }); \
  return retJSVar;").then(
function(ret) {
  assert(ret.thumbnailCode == 200);
});

Ссылки