UI“三重天”之selenium--封装(二)

基础示例代码:

/**
 * @author Richered
 **/
package com.sample;


import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class TestBaidu {
	public static WebDriver driver = null;
	
	public static void main(String[] args) throws InterruptedException{
		System.setProperty("webdriver.chrome.driver", "tools/chromedriver.exe");
		driver = new ChromeDriver();
		driver.manage().window().maximize();
		driver.get("https://www.baidu.com");
		Thread.sleep(2000);
		driver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("桃李不言、下自成蹊 博客园");
		Thread.sleep(5000);
//		driver.findElement(By.xpath("//*[@id=\"su\"]")).click();
		driver.close();
	}
}  

本例基本上和官方示例代码一般无二,首先是获取浏览器driver,打开浏览器,将浏览器最大化,进入baidu,等待2s,找到百度输入框并传值"桃李不言、下自成蹊 博客园",等待5s,关闭浏览器。

代码都是被写死的,例如这块不想使用google浏览器,想使用firefox浏览器或者IE浏览器呢?不想将浏览器窗口最大化呢?想进入www.bing.com呢?不想使用xpath的定位方式呢?

问题抛出来了,这样写代码的方式也着实僵硬,那么如何解决呢?--封装关键字、动作

封装

  封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是

将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。(copy百度百科)

  其实讲的通俗一点就是:封装提高了代码的重用性,不用关心具体的实现,当然,封装也是面向对象的三大特征之一。

  看看封装上方的代码是如何实现:

/**
 * @author Richered
 **/
package com.sample;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

public class KeyWord {
    public WebDriver driver;
    public KeyWord() {
        
    }
    //选择浏览器
    public void openBrowser(String browserType) {
        try {
            switch (browserType) {
            case "chrome":
                GoogleDriver chrome = new GoogleDriver("tools/chromedriver.exe");
                driver = chrome.getdriver();
                break;
            case "ff":
                FFDriver firefox = new FFDriver("F:\\Firefox\\firefox.exe", "tools/geckodriver.exe");
                driver = firefox.getdriver();
                break;
            default:
                GoogleDriver c = new GoogleDriver("tools/chromedriver.exe");
                driver = c.getdriver();
                break;
            }
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
    
    //关闭浏览器
    public void closeBrowser() {
        try {
            driver.quit();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("关闭浏览器出错!");
        }
    }
    //浏览器大小显示
    public void setWindow(){
        driver.manage().window().maximize();
    }
    
    //访问网站
    public void getURL(String url) {
        try {
            driver.get(url);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //封装name定位元素并传值
    public void inputByNameAndSubmit(String name,String content) {
        try {
            driver.findElement(By.name(name)).sendKeys(content);
            driver.findElement(By.name(name)).submit();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //封装id定位元素并传值
    public void inputById(String id, String content) {
        try {
            driver.findElement(By.id(id)).sendKeys(content);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //用xpath定位元素并传值
    public void inputByxpath(String xpath, String content) {
        try {
            driver.findElement(By.xpath(xpath)).sendKeys(content);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    /***********************************************************/
    //用id定位元素并点击
    public void clickByid(String id) {
        try {
            driver.findElement(By.id(id)).click();
        } catch (Exception e) {
            // TODO: handle exception
        }
    }    
    //用name定位元素并点击
    public void clickByname(String name) {
        try {
            driver.findElement(By.name(name)).click();
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
    //用xpath定位元素并点击
    public void clickByxpath(String xpath) {
        try {
            driver.findElement(By.xpath(xpath)).click();
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
    /***********************************************************/
    //选择点击方法
    public void clickSwitch(String method, String phase) {
        try {
            switch (method) {
            case "id":
                driver.findElement(By.id(phase)).click();
                break;
            case "classname":
                driver.findElement(By.className(phase)).click();
                break;
            case "name":
                driver.findElement(By.name(phase)).click();
                break;
            case "tagname":
                driver.findElement(By.tagName(phase)).click();
                break;
            case "linktext":
                driver.findElement(By.linkText(phase)).click();
                break;
            case "partialLinktext":
                driver.findElement(By.partialLinkText(phase)).click();
                break;
            case "xpath":
                driver.findElement(By.xpath(phase)).click();
                break;
            case "css":
                driver.findElement(By.cssSelector(phase)).click();
                break;
            default:
                driver.findElement(By.xpath(phase)).click();
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //封装强制等待
    public void halt(String time) {
        int t = 1000;
        try {
            t = Integer.parseInt(time);
            Thread.sleep(t);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
    }
}

 

注释里边写的很清楚了,此处封装了选择浏览器,关闭浏览器,访问URL,name、id、xpath的定位元素(传值)方式【当然可以增加其他的定位方式,下同】,name、id、xpath的定位元素并点击,选择点击方法,等待。

同样是上方示例代码的目的,再看实现方式:

/**
 * @author Richered
 **/
package com.sample;

public class TestBaidu {
    public static void main(String[] args) {

        KeyWord sm = new KeyWord();
        sm.openBrowser("chrome");
        sm.setWindow();
        sm.getURL("https://www.baidu.com");
        sm.halt("2000");
        sm.inputByxpath("//*[@id=\"kw\"]", "桃李不言、下自成蹊 博客园");
        sm.halt("5000");
        sm.closeBrowser();
    }
}

嗯哼,是不是代码量简洁了许多呢?选择哪个浏览器可以灵活选择;定位元素的方式被单独伶了出来,传值即可;动作也被伶了出来,当然等待方式等等关键字、动作都可以进行封装。

后续~~~~~

 

 
posted @ 2018-10-19 01:06  紫陌花间客  阅读(319)  评论(0编辑  收藏  举报