Thucydides Release 0.9.103 adds some useful new features and enhancements.
Test reports now distinguish between test errors and failures. The following screenshot will make this clear.
Tests that do not have any screenshots will no longer show an empty screenshots column in the details page.
Instead of declaring WebElement variables in Page Objects and then calling element() or $() to wrap them in WebElementFacades, you can now declare WebElementFacade variables directly inside the Page Objects. This will make the Page Object code simpler more readable.
So, instead of writing
@DefaultUrl("http://en.wiktionary.org/wiki/Wiktionary:Main_Page")
public class DictionaryPage extends PageObject {
@FindBy(name="search")
private WebElement searchTerms;
private WebElement go; //variable name matches element id or name
public DictionaryPage(WebDriver driver) {
super(driver);
}
public void enter_keywords(String keyword) {
element(searchTerms).type(keyword);
}
public void lookup_terms() {
element(go).click();
}
public List getDefinitions() {
WebElement definitionList = getDriver().findElement(By.tagName("ol"));
List<WebElement> results = definitionList.findElements(By.tagName("li"));
return convert(results, toStrings());
}
private Converter<WebElement, String> toStrings() {
return new Converter<WebElement, String>() {
public String convert(WebElement from) {
return from.getText();
}
};
}
}
you can write
@DefaultUrl("http://en.wiktionary.org/wiki/Wiktionary:Main_Page")
public class DictionaryPage extends PageObject {
@FindBy(name="search")
private WebElementFacade searchTerms;
private WebElementFacade go; //variable name matches element id or name
public DictionaryPage(WebDriver driver) {
super(driver);
}
public void enter_keywords(String keyword) {
searchTerms.type(keyword); //directly use facade
}
public void lookup_terms() {
go.click(); //directly use facade
}
public List getDefinitions() {
WebElement definitionList = getDriver().findElement(By.tagName("ol"));
List<WebElement> results = definitionList.findElements(By.tagName("li"));
return convert(results, toStrings());
}
private Converter<WebElement, String> toStrings() {
return new Converter<WebElement, String>() {
public String convert(WebElement from) {
return from.getText();
}
};
}
}
A new method, switchToPage() has been added to PageObject class to make it convenient to return a new PageObject after navigation from within a method of a PageObject class. For example,
[sourcecode language="java"]
@DefaultUrl("http://mail.acme.com/login.html")
public class EmailLoginPage extends PageObject {
...
public void forgotPassword() {
...
forgotPassword.click();
ForgotPasswordPage forgotPasswordPage = this.switchToPage(ForgotPasswordPage.class);
forgotPasswordPage.open();
...
}
...
}
[/sourcecode]
containsOnlyText and shouldContainOnlyText methods to WebElementFacade. These methods are similar to containsText/shouldContainText methods but check for exact match.shouldContainText method in WebElementFacade so that error message shows both the expected text, and the text found in the element.WebElementFacade.shouldNotContainText.thucydides.native.events property to true or false.Thucydides Release 0.9.98 is now out.
Adding on to some recent enhancements to screenshots management, Thucydides now supports a method to give you even finer control on capturing screenshots in your tests. Using the newly added takeScreenshot method, you can now instruct Thucydides to take a screenshot at any arbitrary point in the step irrespective of the screenshot level set earlier.
Simply call Thucydides.takeScreenshot() in your step methods whenever you want a screenshot to be captured.
Thucydides now saves only rescaled screenshots by default. This is done to help reduce the disk space taken by reports. Should you require to save the original unscaled screenshots too, this default can be easily overridden by setting the property, thucydides.keep.unscaled.screenshots to true.
From this release onwards, html source files for the screenshots will also not be saved by default. Set the property, thucydides.store.html.source to true if you wish to override this behaviour.
This is not really a new feature but rather a hidden feature that one of our users, Alex Artukh, has been experimenting with. You can pass valid HTML text as parameter to @Step methods in the step library. This will show up as formatted text in the reports on the step details page. The following screenshot demonstrates this.
This was achieved by creating a dummy @Step method called description that takes a String parameter. At runtime, the tests supply this method with formatted html text as parameter.
@Step
public void description(String html) {
//do nothing
}
public void about(String description, String...remarks) {
String html =
"<h2 style=\"font-style:italic;color:black\">" + description + "</h2>" +
"<div><p>Remarks:</p>" +
"<ul style=\"margin-left:5%; font-weight:200; color:#434343; font-size:10px;\">";
for (String li : remarks) html += "<li>" + li + "</li>";
html += "<ul></div>";
description(html);
}
Read here for more details.
Incidentally, this feature was broken in the last release due to some regression but has been fixed in the latest release.
getAttribute() method to return the value of a given attribute.thucydides.batch.strategy, has been added to configure the batch strategy. By default this property is set to the value DIVIDE_EQUALLY which divides the test cases equally among batches. Set this property to DIVIDE_BY_TEST_COUNT in order to distribute test cases across batches based on number of test methods in each test case.Keep watching this space for more.
We released version 0.9.94 of Thucydides over the weekend.
Reports home page now shows two pie charts, one with the overall tests count and another with the test count weighted by number of steps.
The first pie chart gives an overall status of the tests as it shows how many tests have passed, failed or are still pending. The second pie-chart gives the test status weighted by number of steps which could be used to deduce the nature/criticality of test failures.
There are also some minor improvements to the requirements reporting page.
Selenium version has been updated to 2.29.0 (Selenium Release notes)
thucydides.verbose.steps property, that provides more detailed logging of WebElementFacade steps.Our latest release (0.9.95) brings the example reporting format changes (released last month for jBehave) to parametric junit tests. A few cosmetic changes have also been done for better organization of information and improved readability.
Let's look at these changes in detail.
As the screenshot above demonstrates, the test table on main report page reduces clutter by showing test results at a test-method level instead of a separate row for each parameter set.
The details page will list all parameter sets in a table. By default, the parameters are names "Parameter 1", "Parameter 2" and so on. But this can be configured with a comma separated list of column headings passed as an attribute to the @TestData annotation.
[sourcecode language="java"]
@TestData(columnNames = "Word,Definition")
public static Collection<Object[]> testData() {
return Arrays.asList(new Object[][]{
{"apple", "A common, round fruit"},
{"banana", "An elongated curved fruit"}
});
}
[/sourcecode]
Further, the steps section will show a collapsed view with a row for each parameter set. The
icon can be clicked to expand the top level step to reveal all the steps and corresponding screenshots. Failed test examples will be highlighted in red.
A new property firefox.preferences can be used to supply a semicolon separated list of Firefox configuration settings. For ex.,
-Dfirefox.preferences="browser.download.folderList=2;browser.download.manager.showWhenStarting=false;browser.download.dir=c:\downloads"
Integer and boolean values will be converted to the corresponding types in the Firefox preferences; all other values will be treated as Strings. You can set a boolean value to true by simply specifying the property name, e.g. -Dfirefox.preferences=app.update.silent.
For the lazy, here's a complete reference to Firefox's configuration settings - http://kb.mozillazine.org/Firefox_:_FAQs_:_About:config_Entries
Thucydides makes it possible to split the web tests into smaller batches, and to run each batch on a different machine or different virtual display. This is achieved by specifying two parameters when you run each build: the total number of batches being run (thucydides.batch.count), and the number of the batch being run in this build (thucydides.batch.number).
For example, the following will divide the test cases into 3 batches (thucydides.batch.count), and only run the first test in each batch (thucydides.batch.number):
mvn verify -Dthucydides.batch.count=3 -Dthucydides.batch.number=1
However, this strategy divides the test cases equally among batches. This could be inefficient if some of your test cases have more tests than others. This release adds a new batching strategy based on number of tests in the test cases. The strategy is implemented with the help of a TestCountBasedBatchManager which evenly distributes test cases across batches based on number of test methods in each test case.
Release 0.9.92 is now available and contains the following enhancements:
The Requirements reporting tab has been enhanced to show test results at a requirements level. This provides an overall view of the progress of the project by making it easier to view not only what stories have been implemented, but also features and capabilities that remain to be done. Here's a screenshot.
You can read more about Thucydides' approach to requirements reporting in this excellent blog post - Functional Test Coverage - Taking BDD Reporting To The Next Level
For security/privacy reasons, it may be required to blur sensitive screenshots in Thucydides reports. This is now possible by annotating the test methods or steps with the annotation @BlurScreenshots. When defined on a test, all screenshots for that test will be blurred. When defined on a step, only the screenshot for that step will be blurred. @BlurredScreenshot takes a string parameter with values LIGHT, MEDIUM or HEAVY to indicate the amount of blurring. For example,
[sourcecode language="java"]
@Test
@BlurScreenshots("HEAVY")
public void looking_up_the_definition_of_pineapple_should_display_the_corresponding_article() {
endUser.is_the_home_page();
endUser.looks_for("pineapple");
endUser.should_see_definition_containing_words("A thorny fruit");
}
[/sourcecode]
This feature is currently available for junit stories but we'll extend it shortly to jbehave and easyb.
Keep watching this space for more updates and announcements.
Copyright © 2007 - 2012 Wakaleo Consulting
Thucydides development is lead and supported by Wakaleo Consulting,
a Sydney-based company that helps organisations optimize their software
development process. We provide consulting, training and mentoring
services in Agile Development Practices such as Continuous Integration,
Test-Driven Development, Acceptance-Test Driven Development,
Build Automation, Code Quality Practices and Automated Web Testing.