关于:页面元素定位维护和定位代码遇到修改比较麻烦
1.可以把 By.id/name/className 等等这些定位方式,封装成一个方法 By by(String by,String local):参数为定位方式和元素位置
public By by (String by,String local){
if(by.equals("id")){
return By.id(local);
}else if(by.equals("name")){
return By.name(local);
}else if(by.equals("className")){
return By.className(local);
}else{
return By.xpath(local);
}
}
public WebElement element(By by) {
WebElement ele = driver.findElement(by);
return ele;
}
那么上边的 webDriver.findElement(By.xpath(HomePage.byXpathButtonLogin)) 元素定位的代码可以更新为:
//定义变量:登录按钮的定位方式为xpath;定位值为:byXpathButtonLogin ( "//*[@id='u1']/a[7]")
String loginBy = ''xpath";
Sting LoginButtonElement = "//*[@id='u1']/a[7]";
WebElement loginButton = this.element(this.by(loginBy ,LoginButtonElement ))
//其他元素类似
//。。。。。。
以上代码,还可以进一步使用读取配置文件来封装以简化代码
具体思路就是:
将定位方式 By(String by,String local) 简化为 By(String valueElement),而具体的定位方式和定位值用配置文件来读取
public By by(String valueElement) throws Exception {
// 读取配置文件内容
ProUtil properties = new ProUtil("element.properties");
String locator = properties.getPro(valueElement);
// 定位第一个值
String locatorType = locator.split(">")[0];
// 定位第二个值
String locatorValue = locator.split(">")[1];
if (locatorType.equals("id")) {
return By.id(locatorValue);
} else if (locatorType.equals("name")) {
return By.name(locatorValue);
} else if (locatorType.equals("className")) {
return By.className(locatorValue);
} else {
return By.xpath(locatorValue);
}
}
WebElement loginButton = this.element(this.by("loginButton" ));
//locatorType 就是定位方式;locatorValue 就是定位值
//配置文件内容为:
/*
loginButton=xpath>//*[@id='u1']/a[7]
*/
还有一个工具类
public class ProUtil {
private Properties prop;
private String filePath;
public ProUtil(String filePath){
this.filePath = filePath;
this.prop = readProperties();
}
/**
*
* 读取配置文件
*/
private Properties readProperties(){
Properties properties = new Properties();
try
{
InputStream inputStream = new FileInputStream(filePath);
BufferedInputStream in = new BufferedInputStream(inputStream);
properties.load(in);
} catch (IOException e) {
e.printStackTrace();
}
return properties;
}
public String getPro(String key) throws Exception{
//element.properties文件中,第一列为元素对象,第二列为定位方式By,第三列为定位的值
if(prop.containsKey(key)){
String valueElement = prop.getProperty(key);
return valueElement;
}else{
System.out.println("你获取的key不对");
return null;
}
}
}
其实,最好是做到代码分层:元素层,操作层,业务层。
这样,全部分开之后,真正在代码里基本看不到具体的定位方式,无论页面元素怎么换,定位方式怎么变,只需要修改配置文件即可。
有错,请指出! 互相学习
工作这几年,从没遇到过你列举的那些对话场景~~~你是怎么想的呢。。。。。。/汗
现在觉得,可能是你 iPhone6 电池问题额~~~该去换电池了
网站做的很漂亮,对美还是很有追求的~~~感觉离你们的要求还差一大截距离,,,,加油吧
#9 楼 @anonymous 额,是匿名的原因
不知道在哪。。。。要是在上海,我一定去受熏陶~~~
擦擦,,,我能说我用 sql server 么~~? 你们用的都很牛逼。。。。。
这个信息有效期多久呢?有同学现在在斗鱼,是个妹子。我也想去了。。。。