通过po的设计思想,我们在封装page页面元素时需要外部文件来管理元素定位方式和定位值。下面是两种定位的方式:
1.我们利用properties文件来管理,思路是在文本里编写key=value(定位方式 定位值),通过key获取对应的value,用任意符号却分隔获取定位方式和定位值。
附:
ProUtil ProU=new ProUtil("element.properties");
public WebDriver driver;
static Logger logger=Logger.getLogger(BasePage.class);
ExeclUtil exclutil=new ExeclUtil();
public BasePage(WebDriver driver) {
this.driver=driver;
}
//显示等待查找元素方法
public WebElement GetElement(String key){
WebDriverWait wait = new WebDriverWait(driver,5);
WebElement Element = wait.until(ExpectedConditions.presenceOfElementLocated(this.GetByLocal(key)));
return Element;
}
//
public List<WebElement> GetElements(String key){
List<WebElement> Element= driver.findElements(this.GetByLocal(key));
return Element;
}
public List<WebElement> Getcontainstext(String key) {
List<WebElement> Element= driver.findElements(By.xpath("//div[contains(text(),'" ProU.GetPro(key) "')]"));
return Element;
}
public List<WebElement> Getcontainsclassname(String key) {
List<WebElement> Element=driver.findElements(By.className(ProU.GetPro(key)));
return Element;
}
//通过配置文件中的key值获取对应定位方式和定位值
public By GetByLocal(String key){
ProUtil ProU=new ProUtil("element.properties");
logger.info("你的定位信息的key为" key);
String Locator=ProU.GetPro(key);
String LocatorBy=Locator.split(">")[0];
String LocatorValue=Locator.split(">")[1];
logger.info("你的定位信息的方式为" LocatorBy);
logger.info("你的定位信息的值为" LocatorValue);
if(LocatorBy.equals("id")){
return By.id(LocatorValue);
}
else if (LocatorBy.equals("name")){
return By.name(LocatorValue);
}
else if (LocatorBy.equals("className")){
return By.className(LocatorValue);
}else if (LocatorBy.equals("linktext")){
return By.linkText(LocatorValue);
}else if (LocatorBy.equals("css")){
return By.cssSelector(LocatorValue);
}else if (LocatorBy.equals("tagname")){
return By.tagName(LocatorValue);
}
else if(LocatorBy.equals("xpath")){
return By.xpath(LocatorValue);
}else {
System.out.print("你选择的定位方式:[" LocatorBy "] 不被支持!");
return null;
}
}
}
2.第二种方法的思路就是在excel中写好相关的key,元素定位方式和定位值。然后使用poi去拿到表格内对应行的数据,通过对比key是否一样,来获取对应的定位方式和定位值。
读取表格代码如下:
public static String getLocatorBy(String file,String key) throws Exception {
File src = new File(file);
String LocatorBy = null;
// 加载文件
FileInputStream fis = new FileInputStream(src);
// 加载workbook
@SuppressWarnings("resource")
XSSFWorkbook wb=new XSSFWorkbook(fis);
//加载sheet,这里我们只有一个sheet,默认是sheet1
XSSFSheet sh1= wb.getSheetAt(0);
int row=sh1.getPhysicalNumberOfRows();
for(int i=1;i<row;i ) {
String value=sh1.getRow(i).getCell(1).getStringCellValue();
if(value.equals(key)) {
LocatorBy=sh1.getRow(i).getCell(2).getStringCellValue();
break;
}else {
}
}
return LocatorBy;
}
public static String getLocatorValue(String file,String key) throws Exception {
File src = new File(file);
String LocatorValue = null;
FileInputStream fis = new FileInputStream(src);
@SuppressWarnings("resource")
XSSFWorkbook wb=new XSSFWorkbook(fis);
XSSFSheet sh1= wb.getSheetAt(0);
int row=sh1.getPhysicalNumberOfRows();
for(int i=1;i<row;i ) {
String value=sh1.getRow(i).getCell(1).getStringCellValue();
if(value.equals(key)) {
LocatorValue=sh1.getRow(i).getCell(3).getStringCellValue();
break;
}else {
}
}
return LocatorValue;
}
定位代码如下:
public By GetByLocal(String key) throws Exception{
ExeclUtil exclutil=new ExeclUtil();
logger.info("你的定位信息的key为" key);
String LocatorBy=exclutil.getLocatorBy(key);
String LocatorValue=exclutil.getLocatorValue(key);
logger.info("你的定位信息的方式为" LocatorBy);
logger.info("你的定位信息的值为" LocatorValue);
if(LocatorBy.equals("id")){
return By.id(LocatorValue);
}
else if (LocatorBy.equals("name")){
return By.name(LocatorValue);
}
else if (LocatorBy.equals("className")){
return By.className(LocatorValue);
}else if (LocatorBy.equals("linktext")){
return By.linkText(LocatorValue);
}else if (LocatorBy.equals("css")){
return By.cssSelector(LocatorValue);
}else if (LocatorBy.equals("tagname")){
return By.tagName(LocatorValue);
}
else if(LocatorBy.equals("xpath")){
return By.xpath(LocatorValue);
}else {
System.out.print("你选择的定位方式:[" LocatorBy "] 不被支持!");
return null;
}
}