VIQA
Virtual Intelligence
Quality Assurance
Обо мне
Роман Иовлев
VIQA
V
irtual Intelligence
Q
uality Assurance
Tool
Ссылка на Github
Тестирование UI
Сайт
Страницы
Элементы
Секции (логические объединения элементов)
Бизнес сущности (смысл)
Инструменты
DotNet C#
Selenium 2.0
Selenium
driver.FindElement(
By
.XPath(
“somelocator1"
)).SendKeys(
"1000"
);
driver.FindElement(
By
.XPath(
“somelocator2"
)).SendKeys(
"20000"
);
driver.FindElement(
By
.XPath(
“somelocator3"
)).Click();
driver.FindElement(
By
.XPath(
“somelocator4"
)).Click();
driver.FindElement(
By
.XPath(
“somelocator5"
).Click();
driver.FindElement(
By
.XPath(
“somelocator6"
)).Click();
driver.FindElement(
By
.XPath(
“somelocator7"
)).Click();
driver.FindElement(
By
.XPath(
“somelocator8"
)).Click();
driver.FindElement(
By
.XPath(
“somelocator9"
)).Click();
driver.FindElement(
By
.XPath(
“somelocator10"
)).Click();
Хочется
site.OpenHomePage();
TextFieldFrom.Input("1000");
TextFieldTo.Input("2000");
MyCheckbox.Check();
MyRadioButtons.Select("да");
PageObjects и HtmlElements
Yandex QA Tool
Описание старниц через PageObjects + Blocks
HtmlElements. Работа с элементами, а не с
локаторами
Кнопка
<input type=“button” value=“Найти”>
Кнопки бывают разные
<a href=“…”>
<span>
<img src=“…”>
Найти
<\span>
</a>
Недостатки Yandex QA Tool
Нет возможности работать с нестандартными
контролами > Нет Интерфейсов элементов
Довольно не очевидная инициализация
Драйвера, работа со страницами
Примеры с Github оказались не
работоспособными :(
Bumblbee
Можно настраивать элементы
Нет примеров работы
Странное построение тестов в виде цепочки
Session.CurrentBlock<
FrontView
>()
.Tabs.SettingsTab.Click()
.UserNameField.EnterText(
“sometext”
)
UI тестирование - AI
Artificial
Intelligence
UI тестирование - VI
Virtual
Intelligence
Selenium > Надстройки > VIQA
Selenium как язык низкого уровня
Надстройки над селениум использующие
шаблоны PageObject и PageElements
VIQA – обучаемые PageElements
VI Объекты
Умные.
Дефолтная реализация
Обучаемые
Элемент, Секция, Страница
Объект
Атрибуты/Свойства/Поля
Действия
Интерфейсы для Объектов
public
interface
ICheckbox
:
IClickable
,
ILabeled
,
ISetValue
{
void
Check();
void
Uncheck();
bool
IsChecked();
}
Ready for Use
Lazy learn
Объекты имеют дефолтное поведение
Можно не описывать то, чем вы не будете
пользоваться
VI Элемент
Простые
Button, CheckBox, Link, TextArea,
TextField, Clickable, Text, ClickableText
Сложные
CheckList, RadioButtons, Dropdown,
DataForm
Просто создать
[
Name
(Name =
"Wi-fi"
),
Locate
(ByXPath =
"//*[@class='wifi-checkbox']"
)]
public
ICheckbox
WiFiCheckbox1 =
new
Checkbox
();
[
Name
(Name =
"Wi-fi"
),
Locate
(ByClassName =
"wifi-checkbox"
)]
public
Checkbox
WiFiCheckbox2;
public
ICheckbox
WiFiCheckbox3
=
new
Checkbox
("Wi-fi"
,
"#wifi-checkbox"
);
public
ICheckbox
WiFiCheckbox4
=
new
Checkbox
(
"Wi-fi"
, By.CssSelector(
"#wifi-checkbox"
));
Все действия можно переопределить
new
Checkbox
(
"Wifi Checkbox"
)
{
ClickAction = () =>
new
ClickableElement
(
"#wifi-chckbox"
).Click(),
GetLabelFunc = () =>
new
TextElement
(
"#wifi-chckbox-lable"
).Label,
IsSelectedFunc = () => new
VIElement
(
"#wifi-chckbox"
)
.GetWebElement().GetAttribute(
"checked"
) ==
"1"
,
};
Dropdown сложный select
new
DropDown
("My Dropdown")
{
SelectAction = val => {
new
ClickableElement
(
"#rootid"
).Click();
new
ClickableElement
(
By
.XPath(
"//*[rootid]/span[text()='"
+val+
"']"
));
}
};
VI Элементы More
А также:
Стабильный поиск элемента
Встроенная Проверка уникальности элемента
Стабильное нажатие элементов
Переопределение действий со всеми VIElements
Логирование всех действий и результатов по умолчанию
Сложные элементы
CheckList, RadioButtons, Dropdown, DataForm
Вся логика внутри
DataForm: использование
Быстрое Массовое заполнение элементов
ISetValue
из данных
Множество Элементов
Заполнение в Selenium
driver.FindElement(
By
.XPath(
“somelocator1"
)).SendKeys(
"1000"
);
driver.FindElement(
By
.XPath(
“somelocator2"
)).SendKeys(
"20000"
);
driver.FindElement(
By
.XPath(
“somelocator3"
)).Click();
driver.FindElement(
By
.XPath(
“somelocator4"
)).Click();
driver.FindElement(
By
.XPath(
“somelocator5"
).Click();
driver.FindElement(
By
.XPath(
“somelocator6"
)).Click();
driver.FindElement(
By
.XPath(
“somelocator7"
)).Click();
driver.FindElement(
By
.XPath(
“somelocator8"
)).Click();
driver.FindElement(
By
.XPath(
“somelocator9"
)).Click();
driver.FindElement(
By
.XPath(
“somelocator10"
)).Click();
Заполнение в Selenium
driver.FindElement(
Locators
.FromTextField).SendKeys(
"1000"
);
driver.FindElement(
Locators
.ToTextField).SendKeys(
"20000"
);
driver.FindElement(
Locators
.WifiExpand).Click();
driver.FindElement(
Locators
.WifiCheckbox).Click();
driver.FindElement(
Locators
.SensorScrnExpand).Click();
driver.FindElement(
Locators
.SensorScrnRadio(
“да”
)).Click();
driver.FindElement(
Locators
.ProcessorExpand).Click();
driver.FindElement(
Locators
.ProcessorCheckbox(
“AppleA4”
)).Click();
driver.FindElement(
Locators
.ProcessorCheckbox(
“AppleA5”
)).Click();
driver.FindElement(
Locators
.ProcessorCheckbox
(“AppleA7”
)).Click();
Заполнение в VIQA
ProductPage
.FilterSection.TextFieldFrom.Input(
"1000"
);
ProductPage
.FilterSection.TextFieldTo.Input(
"2000"
);
ProductPage
.FilterSection.WiFiCheckbox.Check();
ProductPage
.FilterSection.SensorScreenRadioButtons.Select(
"да"
);
ProductPage
.FilterSection.ProcessorTypesChecklist.CheckGroup(
new[]{
"Apple A4"
,
"Apple A5"
,
"Apple A7"
});
Заполнение в VIQA
{
var
_ =
ProductPage
.FilterSection;
_.TextFieldFrom.Input(
"1000"
);
_.TextFieldTo.Input(
"2000"
);
_.WiFiCheckbox.Check();
_.SensorScreenRadioButtons.Select(
"да"
);
_.ProcessorTypesChecklist.CheckGroup(
new
[]{
"Apple A4"
,
"Apple A5"
,
"Apple A7"
});
}
Data form
_ProductFilterForm.FillForm(filter);
Создание DataForm
new
DataForm
<
Filter
>(
"Фильтр продукта"
, new
Dictionary
<
ISetValue
,
Func
<
Filter
,
object
>> {
{ TextFieldFrom, _ => _.CostRange.From },
{ TextFieldTo, _ => _.CostRange.To },
{ WiFiCheckbox, _ => _.Wifi },
{ SensorScreenRadioButtons, _ => _.SensorScreen },
{ ProcessorTypesChecklist, _ => _.ProcessorTypes },
});
Форма
Работа с формой описывается отдельно
Форма заполняется из бизнес сущности/ей
Одна строчка в коде
Сайт
Сайт
Страница1
Страница2
Элемент1
Секция1
Секция2
Элемент1
Элемент2
Элемент3
PageObjects
Объект для описания ваших страниц
Содержит
Элементы
Действия
Может быть разбит на блоки
VISite
WebDriver
Общие настройки (Логирование, Таймауты)
Домен
Инициализация Страниц
Еще плюшки
Драйвер стартует при первом вызове Open
Браузер открывается на весь экран
KillAllRunWebDrivers
Логирование
Дефолтный логер
Свой логер IVILogger
Слои
Создаем Сайт. Настраиваем его
Создаем страницы/Секции VIElement-ов
Описываем-обучаем элементы для каждой страницы
Описываем Действия со страницами
Составляем тесты
VIQA Profit
Обучаемые Веб Элементы
Использование Интерфейсов
Простота использования
Шаблоны PageObjects и
PageElements (каскадная
инициализация элементов)
VIQA Profit
Встроенные логирование и алертинг
Широкие возможность настройки
Фреймворка (свой логгер, настройки
webDriver, таймауты и прочее)
Множество небольших но
приятных мелочей
Контакты
Роман Иовлев
Email
Попробуйте сами
Сайт проекта github
Blog проекта
Вопросы
Questions await
VIQA - Тестирование UI с помощью Виртуального интеллекта
01
/
46
VIQA Virtual Intelligence Quality Assurance