610 likes | 1.45k Views
Automated browser testing with Selenium and C#. Darren Bruning @ dbruning. Going to cover:. Why browser automation? Why selenium? “Naked” selenium Selenium in a test framework: Kumara Kumara internals More Selenium goodness. Why browser automation? . Primarily for testing
E N D
Automated browser testing with Selenium and C# Darren Bruning @dbruning
Going to cover: • Why browser automation? • Why selenium? • “Naked” selenium • Selenium in a test framework: Kumara • Kumara internals • More Selenium goodness
Why browser automation? • Primarily for testing • Maybe also to script boring repetitive tasks
What is selenium? • There are lots of browsers • They all do similar things (go to websites, let you click on things) • There was no consistent API to automate them • Selenium 1: was javascripty, problematic • WebDriver project started at Google • Selenium 2 adopted WebDriver as preferred method to “drive” browsers.
WebDriver protocol • Uses HTTP as a transport • “Bindings” for different languages, emit HTTP calls • WebDriver “drivers” (servers) accept HTTP calls & actually drive the browser
Why not write tests directly against Selenium API? • Tests end up with lots of code • “business logic” gets obscured • Tests only readable by devs • Would be more value in the tests if they also served as documentation • => BDD (Behaviour Driven Design)
SpecFlow is great and all but… • Yaaaay • test readability! • Feature documentation! • Boo • Need plugin for Visual Studio • Can’t use refactoring tools • Becomes a pain to keep the feature file text in sync with the regex
Enter the Kumara! • Nee Calcot • Given – when –then syntax • Given(List<ICondition>) • When(List<Action>) • Then(List<ICondition>) • It’s still just code, but it’s very readable (maybe even by a BA? Or tester?)
So basically, with Kumara: • You define some “Root Nouns”(the things you interact with in a test) • You create some IConditions on those root nouns • You write tests using those conditions
Review past tests, watch videos: • https://saucelabs.com/tests/69f48decbb234e3b8adadf2a3205eebe
Also awesome: PhantomJS • Very fast! • Runs locally, so less network latency for WebDriver calls,bloating out the test runtime