Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

QA Fest 2016. Яков Крамаренко. Укрощаем фреймворки-динозавры используя NSelene

360 views

Published on

Selenide шагает по планете:) У него уже даже появились вассалы в Python и C# - Selene и NSelene. Но, к сожалению, на большинстве "старых" проектов все еще живут, уже давно устаревшие но - по количеству тестов которые нет времени переписывать - монопольные фреймворки-динозавры. Все было бы хорошо, но - часто эти “самописные” звери из троглодитовой эры - выкидывают фокусы нестабильности, и требуют намного большего времени на поддержку существующих тестов и написание новых. В этом докладе мы увидим, что оказывается, можно по довольно не сложным схемам подружить более современный фреймворк класса Selenide с уже используемым на проекте и устаревшим, не переписывая при этом старые тесты, а для новых - получить намного более лаконичный, удобный и стабильный API.

Published in: Education
  • Be the first to comment

  • Be the first to like this

QA Fest 2016. Яков Крамаренко. Укрощаем фреймворки-динозавры используя NSelene

  1. 1. Taming Dino-Frameworks with NSelene @yashaka
  2. 2. Preface…
  3. 3. Taming Dino-Frameworks with NSelene C# Version
  4. 4. Plan GIVEN project with legacy selenium-based dinosaur- framework AND problems with stability, boilerplate code WHEN believe in evolution :) THEN let’s integrate modern solutions like Selenide/NSelene into legacy code
  5. 5. Coding Session c# src: https://github.com/yashaka/talks/tree/master/ TamingDinoFrameworksWithNSelene java src: https://github.com/yashaka/talks/tree/master/ taming-dino-frameworks-with-selenide
  6. 6. Summary • Default “implicit waits for visibility” in a few “code symbols” • New more stable and concise code with modern tool • Full interoperability • informative error messages • Unstable behaviour of legacy code? => refactor needed parts to new style
  7. 7. Full Interoperability. How?
  8. 8. Full Access to original Driver Procedural Approach DoNewStuff() GetWebDriver().DoWhateverYouWant()…

  9. 9. Full Access to original Driver OOP Approach wrappedDriver = new FirefoxDriver(); driver = new SeleneDriver(wrappedDriver); driver.DoNewStuff() wrappedDriver.DoWhateverYouWant()…

  10. 10. Interfaces Compatibility SeleneElement implements IWebElement SeleneCollection implements IList<IWebElement>, IReadOnlyCollection<IWebElement>, etc.
 SeleneDriver implements IWebDriver
  11. 11. Power. How? • SeleneElement = IWebElement as Dynamic Proxy + Implicit Smart Waits + Handy Asserts • SeleneCollection = IList<IWebElement> as Dynamic Proxy + Implicit Smart Waits + Handy Asserts • SeleneDriver = IWebDriver finding SeleneElement & SeleneCollection • Informative errors everywhere ;)
  12. 12. What about Java? • SelenideElement = WebElement as Dynamic Proxy + Implicit Smart Waits + Handy Asserts • ElementsCollection ~ List<WebElement> as Dynamic Proxy + Implicit Smart Waits + Handy Asserts • SelenideDriver can be implemented by your own • soon will be added to Selenide • Informative errors everywhere ;)

  13. 13. Selenide Examples • Default “implicit waits for visibility” in a few “code symbols” • New more stable and concise code with modern tool • Unstable behaviour of legacy code? => refactor needed parts to new style
  14. 14. Q&A
  15. 15. @yashaka Thank You facebook.com/yashaka github.com/yashaka github.com/yashaka/nselene automician@gmail.com courses.automician.com
  16. 16. “Widgets Workshop (Java) (ru)” “Refactoring selenium waits and PageFactory course (Java) (ru)” “Refactoring selenium waits and PageFactory videos (c#) (ua)” available at courses.automician.com @yashaka Next

×