Java Selenium3 WebDriver启动火狐、Chrome、IE,Edge浏览器的方法(一)
selenium3和selenium2沒有太大的區(qū)別,就是精簡了一些不用的東西,對瀏覽器的支持更好了,比如對高版本的瀏覽器(FireFox,Chrome,Edge等)可以完美的支持,不用受限于版本的問題
下面總結(jié)一下啟動常用瀏覽器的方法
前提
1、安裝好java的環(huán)境配置
2、新建一個maven工程
? ? ?在maven的pom文件加入selenium的依賴包(版本可根據(jù)需要自行變更)? ? ?
<dependencies><!-- selenium的驅(qū)動--><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.14.0</version></dependency><dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>6.8.21</version></dependency> </dependencies>一、火狐瀏覽器
?
1、選擇對應(yīng)的Mozilla GeckoDriver,下載地址:https://github.com/mozilla/geckodriver/releases
2、把壓縮包里的exe文件放到j(luò)ava項目中,這里用0.27.0版本的,
3、火狐瀏覽器的版本>=65版本
4、啟動火狐瀏覽器
A)、方式1:直接啟動瀏覽器
public class OpenBrower {private static String browerPath=OpenBrower.class.getResource("/files").getPath();@Testpublic void openFireFox() throws IOException {System.out.println("start seleniium firefox");//設(shè)置FirefoxDriver路徑System.setProperty("webdriver.gecko.driver",browerPath+"/geckodriver.exe");//初始化firefox瀏覽器實(shí)例WebDriver driver=new FirefoxDriver();//打開一個站點(diǎn)driver.get("https://www.baidu.com/");//設(shè)置隱形等待時間driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);//窗口最大化driver.manage().window().maximize();driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);//關(guān)閉瀏覽器driver.close();} }B)、方式2:通過指定profile啟動瀏覽器
這樣啟動的好處:帶著自己配置好的瀏覽器設(shè)置;查看profile的方法如下
Win+R快捷鍵
如果不知道哪個是默認(rèn)的,點(diǎn)擊啟動firefox按鈕查看即可,也可以新建profile一個
代碼:
@Testpublic void openFireFox_default() throws Exception {System.setProperty("webdriver.gecko.driver", browerPath + "/geckodriver.exe");//啟動帶插件的火狐瀏覽器ProfilesIni pi=new ProfilesIni();//default-release用戶配置文件名FirefoxProfile profile = pi.getProfile("default-release");FirefoxOptions options = new FirefoxOptions();options.setProfile(profile);//初始化firefox瀏覽器實(shí)例WebDriver driver = new FirefoxDriver(options);//打開一個站點(diǎn)driver.get("https://www.jd.com/");//設(shè)置隱形等待時間Thread.sleep(3000);//窗口最大化driver.manage().window().maximize();Thread.sleep(3000);//關(guān)閉瀏覽器driver.close();}selenium3后之前2版本的啟動方式不一樣
二、Chrome瀏覽器
? 1、選擇對應(yīng)Google Chrome Driver 下載地址:http://chromedriver.storage.googleapis.com/index.html
? 2、把壓縮包里的exe文件放到j(luò)ava的目錄里
? 3、啟動瀏覽器
@Testpublic void openChrome() throws Exception {//System.setProperty("webdriver.chrome.driver", browerPath + "/chromedriver.exe");System.setProperty("webdriver.chrome.driver", browerPath + "/chromedriver.exe");//初始化Chrome瀏覽器實(shí)例WebDriver driver = new ChromeDriver();//打開一個站點(diǎn)driver.get("https://www.baidu.com/");// 設(shè)置隱形等待時間Thread.sleep(5000);//窗口最大化driver.manage().window().maximize();Thread.sleep(5000);//關(guān)閉瀏覽器driver.close();}三、IE瀏覽器
1、選擇對應(yīng)的IE Driver,下載地址:https://selenium-release.storage.googleapis.com/index.html
2、把壓縮包里的exe文件放到j(luò)ava的目錄里
3、啟動IE時,需要關(guān)閉如下圖4個區(qū)域的保護(hù)模式:
4、啟動瀏覽器
@Testpublic void openIE() throws Exception {System.setProperty("webdriver.ie.driver", browerPath + "/IEDriverServer.exe");//初始化瀏覽器實(shí)例WebDriver driver = new InternetExplorerDriver();//打開一個站點(diǎn)driver.get("https://www.jd.com/");// 設(shè)置隱形等待時間Thread.sleep(3000);//窗口最大化driver.manage().window().maximize();Thread.sleep(3000);//關(guān)閉瀏覽器driver.close();}四、Edge
1、選擇對應(yīng)的Edge?Driver,下載地址:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
2、把壓縮包里的exe文件放到j(luò)ava的目錄里
3、如果Edge的版本比較低,先要升級版本
4、代碼
@Testpublic void openEdge() throws Exception {System.setProperty("webdriver.edge.driver", browerPath + "/msedgedriver.exe");//初始化Chrome瀏覽器實(shí)例WebDriver driver = new EdgeDriver();//打開一個站點(diǎn)driver.get("https://www.jd.com/");// 設(shè)置隱形等待時間Thread.sleep(3000);//窗口最大化driver.manage().window().maximize();Thread.sleep(3000);//關(guān)閉瀏覽器driver.close();}備注
1、selenium1.0還是 seleniumRC的時候,需要啟動selenium-server-standalone包,用來做server。selenium RC通過server來給code和broswer建立通道,同時,該jar包包括我們用得所有的方法。
2、在新版的selenium中,即selenium2.0-webdriver以后,不需要這個selenium-server-standalone這個包了。WebDriver api 會直接和瀏覽器的native交互,現(xiàn)在我們用selenium-java.jar包來替代。
3、如果使用selenium-grid或者要在遠(yuǎn)程機(jī)器上的瀏覽器上運(yùn)行用例,那么就需要selenium-server和selenium-java配合
注:其實(shí)selenium-java就是client,他可以和本地瀏覽器直接交互(通過各個瀏覽器自身提供的driver)。同時,通過selenium-server,這個client也可以在遠(yuǎn)程機(jī)器的瀏覽器進(jìn)行交互。
使用配置文件控制瀏覽器的完整代碼如下
1、新建一個maven項目
2、pom文件添加依賴
<dependencies><!-- selenium的驅(qū)動--><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.14.0</version></dependency><dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>6.8.21</version></dependency></dependencies>創(chuàng)建工具類
1、Base類
代碼
package selenium.framework.demo.util;/*** 初始化基礎(chǔ)類*/ public class Base {//初始化InitProperties配置文件類static{new InitProperties();}public static void delay(int time) {try {Thread.sleep(time*1000);} catch (InterruptedException e) {e.printStackTrace();}} }2、InitProperties類
代碼:
package selenium.framework.demo.util;import org.testng.annotations.Test;import java.io.*; import java.util.HashMap; import java.util.Map; import java.util.Properties; import java.util.Set;/*** 初始化配置類*/ public class InitProperties {//配置文件的路徑public static final String PFILEPATH = File.separatorChar + "config" + File.separatorChar + "CONFIG.properties";private InputStreamReader fn = null;private InputStream in = null;private Properties config = new Properties();public static Map<String, String> mapproperties = new HashMap<String, String>();public InitProperties() {//構(gòu)造初始配置文件init();}/*** 初始化Property配置文件,放入系統(tǒng)屬性變量中*/private void init() {Logger.Defaultlog("初始化配置文件");try {//調(diào)用 對象的getClass()方法是獲得對象當(dāng)前的類類型in = getClass().getClassLoader().getResourceAsStream(PFILEPATH);config.load(new InputStreamReader(in, "utf-8"));System.out.println(config.getProperty("WebDriver.Browser.Location"));if (!config.isEmpty()) {Set<Object> keys = config.keySet();for (Object key : keys) {InitProperties.mapproperties.put(key.toString(), config.getProperty(key.toString()));//系統(tǒng)參數(shù)不包含指定的鍵名且配置文件的鍵值不為空if (!System.getProperties().containsKey(key.toString()) && !config.getProperty(key.toString()).isEmpty()) {//置指定鍵對值的系統(tǒng)屬性System.setProperty(key.toString(), config.getProperty(key.toString()));}}keys.clear();}} catch (IOException e) {e.printStackTrace();} finally {try {//fn.close();in.close();} catch (IOException e) {e.printStackTrace();}}}// }/*** 對外調(diào)試使用*/public static void showAllSystemProperties() {Set<String> syskeys = InitProperties.mapproperties.keySet();for (Object key : syskeys) {if (System.getProperties().containsKey(key)) {System.out.println(key.toString() + " " + System.getProperty(key.toString()));}}syskeys.clear();} }3、WebDriverPlus類
代碼:
package selenium.fromework.demo.webdriver;import org.openqa.selenium.WebDriver; import org.openqa.selenium.support.events.EventFiringWebDriver;/*** WebDriver擴(kuò)展類*/ public class WebDriverPlus extends EventFiringWebDriver{public WebDriverPlus(WebDriver driver) {super(driver);} }4、Logger類
代碼
package selenium.fromework.demo.util;import org.testng.Reporter;import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date;/*** 日志*/ public class Logger {//日期格式private static final DateFormat DATE_FORMAT=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//日志開關(guān)public static boolean isLog=true;//框架默認(rèn)日志開關(guān)public static boolean isDefault=true;//控制臺輸出開關(guān)public static boolean isToStandardOut=true;//日志格式開關(guān)public static boolean isFormat=true;//命令行信息打印等級(1-5)public static int verbose=1;/*** 日志輸出的相關(guān)信息* @param s* @param level* @param logToStandardOut*/public static void log(String s,int level,boolean logToStandardOut){if(isLog){Reporter.log(logPrefix(s),level,logToStandardOut);}}public static void log(String s){log(s,verbose,isToStandardOut);}public static void log(String s,int level){log(s,verbose,isToStandardOut);}public static void log(String s,boolean logToStandardOut){log(s,verbose,logToStandardOut);}/*** 默認(rèn)日志* @param s 日志輸出信息*/public static void Defaultlog(String s){if(isLog&&isDefault){Reporter.log(logPrefix(s),verbose,isToStandardOut);}}/*** 日志前綴* @param s* @return*/private static String logPrefix(String s) {Date logtime = new Date();if(isFormat) {return "[" + System.getProperty("Project.Name", "liang") + " "+ DATE_FORMAT.format(logtime) + "] " + s;}return s;}/*** 對日志開關(guān)的操作*/public static void setLog(){//獲得properties 配置文件Logger的值,如果是falseif(System.getProperty("Logger","true").equalsIgnoreCase("false")){//關(guān)閉日志開關(guān)Logger.isLog=false;}//Logger.StandardOut的值,如果是trueif (System.getProperty("Logger.StandardOut", "false").equalsIgnoreCase("true")) {//控制臺輸出開關(guān)打開Logger.isToStandardOut = true;}//如果Logger.FrameWorkOut的值是falseif (System.getProperty("Logger.FrameWorkOut", "true").equalsIgnoreCase("false")) {//框架默認(rèn)日志開關(guān)關(guān)閉Logger.isDefault = false;}//如果Logger.Format的值為falseif (System.getProperty("Logger.Format", "true").equalsIgnoreCase("false")) {//日志格式開關(guān)關(guān)閉Logger.isFormat = false;}}}5、DriverBase類
代碼:
package selenium.framework.demo.webdriver;import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.ie.InternetExplorerDriver; import selenium.framework.demo.util.Base; import selenium.framework.demo.util.InitProperties; import selenium.framework.demo.util.Logger;import java.util.Set; import java.util.concurrent.TimeUnit;/*** 驅(qū)動基礎(chǔ)類*/ public class DriverBase extends Base{private static WebDriver dr=null;public static WebDriverPlus driver=null;//瀏覽器名稱public static String browser=null;//設(shè)置的等待時間 是針對全局設(shè)置public static int implicitlyWait = 30; //隱式等待時間:秒,針對Driver 每次執(zhí)行命令的 最長執(zhí)行時間也可以理解為超時時間public static int webDriverWait = 30;//顯示等待時間:秒,要等到某個元素的出現(xiàn),等不到就一直等直到超時public static void launch(){//獲取配置文件中的WebDriver.Browser的值browser = System.getProperty("WebDriver.Browser");//獲取配置文件中的WebDriver.Browser.Location的值String browserLocation = System.getProperty("WebDriver.Browser.Location");/*Set<String> strings = InitProperties.mapproperties.keySet();for (String string : strings) {System.out.println("=================="+string+"==================");}*/if (browser.equalsIgnoreCase("Firefox")) {Logger.log("打開Firefox瀏覽器");if (browserLocation != null && !browserLocation.isEmpty()) {//System.setProperty("webdriver.firefox.bin", browserLocation);System.setProperty("webdriver.gecko.driver", browserLocation);}dr = new FirefoxDriver();} else if (browser.equalsIgnoreCase("Chrome")) {Logger.log("打開Chrome瀏覽器");if (browserLocation != null && !browserLocation.isEmpty()) {System.setProperty("webdriver.chrome.driver", browserLocation);}dr = new ChromeDriver();}else if(browser.equalsIgnoreCase("Edge")){Logger.log("打開Edge瀏覽器");if (browserLocation != null && !browserLocation.isEmpty()) {System.setProperty("webdriver.Edge.driver", browserLocation);}dr = new InternetExplorerDriver();} else{Logger.log("打開IE瀏覽器");if (browserLocation != null && !browserLocation.isEmpty()) {System.setProperty("webdriver.ie.driver", browserLocation);}dr = new EdgeDriver();}driver = new WebDriverPlus(dr);//獲取配置文件WebDriver.ImplicitlyWait的值并賦值給implicitlyWaitimplicitlyWait = Integer.parseInt(System.getProperty("WebDriver.ImplicitlyWait").trim());//獲取配置文件WebDriver.WebDriverWait的值并賦值給webDriverWaitwebDriverWait = Integer.parseInt(System.getProperty("WebDriver.WebDriverWait").trim());Logger.log("設(shè)置全局顯示等待:" + implicitlyWait);//設(shè)置超時時間driver.manage().timeouts().implicitlyWait(implicitlyWait, TimeUnit.SECONDS);//窗口最大化driver.manage().window().maximize();} }顯式等待
? ? ?顯式等待,就是明確的要等到某個元素的出現(xiàn)或者是某個元素的可點(diǎn)擊等條件,等不到,就一直等,除非在規(guī)定的時間之內(nèi)都沒找到,那么就跳出Exception.拋出異常。這樣就通過回調(diào)函數(shù),直接獲得了這個WebElement.也就是頁面元素.
隱式等待
? ? ? ?隱式等待是針對Driver 每次執(zhí)行命令的 最長執(zhí)行時間也可以理解為超時時間。WebDriver會進(jìn)行一個隱式等待,但參數(shù)只有時間,這就導(dǎo)致我需要什么元素出現(xiàn),我不一定能等到它,得不到某個元素,就延遲一下...
創(chuàng)建測試類
1、clear工具類并install
?
因?yàn)闇y試類要依賴工具類,所以必須要install才能是否
2、新建一個maven項目selenium.framework.demo
pom文件
<dependencies><dependency><groupId>selenium</groupId><artifactId>selenium.framework</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>3、創(chuàng)建配置文件Config.properties文件
############################################################ # WebDriver Configure ############################################################ # (Firefox, Chrome or IE) WebDriver.Browser=Firefox WebDriver.Browser.Location=files\\geckodriver.exe WebDriver.ImplicitlyWait=30 WebDriver.WebDriverWait=30############################################################ # Log configure ############################################################ #日志開關(guān) Logger = true #日志格式開關(guān) Logger.Format = true #框架默認(rèn)日志開關(guān) Logger.FrameWorkOut = false #控制臺輸出開關(guān) Logger.StandardOut = true4、瀏覽器驅(qū)動
5、瀏覽器工具啟動類
package selenium.framework.test.util;import org.testng.annotations.AfterClass; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeTest; import selenium.fromework.demo.webdriver.DriverBase;/*** 瀏覽器工具啟動類*/ public class BrowerBase extends DriverBase{@BeforeTestpublic void beforeTestBase() {launch();}@AfterTest(alwaysRun=true)public void afterTest() {quit();}@BeforeClasspublic void beforeBaseClass() {}@AfterClass(alwaysRun=true)public void afterBaseClass() {}/*** quit browser*/private void quit() {if (driver != null) {driver.quit();driver = null;}} }5、TestOpenBrowser類
package selenium.framework.demo.test;import org.testng.annotations.Test; import selenium.framework.demo.util.BrowserBase; import selenium.framework.demo.util.Logger;public class TestOpenBrowser extends BrowserBase {@Testpublic void openBrowser(){Logger.log("打開" + browser + "瀏覽器");Logger.log("進(jìn)入百度頁面");String baseUrl = "https://www.baidu.com/";driver.get(baseUrl);delay(2);Logger.log("關(guān)閉" + browser + "瀏覽器");} }完整的項目結(jié)構(gòu)
總結(jié)
以上是生活随笔為你收集整理的Java Selenium3 WebDriver启动火狐、Chrome、IE,Edge浏览器的方法(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 预测分析·民宿价格预测baseline
- 下一篇: 聚观早报 | 茅台市值超过腾讯位列第一;