This post describes how to implement Selenium tests in Java. It is inspired from the post by
Alex Collins, with annotations. The code is available on
GitHub in the
Spring-Selenium-Test directory. Some alternative and much
lighter techniques are available to unit test a Spring MVC application. To unit test services, see
here.
Page, Configuration & Controller
We create a simple page with 'Hello World':
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Welcome !!!</title>
</head>
<body>
<h1>
Hello World !
</h1>
</body>
</html>
We keep our controller very simple:
@EnableWebMvc
@Configuration
@ComponentScan(basePackages = "com.jverstry")
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver getViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("WEB-INF/pages/");
resolver.setSuffix(".jsp");
return resolver;
}
}
and our controller too:
@Controller
public class MyController {
@RequestMapping(value = "/")
public String home() {
return "index";
}
}
For Selenium Testing
We create a configuration for testing. It provides the URL to open the application locally. The application is opened with Firefox:
@Configuration
public class TestConfig {
@Bean
public URI getSiteBase() throws URISyntaxException {
return new URI("http://localhost:10001/spring-selenium-test-1.0.0");
}
@Bean(destroyMethod="quit")
public FirefoxDriver getDrv() {
return new FirefoxDriver();
}
}
We also define an abstract class as a basis for all tests. It automatically closes Firefox after the test:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={ TestConfig.class })
public abstract class AbstractTestIT {
@Autowired
protected URI siteBase;
@Autowired
protected WebDriver drv;
{
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
drv.close();
}
});
}
}
And we implement a selenium test where we make sure our page contains 'Hello World':
public class SeleniumTestIT extends AbstractTestIT {
@Test
public void testWeSeeHelloWorld() {
drv.get(siteBase.toString());
assertTrue(drv.getPageSource().contains("Hello World"));
}
}
The maven dependencies are the same as those described in
Alex Collins's post.
Building The Application
If you build the application, it will open and close firefox automatically. The test will be successful.
No comments:
Post a Comment