• selenium 入门学习 (三) at 2017年08月17日
  • selenium 入门学习 (三) at 2017年08月17日

    关于:页面元素定位维护和定位代码遇到修改比较麻烦
    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 2016年12月22日

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

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

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

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

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

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

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