Arquillian Warp 1.0.0.Alpha4 Released

Since we wrote this post we didn't laze around. Check our latest announcement.

The Arquillian team is proud to announce the 1.0.0.Alpha4 release of the Arquillian Warp component!

We have decided to release another Alpha release since it takes longer than expected to get through the issues schedule for Beta.

This release is not heavy in terms of number of fixes, but it still contain some important ones:

Highlighted Changes

EAR Deployments Support

Thanks to for the great contribution from Robert Panzer, Warp now supports EAR Deployments!

Critical Bug Fix

With this release, we’ve fixed the The response payload with serialId 4065404507533364875 was never registered issue. Not only did it cause some requests to fail, but it also made some tests non-deterministic and intermittently failing.

Road to Beta…

Since the road to the Beta is still a long walk, we are going to do more Alpha releases in timely manner. So you won’t lose touch with the latest bug fixes! (especially if you have contributed them!)

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 Arquillian Warp
Version 1.0.0.Alpha4 view tag
Release date 2013-09-10
Released by Lukas Fryc
Compiled against

Published artifacts org.jboss.arquillian.extension

  • org.jboss.arquillian.extension » arquillian-warp-bom pom
  • org.jboss.arquillian.extension » arquillian-warp-api jar javadoc pom
  • org.jboss.arquillian.extension » arquillian-warp-spi jar javadoc pom
  • org.jboss.arquillian.extension » arquillian-warp-impl jar javadoc pom
  • org.jboss.arquillian.extension » arquillian-warp-jsf jar javadoc pom

Release notes and resolved issues 4

Stabilization

Feature Request
  • ARQ-1422 - Add support for using Warp with ear deployments
  • ARQ-1457 - Upgrade to Arquillian Core 1.1 and Drone 1.2
Bug
  • ARQ-1420 - The PayloadRegistry#registerResponsePayload() is being called after the #retrieveResponsePayload() which ends up with ResponsePayloadWasNeverRegistered exception.
  • ARQ-1430 - Warp does not take superclass into account when scanning for @WarpTest

Thanks to the following list of contributors: Lukas Fryc, Robert.panzer

Graphene 2.0.0.Beta1 Released

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.Beta1 release of the Graphene component!

This is the first and probably also the last Beta release. We’ve focused on stabilization and documentation.

Highlighted Changes

Stabilization of API

In Beta1, we have stabilized the API and removed all the deprecated parts from Alpha5. The API is now considered final and there should be no more changes to it on the way to the Final release.

Getting Started Guide

Thanks to the amazing effort of Juraj Húska, we were able to rewrite the original Functional Testing using Drone guide to use Graphene 2. Even though it is targetting beginners of the Selenium WebDriver API, it will teache you best practices so you can write maintainable and efficient functional tests from day one.

Reference Documentation

The Reference Documentation was completed so that it reflects all features which are part of Graphene 2.0.

JavaDoc for API and SPI Available Online

We have finalized documentation of Java classes for API and SPI and made them available online. You can bookmark those links since they won’t change in upcoming stable Graphene releases!

A critical error with @Location was found after the release of Beta1. See ARQGRA-373 for more information. Expect a new release soon.

Final is due soon!

We are now pretty much done, and unless some serious issues or interoperability problems are identified in the community, we’ll release a candidate for Final release in a week, followed by a 2.0.0.Final shortly.

Be sure to check out the Beta release, so we can avoid hitting any regressions once we get Final!

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.Beta1 view tag
Release date 2013-09-10
Released by Lukas Fryc
Compiled against

Published artifacts org.jboss.arquillian.graphene

  • org.jboss.arquillian.graphene » graphene-parent pom
  • org.jboss.arquillian.graphene » graphene-webdriver pom
  • org.jboss.arquillian.graphene » arquillian-graphene pom
  • org.jboss.arquillian.graphene » graphene-webdriver-spi jar javadoc pom
  • org.jboss.arquillian.graphene » graphene-webdriver-api jar javadoc pom
  • org.jboss.arquillian.graphene » graphene-webdriver-impl jar javadoc pom

Release notes and resolved issues 22

Q3/13: Guides & Documentation

Enhancement
  • ARQGRA-356 - Allow @FindByJQuery to reference elements from body
Feature Request
  • ARQGRA-141 - Support running on a Java 1.5 VM
  • ARQGRA-154 - Re-enable license and checkstyle checks disabled during Alpha stage
  • ARQGRA-255 - Update documentation for Alpha3, Alpha4 and Alpha5 features
  • ARQGRA-282 - Create Graphene getting started guide on arquillian.org
Epic
  • ARQGRA-278 - Prepare Graphene for Beta-level release
Bug
  • ARQGRA-308 - Should throw exception if page fragment not instantiable
  • ARQGRA-344 - QUnit test for XHR interception fails in Chrome
Task
Sub-task

Thanks to the following list of contributors: Lukas Fryc, Juraj Huska

Arquillian Extension QUnit 1.0.0.Alpha1 Released

Since we wrote this post we didn't laze around. Check our latest announcement.

The Arquillian team is proud to announce the 1.0.0.Alpha1 release of the Arquillian Extension QUnit component!

This is the first release of the Arquillian QUnit extension which aims to automate QUnit JavaScript unit testing.

Highlighted Features

Integration with JUnit

This means that the extension integrates transparently with the JUnit testing framework and therefore can be easily used in continuous integration environments. Each QUnit test is considered to be a JUnit test. In case of failures, the failed assertions are reported as if it were a JUnit test.

Execute QUnit Test Suites using CLI or from IDE

You can execute one or more QUnit Test Suites using CLI or from your favorite IDE using the normal JUnit integration.

Getting Started

To start using the Arquillian QUnit extension, add the following dependency to your project:

pom.xml
<dependency>
    <groupId>org.jboss.arquillian.extension</groupId>
    <artifactId>arquillian-qunit</artifactId>
    <version>1.0.0.Alpha1</version>
</dependency>

Writing Arquillian QUnit test classes

To create an Arquillian QUnit test class, annotate the test class with the @RunWith(QUnitRunner.class) and @QUnitResources annotations. The @QUnitResources annotation’s value should be the path of the folder which contains all the QUnit resources and dependencies which are required for your QUnit tests execution. For each QUnit Test Suite that you would like to execute, create a method and annotate it with the @QUnitTest annotation. The annotation’s value should be the QUnit Test Suite path, relative to the @QUnitResources path. On the below example, the src folder contains all the resources required from our QUnit tests in order to be executed and our QUnit Test Suite (qunit-tests.html) is included inside the src/test/resources/qunit-assets folder.

MyTestClass.java

@RunWith(QUnitRunner.class)
@QUnitResources("src/")
public class MyTestClass {

  @QUnitTest("test/resources/qunit-assets/qunit-tests.html")
  public void myQUnitSuiteTest() {
    // empty body
  }
}

Here’s a complete example:

ArquillianQUnitTestCase.java

@RunWith(QUnitRunner.class)
@QUnitResources("src/test/resources/assets")
public class ArquillianQUnitTestCase {

    @Deployment
    public static Archive<?> createDeployment() {
        return ShrinkWrap.create(WebArchive.class, "rest-service.war")
                .addClasses(Car.class, CarService.class, CarRepository.class, JaxRsActivator.class)
                .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
    }

    @QUnitTest("tests/rest-service/qunit-tests-ajax.html")
    @InSequence(1)
    public void qunitAjaxTest() {
        // empty body - only the annotations are used
    }

    @QUnitTest("tests/generic/qunit-assertions.html")
    @InSequence(2)
    public void qunitAssertionsTest() {
        // empty body - only the annotations are used
    }
}

You might want to see some showcases:

Showcase 1 contains a sample example which deploys a REST service along with the QUnit tests.
Showcase 2 shows how to execute QUnit tests on TravisCI
Showcase 3 depicts how Arquillian Qunit Extension can be used to test JavaScript code which uses the AngularJS JavaScript MVW framework

We look forward to your feedback on this release in our community forums or the #arquillian channel on FreeNode!

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 Arquillian Extension QUnit
Version 1.0.0.Alpha1 view tag
Release date 2013-08-27
Released by Karel Piwko
Compiled against

Published artifacts org.jboss.arquillian.extension

  • org.jboss.arquillian.extension » arquillian-qunit-api jar javadoc pom
  • org.jboss.arquillian.extension » arquillian-qunit jar javadoc pom

Release notes and resolved issues 1

Initial prototype release

Feature Request
  • ARQ-591 - Create extension for running JavaScript unit tests by Drone

Thanks to the following list of contributors: Tolis Emmanouilidis, Lukas Fryc, Karel Piwko

Arquillian Drone Extension 1.2.0.Beta2 Released

Since we wrote this post we didn't laze around. Check our latest announcement.

The Arquillian team is proud to announce the 1.2.0.Beta2 release of the Arquillian Drone Extension component!

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 Arquillian Drone Extension
Version 1.2.0.Beta2 view tag
Release date 2013-09-11
Released by Karel Piwko
Compiled against

Published artifacts org.jboss.arquillian.extension

  • org.jboss.arquillian.extension » arquillian-drone-bom pom
  • org.jboss.arquillian.extension » arquillian-drone-selenium-depchain pom
  • org.jboss.arquillian.extension » arquillian-drone-webdriver-depchain pom
  • org.jboss.arquillian.extension » arquillian-drone-api jar javadoc pom
  • org.jboss.arquillian.extension » arquillian-drone-spi jar javadoc pom
  • org.jboss.arquillian.extension » arquillian-drone-configuration jar javadoc pom
  • org.jboss.arquillian.extension » arquillian-drone-impl jar javadoc pom
  • org.jboss.arquillian.extension » arquillian-drone-selenium-server jar javadoc pom
  • org.jboss.arquillian.extension » arquillian-drone-selenium jar javadoc pom
  • org.jboss.arquillian.extension » arquillian-drone-webdriver jar javadoc pom

Release notes and resolved issues 9

Component Upgrade
  • ARQ-1466 - Drone: upgrade to Core 1.1.1.Final
Enhancement
  • ARQ-1476 - Improve Drone Test Enricher loggging
Feature Request
  • ARQ-1385 - Drone: resize the PhantomJS window after the start of a test
Bug
  • ARQ-1467 - Method scoped Drones ignore other test enrichers
  • ARQ-1468 - Enable tests to pass with -Darquillian.debug=true
  • ARQ-1469 - Improve logging for AbstractWebDriverFactory
  • ARQ-1470 - Improve warning message for overriding browser
  • ARQ-1472 - The precedence for BeforeDroneInstantiated event observation in DroneInstanceCreator is set badly
  • ARQ-1475 - Enhancer does not allow access to real instance

Thanks to the following list of contributors: Karel Piwko, Stefan Miklosovic

Graphene 2.0.0.Alpha5 Released

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.Alpha5 release of the Graphene component!

The last step before Beta release brings you a lot of new features.


Highlighted Changes

Deprecations in this release

With the support of the community, we have recognized that some parts of the API needs to be enhanced to achieve better clarity, readability and consistency. The old parts are deprecated in this release, and will be removed in the upcoming Beta1 release. (list of deprecations here)

Guard Improvements and Fixes

RequestGuard interface is now exposed as an API and brings new methods for filtering the requests that should be intercepted. This is especially useful in cases where your page does asynchronously communicate with a server (using Comet/Push method) which can make your tests undeterministic – the asynchronously invoked request can interfere with a request invoked synchronously (e.g. by clicking on a button) and Graphene can’t guess which request should be observed. With the RequestGuard API you can ignore the request which you’re not interested in guarding. (JavaDoc)

Support for parallel browser sessions

The Graphene context is no longer thread-local which enables parallel browser sessions. In other words; you can control two different browsers in one test. (an example here)

Page Objects can encapsulate their location

You can easily denote the Page Objects location via the @Location annotation. When used with @InitialPage annotation as a test parameter, Graphene will load that location as a first action for the test, and will also give you the initialized page object. (an example here)

Injecting elements from HTML frames/iframes

To facilitate the tedious process of switching to and from a particular frame/iframe; you can now just use the @InFrame annotation to specify in which frame the element should be located. The details are handled by Graphene. (an example here)

Page Fragments can implement the WebElement interface

If you want to give your Page Fragments all the capabilities of the WebElement interface, without implementing them youself; you can simply add implements WebElement and make your fragment abstract. Graphene will provide you with a proxy that delegates all the WebElement method invocations to your page fragment’s @Root element.

Drone enrichers for Page Fragments and Page Objects

It is now possible to inject objects into your Page Fragments and Page Objects via the standard Arquillian enrcihment annotations: e.g. @Drone to get the browser instance, @ArquillianResource to get resources like URL, JavascriptExecutor, LocalStorage or others.

Introduction of the GrapheneElement

GrapheneElement is our way of providing you with the missing methods of the WebElement interface. GrapheneElement can be used anywhere the WebElement is used. Currently the only addition is the isPresent method, but we plan to add far more in the upcoming releases.

Introduction of the @FindByJQuery annotation

This is the replacement for the deprecated @FindBy annotation. Read more about it in the deprecations section.

Drone upgraded to 1.2.0.Beta1

For more info, please see the Drone release annoucement here.

Removed

Graphene.guardXhr()

Graphene.guardXhr() was replaced by Graphene.guardAjax().

Deprecations (will be removed in Beta1)

Our implementation of the @FindBy annotation

To achieve better extendability and to avoid errors caused by mistyped package name, we decided to deprecate our implementation of the @FindBy annotation (read more). Its purpose was solely to add support for JQuery locating strategy. This is now replaced by the @FindByJQuery annotation. The main advantage of the new approach is its extensibility. Support for our own location strategies are guaranteed via LocationStrategy interface.

Package name changes for @Page and @Root annotations
  • org.jboss.arquillian.graphene.spi.annotations.Root replaced by org.jboss.arquillian.graphene.fragment.Root
  • org.jboss.arquillian.graphene.spi.annotations.Page replaced by org.jboss.arquillian.graphene.fragment.Page
Selenium 1 support

Selenium 1 support will be removed in the upcoming Beta1 release, but you can still use Graphene 1, which is built on top of Selenium 1. (Graphene 1 docs)

Parallel browser sessions

Your test can now use more than one browser session. It might be handy for testing e.g. server push functionality. Consider the following scenario:

@Browser1 
@Drone
private WebDriver browser1;

@Browser2
@Drone
private WebDriver browser2;

public void testServerPushFromFirefoxToChromeAfterRegistration() {
    browser1.get(“http://localhost:8080/myApp”);
    browser2.get(“http://localhost:8080/myApp”);

    formFragment.registerUser(new User(“John”), browser1);
    registeredUsers.assertContains(“John”, browser2);
}

The @Browser1 and @Browser2 annotations are qualifiers, similar concept as in CDI. The settings for these browsers can be set e.g. in the arquillian.xml:

<extension qualifier="webdriver-browser1">
  <property name="browserCapabilities">firefox</property>
</extension>
<extension qualifier="webdriver-browser2">
  <property name="browserCapabilities">chrome</property>
</extension>

Page Objects location encapsulated

First thing you have to keep in mind before interacting with the page is that its loading in the browser. Once the URL of the particular page changes, you will have to change it on several places in your tests.

Graphene, therefore, encapsulates the page’s location, and provide you with a way to load the page automatically on a correct context root, before the test execution.

Consider following snippet:

@Location("register-page.html")
public class RegisterPage {
    //implementation of the page object goes here
}

@Test
public void testRegisterPage(@InitialPage RegisterPage page) {
   //Graphene automatically load MyPageObject location in the browser
   page.getInput().sendKeys(“Blah foo”);
   page.submit();
   assertFalse(page.isSubmitted());
}

You can also leverage Graphene.goTo(RegisterPage.class) method, which will use the @Location annotation value to load the correct page in the browser.

Elements from frames/iframes

If you find working with frames/iframes tedious using the WebDriver API, we have some good news for you. Graphene is now able to specify in which frame/iframe an element reside. Consider the following snippet:

@Page
@InFrame(index = 0)
private PageObject page;

@FindBy(id = "foo-bar")
@InFrame(nameOrId = "second")
private PageFragment myFragment;

You can specify the frame either by its index or its nameOrId strategy. Graphene will automatically switche to the coresponding frame when interacting with the page object and switches back after the interaction.

Roadmap

We have introduced all the features for the upcoming Graphene 2.0 release.

The Beta1 release will be pushed in a few days which will bring you some more goodies:

  • Arquillian guide
  • finished reference documentation
  • online JavaDoc documentation for Graphene API
  • removal of deprecated APIs
  • stabilization
  • usual portion of bug fixes

Be sure to remove deprecated APIs in order to stay compatible with upcoming Graphene 2.0 releases.

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.Alpha5 view tag
Release date 2013-09-03
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-api jar javadoc pom
  • org.jboss.arquillian.graphene » graphene-webdriver-spi jar javadoc pom
  • org.jboss.arquillian.graphene » graphene-webdriver-impl jar javadoc pom
  • org.jboss.arquillian.graphene » graphene-webdriver pom
  • org.jboss.arquillian.graphene » arquillian-graphene pom
  • org.jboss.arquillian.graphene » graphene-component-api jar javadoc pom

Release notes and resolved issues 32

Q3/13: SauceLabs; Context Propagation (Multiple Browsers Support); Continuous Integration

Component Upgrade
  • ARQGRA-323 - Update Arquillian Drone to 1.2, Arquillian Core to 1.1 and Selenium to 2.35
Enhancement
  • ARQGRA-236 - Made @FindBy annotation lookup mechanism extensible
  • ARQGRA-275 - Implement Guard observers which will filter out which request we want to intercept
  • ARQGRA-336 - Introduce FindByJQuery annotation
Feature Request
  • ARQGRA-72 - Support parallel browser sessions API for Selenium 2
  • ARQGRA-170 - Merge all static contexts to one (GrapheneContext)
  • ARQGRA-197 - Support for Page Objects encapsulating location
  • ARQGRA-224 - Page Fragments implementing WebElement delegate interface invocations to Root
  • ARQGRA-243 - Infer Graphene API from Impl module
  • ARQGRA-264 - Create possibility to "inject" elements from frames
  • ARQGRA-279 - Support for method Graphene.element(WebElement, By) and its condition isPresent
  • ARQGRA-291 - Provide wait until element is enabled
  • ARQGRA-296 - Provide a way for checking whether an element is present
  • ARQGRA-306 - Guards: Provide settings for customizing maximum timeout for callbacks scheduled in XHR onreadystatechange
Epic
  • ARQGRA-271 - The context should not be shared in static context, but propagated from the test as central point to the users (e.g. page fragments)
  • ARQGRA-276 - GhostDriver / PhantomJS support
  • ARQGRA-281 - Guard Improvements
  • ARQGRA-285 - Page Abstract. Improvements
  • ARQGRA-294 - Introduce an own implementation of WebElement
Bug
  • ARQGRA-274 - The request guard does timeout for delayed requests
  • ARQGRA-300 - Guard Ajax ends with timeout exception
  • ARQGRA-304 - The interceptor for handling StaleElementReferenceException is not present
  • ARQGRA-324 - ByChained doesn't work when jquerySelector is used
  • ARQGRA-327 - Graphene depends on deprecated interactions interfaces (Keyboard, Mouse, TouchScreen) removed in selenium 2.35.0
Task
  • ARQGRA-299 - Setup Graphene tests on SauceLabs
  • ARQGRA-339 - Deprecate Graphene's FindBy and How classes
Sub-task

Thanks to the following list of contributors: Lukas Fryc, Jan Papoušek, Juraj Huska, Marek Schmidt, Karel Piwko