selenium webdriver pageFactory元素分类
PageFactory类主要用于分离页面元素和模拟用户浏览器操作代码。下面以一个小例子来分享PageFactory的使用方法。
现在我们假设要对一个在线的BMI计算器进行页面分类。那么,在做好这道菜前,我们需要准备好必须用品。
-
Browser: Chrome
-
找个一个用于练习的在线BMI计算器:http://www.boohee.com/assessment/bmi.htm
-
Eclipse环境
-
Junit4测试框架
-
下载Chrome webdriver驱动:http://code.google.com/p/selenium/
如果你用的浏览器和我一样也是Chrome,点击右键,选择“审查元素”,浏览器将会出现类似于Firebug的定位器,Chrome有这个自带的功能,不需要安装插件。
-
如果定位的元素有ID或Name属性,就直接用它的ID或Name属性值作为变量名,如:WebElement height;
-
如果定位元素无ID和Name属性,通过@FindBy标记来注释元素的定位方式。Xpath,Css,LinkText,ClassName,Javascript等定位方式都可以,表达式和用findElement(By.xxxx())的方式一致,如:
@FindBy (css="div.test-result.size14.stress")
protected WebElement printBMI; //这个printBMI就可以随意取名了
-
在该文件的构造函数中初始化方法:PageFactory.initElements(driver, this);
BMI_MainPage.java
接下来,新建为名 BMI_Calculator.java的Junit4文件,用来模拟用户的浏览器操作。
1.创建BMI_MainPage对象
BMI_MainPage mainPage;
2. 执行测试时加载driver(driver是ChromeDriver的实例)
mainPage=new BMI_MainPage(driver);
3.用mainPage对象时不必考虑元素的具体定位方法,仅考虑BMI_MainPage类中有多少可用的自定义页面元素
mainPage.height.sendKeys("180");
还记的这个height吗?它就是在页面定位是找到的id=height或name=height。想起来了吗?如果不用pageFactory,以driver.findElement(By.id("height"))来定位元素才需要考虑是用id,name,LinkText还是xpath或者css。如何定位在BMI_MainPage已经考虑过了。
BMI_Calculator.java
运行结果:您的BMI指数为 18.5
如果输出的变量名为BMI,运行结果为:18.5
这时我们才发现,这是因为
@FindBy (css="div.test-result.size14.stress")
WebElement printBMI;
定位到的div 包含了
@FindBy (css="span.stress.red1")
protected WebElement BMI;
定位到的span。
这与 用driver.findElement(By.className("test-result size14 stress")).getText()输出的文本包含了
用driver.findElement(By.className("stress red1")).getText()输出文本等价。
页面的样式层级如下:
<div class="test-result size14 stress">您的BMI指数为
<span class="stress red1">18.5
</span>
</div>