пятница, 26 июня 2015 г.

Selenium IDE + CSVRead + looping

Кейс: Параметризировать тест в Selenium IDE данными из csv-файла (в примере – test.csv).
Количество параметров: 2 (и может увеличиться в будущем)
Количество строк в файле: 7 (и может увеличиться в будущем)

В качестве подопытного выбрана форма логина в дропбоксе. Первый параметр – логин, второй – пароль. Тест заключается в 
попытке залогиниться, считав логин и пароль из файла.

Решение:

Что необходимо добавить в Selenium IDE:
SelBlocks (для использования цикла)

CSVRead_SeleniumIDE.js (для чтения файла)




Индекс первой строки из файла – 1, первого элемента в этой строке – 1.1, второго – 1.2, для второй строки – 2.1 и 2.2 и т.д. Получается, что изменяется только номер строки, который можно изменить в цикле.




Что получилось в Selenium IDE:


(названия переменных унаследовались из примера, лучше назвать осмысленно, например, login и password вместо  testvalue1 и testvalu2 )

Для кириллицы файл должен быть сохранен в кодировке UTF-8.

Недостаток решения: приходится задавать вручную количество строк из файла в цикле.

Проверить при помощи Selenium IDE свойства CSS у элементов (Selenium IDE + Test CSS value)

Кейс: Проверить при помощи Selenium IDE свойства CSS у элементов

Проблема:  У Selenium IDE нет такой функции (возможно, плохо искали), так что встроенных возможностей не хватает.

Решение:
На форуме предложили решение, отличное решение. 

(Изображение не из ответа на форуме, взято с хабра исключительно для иллюстрации подхода)






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


Если детально:В Selenium IDE будет выбираться функция, в нее будут передаваться локатор и ожидаемое значение, на выходе сравнивается фактический результат и ожидаемый результат. Т.е. в середине из элемента, найденного по локатору, вытаскивается определенное свойство (пусть будет захардкожено, чтобы не вспоминать его каждый раз, а ориентироваться на название функции).

Шаги:
1. Cоздать файл с расширением .js
2. Написать в нем первую функцию assertCSSbackgroundColor:

Selenium.prototype.assertCSSbackgroundColor = function(locator, value) {  var element = window.getComputedStyle(this.page().findElement(locator));    Assert.matches(value, element.getPropertyValue('background-color'));}

3. Подключить получившийся файл в настройках Selenium IDE:
"Options" >>> "Selenium Core extensions (user-extensions.js)" 
и перезапустить Selenium IDE.
4. Протестировать новые возможности.

В результате из такого:



Получилось вот такое:



Дополнительно:
Файл из примера можно посмотреть здесь.
Свойств в нем перечислено мало, нужные Вам можно добавить самостоятельно. Как вариант, отсюда