Since we wrote this post we didn't laze around. Check our latest announcement.
The Arquillian team is proud to announce the 2.0.0.Alpha4 release of the Graphene component!
As we are on the way to a first Beta release, we identified a need for sharing some of the recent Graphene improvements:
Highlighted Changes
- Guard Improvements and Fixes
Request Guards were polished, extended and hardened. (read more)
- Creating Page Fragments Programatically
Page Fragments can now be instantiated not only using dependency injection, but also programatically. (read more)
- PhantomJS Support
You can now fully leverage awesomness of headless testing with PhantomJS.
- Guarding Programatically Retrieved Elements
Elements retrieved programatically using WebElement#findElement(...)
or WebElement#findElements(...)
are now guarded against StaleElementReferenceException
.
- Automatic Inference of Locators
You no longer need to define a locator in simple forms – you can leverage their automatic inference from a injection point name. (read more)
- Dependency Injection of
SessionStorage
and LocalStorage
These resources are now exposed directly via @ArquillianResource
.
- Dependency Injection of Selenium Resource Parametrized by
WebElement
Selenium resources which takes WebElement
as an argument in a constructor (e.g. Select
) can be injected using FindBy
.
- Support for
FindBys
and FindBy(How, String)
-
- Improved Integration with Drone
Drone 1.2.0.Alpha2
’s new Enhancer
API allow us to integrate with Drone seamlessly.
Deprecations
- Deprecation of Old Variant of Waiting Fluent API
Graphene.element(...)
and Graphene.attribute(...)
are now deprecated and they will be removed in an upcoming releases.
- Deprecated
guardXhr
replaced by guardAjax
Not all of us are familiar with abbreviation XHR (XMLHttpRequest). In order to make the API more clear for most of Graphene users, we have deprecated guardXhr
and replaced it with guardAjax
. guardXhr
will be removed in upcoming releases.
Guard Improvements and Fixes
-
waitForHttp
When an Ajax request is followed by a relocation (HTTP request), guardXhr
or guardHttp
can’t deterministically wait for an end of a request – in these situations you can use waitForHttp
instead.
- Testing delayed requests
Guards now waits for a given time interval for a request to start and once the request is started, they wait the another interval for the request to finish.
- Bug Fixes
Guards had problems on Android with deterministic waiting for HTTP requests.
Creating Page Fragments Programatically
Till this release, the only option to create a page fragment was injecting it:
@FindBy(...)
MyComponent component;
With Alpha4 we have added the possibility to create a page fragment programatically:
public <T> T getContent(Class<T> clazz) {
return PageFragmentEnricher.createPageFragment(clazz, root);
}
@Test
public void testTabPanelSwitching() {
Panel tab3 = tabPanel.switchTo(2);
ContentOfTab content = tab3.getContent(ContentOfTab.class);
assertEquals("The tab panel was not switched to third tab correctly!", "Content of the tab 3", content.text.getText());
Panel tab1 = tabPanel.switchTo(0);
content = tab1.getContent(ContentOfTab.class);
assertEquals("The tab panel was not switched to first tab correctly!", "Content of the tab 1", content.text.getText());
}
You can find reference usage in this functional test together with an implementation of #getContent(Class<T>)
.
Automatic Inference of Locators
How many times you have written:
// look for input with a name 'firstname'
@FindBy(name = "firstname")
private WebElement firstname;
You can now simplify your tests to just
@FindBy
private WebElement firstname;
Graphene will automatically use the strategy How.ID_OR_NAME
to locate the element by its ID or name.
Since this mechanism uses the strategy pattern, you can overwrite the default strategy for your test suite and therefore find elements by e.g. their class names or even JSF component IDs.
Roadmap
This release is a maintanance release on the way to Beta1.
What is Arquillian?
Arquillian is open source software that empowers you to test JVM-based applications more effectively. Created to defend the software galaxy from bugs, Arquillian brings your test to the runtime so you can focus on testing your application's behavior rather than managing the runtime. Using Arquillian, you can develop a comprehensive suite of tests from the convenience of your IDE and run them in any IDE, build tool or continuous integration environment.
Release details
Component |
Graphene
|
Version |
2.0.0.Alpha4
view tag
|
Release date |
2013-04-12 |
Released by |
Lukas Fryc |
Compiled against |
|
Published artifacts
org.jboss.arquillian.graphene
-
org.jboss.arquillian.graphene
»
graphene-parent
pom
-
org.jboss.arquillian.graphene
»
graphene-selenium-parent
pom
-
org.jboss.arquillian.graphene
»
graphene-selenium-api
jar
javadoc
pom
-
org.jboss.arquillian.graphene
»
graphene-selenium-impl
jar
javadoc
pom
-
org.jboss.arquillian.graphene
»
graphene-selenium-drone
jar
javadoc
pom
-
org.jboss.arquillian.graphene
»
graphene-selenium
pom
-
org.jboss.arquillian.graphene
»
graphene-webdriver-parent
pom
-
org.jboss.arquillian.graphene
»
graphene-webdriver-impl
jar
javadoc
pom
-
org.jboss.arquillian.graphene
»
graphene-webdriver
pom
-
org.jboss.arquillian.graphene
»
graphene-webdriver-spi
jar
javadoc
pom
-
org.jboss.arquillian.graphene
»
arquillian-graphene
pom
-
org.jboss.arquillian.graphene
»
graphene-component-api
jar
javadoc
pom
Release notes and resolved issues
20
Q1/13: PhantomJS
- Enhancement
-
- ARQGRA-199 - Provide a way to create Page Fragments dynamically
- ARQGRA-235 - Automatically infer ID locator from field name annotated just by @FindBy
- ARQGRA-250 - Shortcut for waiting on element's attribute value
- Feature Request
-
- ARQGRA-220 - Locating elements with @FindBy(how = How.ID, using = "foobar") not working
- ARQGRA-247 - Add support for enriching @FindBys annotations
- ARQGRA-254 - Expose LocalStorage and SessionStorage enrichments directly
- ARQGRA-258 - Provide injecting classes requiring WebElement in their constructors via @FindBy annotation
- ARQGRA-259 - Provide timeout setting in fluent API
- ARQGRA-273 - Intercept WebDriver to return proxies in findElement()/findElements() methods
- ARQGRA-288 - Remove need for Drone factory wrappers
- Bug
-
- ARQGRA-257 - Guards are not working with AndroidDriver
- ARQGRA-262 - Element click with HTTP guard causes WebDriverException: ReferenceError: Graphene is not defined
- ARQGRA-266 - Waiting for presence of element defined by jQuery selector sometimes causes "IllegalStateException: JQueryPageExtension can't be installed"
- ARQGRA-272 - Introduced waitForHttp (guardXhr does not work for redirected pages)
- ARQGRA-289 - JavaScript interfaces fails on Chrome and PhantomJS
- ARQGRA-290 - testAttributeIsPresent fails on Chrome and PhantomJS
- Story
-
- Task
-
- ARQGRA-168 - Create QUnit tests for Graphene.Page.RequestGuard.js
- ARQGRA-284 - Rename guardXhr to guardAjax
- ARQGRA-287 - Deprecate Graphene.element and attribute methods
Thanks to the following list of contributors:
Jan Papoušek, Lukas Fryc, Juraj Huska, Jiri Stefek, Andreas Vallen