2. Thucydides intro
Why use Thucydides framework ?
#1 Awesome reports
Fully integrated with WebDriver
Multiple browsers supported
Native support for DDT
Native support for BDD
Continuous Integration support
Integrated with JIRA
8. • Java JDK
o http://www.oracle.com/technetwork/java/javase/downloads/jdk6downloads-
1902814.html
o Download and install JDK
• Maven
o http://maven.apache.org/
o Download maven and unpack it on your drive
• Eclipse
o http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-
developers/junosr2
o m2eclipse plug-in
Eclipse > Help > Install New Software > Work with: All Available Sites > m2e
• Firefox 11
o http://www.oldapps.com/firefox.php?old_firefox=7395
o Disable updates
Environment Setup
22. Scope
Requirement
As a user I want to enter a search term and
navigate to a result.
Test case:
Go to Google search
Type a search term
Grab a search result from the list
Navigate to it
Validate the navigation
25. Creating a page
public class GoogleSearchPage extends PageObject {
//add constructor due to PageObject
public GoogleSearchPage (WebDriver driver){
super(driver);
}
}
26. Creating a page
public class GoogleSearchPage extends PageObject {
…
//add your WebElement to the Page
private WebElement searchInput;
}
27. Creating a page
public class GoogleSearchPage extends PageObject {
…
@FindBy(|)
private WebElement searchInput;
}
28. Creating a page
public class GoogleSearchPage extends PageObject {
…
@FindBy(id=“?”)
private WebElement searchInput;
}
40. Creating Second Page
public class GoogleResultsPage extends PageObject {
…
@FindBy(id=“search”)
private WebElement searchResults;
}
41. Creating Second Page
public class GoogleResultsPage extends PageObject {
public void findResult(String resultTerm){
element(searchResults).waitUntilVisible();
waitFor(ExpectedConditions.presenceOfAllElementsLocatedBy
(By.cssSelector(“div#search li.g”)));
List<WebElement> resultList =
searchResults.findElements(By.cssSelector(“li.g”));
for(WebElement elementNow:resultList){
if(elementNow.getText().contains(resultsTerm)){
elementNow.findElement(By.cssSelector(“a.l”)).click();
break;
}
}}
42. Adding Steps
Steps are recorded in reports
Method parameters are captured in the report
Step method names are split by camelCase
43. Adding Steps
public class GoogleSteps extends ScenarioSteps{
public GoogleSteps(Pages pages){
super(pages);
}
}
44. Adding Steps
public class GoogleSteps extends ScenarioSteps{
…
public GoogleSearchPage googleSearchPage(){
return getPages.currentPageAt(GoogleSearchPage.class);
}
public GoogleResultsPage googleResultsPage(){
return getPages.currentPageAt(GoogleResultsPage.class);
}
}
45. Adding Steps
public class GoogleSteps extends ScenarioSteps{
…
@Step
public void inputSearchTerm(String search){
googleSearchPage().inputTerm(search);
}
@Step
public void clickOnSearch(){
googleSearchPage(). clickOnSearch();
}
}
46. Adding Steps
public class GoogleSteps extends ScenarioSteps{
…
@StepGroup
public void performSearch(String search){
inputSearchTerm(search);
clickOnSearch();
}
}
47. Adding Steps
public class GoogleSteps extends ScenarioSteps{
…
@Step
public void findSearchResult(String search){
googleResultsPage().findResult(search);
}
}
48. Adding Steps
public class GoogleSteps extends ScenarioSteps{
…
@Step
public void verifyUrl(String url){
Assert.assertTrue(“Url does not match! ”,
getDriver().getCurrentUrl.contains(url));
}
}
50. Creating a Test
@RunWith(ThucydidesRunner.class)
public class GoogleSearchTest {
@Managed(uniqueSession = true)
public WebDriver webdriver;
@ManagedPages(defaultUrl = “http://www.google.com”)
public Pages pages;
@Steps
public GoogleSteps googleSteps;
}
51. Creating a Test
@RunWith(ThucydidesRunner.class)
public class GoogleSearchTest {
…
@ManagedPages(defaultUrl = “http://www.google.com”)
public Pages pages;
…
@Test
public void googleSearchTest(){
googleSteps.performSearch(“evozon”);
googleSteps.findSearchResult(“on Twitter”);
googleSteps.verifyUrl(“twitter.com/evozon”);
}
}
52. Test
Test case:
Go to Google search
Type a search term
Grab a search result from the list
Navigate to it
Validate the navigation
@RunWith(ThucydidesRunner.class)
public class GoogleSearchTest {
…
@ManagedPages(defaultUrl
= “http://www.google.com”)
public Pages pages;
…
@Test
public void googleSearchTest(){
googleSteps.performSearch(“evozon”);
googleSteps.findSearchResult(“on Twitter”);
googleSteps.verifyUrl(“twitter.com/evozon”);
}
}
54. Run parameters
mvn integration-test
will run all tests in the project
mvn test –Dtest=[TEST_NAME]
will run specific test
Note: need to configure in pom.xml
mvn test –Dwebdriver.dirver=firefox
will specify the browser to run with
Note: other browsers need additional
configuration
Bonus pelangatoateastea a fostcaRapoartelearataumultmai bine siEchipa de sales a reusitsaprindanistecontractemaiinteresante.Story Noul Framework – Tocmaidescoperisemframeworkul – am fostchemat de team Lead – new ProjectCand am auzitclientu mi-o picat fata. Probabilatiauzit de ei– Press Association – UK – ceamai mare agentie de presa din anglia
Problemele au continuatsaapara…acumatrebuiasaluamdouavariante de rapoartesisa le comaramintreele.generamrapoartemari la fiecare run Nevoie de a vedeadiferenteintrerapoarterapide
API - Application programming interface - in term this means it is not language specific. You can write your code in the language of your choice.
Oxford University Press Aplicatia era un document management system. ProvocariTestare cu 5 tipuri de useriptfiecare flow Jenkins for CISolutiaDDT – Data Driven Testing – un scenariu era rulatpentru 5 tipuri de utilizatorisiasteptamdiferiteoutcomeuri
Jenkinseste un tool de continuous integrationContinuous integration (CI) is a software engineering practice in which isolated changes are immediately tested and reported on when they are added to a larger code base.Practiccandechipa de dev face un nou deploy de aplicatieTestelesuntporniteimediatdupa deployRuleazatestelesiai un raport instant… de passed and failed
Jenkinseste un tool de continuous integrationPracticcandechipa de dev face un nou deploy de aplicatieTestelesuntporniteimediatdupa deployRuleazatestelesiai un raport instant… de passed and failed