good test = simple test (with selenide)
TRANSCRIPT
Хороший тест -
простой тест
Андрей Солнцев
Selenide:
Нафига?
Don’t put logic in tests
@Test public void shouldNavigateToPhotosPage() { String baseUrl = "http://plus.google.com/"; Navigator nav = new Navigator(baseUrl); nav.goToPhotosPage();
assertEquals(baseUrl + "/u/0/photos", nav.getCurrentUrl());}
http://googletesting.blogspot.com/2014/07/testing-on-toilet-dont-put-logic-in.html
Don’t put logic in tests
@Test public void shouldNavigateToPhotosPage() { Navigator nav = new Navigator("http://plus.google.com/"); nav.goToPhotosPage();
assertEquals("http://plus.google.com//u/0/photos", nav.getCurrentUrl());}
Упс!
Код
Общий алгоритм Частные случаи
Тест
C = SQRT(A*A + B*B)
assert hyph(3,4) == 5assert hyph(5,12) == 13assert hyph(1,1) == 1.41assert hyph(0,0) == 0assert hyph(-1,3) -> error
ТестыКодсложный простые
копипастнельзя
копипастможно
Тесты - максимально простые!
● условия● переменные● вычисления● циклы
привносят в тесты ошибки!
А тем более:● Page Object● Factory● Builder● “карточки”● и т.д.
Усложнения в тесты
Стоит вносить осознанно● только по необходимости● понимая риски
Итак,
чем же хорош Selenide?
Selenide
● позволяет начать очень просто● и усложнять при необходимости
● при написании● при отладке
экономит массу времени
- синтаксис + API- умное ожидание
(20%)(80%)
Пример: Google search
Google search - Page Object
Selenide
новинки
1. Автоматические скриншоты
На Jenkins - публичный URL:
build.gradle
2. Методы $.hover(), $.dragAndDrop()
3. Поиск родителей
● $.parent()● $.closest(“table”)● $.closest(“.modal”)
4. $.uploadFile(File file)
4. $.uploadFile(File … files)
5. sizzle selectors
6. zoom in/out
7. Selenide profilerReport for userCanReplyToIncomingMessages(ui.BankMessagesSpec)
+----------------------+---------------------------------------------+--------+----------+
|Element |Subject |Status |ms. |
+----------------------+---------------------------------------------+--------+----------+
|open |http://localhost:2070/ |PASSED |4669 |
|open |http://localhost:2070/fakeLogin?username=bob |PASSED |1324 |
|By.linkText: Quicky |click() |PASSED |793 |
|#btn-message-reply |click() |PASSED |1002 |
|By.name: message.text |should be(focused) |PASSED |57 |
|By.name: message.text |should have(text 'long thread') |PASSED |47 |
|By.name: message.text |set value(Hello world!) |PASSED |69 |
|#send-button |click() |PASSED |1051 |
|.alert-success |should be(visible) |PASSED |71 |
+--------------------+-----------------------------------------------+--------+----------+
8. fast set value
mvn -Dselenide.fastSetValue=true
@Before public void setUp() { Configuration.fastSetValue = true;}
или
8. fast set value
И тогда $.setValue() использует JavaScript
● $.setValue(“john”) - быстро● $.sendKeys(“john”) - для autocompletion
который гораздо быстрее!
Ты сам можешь выбирать:
Благодарности
● Alexandr GavrilenkoImproved mechanism of closing webdrivers
● Sergey Shimkiv Added method getWebDriverLogs()
Благодарности
● Vladimir Denisov @proton72Added support for BrowserMob proxy
● kumarunster Possibility to log important Selenide Actions
Статистика скачиваний
Уникальных IP
Андрей Солнцев@asolntsev
ru.selenide.org
Спасибо!