1. 程式人生 > >自動化測試 - 封裝WebDriver的getDriver

自動化測試 - 封裝WebDriver的getDriver

main ade ESS class doc selenium tro prop ack

通過在xml中配置各瀏覽器的driver地址,以及本次運行中使用哪個瀏覽器進行測試

driverIndex代表啟動瀏覽器的序號,0是Chrome,1、2是FireFox,3是IE

driverProperties.xml

技術分享圖片
<?xml version="1.0" encoding="UTF-8"?>
<!-- 只需要修改下面的driverIndex 就可以去創建對應index的驅動 -->
<driver driverIndex="3">

    <!-- 谷歌瀏覽器配置文件 -->
    <name value="org.openqa.selenium.chrome.ChromeDriver"
index="0"> <properties> <property name="webdriver.chrome.driver" value="C:/webdriver/chromedriver.exe" /> </properties> </name> <!-- 火狐瀏覽器 對應的selenium3.x版本 的配置文件 --> <name value="org.openqa.selenium.firefox.FirefoxDriver"
seleniumVersion="3.x" index="1"> <properties> <property name="SystemProperty.BROWSER_BINARY" value="C:\Program Files\Mozilla Firefox\firefox.exe" /> <property name="webdriver.gecko.driver" value="C:/webdriver/geckodriver.exe"
/> </properties> </name> <!-- 火狐瀏覽器 對應的selenium2.x版本 的配置文件 --> <name value="org.openqa.selenium.firefox.FirefoxDriver" seleniumVersion="2.x" index="2"> <properties> <property name="SystemProperty.BROWSER_BINARY" value="C:\Program Files\Mozilla Firefox\firefox.exe" /> </properties> </name> <!-- IE瀏覽器配置文件 --> <name value="org.openqa.selenium.ie.InternetExplorerDriver" index="3"> <properties> <property name="webdriver.ie.driver" value="C:/webdriver/IEDriverServer.exe" /> </properties> <capabilities> <capability name="InternetExplorerDriver.IGNORE_ZOOM_SETTING" /> <capability name="InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS" /> </capabilities> </name> </driver>
View Code

GetDriverUtil.java

技術分享圖片
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

public class GetDriverUtil {
    private static Class clazz;
    private static Object obj ;
    
    public static void main(String[] args) throws InterruptedException, FileNotFoundException {
        WebDriver driver = getDriver();
        driver.get("http://www.baidu.com");
    
        
        Thread.sleep(10000);
        driver.quit();
    }

    public static WebDriver getDriver() throws FileNotFoundException {
        Document document = null;
        Element driverNameElement= null;
        String driverName =null;
        
        SAXReader reader = new SAXReader();
        try {
            File f = new File("./driverProperties.xml");

            InputStream in = new FileInputStream(f); 

            document = reader.read(in);
            
           //document = reader.read(GetDriverUtil.class.getResourceAsStream("./driverProperties.xml"));
        } catch (DocumentException e) {

            e.printStackTrace();
        }

        /**
         * 下面是通過解析XML,獲取到驅動的類全名
         */
        Element rootElement = document.getRootElement(); //獲取到根節點
        int index = Integer.parseInt(rootElement.attributeValue("driverIndex"));//獲取到根節點上的driverIndex並轉成int類型
        
        
        //獲取到所有"name"子節點,遍歷,找出與根節點中的driverIndex相同的,將其value屬性值獲取出來,作為類全名用於反射
        List<Element> driverNameElements = rootElement.elements("name");
        for (Element driverNameElement1 : driverNameElements) {
            int i = Integer.parseInt(driverNameElement1.attributeValue("index"));
            if (i == index) {
                driverName = driverNameElement1.attributeValue("value");//獲取到name子節點的“value”屬性值
                driverNameElement = driverNameElement1;//將該節點賦值給driverElement,後續根據它來獲得子節點
                break;
            }
            
        }
        

        /**
         * 通過類全名,反射出驅動類來
         */
        try {
            clazz = Class.forName(driverName);
        } catch (ClassNotFoundException e) {

            e.printStackTrace();
        }
        
        /**
         * 下面是解析XML中的系統參數以及能力參數
         */
        
        Element propertiesElement = driverNameElement.element("properties");
        List<Element> propertyElements = propertiesElement.elements("property");

        //設置系統參數
        for (Element property : propertyElements) {
            
            System.setProperty(property.attributeValue("name"), property.attributeValue("value"));
            
        }
        
        //設置能力(ie的話,需要設置忽略域設置等級 以及忽略頁面百分比的能力)
        Element capabilitiesElement = driverNameElement.element("capabilities");
        if (capabilitiesElement != null) {
            //創建能力對象
            DesiredCapabilities realCapabilities = new DesiredCapabilities();
            //獲得能力列表
            List<Element> capabilitiesElements = capabilitiesElement.elements("capability");
            for (Element capability : capabilitiesElements) {
                //遍歷能力列表,並給能力賦值
                realCapabilities.setCapability(capability.attributeValue("name"), true);
            }
        }
        
        
        /*
         * 通過反射,創建驅動對象
         */
        
        try {
            obj = clazz.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        
        WebDriver driver = (WebDriver) obj;
        return driver;
    }

}
View Code

參考地址:www.cnblogs.com/clairejing/p/9459466.html

自動化測試 - 封裝WebDriver的getDriver