Update: Fixed camelCase in localRepository tag.
It's been a busy week, with JavaZone and some exiting things going on in my project at the same time.
I'll get straight to the point and post an exampe app that will solve the problems from the previous post.
I started off with a maven archetype create webapp.
I added configuration of the Jetty plugin (note that this isn't really necessary to get the rest working, but is handy for testing out the webapp with mvn jetty:run).
I put the web-test running in its own profile, so it won't be ran with each mvn install. This is to underline the fact that you probably don't want the web-tests to be run each time you build the app. Web tests take too much time and should be done by your CI system.
So, all the details of configuring maven for running Selenese tests are inside the with id "web-test". I've done a few other modifications as well, adding a couple of snapshot repos, and the web tests of course. I added a simple little test that verifies that it can find the text "Hello World!" when browsing to localhost:8080/maven-selenium-example.
Download
https://github.com/tfnico/maven-selenium-example
Requirements
This will most likely not be necessary on a non-windows system.
Instructions
Be aware that since there are plenty of snapshot dependencies in this configuration, any of them could be upgraded any day and (if the developers have done a poor job) break the web-test configuration. If you want a 100% stable integration test environment you should specify version number on each plugin (especially cargo-maven2-plugin, and change the selenium-maven-plugin to non-snapshot).
It's been a busy week, with JavaZone and some exiting things going on in my project at the same time.
I'll get straight to the point and post an exampe app that will solve the problems from the previous post.
I started off with a maven archetype create webapp.
I added configuration of the Jetty plugin (note that this isn't really necessary to get the rest working, but is handy for testing out the webapp with mvn jetty:run).
I put the web-test running in its own profile, so it won't be ran with each mvn install. This is to underline the fact that you probably don't want the web-tests to be run each time you build the app. Web tests take too much time and should be done by your CI system.
So, all the details of configuring maven for running Selenese tests are inside the
Download
https://github.com/tfnico/maven-selenium-example
Requirements
- Firefox 2.0 or later installed
- Maven 2.0.7 (or thereabouts) installed
- M2_REPO (environment variable) pointed to a folder without spaces *
<settings> <localRepository>c:\m2-repo</localRepository> .... </settings>
This will most likely not be necessary on a non-windows system.
Instructions
- Unzip
- Commando-line into \maven-selenium-example
- Type mvn install -Pweb-test
- Wait a while for all the dependencies to download
- Build successful!
Be aware that since there are plenty of snapshot dependencies in this configuration, any of them could be upgraded any day and (if the developers have done a poor job) break the web-test configuration. If you want a 100% stable integration test environment you should specify version number on each plugin (especially cargo-maven2-plugin, and change the selenium-maven-plugin to non-snapshot).
use localRepository with upper case R. Use of lower case gives massive errors :)
ReplyDeleteVery nice example. Im trying to run your example but get this
ReplyDelete[DEBUG] (s) project = MavenProject: no.objectware.examples.selenium:maven-selenium-example:1.0-SNAPSHOT @ C:\prosjekt\
tmp\maven-selenium-example\maven-selenium-example\pom.xml
[DEBUG] (s) skip = false
[DEBUG] (s) slowResources = false
[DEBUG] (s) startURL = http://localhost:8080/maven-selenium-example/
[DEBUG] (s) suite = C:\prosjekt\tmp\maven-selenium-example\maven-selenium-example\src\test\selenium\TestSuite.html
...
[DEBUG] +Datatype fileScanner org.codehaus.groovy.ant.FileScanner
[DEBUG] +User datatype: fileScanner org.codehaus.groovy.ant.FileScanner
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] org.openqa.selenium.server.SeleniumServer
[INFO] ------------------------------------------------------------------------
[DEBUG] Trace
java.lang.NoClassDefFoundError: org.openqa.selenium.server.SeleniumServer
at org.codehaus.mojo.selenium.SeleneseMojo.class$(SeleneseMojo.groovy)
at org.codehaus.mojo.selenium.SeleneseMojo.execute(SeleneseMojo.groovy:140)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:447)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:539)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:48
0)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:459)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.jav
a:311)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:278)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:143)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:333)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:126)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:282)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
never mind. Proxy in our network stops any .jars. They are evil...
ReplyDeleteHave you discovered a way to use this against an https server where you need to test a login and password and then text on the page indicating successful log in?
ReplyDeleteIf you could be kind enough to email your solution to this problem, it would save me hours of work. Thanks.
Email: rmolumby@carlsonwagonlit.com
I did get it to work as soon as I changed the version to 1.0-beta-3 for
ReplyDelete...
<profiles>
<profile>
<id>web-test</id>
<build>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>selenium-maven-plugin</artifactId>
<!--version>1.0-beta-2-SNAPSHOT</version-->
<version>1.0-beta-3</version>
...
Ah, glad you got it working :)
ReplyDeleteI've since updated the example in the svn repo in work. Will try to move the updated example into a puclic code repo.