第三章 Webdriver Java API簡介(上)

------Web自動化測試之Webdriver+TestNG--從零到熟練(系列)javascript

WebDriver也就是業界通稱的Selenium 2.0,是頁面自動化的通用框架,支持java, python, php等多種語言。也是其餘自動化,如手機自動化化的基礎。官方出了一個幫助文檔,詳細講解了Webdriver Java API的相關操做,本章咱們就不一一講述了,把經常使用的給講解一下,爲後續的章節作準備。php

3.1 打開瀏覽器

   在對頁面進行測試以前,咱們須要在特定的瀏覽器中打開咱們要測試的頁面。Webdriver支持多種瀏覽器,經常使用的打開方法以下:css

(1)打開firefox瀏覽器:java

WebDriver driver=new FirefoxDriver();python

(2)打開IE瀏覽器:編程

WebDriver driver=new InternetExplorerDriver();瀏覽器

(3)打開HtmlUnit瀏覽器:框架

WebDriver driver=new HtmlUnitDriver()工具

說明:運行這段代碼,能夠打開對應的瀏覽器,firefox和IE瀏覽器自沒必要說,很經常使用的兩個瀏覽器。至於HtmlUnitDriver這個你們就不常見了,這是一個內存級運行的驅動瀏覽器。測試用例在內存中運行,不會打開頁面,運行速度比較快,可是也有缺點若是程序出錯,不能直觀地看到錯誤的現象。對javascript支持很差,若是頁面包含太多的JS,常常會捕捉不到頁面元素。測試

(4)打開要測試的URL

Driver.get(URL);

3.2 頁面元素定位方法

   要完成對頁面元素進行操做,首先要先定位到這個頁面元素,一般經常使用的頁面元素定位方法有以下幾種:

(1)經過ID定位

例如:頁面有以下元素:

要對這個元素進行定位,則能夠利用下面的語句:

WebElement element=driver.findElement(By.id(「password」));

(2)經過name定位

例如:頁面元素以下:

要定位這個元素,可使用下面的語句:

WebElement element=driver.findElement(By.name(「username」));

(3)經過xpath定位

例如:有以下的頁面元素:

 

 

 

要定位img標籤,則須要下面的Xpath定位語句:

WebElement element=driver.findElement(By.xpath(「//a[@class=’sitelogo’]/img」));

(4)經過class name定位

例如:仍是個這頁面元素:

 

  

 

不過咱們此時要定位的是a標籤,則定位語句以下:

WebElement element=driver.findElement(By.className(「sitelogo」));

(5)經過linkText定位

例如:有頁面元素以下:

www.zhongchou.com」> 籌小錢辦大事

則定位這個元素的時候,咱們能夠用如下方法:

WebElement element=driver.findElement(By.linkText(「籌小錢辦大事」));

(6)經過Css定位

例如,有以下頁面元素:

則定位這個元素的時候,咱們能夠用如下方法:

WebElement element=driver.findElement(By.cssSelector(「input#kw.s_ipt」));

   經常使用的定位方法就這六種,不過經過一個頁面元素可使用不止一種定位方法,因此此時咱們就要選擇合適的定位方法來編寫咱們的測試用例。

3.3 頁面經常使用元素操做

   雖然在一個頁面上的元素不少,但是咱們經常使用的操做就那麼幾個元素,操做方法也是有限的,下面咱們介紹一下經常使用元素的操做,咱們之後的測試用例就是由這些兒操做組成的。

(1)   輸入框(input

A,查找輸入框元素:

WebElement element=driver.findElement(By.id(「password」));

B,向輸入框內輸入內容:

element.sendKeys(「HelloWorld!」);

C,清空輸入框內容:

element.clear();

D,獲取輸入框中的內容:

element.getText();

(2)按鈕(button)

A,定位按鈕

Webdriver savebtn=driver.findElement(By.id(「save」));

B,點擊按鈕:

savebtn.click();

C,判斷按鈕是否可點擊:

savebtn.isEnabled()

(3)下拉選擇框(Select)

A,定位下拉選擇框:

Select select=new Select(driver.findElement(By.id(「select」)));

B,選擇對應的選擇項:

select.selectByVisibleText(「item1」);

or

select.selectByValue(「item1」);

C,不選擇對應的項

select.deselectAll();

select.deselectByValue(「item1」);

select.deselectByVisibleText(「item1」);

D,獲取選擇項的值

select.getAllSelectedOptions();

select.getFirstSelectedOptiion();

(4)單選按鈕(Radio Button)

A,定位單選框元素

WebElement sexsel=driver.findElement(By.id(「sex」));

B,選擇單選按鈕

sexsel.click();

C,清空某個單選項:

sexsel.clear();

D,判斷選項目是否已選中:

sexsel.isSelected();

(5)複選按鈕

A,定位單選框元素

WebElement city=driver.findElement(By.id(「city」));

B,選擇複選框

city.click();

C,清空某個選項:

city.clear(); or  city.click();

D,判斷選項目是否已選中:

city.isSelected();

(6)窗口與Frame間的切換

A,先切換到默認句柄

driver.switchTo().defaultContent();

B,切換到Frame:

driver.switchTo().frame(「frame1」);

C,切換到Window:

driver.switchTo().window(「windowName」);

注:在咱們平常的自動化測試中,常常會遇到,這種切換,若是咱們忘記了寫切換語句,則會出現咱們用定位工具明明能找到的元素,在自動化測試用例中一直報找不到的錯誤。此時,不用反覆更改定位方式,只須要看一下操做過程當中是否改變了窗口或是進入了frame中。

3.4 定位方法的選擇

     頁 面元素的定位,是頁面自動化測試過程當中的首要任務及重中之重。若是連元素都定位不到,再好的測試框架,高超的編程技巧,也沒法完成自動化測試用例的編寫。 上面咱們講解了基本的定位方法,因此本節咱們就從最基本的開始,當咱們欲定位一個頁面元素的時候,應該如何選擇定位方法。

   爲了簡單期間,咱們就以百度爲例,來說解頁面元素定位方法選擇的思路。現有一個測試用例以下:

測試步驟:

(1)  打開百度首頁,輸入「自動化測試」。

(2)百度一下,檢測搜索結果

分析:

(1)打開百度沒有任何問題,直接調用WebDriver API就好了。但是要輸入「自動化測試」,咱們首先要定位到輸入框架,而後再能輸入要查詢的關鍵字。

(2)百度一下,要定位到「百度一下」按鈕,才能執行單擊操做。檢測搜索結果的時候,須要在查詢結果頁定位查詢到的網頁標題或是內容,才能檢測。

   至此咱們明白自動化要作的內容,就能夠着手去編寫自動化測試用例。至於如何編寫是之後章節的內容,本節咱們主要關注元素定位的部分。如今咱們按以下步驟進行定位:

第一步:用火狐打開百度首頁。

咱們之因此用火狐打開百度,是想利用火狐的插件Firebug來定位元素。

第二步,用Firebug查找定位的元素。

Firebug想必你們已經不會陌生,若是實在沒有用過,就去網上搜一下這是個什麼東東。咱們打開firebug,利用「點擊查看頁面中的元素」按鈕,點擊輸入框,則firebug會以選中狀態顯示輸入框在HTML中的標籤。如圖3.4.1 所示:

 



3.4.1選中狀態顯示輸入框

 

第三步,分析選擇定位方法。

咱們先分析一下這個標籤的特色:

  • 這是一個input標籤,因此說Tag Name是input,經過咱們查看網頁源碼,發現不是隻有一個這樣的標籤,因此不能用TagName來定位。
  • 分析標籤的屬性,發現標籤中具備咱們特別感興趣的屬性class,name,id,這三個屬性能夠用來定位,而autocomplete,maxlength,value通過分析是不可用的,因此捨棄。
  • 假如標籤不存上面的三個屬性,咱們就考慮一下可否用Xpath和CSS。

方法:今後標籤向上查找,遇到一個它的上級標籤,就去找有沒有惟一的屬性,若是有,今後層往下寫Xpath或Css,若是沒有,接着向上層查找。

本標籤的上一級標籤是span,span有Class屬性,但其值中有空格,不能使用Xpath(緣由見下節),但可使用Css,Css的定位方法是:input#kw.s_ipt。

  • Xpath定位方法,咱們接着上面繼續向上查找,再上一級是form標籤,這個標籤有id,name,class屬性,比較適合用來定位,因此今後層開始寫Xpath是://form[@id=’form’]/span/input 或//form[@name=’f’]/span/input 或//form[@class=’fm’]/span/input。
  • 這個標籤不是超級連接,因此不能用link相關的定位方法。

第四步,編寫定位代碼

針對該標籤,咱們如今把能用的定位方法所有寫下來:

  • id: driver. findElement(By.id(「kw」))
  • name: driver. findElement(By.name( 「wd」))
  • class: driver. findElement(By.className (「s_ipt」))
  • css: driver. findElement(By.cssSelect (「input#kw.s_ipt」))
  • xpath:driver. findElement(By.xpath (「//input[@id=’kw’]」))

因而可知一個頁面元素的定位方法是至關多的,咱們但是根據須要選擇。而後再放到代碼中去調試,若是不行,就換另外的辦法。原則是:越簡單的定位方法越好,由於這樣的定位方法受到網站改版的影響也越小。

第五步,工具使用定位

通過上面四步咱們已經能夠定位頁面上的元素了,不過這都是經過咱們人工來查看的,而後手動編寫的代碼。有沒有更加簡單的方法來定位呢?答案是Yes,咱們要用到的就是傳說中的FireBug和Selenium IDE。下面咱們簡單地介紹一下使用方法:

(1)    Firebug提取元素的Xpath,Css路徑。

元素的id,name,class屬性一目瞭然,直接可使用,若是元素沒有這幾個屬性,就須要用Xpath和Css路徑定位了。可是這兩個路徑不太容易寫出來,因此Firebug提供了方法。

首先,咱們用Firebug找到要定位的元素。而後右擊這個元素在Firebug中的位置,從彈出的菜單中選擇「複製Xpath」,「複製最簡Xpath」或是「複製CSS路徑」。最後將複製到的內容粘貼出來,這就是對應頁面元素的xpath或是Css路徑。如圖3.4.2所示:

 



3.4.2 提取頁面元素的CSS or Xpath路徑

(2)             Selenium IDE驗證提取的路徑是否正確。

   經過Firebug咱們能夠提取出元素的Css或者Xpath的路徑,但是提取的究竟對不對呢?工具備的時候也不太靠譜,因此咱們要驗證一下。最直接的辦法就是放到測試用例中去執行一下,可是一直在執行測試用例,這樣比較耗時。咱們能夠藉助於Selenium IDE來驗證一下。

驗證方法以下:

  • 用FireBug提取出要定位的元素的Xpath或者Css路徑。
  • 打開Selenium IDE界面,右擊界面「Insert new command」。
  • 將複製的路徑粘貼到IDE的Target文本框中,若是複製的是Css路徑,須要在複製的路徑前加上「Css=」。
  • 單擊Find按鈕,此時Firebug中顯示的要定位的元素會標黃顯示,表示定位正確。如圖3.4.3所示:

 



3.4.3 驗證定位元素正確的狀況

  • 若是複製的路徑不對,則IDE會在log區以紅色的信息提示定位不到。如圖3.4.4所示:

 


圖3.4.4 驗證定位元素定位不到的狀況

注意:

Firebug提交的路徑通常都是從頁面起始位置標籤開始,一直提取到要定位的元素,是相對路徑,容易受到網頁變化的影響。不建議直接使用,只能夠做爲參考。

Selenium IDE驗證定位方法,不只僅能夠驗證Firebug複製的路徑,還能夠驗證咱們本身編寫的路徑,比用代碼驗證方便快捷。這種驗證方法是個人最愛,節省了不省時間。

相關文章
相關標籤/搜索