自動化測試 - 封裝WebDriver的getDriver
阿新 • • 發佈:2018-08-12
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"View Codeindex="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>
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