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

https://docs.google.com/presentation/d/122ckAvyqg5UQA7nUd21t8_T9606d_sL0DGWl3_acdtc/edit?pli=1#slide=id.i0

A walk-through video of this tutorial by Zorzella

Video:http://www.youtube.com/watch?v=yqre07YfPXQ

Slide:https://docs.google.com/presentation/d/1098aqrmz45rtbeA_X71rfbFa4qqjXKs8LtLVBjqP1kc/present#slide=id.i0

现在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的更多相关文章

  1. linux搭建phantomjs+webdriver+testng+ant自动化工程

    因为项目的原因,需要将脚本在linux环境无浏览器化去跑,那么原有的在windows系统下有浏览器化的自动化脚本场景就不适用了,这里给出linux系统下搭建phantomjs+webdriver+te ...

  2. selenium webdriver testng自动化测试数据驱动

    selenium webdriver testng自动化测试数据驱动 selenium webdriver testng自动化测试数据驱动 一.数据驱动测试概念 数据驱动测试是相同的测试脚本使用不同的 ...

  3. 基于WebDriver&TestNG 实现自己的Annotation @TakeScreenshotOnFailure

    相信用过Selenium WebDriver 的朋友都应该知道如何使用WebDriver API实现Take Screenshot的功能. 在这篇文章里,我主要来介绍对failed tests实现 t ...

  4. Selenium WebDriver TestNg Maven Eclipse java 简单实例

    环境准备 前提条件Eclipse 已经安装过 TestNg ,Maven 插件 新建一个普通的java项目 点击右键 configure->convert to Maven Project 之后 ...

  5. 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 ...

  6. Webdriver+Testng实现测试用例失败自动截图功能

    testng执行测试用例的时候,如果用例执行失败会自动截图,方便后续排查问题 1.首先定义一个截图类: package com.rrx.utils; import java.io.File;impor ...

  7. [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 ...

  8. WebDriver+TestNG的一个典型例子

    想让测试更加灵活,1. 可以配置使用任意支持的浏览器进行测试:2. 配置所有Google的URL:3. 配置搜索的关键字.修改后的代码: public class GoogleTest { WebDr ...

  9. UI自动化测试篇 :Selenium2(Webdriver)&TestNG自动化测试环境搭建

    最开始学习UI自动化,用的工具是QTP10,用起来确实比较容易上手,自学了没多久,大家都说QTP过时了.这么好用的的工具怎么一下子就过时了呢?因为它的“笨重”,因为它作为商业软件带来的巨大使用成本,还 ...

随机推荐

  1. Unity 3D-Canvas画布的三种模式

    Unity开发VR之Vuforia 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...

  2. Vue的新启之笔

    之前就有接触Vue这一语言,作为一个摊薄饼的我,觉得其基础性的知识体系与其他语言是相通的.且由于贵阳这一城市的地理位置的特殊性,我不得不承认想要从事软件开发这一行业,不精通一门语言不行.因为,任何一家 ...

  3. xdoj-1279(有趣的线段树--吉司机?!)

    题目链接 一 核心: f(x)=91 (x<=100) f(x)=x-10 (x>100) 那么同一区间就可能不同的操作,那么该怎么解决呢? 我门直到同一区间的数据属于同一类别的时候再进行 ...

  4. HDU 6345:子串查询(前缀和)

    子串查询 Time Limit: 3500/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Sub ...

  5. 2017.5.11 MapReduce运行机制

    和HDFS一样,MapReduce也是采用Master/Slave的架构 MapReduce1包含4个部分:Client.JobTracker.TaskTracker和Task Client 将JAR ...

  6. EasyUI 文本框回车和普通回车

    easyui 回车 $('#Destination_Code').textbox('textbox').bind('keypress', function (e) { ) { } } 普通回车 < ...

  7. 铁三测试题——权限、你是管理员吗?——WP

    权限 [题目描述]:你是管理员吗? [解题链接]:http://ctf4.shiyanbar.com/web/root/index.php 首先看题,提到“权限”,“管理员”,这就是说涉及到管理员的账 ...

  8. js获取元素得几种情况

    HTML代码 <div class="divClass" name="myClass"> <input type="password ...

  9. LeetCode - Max Area of Island

    Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...

  10. 验证远程主机SSH指纹

    转自:https://marskid.net/2018/02/05/how-to-verify-ssh-public-key-fingerprint/ 使用SSH进行远程连接新的主机的时候,经常会看到 ...