msnshow 发表于 2011-2-27 15:58:03

Watij——Java Web 测试

Watij——Java开源Web测试工具
一个非常好用的Java Web测试框架,虽然这方面也曾经在HtmlUnit、JWebUnit和HttpUnit之间犹豫过,不发现了Watij之后就决定是它了。这里翻译一下官方的Quick Start Guide,更多内容请访问官方网站(http://watij.com)。
1.下载Watij
从https://sourceforge.net/project/showfiles.php?group_id=165206下载Watij的发布版本
解压watij_X_x.x.zip
2.安装
将jniwrap.dll复制到system32目录下(通常为C:/WINDOWS/system32/)
打开你最喜爱的IDE并创建一个工程(我最喜欢的是Intellj)
将watij.jar以及lib目录下的所有jar包都加入到工程的classpath中
创建一个JUnit TestCase,并确保包含这句话“import static watij.finders.SymbolFactory.\*;”
试着编写如下示例程序
注意:在/watij_X_xx/src/java-test/watij下可以查看示例程序
Google Search Test Example
import junit.framework.TestCase;
import static watij.finders.SymbolFactory.*;

public class GoogleTest extends TestCase {
    public void testGoogleSearch() throws Exception {
      IE ie = new IE();
      ie.start("http://www.google.com");
      ie.textField(name,"q").set("XWiki");
      ie.button("Google Search").click();
      assertTrue(ie.containsText("/Java wiki engine/"));
    }
}
注意,具体方法可以查询Watij的Javadoc API文档。
使用BeanShell
在BeanShell中输入如下代码并运行
图。。。
http://img.blog.163.com/photo/gcOwl7AtT8TWPw8rqCuWqA==/4508384701974913820.jpg
再介绍些UserGuide中现有的内容
创建一个IE浏览器实例
IE ie = new IE();

启动一个IE浏览器实例
IE ie = new IE();
ie.start();

启动一个IE浏览器实例并访问Google
IE ie = new IE();
ie.start("http://www.google.com");
使用当前已经打开的IE浏览器
根据URL指定

IE ie = newIE();
ie.attach(url,"http://www.google.com")

根据标题指定

IE ie = new IE();
ie.attach(title,"Google");

IE导航
ie.goTo("http://www.mysite.com");用IE浏览器访问www.mysite.com

ie.navigate("http://www.mysite.com");功能同上

ie.forward(); 相当于浏览器中的“前进”

ie.back(); 相当与浏览器中的“后退”

窗口焦点、位置、大小以及模式的设置
ie.bringToFront(); //将窗口置于其他浏览器窗口之前
ie.focus(); //设定焦点为指定的ie窗口

ie.maximize(); //将窗口最大化,知道占满整个屏幕
ie.minimize(); //将窗口最小化
ie.restore(); //将窗口的大小设为上一次的大小。

ie.fullScreen(true); //打开窗口的全屏幕模式
ie.fullScreen(false); //禁止窗口的全屏幕模式

ie.theatreMode(true); //打开窗口的剧院(Theatre)模式
ie.theatreMode(false); //禁止窗口的剧院模式

ie.visible(false); //将窗口从桌面上隐藏起来
ie.visible(true); //恢复窗口可见

ie.left(100); /将窗口到屏幕的左边距设为100
ie.top(200); //将窗口到屏幕的上边距设为200
得到页面中name="button1"的按钮
ie.button(name,”button1”);

得到页面中name="deleteButton"的所有按钮集合
ie.buttons(name,”deleteButton”);
得到上面这个集合中的第二个元素,即页面中第二个name="deleteButton"的按钮
ie.buttons(name,”deleteButton”).get(1);
// OR
ie.buttons(name,”deleteButton”).button(1);

得到页面中name="deleteButton",value="delete"的所有按钮集合中的第三个按钮
Button button = ie.buttons(name,”deleteButton”).buttons(value,”Delete”).button(2);

得到页面中<MYTAG>的HTML元素
例如<MYTAG>My Text1</MYTAG>
ie.htmlElement(tag,”MYTAG”);

假如有
<MYTAG myattr1=”attribute1”>My Text1</MYTAG>
<MYTAG myattr2=”attribute2”>My Text2</MYTAG>
则可以通过如下方式得到第一个元素
ie.htmlElement(attribute(“myattr1”,"attribute1"));
其中htmlElement()中的参数还可以换成以下方式
tag(String tagName)
attribute(String name, String value)
index(int index)
text(String text)
name(String value)
value(String value)
caption(String value)
id(String value)
title(String value)
alt(String value)
src(String value)
action(String value)
method(String value)
url(String value)
href(String value)
xpath(String expression)

超链接
假如页面中有如下链接
<a href="http://google.com">Google</a>
则可以通过text,url和xpath三种方式得到该链接,并可以使用正则表达式作为参数,click()表示模拟点击该链接
ie.link(text,"Google").click();

ie.link(text,"/oogl/").click();

ie.link(url,"http://google.com").click();

ie.link(url,"/google.com/").click();

ie.link(xpath, "//A[@url='http://google.com']").click();

多选框
假如页面中有如下多选框
Check Me: <input name="checkme" value="1" type="checkbox">
则可以通过如下方式来实现勾选该多选框
ie.checkbox(name,"checkme").set();

ie.checkbox(value,"1").set();

ie.checkbox(xpath, "//INPUT[@name='checkme' and @value='1']").set();
还可以调用clear()来取消多选框的选中状态

单选框
假如页面中有如下单选框
Click Me: <input name="clickme" id="1" type="radio">
则可以通过如下方式来实现勾选该多选框
ie.radio(name,"clickme").set();

ie.radio(id,"1").set();

ie.radio(xpath, "//INPUT[@name='clickme' and @id='1']").set();
还可以调用clear()来取消单选框的选中状态

按钮
假如页面中有如下按钮
<input type = "submit" value = "ClickTheButton" name="b1"></input>
可以通过如下方式得到该按钮
ie.button(name, "b1").click();

ie.button(value,"ClickTheButton").click();
默认会根据按钮的value值来寻找该按钮,如
ie.button("ClickTheButton").click();

下拉列表
假如页面中有如下下拉列表
<select name = "selectme" > <option name="1">O1<option name="2">O2</select>
可以通过如下方式选中该下拉列表中的选项
//(finds the option in the select list with name 1)
ie.selectList(name, "selectme").option(name,"1").select();

//(finds the second option in the list)
ie.selectList(name, "selectme").option(index,1).select();

//(返回当前下拉列表是否可用,即disable的状态)
ie.selectList(name, "selectme").disabled();

可以使用clearSelection()方法清除下拉列表的选中状态。

图片
假如页面中有如下图片元素
<img src = images/square.jpg id=square title="square_image">
可以通过如下方式实现点击该图片
ie.image(src, "/square/").click();

ie.image(title, "square_image").hasLoaded();

ie.image(id,"square").width();

ie.image(xpath, "//IMAGE[@id='square']").click();

文本框和多行文本区域
假如页面中有如下文本框
<input name="username" type="text">
可以通过如下方式得到文本框的值,或设置其值
ie.textField(name, "username").set("myusername");

ie.textField(name, "username").value();
得到子浏览器
当当前浏览器打开一个新的浏览器窗口时,可以使用如下方法得到新的窗口
IE ie = new IE().start("www.mysite.com");
//lets click a link that causes a new window to popup
ie.link(name, "mylink").click();
//now lets get a handle on the child browser;
IE new_ie = ie.childBrowser();

dengxiaof520 发表于 2011-5-13 17:36:27

您好,想问下版主,您现在还在用Watij么?期待您的回复.

etheltim 发表于 2011-11-23 12:39:21

回复 1# msnshow

------------------版本在线吗?向您请教一下WATIJ的问题?请问WATIJ能否用于exe进程框架的吗?

anqiongdy 发表于 2011-11-26 11:34:08

不能吧进程非IE的话就用不了

ryugun 发表于 2011-12-19 12:48:34

watj 和 selenium 比较 如何呢?
页: [1]
查看完整版本: Watij——Java Web 测试