Guiceberry+Webdriver+TestNG
1. Guiceberry
Leverage Guice to achieve Dependency Injection on your JUnit tests
https://code.google.com/p/guiceberry/
GuiceBerry brings the joys of dependency injection to your test cases and test infrastructure. It leverages Guice to accomplish this. It allows you to use a composition model for the services your test needs, rather than the traditional extends MyTestCase approach.
GuiceBerry does not supplant your JUnit testing framework -- it builds on top of it (and works around it, when necessary), so you can run your tests normally, from your favorite command line or IDE environment.
简单来说,通过注入和绑定,可以利用Guiceberry实现依赖边缘化,Guiceberry是基于Google的guice框架实现的。
所以在UI的自动化中,使用Guiceberry来管理例如现在流行的webdriver以及浏览器运行环境,测试人员可以将更多的精力投入到具体的项目功能或业务的自动化测试中。
2. Guiceberry相关文档视频
Guiceberry 2.0 Slide
A walk-through video of this tutorial by Zorzella
Video:http://www.youtube.com/watch?v=yqre07YfPXQ
现在Guiceberry发布了3.3.1版本,下载地址见这里https://code.google.com/p/guiceberry/downloads/list
3. Google guice,Google用于Java开发的开放源码依赖项注入框架。它不需要您自己编写工厂,从而提供更好的测试性和模块性。
https://code.google.com/p/google-guice/
http://tech.it168.com/zt/guice/
4. Demo
Eclipse上创建一个Maven项目,添加以下依赖
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.8.7</version>
<type>jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.32.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.guiceberry</groupId>
<artifactId>guiceberry</artifactId>
<version>3.3.1</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>3.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
</dependencies>
Env class
package foo; import com.google.common.testing.TearDownAccepter;
import com.google.guiceberry.GuiceBerryModule;
import com.google.guiceberry.TestScoped;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver; public class WebDriverEnv extends AbstractModule {
@Override
protected void configure() {
install(new GuiceBerryModule());
} @Provides
@TestScoped
public WebDriver getWebDriver() {
final WebDriver driver = new FirefoxDriver();
return driver;
} }
Page class
package foo; import static org.testng.Assert.assertTrue; import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.LoadableComponent;
import com.google.inject.Inject; public class GooglePage extends LoadableComponent<GooglePage> {
@Inject
private WebDriver webdriver; @Override
protected void load() {
webdriver.get("http://www.google.com/ncr");
} @Override
protected void isLoaded() throws Error {
assertTrue((webdriver.getTitle()).contains("Google"));
} public void search(String query) {
searchField = webdriver.findElement(By.id("gbqfq"));
searchField.clear();
searchField.sendKeys(query);
searchField.submit();
} public String getSearchResult() {
return webdriver.getPageSource();
} }
Test class
package foo; import org.openqa.selenium.WebDriver;
import com.google.inject.Inject;
import org.testng.annotations.Test;
import com.google.common.testing.TearDown;
import com.google.guiceberry.testng.TestNgGuiceBerry;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import java.lang.reflect.Method; public class SearchGoogleTest {
private TearDown toTearDown;
@BeforeMethod
public void setUp(Method m) {
toTearDown = TestNgGuiceBerry.setUp(this, m,
WebDriverEnv.class);
} @AfterMethod
public void tearDown() throws Exception {
toTearDown.tearDown();
webdriver.close();
} @Inject
private WebDriver webdriver; @Inject
private GooglePage googlePage; @Test
public void testGoogleHomePageTitle() {
googlePage.load();
googlePage.isLoaded();
}
}
PS:github真是好东西,看到个更好的例子:https://github.com/abendt/uitest-webdriver-guiceberry
我们知道Webdriver可以支持IE,Firefox,Chrome等浏览器+各种操作系统组合,在Env class中专注构建各种环境,而Test class只需要指定我使用哪个浏览器就可以了,不用关心运行环境是如何配置的
Capabilities ie = DesiredCapabilities.internetExplorer();
Capabilities firefox = DesiredCapabilities.firefox();
Capabilities chrome = DesiredCapabilities.chrome(); WebDriver driver = new WebDriverBuilder()
.of(ie, firefox, chrome)
.preferHeadless()
.build();
Guiceberry+Webdriver+TestNG的更多相关文章
- linux搭建phantomjs+webdriver+testng+ant自动化工程
因为项目的原因,需要将脚本在linux环境无浏览器化去跑,那么原有的在windows系统下有浏览器化的自动化脚本场景就不适用了,这里给出linux系统下搭建phantomjs+webdriver+te ...
- selenium webdriver testng自动化测试数据驱动
selenium webdriver testng自动化测试数据驱动 selenium webdriver testng自动化测试数据驱动 一.数据驱动测试概念 数据驱动测试是相同的测试脚本使用不同的 ...
- 基于WebDriver&TestNG 实现自己的Annotation @TakeScreenshotOnFailure
相信用过Selenium WebDriver 的朋友都应该知道如何使用WebDriver API实现Take Screenshot的功能. 在这篇文章里,我主要来介绍对failed tests实现 t ...
- Selenium WebDriver TestNg Maven Eclipse java 简单实例
环境准备 前提条件Eclipse 已经安装过 TestNg ,Maven 插件 新建一个普通的java项目 点击右键 configure->convert to Maven Project 之后 ...
- Webdriver+testNG+ReportNG+Maven+SVN+Jenkins自动化测试框架的pom.xml配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- Webdriver+Testng实现测试用例失败自动截图功能
testng执行测试用例的时候,如果用例执行失败会自动截图,方便后续排查问题 1.首先定义一个截图类: package com.rrx.utils; import java.io.File;impor ...
- [Training Video - 1] [Selenium Basics] [What is Selenium IDE,RC,Webdriver, TestNG, Junit And Ant]
Selenium IDE (Only support in Firefox): - Record and Run - UI interface - User extensions - Conversi ...
- WebDriver+TestNG的一个典型例子
想让测试更加灵活,1. 可以配置使用任意支持的浏览器进行测试:2. 配置所有Google的URL:3. 配置搜索的关键字.修改后的代码: public class GoogleTest { WebDr ...
- UI自动化测试篇 :Selenium2(Webdriver)&TestNG自动化测试环境搭建
最开始学习UI自动化,用的工具是QTP10,用起来确实比较容易上手,自学了没多久,大家都说QTP过时了.这么好用的的工具怎么一下子就过时了呢?因为它的“笨重”,因为它作为商业软件带来的巨大使用成本,还 ...
随机推荐
- active在iphone上不起作用
在js中加一个空的touchstart函数 $(function(){ document.body.addEventListener('touchstart',function(){ }); 或在&l ...
- JAVA静态代码块的作用
一 般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情 况下,其他程序来调用的时候,需要使用静态方法,这种 ...
- List接口的使用方法
★List接口特点: 1.元素存储有序的集合 2.带索引的集合 3.集合中可以有重复的元素 4.常用的子类有ArrayList , LinkedList ★List接口的方法:add , rem ...
- openresty 使用lua-resty-shell 执行shell 脚本
lua-resty-shell 是一个很不错的项目,让我们可以无阻塞的执行shell命令,之间的通信 是通过socket (一般是unix socket) 环境准备 docker-compose 文件 ...
- FastAdmin 生产环境升级注意
FastAdmin 生产环境升级注意 列出 FastAdmin 实际生产中升级注意事项. 安全相关,看 FastAdmin 的资讯. 如果使用 Git 更新生产文件,注意更新后的权限. JS 修改后注 ...
- 笔记:Javascript 会提升变量声明
笔记:Javascript 会提升变量声明 Javascript 会自动提升变量声明,但不会提升变量赋值. 如下代码, 按 F12 控制器显示的是 Hello, undefined 说明只是把 b 了 ...
- 用 .gitlab-ci.yml 配置 gitlab 的任务(job)
官方说明:https://docs.gitlab.com/ee/ci/yaml/
- web 对接 platform
一个项目拆成web和platform,web不对接数据库,只调用各个platform,每个平台负责出一个httpclient的client-jar包,封装好curd方法给web端调用,入参和出参用ja ...
- mysql show master status为空值
问题 执行show master status,输出结果为空: mysql> show master status; Empty set (0.00 sec) 原因 mysql没有开启日志. 查 ...
- 中文自然语言处理工具hanlp隐马角色标注详解
本文旨在介绍如何利用HanLP训练分词模型,包括语料格式.语料预处理.训练接口.输出格式等. 目前HanLP内置的训练接口是针对一阶HMM-NGram设计的,另外附带了通用的语料加载工具,可以通过少量 ...