Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Selenium 2
Marc Philipp
May 09, 2011
Programming
3
230
Selenium 2
Marc Philipp
May 09, 2011
Tweet
Share
More Decks by Marc Philipp
See All by Marc Philipp
Speeding up tests with machine learning and distributed execution
marcphilipp
0
12
How we Built a Distributed Testing Platform
marcphilipp
0
10
Evolving JUnit 5
marcphilipp
5
1.5k
JUnit 5 wird 5
marcphilipp
1
190
Developer Productivity Engineering
marcphilipp
1
7
Produktive Tests (German)
marcphilipp
1
290
Customizing and Refactoring Gradle Builds
marcphilipp
1
120
Schnelle und zuverlässige Builds mit Gradle und Maven
marcphilipp
1
86
Neues von JUnit 5.x: From Revolution to Continuous Evolution
marcphilipp
1
110
Other Decks in Programming
See All in Programming
はてなリモートインターンシップ2022 インフラ 講義資料
hatena
4
2.1k
Quarto Tips for Academic Presentation
nicetak
0
910
Rust、何もわからない...#6発表資料
ryu19
0
110
CDKでValidationする本当の方法 / cdk-validation
gotok365
1
190
SHOWROOMの分析目的を意識した伝え方・コミュニケーション
hatapu
0
230
Prácticas de Seguridad en Kubernetes
pablokbs
0
120
Qiita Night PHP 2023
fuwasegu
0
10k
Refactor with using `available` and `deprecated`
417_72ki
3
380
量子コンピュータ時代のプログラミングセミナー / 20230119_Amplify_seminar _shift_optimization
fixstars
0
170
Swift Observation
shiz
3
270
Showkase、Paparazziを用いたビジュアルリグレッションテストの導入にチャレンジした話 / MoT TechTalk #15
mot_techtalk
0
100
Step Functions Distributed Map を使ってみた
codemountains
0
100
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
221
17k
The Invisible Customer
myddelton
113
12k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
236
1.1M
Web development in the modern age
philhawksworth
197
9.6k
Put a Button on it: Removing Barriers to Going Fast.
kastner
56
2.5k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
10
1.3k
Designing for Performance
lara
600
65k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
15
1.2k
Unsuck your backbone
ammeep
659
56k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
44
14k
Intergalactic Javascript Robots from Outer Space
tanoku
261
26k
From Idea to $5000 a Month in 5 Months
shpigford
374
44k
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