掌握selenium初級用法后,來繼續(xù)深入學(xué)習(xí)。
選擇合適的WebDrvier
WebDriver是一個接口,它有幾種實現(xiàn),分別是HtmlUnitDrvier、FirefoxDriver、InternetExplorerDriver、ChromeDriver、OperaDriver,除了 InternetExplorerDriver只能在Windows平臺運行,其他WebDriver均能跨平臺。
如果追求運行速度,HtmlUnitDriver是,但是它沒有運行界面,不能實時看到運行效果。如果想看到運行效果,可以使用FirefoxDrvier,它會真正打開瀏覽器,在屏幕上運行,因此我們可以監(jiān)測頁面元素的位置、CSS的值等,但是代價是速度慢。
這里為了簡單,使用 HtmlUnitDriver.
<code>WebDriver driver = new HtmlUnitDriver();</code>
導(dǎo)航
有了WebDriver實例,第一件事情是打開頁面。一般的做法是調(diào)用get方法:
<code>driver.get("http://www.yeetrack.com");</code>
WebDriver會一直等待,直到頁面加載完畢(也是”onload”方法釋放)。
和頁面進(jìn)行交互
僅僅打開頁面還不夠,我們需要的是在頁面上進(jìn)行操作,進(jìn)一步講是要操作頁面中的html元素,如:
<code><input type="text" name="passwd" id="passwd-id" /></code>
要操作頁面元素,首先要定位元素,可以通過多種方法定位,如下:
<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']"));</code>
定位元素時,有兩點要注意。通過text的值來定位一個Link時,text必須精確匹配;通過xpath來定位元素時,如果匹配到多條,只會返回第一條結(jié)果,如果沒有匹配到,會拋NoSuchElementException異常。
WebDriver擁有”Object-baseed” API,我們可以使用WebElement來表示所有的頁面元素。WebElement類有很多操作元素的方法,但是有些方法可能對當(dāng)前元素?zé)o效,不用擔(dān) 心,WebDriver會盡力幫我們處理。如,對一個”meta”標(biāo)簽元素,我們調(diào)用了WebElement的”SetSelected()”方 法,WebDriver會拋出異常。
我們定位到一個Element,接下來,我們可能要進(jìn)行一些操作,如想鍵入一些字符:
<code>element.sendKeys("sone text");</code>
當(dāng)然,我們也可以通過”Keys”這個類,來模擬鍵盤輸入:
<code>element.sendKeys(" and some", Keys.ARROW_DOWN);</code>
記住,我們向這些元素輸入的字符串,它們不會自動清空,也是說調(diào)用”sendKeys()”方法,是向元素中追加字符串。如果要清空一個input標(biāo)簽或者textarea:
<code>element.clear();</code>
填寫表單
已經(jīng)知道了如何鍵入字符串,那么其他元素呢?如checkboxes,如何選中;”OPTION”標(biāo)簽,如何設(shè)置”setSelected()”。下面是處理Select標(biāo)簽的例子:
<code>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();
}</code>
上面的代碼,首先定位一個Select元素,然后獲取它下面的所有option,并且打印出來,執(zhí)行一個click操作。明顯,如果想選中某個選 中,這種方法不是佳選擇。其實WebDrvier定義了Select類,它提供一些更快捷的方式, 如”selectByIndex()”、”selectByValue()”。
表單填寫完畢,然后是提交,我們可以通過點擊提交按鈕,進(jìn)行提交。
<code>driver.findElement(By.id("submit")).click();</code>
或者,WebElement提供”submit()”這個方法,如果當(dāng)前元素處在form表單中,調(diào)用該元素的submit方法,WebDriver會自動提交這個表單;如果不處于form表單中,會拋出”NoSuchElementException”異常。
<code>element.submit();</code>