在上篇中,大致介绍了PageObjects。其实为了对PageObjects更好的支持,webdriver中还有一个
PageFactory的概念。
There is a PageFactory in the support package that provides support for this pattern, and helps to remove some boiler-plate code from your Page Objects at the same time.
来看下,上篇中的百度搜索例子, 用PageFactory该如何实现。
- 首先修改BaiduIndexPage
|
|
可以看到这里使用了注释@FindBy, 这是一个注释类,我们来看下它的定义
|
|
我们可以知道其实FindBy注释就是实现了driver.findElement(By)
,用FindBy可以从无数findElement方法中解脱出来(如果你页面有很多元素的时候)。
- 然后要用工厂模式生成BaiduIndexPage对象
在SearchTest.java 里
将WebDriver实例和BaiduIndexPage.class传给initElements方法,该方法会更具反射生成BaiduIndexPage实例,必须注意的是,使用PageFactory,我们的页面对象必须有
一个带有WebDriver类型参数的构造方法。
This method will attempt to instantiate the class given to it, preferably using a constructor
which takes a WebDriver instance as its only argument or falling back on a no-arg constructor.
PageFactory基本需要关注的就是:
1. Findby注释
2. PageFactory.initElements
我们继续改造,
|
|
我们将PageFactory.initElements(driver, this);
放在页面类的构造函数里,这样就不需要将PageFactory暴露到TestCase中去。
|
|
下面是测试用例
|
|
改造完毕,我可以保证这个Testcase能运行的很欢。
######总结
可以看到使用PageFactory可以使页面类代码更加清晰,维护也相对简单许多。如果你也使用PageObjects的话,
不妨试试看。如果你想多了解PageFactory的话,请移步PageFactory,
一定能让你受益匪浅。