Selenide

803 views
579 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
803
On SlideShare
0
From Embeds
0
Number of Embeds
80
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Selenide

  1. 1. Andrei Solntsev
  2. 2. ОБО МНЕ Программер Codeborne DevClub.eu организатор Selenide.org автор
  3. 3. ОБО МНЕ
  4. 4. О НАС TDD Парное программирование Чистый код KISS Прогеры пишут и код, и тесты
  5. 5. АГЕНДА •Selenide •Проблемы UI тестов •Примеры Selenide
  6. 6. Selenide = лаконичные и стабильные тесты (на Selenium WebDriver)
  7. 7. SELENIDE •Лаконичные •Читаемые •Без мусора Сконцентрируйся на бизнес-логике!
  8. 8. SELENIUM+API=SELENIDE selenide.org @Test public void userCanLogin() { open("/login"); $("#username").setValue ("john"); $(by("type", "submit")).click(); $(".menu").shouldHave (text("Hello, John!")); }
  9. 9. Типичные проблемы UI-тестов •Нестабильные (Чёртов Ajax!) StaleElementException ElementNotFoundException •Поддержка •Архитектура
  10. 10. Решения: Ajax Все should-методы ЖДУТ при необходимости. $(".loading_progress").shouldBe(visible); $("#menu").shouldHave(text("Hello, John!")); $(By.name("sex")).shouldNotBe(selected) ;
  11. 11. РЕШЕНИЯ: ПОДДЕРЖКА Ищите элементы по тексту import static com.codeborne.selenide.Selectors.*; $(byText("Hello, braza!")).shouldBe(visible); $(withText("raza")) .shouldHave(text("Hello, braza!"));
  12. 12. РЕШЕНИЯ:АРХИТЕКТУРА ПАЦАН НАКОДИЛ --- ПАЦАН ПРОТЕСТИЛ!
  13. 13. ЗАЛОГ УСПЕХА ant test Юнит-тесты Быстрые & стабильные -- МНОГО ant uitest UI тесты Медленные & капризные -- МАЛО
  14. 14. SELENIDE VS SELENIUM WEBDRIVER
  15. 15. WEBDRIVER DesiredCapabilities cap = htmlUnit(); cap.setCapability(INVALIDSELECTIONERROR, true); cap.setCapability(INVALIDXPATHERROR, false); cap.setJavascriptEnabled(true); WebDriver driver = new HtmlUnitDriver(cap); •firefox •chrome •htmlunit •phantomjs •ie open("/my-application/login");
  16. 16. FIND ELEMENT WebElement customer = driver.findElement(By.id("customerContainer")); WebElement customer = $("#customerContainer");
  17. 17. TEXT CHECK assertEquals("Customer profile", driver.findElement( By.id("customerContainer")).getText()); $("#customerContainer").shouldHa ve( text("Customer profile"));
  18. 18. MULTIPLE CHECKS $("#customerContainer").shouldHa ve( text("Customer profile"), text("John"), cssClass("active-profile"));
  19. 19. AJAX SUPPORT FluentWait<By> fluentWait = new FluentWait<By>(By.tagName("TEXTAREA")); fluentWait.pollingEvery(100, TimeUnit.MILLISECONDS); fluentWait.withTimeout(1000, TimeUnit.MILLISECONDS); fluentWait.until(new Predicate<By>() { public boolean apply(By by) { try { return browser.findElement(by).isDisplayed(); } catch (NoSuchElementException ex) { return false; } } }); assertEquals("John", browser.findElement(By.tagName("TEXTAREA")).getAttribute("value"));
  20. 20. AJAX SUPPORT $("TEXTAREA").shouldHave(value("John")); $("#location").shouldHave(text("Riga")); $(".logout").shouldNotBe(visible); $(".logout").should(disappear);
  21. 21. MORE CHECKS $("#customerContainer").shouldHa ve( text("Customer profile"), attribute("title", "Profile"), attribute("readonly"), cssClass("active-profile"));
  22. 22. COLLECTIONS $$("#boys tr").shouldHave(size(1)); $$("#girls tbody tr").shouldHave( texts("Angelina", "Veronika", "Darlene"));
  23. 23. SCREENSHOTS public class MyTest { @Rule public ScreenShooter photographer = ScreenShooter .failedTests() .succeededTests(); }
  24. 24. SCALA class CampaignsListSpec extends BeforeAndAfter { "User" can "see existing campaigns" in { $(".header").shouldHave( text(Labels.get("campaigns.title"))) } $$("#existingCampaignsList tbody tr") .shouldHaveSize(2) }
  25. 25. GROOVY
  26. 26. ДЕМО http://github.com/codeborne/selenide_examples
  27. 27. ПОЖАЛУЙСТА! Q&A http://selenide.org andrei.solntsev@gmail.com

×