Selenium WebDriver高級用法

Selenium WebDriver高級用法

掌握selenium初級用法後,來繼續深刻學習一下。html

選擇合適的WebDrvier

WebDriver是一個接口,它有幾種實現,分別是HtmlUnitDrvierFirefoxDriverInternetExplorerDriverChromeDriverOperaDriver,除了 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();

切換window或者Frame

對於如今的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

繼續閱讀→

相關文章
相關標籤/搜索