I've been using Arquillian and its testing framework for a few years now and absolutely love it! It's super easy to manage a server's lifecycle, deploy applications, and then test them. Drone and Graphene's extensions also make it incredibly easy to write browser-based tests without getting too down and dirty with the Selenium WebDriver API (which is a little messy).
Since I love Drone and Graphene, it would be nice to use the page abstractions/fragments on non-Java apps (sure, you can use Arquillian Cube too… but that's another post). This post will go over what's needed to run Drone and Graphene in standalone mode.
What's standalone mode again?
When writing Arquillian tests, you need to define a method annotated with @Deployment
that returns an Archive that will be deployed. Standalone mode does NOT require an archive. So, you use it… standalone!
Add Dependencies
First, add the following entries to the dependencyManagement
to your pom.xml. In case you haven't used the import scope before, you can almost think of it as inheriting another pom's dependencyManagement
. In Maven, you can have only one parent pom. But, you can import several other poms. But, importing only brings in dependencyManagement. When we declare dependencies in the next step, the versions are pulled from one of the pom imports.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-bom</artifactId>
<version>1.1.11.Final</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-drone-bom</artifactId>
<version>2.0.0.Final</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.selenium</groupId>
<artifactId>selenium-bom</artifactId>
<version>2.53.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
And in the dependencies
section, add the following:
<dependencies>
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-standalone</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.graphene</groupId>
<artifactId>graphene-webdriver</artifactId>
<version>2.1.0.CR2</version>
<type>pom</type>
<scope>test</scope>
</dependency>
</dependencies>
Add base URL to arquillian.xml
The arquillian.xml file provides configuration necessary to setup Arquillian. Since we won't have a deployment, we need to provide the base URL for our tests. The arquillian.xml file goes in the src/test/resources directory.
<arquillian>
<extension qualifier="graphene">
<property name="url">https://blog.mikesir87.io/</property>
</extension>
</arquillian>
Create the test case
Now, it's time to create the actual test case.
@RunWith(Arquillian.class)
public class BlogTest {
@Drone
private WebDriver browser;
@ArquillianResource
private URL baseUrl;
@Test
public void testTagCloud(@InitialPage HomePage homePage) {
// Add your test code here...
}
}
As is the case for non-standalone tests, the browser
and baseUrls
properties are injected by the testing framework.
Write your test
Since this is only a writeup on how to get to this point, I won't go into the actual test writing. But, I am planning on having a post soon about some of the "best practices" I've developed in regards to functional testing. So… stay tuned!