Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Selenium 2
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Marc Philipp
May 09, 2011
Programming
320
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Selenium 2
Marc Philipp
May 09, 2011
More Decks by Marc Philipp
See All by Marc Philipp
JUnit 6
marcphilipp
1
67
JUnit 6.0
marcphilipp
2
44
Catching up with JUnit
marcphilipp
0
300
Catching up with JUnit 5
marcphilipp
1
190
The JUnit Crew Presents What's New
marcphilipp
2
96
Behind the scenes of JUnit 5 – running an independent open source project by example
marcphilipp
0
120
Running an independent open source project by example
marcphilipp
1
99
Automatisierte Tests mit Machine Learning und verteilter Ausführung beschleunigen
marcphilipp
1
270
Meet the JUnit Team in Person!
marcphilipp
1
210
Other Decks in Programming
See All in Programming
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
570
symfony/aiとlaravel/boost
77web
0
130
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
170
광주소프트웨어마이스터고등학교 DevFest 특강 - 바이브 코딩 시대에서 주니어 개발자로 살아남는 방법
utilforever
1
130
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
130
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.5k
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
480
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
360
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
850
エンジニアにデザインハーネスを 〜デザインプロセスを規定するためのハーネス〜 / Design harness from an engineer's perspective
rkaga
2
1.5k
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
250
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
170
Featured
See All Featured
Side Projects
sachag
455
43k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Paper Plane
katiecoart
PRO
2
52k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
260
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
260
Docker and Python
trallard
47
4k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Rails Girls Zürich Keynote
gr2m
96
14k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
630
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Transcript
Selenium
What is Selenium? Testing framework for web applications, 3 variants:
Selenium IDE Firefox add-on Record and playback user actions on a web site Not recommend for stable, long staying test suites © 2011 andrena objects ag. All rights reserved. 2
What is Selenium? (cont.) Selenium RC (Remote Control, Selenium 1)
Java Server that controls various browsers Executes scripted user actions from a programming environment, typically JUnit Has a “string-based” programming API Supports a variety of browsers (Internet Explorer 6, 7, 8, Firefox 2, 3, Safari, Chrome, Opera) Selenium WebDriver (Selenium 2) Java Library, which controls the browser Has a object-oriented programming API Supports Internet Explorer, Firefox, Chrome and HtmlUnit as drivers We recommend using the WebDriver API! © 2011 andrena objects ag. All rights reserved. 3
Selenium WebDriver API An instance implementing the WebDriver interface allows
access to the browser and to retrieve WebElements (input fields, buttons, etc.): get(String url) Loads new web page by URL. findElement(By locator) Finds WebElement or throws exception. findElements(By locator) Finds list of WebElements, possibly empty. . . . © 2011 andrena objects ag. All rights reserved. 4
Locating Elements on a Page Locators: instances of the By
class identifying an element in the HTML page. By.id("okay-button") Selects an element by its HTML id attribute. By.name("okayButton") Selects an element by its HTML name attribute. By.xpath("//div[@class=’navi’]//a[text()=’click’]") Treats the HTML as XML and uses an XPath expression to select an element. © 2011 andrena objects ag. All rights reserved. 5
Locating Elements on a Page (cont.) By.className("mainMenu") Uses a CSS
class name to select an element. By.cssSelector(".mainMenu a") Uses CSS selector syntax to select an element. By.linkText("click here") Finds a link by its text shown on the page. © 2011 andrena objects ag. All rights reserved. 6
Interacting With Elements on a Page element.click() Clicks on an
element. element.sendKeys("some text") Enters text into text field. element.clear() Clears the contents of a text field. element.setSelected() Selects an option element. . . . © 2011 andrena objects ag. All rights reserved. 7
Coding Dojo I Task Write Selenium tests driven by JUnit
that log in and out of a web application Dojo Rules 1. Two people are coding: 1 driver (has keyboard), 1 navigator. 2. They think aloud and comment their actions so the audience understands what’s going on. 3. After 3 minutes: driver leaves, navigator becomes driver. 4. Someone else joins as the new navigator. 5. Repeat. © 2011 andrena objects ag. All rights reserved. 8
Page Objects A page object is a Java class representing
a web page holds a WebDriver instance knows about locators public class LoginPage extends PageObject { public void setUsername(String username) { WebElement usernameField = driver.findElement(By.id(" j_username")); usernameField.clear(); usernameField.sendKeys(username); } ... } © 2011 andrena objects ag. All rights reserved. 9
Web Element Annotations Web elements can additionally be found using
annotations: public class LoginPage extends PageObject { @FindBy(id = "j_username") private WebElement usernameField; public void setUsername(String username) { usernameField.clear(); usernameField.sendKeys(username); } } This will instantiate the LoginPage class and create a proxy for each WebElement by evaluating the @FindBy annotation: PageFactory.initElements(driver, LoginPage.class) © 2011 andrena objects ag. All rights reserved. 10
Page Objects Actions A method that changes to another page
returns a new page object public class LoginPage extends PageObject { @FindBy(id = "registration-link") private WebElement registrationLink; public LoginPage(WebDriver driver) { super(driver); } public RegistrationPage clickRegistrationLink() { registrationLink.click(); return PageFactory.initElements(driver, RegistrationPage. class); } } © 2011 andrena objects ag. All rights reserved. 11
Coding Dojo II Task Write Selenium tests driven by JUnit
that log in and out of a web application using Page Objects! Dojo Rules 1. Two people are coding: 1 driver (has keyboard), 1 navigator. 2. They think aloud and comment their actions so the audience understands what’s going on. 3. After 3 minutes: driver leaves, navigator becomes driver. 4. Someone else joins as the new navigator. 5. Repeat. © 2011 andrena objects ag. All rights reserved. 12
Page Objects Benefits Page objects allow test code be separated
from details about page structures Tests are written on a higher level of abstraction Structural knowledge is reused Reduces overall code size and development effort on page structure changes In summary, Page Objects help write Selenium tests which are More readable More maintainable Less fragile © 2011 andrena objects ag. All rights reserved. 13
Thank you! References and Further Reading: http://www.seleniumhq.org/ http://code.google.com/p/selenium/wiki/PageObjects Marc Philipp
E-Mail
[email protected]
Twitter @marcphilipp andrena objects ag Albert-Nestler-Straße 11 D-76131 Karlsruhe Tel. +49 (0) 721 6105-122 Büro Frankfurt Clemensstraße 8 D-60487 Frankfurt Tel. +49 (0) 69 977 860 38 © 2011 andrena objects ag. All rights reserved. 14