因为近遇到的技术问题一直没找到可行的解决办法,一直在翻看selenium的源代码,之前写测试代码的时候是拿来即用,写什么功能啊,按手动的操作步骤去转换,近日看到一个文章,又去wiki上查了查,觉得写的不错记录下来了。
  在使用selenium做UI测试的时候,往往并不是页面的每个功能我们都要测试,总有一些经常要进行回归的功能,再细致一点的说,有一些节点是我们经常 操作的,那么我从项目初期开始进行自动化测试代码编写的话,我们可以设计适应项目的一套自动化测试代码结构,基本的思路是对每一个页面都创建一个相应 的PageObject类,如果是公共的模板页面当然只建立一个可以了。这样下来相当于建立了很多基础页面一样,如果项目开发的过程中还有完整的文档 或者足够详细的用户故事,那么简直太完美了~~因为这样你可以减少很多次的IDE----Browser之间的切换、查找、测试工作,真的方便很多。但 是这个看项目而定吧,这种细致入微的文档很多团队似乎都没能做到。但是笔者还是真的希望在产品初期或项目开始的时候有完整的文档给我们这些自动化测试的人 员手中,这样可以大大加快我们自动化测试代码的编写。绕的有点远了。。。回归正题,如何做这种一个页面一个基础类的实现呢?实际的,看代码:

1 public class PageObject {
2
3     private WebElement searchTypeSng;
4     private WebElement fromCity;
5     private WebElement toCity;
6     private WebElement fromDate;
7
8     public String calDate(int nextDays) {
9         // 当前日期加 n 天之后
10         Date date = DateUtils.addDays(new Date(), nextDays);
11         // 格式化时间格式
12         return DateFormatUtils.ISO_DATE_FORMAT.format(date);
13     }
14
15     public void searchTrip(WebDriver driver,String from, String to ,String date) {
16         BaseUtils.clearAndTypeString(driver,fromCity, from);
17         BaseUtils.clearAndTypeString(driver,toCity, to);
18         BaseUtils.clearAndTypeString(driver,fromDate, date);
19         searchTypeSng.submit();
20     }
21
22 }
  测试执行:
public class UsingPageObject {
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver);
eventDriver.register(new MyWebDriverListener());
eventDriver.get("http://flight.qunar.com/");
PageObject object = PageFactory.initElements(driver, PageObject.class);
String date = object.calDate(30);
object.searchTrip(driver,"北京", "厦门", date);
}
}