掌握selenium初級用法後,來繼續深刻學習一下。html
WebDriver
是一個接口,它有幾種實現,分別是HtmlUnitDrvier
、FirefoxDriver
、InternetExplorerDriver
、ChromeDriver
、OperaDriver
,除了 InternetExplorerDriver
只能在Windows平臺運行,其餘WebDriver均能跨平臺。web
若是追求運行速度,HtmlUnitDriver是首選,可是它沒有運行界面,不能實時看到運行效果。若是想看到運行效果,可使用FirefoxDrvier,它會真正打開瀏覽器,在屏幕上運行,所以咱們能夠監測頁面元素的位置、CSS的值等,可是代價就是速度慢。
這裏爲了簡單,使用 HtmlUnitDriver.瀏覽器
WebDriver driver = new HtmlUnitDriver();
有了WebDriver實例,第一件事情就是打開頁面。通常的作法是調用get方法:學習
driver.get("http://www.yeetrack.com");
WebDriver會一直等待,直到頁面加載完畢(也就是"onload"方法釋放)。google
僅僅打開頁面還不夠,咱們須要的是在頁面上進行操做,進一步講就是要操做頁面中的html元素,如:spa
<input type="text" name="passwd" id="passwd-id" />
要操做頁面元素,首先要定位元素,能夠經過多種方法定位,以下:code
WebElement element; element = driver.findElement(By.id("passwd-id")); element = driver.findElement(By.name("passwd")); element = driver.findElement(By.xpath("//input[@id='passwd-id']"));
定位元素時,有兩點要注意。經過text的值來定位一個Link時,text必須精確匹配;經過xpath來定位元素時,若是匹配到多條,只會返回第一條結果,若是沒有匹配到,會拋NoSuchElementException
異常。orm
WebDriver擁有"Object-baseed" API,咱們可使用WebElement來表示全部的頁面元素。WebElement類有不少操做元素的方法,可是有些方法可能對當前元素無效,不用擔憂,WebDriver會盡力幫咱們處理。如,對一個"meta"標籤元素,咱們調用了WebElement的"SetSelected()"方法,WebDriver會拋出異常。htm
咱們定位到一個Element,接下來,咱們可能要進行一些操做,如想鍵入一些字符:接口
element.sendKeys("sone text");
固然,咱們也能夠經過"Keys"這個類,來模擬鍵盤輸入:
element.sendKeys(" and some", Keys.ARROW_DOWN);
記住,咱們向這些元素輸入的字符串,它們不會自動清空,也就是說調用"sendKeys()"方法,就是向元素中追加字符串。若是要清空一個input標籤或者textarea:
element.clear();
已經知道了如何鍵入字符串,那麼其餘元素呢?如checkboxes,如何選中;"OPTION"標籤,如何設置"setSelected()"。下面是處理Select標籤的例子:
WebElement select = driver.findElement(By.xpath("//select")); List<WebElement> allOptions = select.findElements(By.tagName("option")); for(WebElement option : allOptions) { System.out.println(String.format("Value is " %s, option.getAttribute("value"))); option.click(); }
上面的代碼,首先定位一個Select元素,而後獲取它下面的全部option,而且打印出來,執行一個click操做。明顯,若是想選中某個選中,這種方法不是最佳選擇。其實WebDrvier定義了Select類,它提供一些更快捷的方式,如"selectByIndex()"、"selectByValue()"。
表單填寫完畢,而後就是提交,咱們能夠經過點擊提交按鈕,進行提交。
driver.findElement(By.id("submit")).click();
或者,WebElement提供"submit()"這個方法,若是當前元素處在form表單中,調用該元素的submit方法,WebDriver就會自動提交這個表單;若是不處於form表單中,會拋出"NoSuchElementException"異常。
element.submit();
WebDriver容許咱們拖放元素,如將某個元素拖到其餘地方、或者將某個元素拖到其餘元素上。
WebElement element = driver.findElement(By.name("source")); WebElement element = driver.findElement(By.name("target")); (new Actions(driver)).dragAndDrop(element, target).perform();
對於如今的web應用程序來講,不多有單個window的狀況,都是嵌入了其餘的frame。WebDrvier支持使用"switchTO"方法切換到其餘window。
driver.switchTo().window.("windowName");
上面的代碼執行後,driver就會切換到windowName這個window。可是如何獲取windowName呢?來一個例子:
<a href="http://www.yeetrack.com" target="windowName">點擊打開新窗口</a>
還有,咱們能夠經過"window handle"來切換,而且還能夠遍歷當前全部的window