qa fest 2016. Яков Крамаренко. Укрощаем...

16
Taming Dino-Frameworks with NSelene @yashaka

Upload: qafest

Post on 07-Jan-2017

94 views

Category:

Education


7 download

TRANSCRIPT

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

Taming Dino-Frameworks

with NSelene

@yashaka

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

Preface…

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

Taming Dino-Frameworks with NSelene

C# Version

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

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

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

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

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

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

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

Full Interoperability. How?

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

Full Access to original Driver Procedural Approach

DoNewStuff()

GetWebDriver().DoWhateverYouWant()…

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

Full Access to original Driver OOP Approach

wrappedDriver = new FirefoxDriver();

driver = new SeleneDriver(wrappedDriver);

driver.DoNewStuff()

wrappedDriver.DoWhateverYouWant()…

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

Interfaces CompatibilitySeleneElement implements IWebElement

SeleneCollection implements IList<IWebElement>, IReadOnlyCollection<IWebElement>, etc.

SeleneDriver implements IWebDriver

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

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 ;)

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

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 ;)

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

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

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

Q&A

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

@yashaka

Thank Youfacebook.com/yashaka

github.com/yashaka

github.com/yashaka/nselene

[email protected]

courses.automician.com

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

“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