關注一下UI自動化,記一記筆記。html
關於UI自動化的優缺點想來你們都有了解,優勢:解放人力(並非徹底解放),用機器(涵蓋工具、腳本等)代替人工完成測試工做,將測試用例轉化爲腳本實現,其大部分的使用階段在迴歸測試階段。缺點:難維護,依賴於前端。前端
web端混的風生水起的非Selenium莫屬,app端的Uiautomator、appium等等。java
UI自動化的核心仍是定位元素。git
瞭解一項技術,最權威的依然是官方文檔,貼傳送門:https://www.seleniumhq.org/docsgithub
Selenium工做原理:web
當下用的最多的仍是webdriver,那麼webdriver是什麼東西呢?用來幹什麼?在web端的UI自動化過程當中充當了什麼角色?chrome
webdriver是C/S架構的一套工具,client是編寫的自動化腳本代碼,server就是由webdriver.exe啓動的瀏覽器,監聽來自client發送的消息,而且對其作出響應,從而實現對瀏覽npm
器的操做。api
通俗一點webdriver就是快遞公司,代碼是快遞信息,快遞員是瀏覽器。瀏覽器
寄快遞的時候首先要明白的是要經過哪家快遞公司去承運(瀏覽器應該用chrome仍是firefox、IE),選好快遞公司以後確定要寫清楚收件人的姓名、地址、電話號碼(執行代碼中要明確請求URL、觸發時間、按鈕、輸入文本等),快遞公司會將這些信息傳達給快遞員,快遞員進行送件;其工做機制可能有些許差異,可是理解容易點,大部分都是殊途同歸。
有關webdriver和瀏覽器的不適配問題碰到不止一次有人問,下方貼了chrome和firefox的所有信息,都是百度來的,當個苦力綜合一下:
chrome瀏覽器歷史版本下載地址:https://www.chromium.org/getting-involved/dev-channel(國外版)
https://www.chromedownloads.net/(國內版)
http://npm.taobao.org/mirrors/chromedriver/
Firefox瀏覽器歷史版本下載地址:http://ftp.mozilla.org/pub/firefox/releases/
chrome驅動下載地址:http://chromedriver.storage.googleapis.com/index.html
Firefox驅動下載地址:https://github.com/mozilla/geckodriver/releases
chrome驅動與瀏覽器對應表:
chromedriver版本 | 支持的Chrome版本 |
---|---|
v2.34 | v61-63 |
v2.33 | v60-62 |
v2.32 | v59-61 |
v2.31 | v58-60 |
v2.30 | v58-60 |
v2.29 | v56-58 |
v2.28 | v55-57 |
v2.27 | v54-56 |
v2.26 | v53-55 |
v2.25 | v53-55 |
v2.24 | v52-54 |
v2.23 | v51-53 |
v2.22 | v49-52 |
v2.21 | v46-50 |
v2.20 | v43-48 |
v2.19 | v43-47 |
v2.18 | v43-46 |
v2.17 | v42-43 |
v2.13 | v42-45 |
v2.15 | v40-43 |
v2.14 | v39-42 |
v2.13 | v38-41 |
v2.12 | v36-40 |
v2.11 | v36-40 |
v2.10 | v33-36 |
v2.9 | v31-34 |
v2.8 | v30-33 |
v2.7 | v30-33 |
v2.6 | v29-32 |
v2.5 | v29-32 |
v2.4 | v29-32 |
// And now use this to visit Google driver.get("https://www.baidu.com"); // Alternatively the same thing can be done like this // driver.navigate().to("http://www.google.com"); // Find the text input element by its name WebElement element = driver.findElement(By.name("wd")); // Enter something to search for element.sendKeys("桃李不言、下自成蹊 博客園"); // Now submit the form. WebDriver will find the form for us from the element element.submit(); // Check the title of the page System.out.println("Page title is: " + driver.getTitle()); // Google's search is rendered dynamically with JavaScript. // Wait for the page to load, timeout after 10 seconds (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() { public Boolean apply(WebDriver d) { return d.getTitle().toLowerCase().startsWith("cheese!"); } }); // Should see: "cheese! - Google Search" System.out.println("Page title is: " + driver.getTitle()); //Close the browser driver.quit();
註釋寫的很明白咯!!,就不一一翻譯了。
原文代碼是訪問google,改爲了baidu,搜索內容以及By.name段更改了value。
Firefox瀏覽器運行方式:
一、增長瀏覽器安裝路徑
二、增長驅動路徑
System.setProperty("webdriver.firefox.bin", "F:\\Firefox\\firefox.exe"); System.setProperty("webdriver.gecko.driver", "E:\\driver\\geckodriver.exe"); WebDriver driver = new FirefoxDriver();
Chrome瀏覽器運行方式:
一、增長驅動路徑
System.setProperty("webdriver.chrome.driver", "E:\\driver\\chromedriver.exe"); WebDriver driver = new ChromeDriver();
該例有訪問URL方式,定位元素方式、傳值方式、一處顯示等待、打印標題、關閉方式。很直觀,不算太難吧?
ps:
瀏覽器版本與驅動版本不匹配絕對是每一個人都會遇到的問題,報錯緣由千奇百怪。
常見的:WebDriverException: unknown error: call function result missing 'value'
更換瀏覽器或者驅動版本搞定:http://npm.taobao.org/mirrors/chromedriver/