Introduction to functional testing with Arquillian Graphene
Agenda
-
Arquillian introduction
-
Graphene introduction
-
Graphene hottest goodies
-
Arquillian Graphene in action
What is Arquillian Graphene ?
Writing and maintaining tests
Writing and maintaining tests
Testers
Arquillian
-
Integration framework for other test tools
-
(not only) Java EE + Mobile devices, JS, REST
-
Extensible
Arquillian crash course
JUnit runner & client mode
Injecting URL and browser
Deployment definition
Test method
What else Arquillian can do ?
Classpath control
Persistence
Arquillian Graphene
-
WebDriver on steroids
-
Painkiller for web UI testers
Graphene crash course
Wiring up page & test
Graphene test
What is the added value of Graphene ?
@Page Objects
-
well known WebDriver pattern
-
make tests more readable
-
Graphene enhances its usability
What is wrong ?
Page objects declaration
Page objects declaration
Test with page objects
@Page annotation
Test with page objects
Improved maintenance, from this
to this
Page Fragments
-
reusability
-
readability
-
cross browser testing
Page fragments declaration
Wiring up fragment & page
Services of fragment
Help methods of fragment
Page fragments injection
Declaring fragment root element
Test with page fragments
Improved DRY, from this
to this
@JQueryLocator
@InFrame - plain WebDriver
@InFrame - plain WebDriver
@InFrame - plain WebDriver
@InFrame - plain WebDriver
@InFrame - Graphene way
@InFrame - Graphene way
@InFrame - Graphene way
What is wrong ?
This!
@Location over page object declaration
@Location over page object declaration
@InitialPage
@InitialPage
Graphene.goTo
Graphene.goTo
Interceptors
JavaScrip interfaces
Request guards
Fluent waiting API
Multiple browsers
Final recap
-
Arquillian makes integration testing a breeze
-
Graphene improves tests readability & robustness
-
Graphene can be used together with server asserts
-
Graphene can be used on mobile devices
Do not forget
-
We are opensourced!
-
If you miss something, file an issue request!
-
Ask on forums for support
-
Contribute to the codebase :)
Q&A