testng测试中使用PageObject模式,其中初始化元素用到了PageFactory。举个例子:
如一个页面:ProjectManagePage,该类中储存了该页面的所有元素,有基本元素,有表格元素;
1.若存储的均是基础元素,那么可以按照PageFactory初始化原理;
public class ProjectManagePage extends BasePage{
public ProjectManagePage() {
PageFactory.initElements(driver,this);
}
@FindBy(xpath="//th//button[@ng-click='beforeAdd()']")
public WebElement newAdd; //新增
}
2.若存储的有表格元素,且表格元素是通过调用其他方法得到的,那么,这里有一点需要注意:要在PageFactory初始化之后,再调用获取表格元素的方法;
【 原因:1. PageFactory会对所有的写在这里的元素进行findBy()初始化;
2. 而表格元素,是通过调用方法得到的;虽然是通过调用方法得到的表格元素,但是也依然会被PageFactory根据id/name/xpath进行初始化,所以调用方法得到的表格元素会被PageFactory初始化覆盖掉;
3. 所以,这里做个小处理:在PageFactory初始化后,再调用获取表格元素的方法,用调用方法将PageFactory初始化覆盖;】
public class ProjectManagePage extends BasePage{
public ProjectManagePage() {
PageFactory.initElements(driver,this);
//属于表格元素,要通过调用方法得到;所以在初始化之后,再进行调取方法;
pro_Name = getCell(1,3);
}
@FindBy(xpath="//th//button[@ng-click='beforeAdd()']")
public WebElement newAdd; //新增
//表格:第1行2列的值;
public WebElement pro_Name;
}