• selenium 入门学习 (三) at August 17, 2017
  • selenium 入门学习 (三) at August 17, 2017

    关于:页面元素定位维护和定位代码遇到修改比较麻烦
    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);
    }
    }
    1. findElement(By.id(“....”)),其实也可以封装
    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;
    }

    }

    }

    其实,最好是做到代码分层:元素层,操作层,业务层。
    这样,全部分开之后,真正在代码里基本看不到具体的定位方式,无论页面元素怎么换,定位方式怎么变,只需要修改配置文件即可。
    有错,请指出!互相学习

  • 工作这几年,从没遇到过你列举的那些对话场景~~~你是怎么想的呢。。。。。。/汗

  • 支付宝一 bug 描述 at December 22, 2016

    现在觉得,可能是你iPhone6电池问题额~~~该去换电池了

  • #2楼 @dfguo 我并不算测试新人了,只是离你写出来的要求。。。自我感觉相差比较多。这要求写的挺“吓人”~~~惭愧

  • 网站做的很漂亮,对美还是很有追求的~~~感觉离你们的要求还差一大截距离,,,,加油吧

  • #9楼 @anonymous 额,是匿名的原因

  • 不知道在哪。。。。要是在上海,我一定去受熏陶~~~

  • 擦擦,,,我能说我用sql server 么~~?😰 😂 你们用的都很牛逼。。。。。

  • 这个信息有效期多久呢?有同学现在在斗鱼,是个妹子。我也想去了。。。。