WebDriver自动化测试框架详解
生活随笔
收集整理的這篇文章主要介紹了
WebDriver自动化测试框架详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
webDriver自動化測試框架詳解
一、 簡介
二、 webDriver 的 driver
三、 webDriver 使用前準備
官方還很貼心地為WebDriver提供了更主流語言的SDK。支持的語言有Java、C#、Python、Ruby、Perl、PHP、JavaScript。但我感覺這種測試相關的編程語言最好還是用腳本語言合適一點,改起來很方便,不需要時時編譯。
Js(不用js執行測試 則忽略)
//前提是先安裝好NodeJSmkdir test && cd testnpm init //這里根據提示一步步初始化一個新的NodeJS項目npm install selenium-webdriver --save //安裝WebDriver JavaScript SDK的npm依賴Java maven 依賴:
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.141.0</version></dependency>四、 webDriver 使用
控制瀏覽器
import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.openqa.selenium.ie.InternetExplorerDriver;/*** webDriver 打開各種瀏覽器* @author outman* @date 2018-11-07* */public class Demo_02 {public static void main(String[] args) {// openFirFox();// openIE();openChrome();}/*** 打開谷歌瀏覽器* */private static void openChrome() {// chromedriver.exe 下載地址 : http://chromedriver.storage.googleapis.com/index.html// 注意: 下載驅動時驅動版本要與selenium 版本一致System.setProperty("webdriver.chrome.driver","D:\\DevelopSoftware\\chromedriver_win32\\chromedriver.exe");WebDriver driver = new ChromeDriver();// 在執行操作是可能會報錯: Exception in thread "main" org.openqa.selenium.SessionNotCreatedException: session not created: Chrome version must be >= 68.0.3440.0 // 解決: 使chromedriver 版本與chrome 版本相對應 參考chromedriver與chrome 版本映射關系 https://blog.csdn.net/huilan_same/article/details/51896672driver.get("http://www.baidu.com");}/*** 打開IE瀏覽器* */ private static void openIE() {// IEDriverServer.exe 下載地址 https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver// 注意: 下載驅動時驅動版本要與selenium 版本一致// 可能報錯:Exception in thread "main" org.openqa.selenium.SessionNotCreatedException: Unexpected error launching Internet Explorer. Protected Mode settings are not the same for all zones. Enable Protected Mode must be set to the same value (enabled or disabled) for all zones.// 解決: 設置internet選項 -- 安全 -- 把所有的啟動保護模式都關閉System.setProperty("webdriver.ie.driver", "D:\\DevelopSoftware\\IEDriverServer_x64_3.141.0\\IEDriverServer.exe");WebDriver driver = new InternetExplorerDriver();driver.get("http://www.baidu.com");}/*** 打開火狐瀏覽器* @throws InterruptedException * */private static void openFirFox() throws InterruptedException {// geckodriver 下載地址: https://github.com/mozilla/geckodriverSystem.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");//讀取獲取瀏覽器二進制文件System.setProperty("webdriver.firefox.bin", "D:\\應用\\FoxMail\\firefox.exe");WebDriver dirver = new FirefoxDriver();dirver.get("http://www.baidu.com");}}定位dom元素
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;/*** 定位dom元素* * @author outman* @date 2018-11-07*/public class Demo_03 {public static void main(String[] args) {// 獲取驅動并打開瀏覽器WebDriver dirver = openFirFox();// 定位dom 元素findElement(dirver);}/*** 定位dom 元素*/private static void findElement(WebDriver dirver) {// 打開百度搜索頁dirver.get("http://www.baidu.com");// 根據ID 定位元素 搜索框WebElement kw = dirver.findElement(By.id("kw"));System.out.println("搜索框使用標簽:" + kw.getTagName());// 根據class 類名定位 搜索框WebElement kw2 = dirver.findElement(By.className("s_ipt"));System.out.println("搜索框使用標簽:" + kw2.getTagName());// 根據tagName定位 搜索框WebElement kw3 = dirver.findElement(By.tagName("input"));System.out.println("搜索框使用標簽:" + kw3.getTagName());// 根據name定位 搜索框WebElement kw4 = dirver.findElement(By.name("wd"));System.out.println("搜索框使用標簽:" + kw4.getTagName());// 根據鏈接文字定位 頁腳鏈接WebElement kw5 = dirver.findElement(By.linkText("把百度設為主頁"));System.out.println("鏈接使用標簽:" + kw5.getTagName());// 根據鏈接部分文字定位 頁腳鏈接WebElement kw6 = dirver.findElement(By.partialLinkText("百度"));System.out.println("鏈接使用標簽:" + kw6.getTagName());// 根據css選擇器定位 搜索框 css選擇器參考: http://www.w3school.com.cn/cssref/css_selectors.aspWebElement kw7 = dirver.findElement(By.cssSelector("#kw"));System.out.println("搜索框使用標簽:" + kw7.getTagName());// 根據xpath定位 搜索框 xpath語法參考: http://www.w3school.com.cn/xpath/xpath_syntax.aspWebElement kw8 = dirver.findElement(By.xpath("//input"));System.out.println("搜索框使用標簽:" + kw8.getTagName());}/*** 打開火狐瀏覽器*/private static WebDriver openFirFox() {// geckodriver 下載地址: https://github.com/mozilla/geckodriverSystem.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");// 讀取獲取瀏覽器二進制文件System.setProperty("webdriver.firefox.bin", "D:\\應用\\FoxMail\\firefox.exe");WebDriver dirver = new FirefoxDriver();return dirver;}}操作dom元素
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;/*** 操作dom* * @author outman* @date 2018-11-07*/public class Demo_04 {public static void main(String[] args) {// 打開瀏覽器WebDriver dirver = openFirFox();// 執行操作doExcult(dirver);}/*** 執行操作*/private static void doExcult(WebDriver dirver) {// 打開百度dirver.get("http://www.baidu.com");// 獲取元素 百度一下按鈕WebElement sbtn = dirver.findElement(By.cssSelector("#su"));// 獲取屬性的值System.out.println("按鈕文字:"+sbtn.getAttribute("value"));// 獲取元素 頁腳鏈接WebElement linkOne = dirver.findElement(By.cssSelector("#setf"));// 獲取文本內容System.out.println("鏈接文本:"+linkOne.getText());//連續獲取元素WebElement soutuBtn = dirver.findElement(By.className("fm"));WebElement sInput = soutuBtn.findElement(By.tagName("span")).findElement(By.name("wd"));System.out.println("搜索框使用標簽:"+sInput.getTagName());//向input輸入文字sInput.sendKeys("百度一下");System.out.println("搜索框內容:"+sInput.getAttribute("value"));//清空input 元素內容sInput.clear();System.out.println("搜索框內容:"+sInput.getAttribute("value"));//點擊按鈕sInput.sendKeys("百度一下");sbtn.click();//提交表單sInput.clear();sInput.sendKeys("百度兩下");sbtn.submit();}/*** 打開火狐瀏覽器*/private static WebDriver openFirFox() {// geckodriver 下載地址: https://github.com/mozilla/geckodriverSystem.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");// 讀取獲取瀏覽器二進制文件System.setProperty("webdriver.firefox.bin", "D:\\應用\\FoxMail\\firefox.exe");WebDriver dirver = new FirefoxDriver();return dirver;}}操作窗口
import org.openqa.selenium.Dimension;import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.Point;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;/*** 操作窗口* * @author outman* @date 2018-11-07*/public class Demo_05 {public static void main(String[] args) {// 打開瀏覽器WebDriver dirver = openFirFox();// 執行操作doExcult(dirver);}/*** 執行操作*/private static void doExcult(WebDriver dirver) {// 創建js 執行對象JavascriptExecutor jsExceut = (JavascriptExecutor) dirver;// 導航到百度dirver.get("http://www.baidu.com");// 創建多個窗口String js = "window.open(\"https://www.sogou.com\");";String js2 = "window.open(\"http://www.w3school.com.cn/xpath/xpath_syntax.asp\");";// 當只傳入js腳本時 , 默認執行該js 的對象時瀏覽器jsExceut.executeScript(js);jsExceut.executeScript(js2);// 設置窗口位置dirver.manage().window().setPosition(new Point(100, 100));// 設置窗口大小dirver.manage().window().setSize(new Dimension(500 , 200));// 最大化窗口dirver.manage().window().maximize();// 全屏dirver.manage().window().fullscreen();}/*** 打開火狐瀏覽器*/private static WebDriver openFirFox() {// geckodriver 下載地址: https://github.com/mozilla/geckodriverSystem.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");// 讀取獲取瀏覽器二進制文件System.setProperty("webdriver.firefox.bin", "D:\\應用\\FoxMail\\firefox.exe");WebDriver dirver = new FirefoxDriver();return dirver;}}在窗口或frame 之間切換
import java.util.Set;import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;/*** 在窗口或Frame 之間切換* * @author outman* @date 2018-11-07*/public class Demo_06 {public static void main(String[] args) {// 打開瀏覽器WebDriver dirver = openFirFox();// 執行操作doExecute(dirver);}/*** 執行操作* */private static void doExecute(WebDriver dirver) {JavascriptExecutor jsExecute = (JavascriptExecutor) dirver;String openWindowPre = "window.open('";String openWindowSuf = "');";String url_1 = "https://www.sogou.com";String url_2 = "http://田杰.wang";// 打開多個窗口dirver.get("http://www.baidu.com");// jsExecute.executeScript(openWindowPre+url_1+openWindowSuf);// jsExecute.executeScript(openWindowPre+url_2+openWindowSuf);// 獲取當前窗口的handleString windowHandle = dirver.getWindowHandle();System.out.println("當前瀏覽器handle:"+windowHandle);// 列出瀏覽器所有窗口的handleSet<String> windowHandles = dirver.getWindowHandles();System.out.println("所有窗口的handle:"+windowHandles);// 獲取當前頁面標題 String title = dirver.getTitle();System.out.println("當前頁面標題:"+title);// 獲取當前頁面源碼String pageSource = dirver.getPageSource();//System.out.println("當前頁面源碼:"+pageSource);// 獲取當前頁面urlString currentUrl = dirver.getCurrentUrl();System.out.println("當前頁面url:"+currentUrl);// 聚焦到頂部窗口 或 頂部frameWebDriver defaultContent = dirver.switchTo().defaultContent();// 返回到當前聚焦的元素 如果沒有聚焦的元素 則返回bodyWebElement activeElement = dirver.switchTo().activeElement();// 切換單當前活躍的提示窗 // Alert alert = dirver.switchTo().alert(); //沒有找到alert會拋異常// 切換到指定窗口WebDriver window = dirver.switchTo().window(windowHandle);// 傳入 name 或者handle// 切換frameWebDriver frame = dirver.switchTo().frame("");// 切換到父frameWebDriver parentFrame = dirver.switchTo().parentFrame();}/*** 打開火狐瀏覽器*/private static WebDriver openFirFox() {// geckodriver 下載地址: https://github.com/mozilla/geckodriverSystem.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");// 讀取獲取瀏覽器二進制文件System.setProperty("webdriver.firefox.bin", "D:\\應用\\FoxMail\\firefox.exe");WebDriver dirver = new FirefoxDriver();return dirver;}}操作alert
點擊Alert窗口中的OK:driver.switchTo().alert().accept();點擊Alert窗口中的Cancel:driver.switchTo().alert().dismiss();向Alert窗口輸入文字:driver.switchTo().alert().sendKeys(‘abcd’);操作瀏覽器的導航及地址欄
import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;/*** 操作瀏覽器的導航及地址欄* * @author outman* @date 2018-11-07*/public class Demo_07 {public static void main(String[] args) {// 打開瀏覽器WebDriver dirver = openFirFox();// 執行操作doExecute(dirver);}/*** 執行操作* */private static void doExecute(WebDriver dirver) {//導航到百度dirver.get("http://www.baidu.com");//導航到搜狗dirver.navigate().to("https://www.sogou.com");//導航后退dirver.navigate().back();//導航前進dirver.navigate().forward();//導航刷新dirver.navigate().refresh();}/*** 打開火狐瀏覽器*/private static WebDriver openFirFox() {// geckodriver 下載地址: https://github.com/mozilla/geckodriverSystem.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");// 讀取獲取瀏覽器二進制文件System.setProperty("webdriver.firefox.bin", "D:\\應用\\FoxMail\\firefox.exe");WebDriver dirver = new FirefoxDriver();return dirver;}}操作cookie
import java.util.Set;import org.openqa.selenium.Cookie;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;/*** 操作cookie*/public class Demo_08 {public static void main(String[] args) {// 打開瀏覽器WebDriver dirver = openFirFox();// 執行操作doExecute(dirver);}/*** 執行操作*/private static void doExecute(WebDriver dirver) {dirver.get("http://www.baidu.com");// 添加cookieCookie addCookie = new Cookie("outman", "1317361873dfdfv");dirver.manage().addCookie(addCookie);// 得到所有的cookieSet<Cookie> cookies = dirver.manage().getCookies();for(Cookie cookie : cookies) {System.out.println("cookie:"+cookie);}System.out.println("所有cookie:"+cookies);// 根據名字獲取cookieCookie outman = dirver.manage().getCookieNamed("outman");System.out.println("outman的cookie:"+outman);// 根據name刪除cookie dirver.manage().deleteCookieNamed("outman");Cookie outman2 = dirver.manage().getCookieNamed("outman");System.out.println("outman的cookie:"+outman2);// 刪除指定的cookiedirver.manage().deleteCookie(new Cookie("outman" , ""));Cookie outman3 = dirver.manage().getCookieNamed("outman");System.out.println("outman的cookie:"+outman3);// 刪除所有cookiedirver.manage().deleteAllCookies();Set<Cookie> cookies2 = dirver.manage().getCookies();System.out.println("所有cookie:"+cookies2);}/*** 打開火狐瀏覽器*/private static WebDriver openFirFox() {// geckodriver 下載地址: https://github.com/mozilla/geckodriverSystem.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");// 讀取獲取瀏覽器二進制文件System.setProperty("webdriver.firefox.bin", "D:\\應用\\FoxMail\\firefox.exe");WebDriver dirver = new FirefoxDriver();return dirver;}}高級用戶接口
import org.openqa.selenium.By;import org.openqa.selenium.Keys;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.openqa.selenium.interactions.Actions;/*** 高級用戶接口* * @author outman* @dete 2018-11-07*/public class Demo_09 {public static void main(String[] args) {// 打開瀏覽器WebDriver dirver = openFirFox();// 執行操作doExecute(dirver);}/*** 執行操作*/private static void doExecute(WebDriver dirver) {dirver.get("http://www.baidu.com");Actions action = new Actions(dirver);WebElement trnews = dirver.findElement(By.name("tj_trnews"));WebElement trxueshu = dirver.findElement(By.name("tj_trxueshu"));WebElement kw = dirver.findElement(By.id("kw"));// perform() 方法為整個動作完成之后的提交操作// 移動鼠標至某個dom元素 (選中頁面 新聞)// action.moveToElement(trnews).perform();// 鼠標點擊元素// action.click(trnews).perform();// 鼠標點擊并懸停// action.clickAndHold(trnews).perform();// 在指定元素上點擊右鍵// action.contextClick(trnews).perform();// 在指定元素上雙擊// action.doubleClick(trnews).perform();// 點擊并拖拽 (將資源拖到 指定元素 , 或指定位置)// action.dragAndDrop(trnews , trxueshu).perform();// action.dragAndDropBy(trnews, 100, 100).perform();;// 鍵盤按下// action.keyDown(Keys.ENTER).perform();// 鍵盤按鍵抬起// action.keyUp(Keys.ENTER).perform();// 將光標移動至指定位置// action.moveByOffset(100, 100).perform();// 暫停指定的時間for(int i = 0 ; i<10 ;i++) {kw.sendKeys(i+"");action.pause(1000).perform();}// 釋放鼠標action.release().perform();}/*** 打開火狐瀏覽器*/private static WebDriver openFirFox() {// geckodriver 下載地址: https://github.com/mozilla/geckodriverSystem.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");// 讀取獲取瀏覽器二進制文件System.setProperty("webdriver.firefox.bin", "D:\\應用\\FoxMail\\firefox.exe");WebDriver dirver = new FirefoxDriver();return dirver;}}操作等待
import java.util.concurrent.TimeUnit;import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.WebDriverWait;/*** 操作等待* @author outman* @date 2018-11-07* */ public class Demo_10 {public static void main(String[] args) {// 打開瀏覽器WebDriver dirver = openFirFox();// 執行操作doExecute(dirver);}/*** 執行操作* */private static void doExecute(WebDriver driver) {// 顯式等待driver.get("http://www.baidu.com");WebElement kw = driver.findElement(By.id("kw"));kw.sendKeys("webDriver");// 顯式等待 針對單個元素 隱式等待針對整個頁面 // 最大超時時間是10秒 // 默認每隔500毫秒掃描一次 如果檢測到結果則返回WebDriverWait wait = new WebDriverWait(driver, 10, 1);//獲取第一條結果WebElement resultOne = wait.until(new ExpectedCondition<WebElement>() {public WebElement apply(WebDriver driver) {return driver.findElement(By.id("1"));}}).findElement(By.tagName("h3")).findElement(By.tagName("a"));System.out.println(resultOne.getText());resultOne.click();//隱式等待//設置頁面加載時間最大為10秒 // driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS); // driver.get("http://www.baidu.com"); // // //定位對象設置10秒超時時間 , 10秒還定位不到則拋出異常 // driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); // WebElement kw = driver.findElement(By.id("kw")); // // //異步腳本執行超時時間設置為3秒 // driver.manage().timeouts().setScriptTimeout(1, TimeUnit.SECONDS);}/*** 打開火狐瀏覽器*/private static WebDriver openFirFox() {// geckodriver 下載地址: https://github.com/mozilla/geckodriverSystem.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");// 讀取獲取瀏覽器二進制文件System.setProperty("webdriver.firefox.bin", "D:\\應用\\FoxMail\\firefox.exe");WebDriver dirver = new FirefoxDriver();return dirver;} }執行js腳本
// 創建js 執行對象 JavascriptExecutor jsExceut = (JavascriptExecutor) dirver; // 導航到百度 dirver.get("http://www.baidu.com");// 創建多個窗口 String js = "window.open(\"https://www.sogou.com\");"; String js2 = "window.open(\"http://www.w3school.com.cn/xpath/xpath_syntax.asp\");";// 當只傳入js腳本時 , 默認執行該js 的對象時瀏覽器 jsExceut.executeScript(js); jsExceut.executeScript(js2);同時啟動多個測試
主類
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.support.ui.ExpectedCondition;import org.openqa.selenium.support.ui.WebDriverWait;/*** 同時啟動多個瀏覽器執行測試*/public class Demo_11 {public static void main(String[] args) {for (int i = 0; i < 5; i++) {new Thread(new Runnable() {public void run() {new Demo_11FirFox().doExecute();}}).start();new Thread(new Runnable() {public void run() {new Demo_11IE().doExecute();}}).start();new Thread(new Runnable() {public void run() {new Demo_11Chrome().doExecute();}}).start();}}public void doExecute(WebDriver driver) {driver.get("http://www.baidu.com");WebElement sbtn = driver.findElement(By.id("kw"));sbtn.sendKeys("webDriver");WebDriverWait wait = new WebDriverWait(driver, 10, 1);WebElement resultOne = wait.until(new ExpectedCondition<WebElement>() {public WebElement apply(WebDriver input) {return input.findElement(By.id("1"));}}).findElement(By.tagName("h3")).findElement(By.tagName("a"));// 點擊第一條resultOne.click();}}谷歌瀏覽器測試類
import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;public class Demo_11Chrome extends Demo_11 {public WebDriver driver = null;public Demo_11Chrome() {System.setProperty("webdriver.chrome.driver","D:\\DevelopSoftware\\chromedriver_win32\\chromedriver.exe");driver = new ChromeDriver();}public void doExecute() {super.doExecute(driver);}}火狐瀏覽器測試類
import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class Demo_11FirFox extends Demo_11 {private WebDriver driver = null;public Demo_11FirFox() {System.setProperty("webdriver.gecko.driver", "D:\\DevelopSoftware\\geckodriver-v0.23.0-win64\\geckodriver.exe");//讀取獲取瀏覽器二進制文件System.setProperty("webdriver.firefox.bin", "D:\\應用\\FoxMail\\firefox.exe");driver = new FirefoxDriver();}public void doExecute() {super.doExecute(driver);}}IE瀏覽器測試類
import org.openqa.selenium.WebDriver;import org.openqa.selenium.ie.InternetExplorerDriver;public class Demo_11IE extends Demo_11 {private WebDriver driver = null;public Demo_11IE() {System.setProperty("webdriver.ie.driver","D:\\DevelopSoftware\\IEDriverServer_x64_3.141.0\\IEDriverServer.exe");driver = new InternetExplorerDriver();}public void doExecute() {super.doExecute(driver);}}總結
以上是生活随笔為你收集整理的WebDriver自动化测试框架详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 提升网站性能优化
- 下一篇: Flume架构及应用