selenium基礎


Selenium api

 

 

 

我們把這些Selenium方法或者接口分成三類,一類是driver相關,也就是操作瀏覽器本身設置,第二類是元素相關,就是一些元素的點擊,輸入等操作,第三類是一些工具支持類,例如截圖,日志輸出,事件監聽。

一.瀏覽器本身設置

WebDriver driver = new FirefoxDriver();

點擊查看WebDriver發現是一個接口,它的備注這樣寫的:WebDriver是一個測試的主要接口,它展現了一個理想化的web瀏覽器,它主要包括三個目錄。1)控制瀏覽器本身 2)查找和選擇元素 3)調試程序,比如異常處理。

driver.get("https://www.baidu.com");
       這里的get方法的作用是,在當前瀏覽器窗口,加載一個新的web頁面,是通過http get發生請求完成的。參數類型是String,一般是url。get方法就是打開一個網頁的作用。

driver.manage().window().maximize();

從Selenium的源碼文件,可以知道,manage是得到Option這類接口用的。 是在Option這個接口下面可以找到的。Option接口是這樣描述的:An interfacefor managing stuff you would do in a browser menu,所以,這些操作都是來控制瀏覽器本身。

driver.navigate().to("http://news.baidu.com/");//打開測試頁面

Navigation接口,主要包括平時瀏覽器的前進,后退,打開網址,刷新當前頁操作。

driver.quit();退出瀏覽器

 

Interface Alert(基於瀏覽器的彈出框)

彈出對話框(Popup dialogs)

Alert alert = driver.switchTo().alert();//焦點定位,切換到當前彈窗

alert.accept();  //確定

alert.dismiss();  //取消

alert.getText(); //獲取文本

alert.senkeys( ); 

 

二、元素相關:

web自動化測試的核心就是找到網頁元素,並相應去操作元素。

Selenium中findElement接口能支持八種方法去查找網頁元素

1.1查找元素的方法

By id

其 HTML 代碼如下:

<input id="su" class="bg s_btn" type="submit" value="百度一下"/>如要操作該按鈕,則可以通過 ID(id="su")作為查找條件獲取該對象

WebElement baiduSearch = driver.findElement(By.id("su"));

另外,還可以執行 js 的 document.getElementById 來獲取對象,腳本如下:

WebElement  elementC=(WebElement)  ((JavascriptExecutor)  driver).executeScript("returndocument.getElementById('su')");

 

By name

 

 

 

 

<a class="mnav" name="tj_trnews" href="http://news.baidu.com">新聞</a>

WebElement news= driver.findElement(By.name("tj_trnews "));

 

3.LinkText 和 和 PartialLinkText

LinkText 方法按鏈接的文本進行查找,PartialLinkText 方法按鏈接的文本進行模糊查找。

例如,百度首頁上的“登錄”超級鏈接

 

 

 

 

它的鏈接文本屬性為“登錄”

driver.findElement(By.linkText("登錄")).click();

driver.findElement(By.partialLinkText("")).click();

 

 

 By XPath

 

什么是Xpath

元素,我們說的元素之網頁元素(web element)。在網頁上面的文本輸入框,按鈕,多選,單選,標簽,和文字都叫元素,總之,凡是能在頁面顯示的對象都可以作為頁面元素對象。

   元素定位, 有時候也叫Locator,一個HTML頁面元素,可以用很多方法去描述這個元素的位置。打個比方,生活中地址,一個大廈,正常的地址是 xxxxxxxx街道xxx號,這個具體描述就是這個大廈的Locator。同樣的道理,一個網頁元素,也有位置,也可以通過一些手段或者表達式去 描述這個元素在頁面對應的位置。

      XPathXPath即為XML路徑語言,它是一種用來確定XML標准通用標記語言的子集)文檔中某部分位置的語言。XPath基於XML的樹狀結構,提供在數據結構樹中找尋節點的能力,XPath 很快的被開發者采用來當作小型查詢語言。

Xpath基礎:

/

絕對路徑

表示從xml的根位置開始或子元素(一個層次結構)

//

相對路徑

表示不分任何層次結構的選擇元素

*

通配符

 

[]

條件

表示選擇什么條件下的元素

@

屬性

表示選擇屬性節點

and

關系

表示條件的與關系

text()

文本

表示選擇文本內容

 

 

要選catalog 底下的 cd 中所有 price 元素可以用:

/catalog/cd/price

注: XPath 的開頭是一個斜線(/)代表這是絕對路徑。如果開頭是兩個斜線(//)表示文件中所有符合模式的元素都會被選出來,即使是處於樹中不同的層級也會被選出來。//cd

選擇未知的元素,下面這個語法會選出/catalog/cd 的所有子元素:

/catalog/cd/*

以下的語法會選出所有 catalog 的子元素中,包含有 price 作為子元素的元素。

/catalog/*/price

以下的語法會選出有兩層父節點,叫做 price 的所有元素。

/*/*/price

以下的語法會選擇出文件中的所有元素。

//*

選擇分支

使用中括號可以選擇分支。以下的語法從 catalog 的子元素中取出第一個叫做 cd 的元素。XPath 的定義中沒有第0元素這種東西。

/catalog/cd[1]

以下語法選擇 catalog 中的最后一個 cd 元素:( XPathj 並沒有定義 first() 這種函式喔,用上例的 [1]就可以取出第一個元素。

/catalog/cd[last()]

以下語法選出含有 price 子元素的所有/catalog/cd 元素。

/catalog/cd[price]

以下語法選出 price 元素的值等於10.90的所有/catalog/cd 元素

/catalog/cd[price=10.90]

以下語法選出 price 元素的值等於10.90的所有/catalog/cd 元素 的 price 元素

/catalog/cd[price=10.90]/price

選擇一個以上的路徑

使用 Or 操作數(|)就可以選擇一個以上的路徑。例如:

/catalog/cd/title | catalog/cd/artist

選擇所有 title 以及 artist 元素

//title | //artist

選擇所有 title 以及 artist 以及 price 元素

//title | //artist | //price

選擇屬性

XPath 中,除了選擇元素以外,也可以選擇屬性。屬性都是以@開頭。例如選擇文件中所有叫做 country 的屬性。

//@country

選擇所有含有 country 這個屬性的 cd 元素:

//cd[@country]

以下語法選擇出含有屬性的所有 cd 元素

//cd[@*]

以下語法選擇出 country 屬性值為 UK cd

//cd[@country='UK']

 

安裝firebug安裝xpath

百度搜索輸入框定位元素

打開百度首頁—— 鼠標定位到搜索輸入框——右鍵鼠標,選Inspect in FirePath—— 打開界面如下圖

 

 

xpath定位

絕對路徑定位

WebElement button = driver.findElement(By.xpath("/html/body/div/input[@value='查詢']"));

一旦頁面結構發生改變,改路徑也隨之失效,必須重新。 所以不推薦使用絕對路徑的寫法

 

利用元素屬性定位

("//標簽[@屬性名=屬性值]")

 

如果以上查找方法都無法定位到指定對象,那么可以按 XPath 進行查找。例如,百度首頁的搜索按鈕。

 

 

 

 

HTML 代碼如下:

<input id="su" class="bg s_btn" type="submit" value="百度一下"/>

如要操作該按鈕,則可以通過其 XPath 表達式“//input[@id='su']”作為查找條件獲取該對象,XPath 的值可以通過 firebug 組件獲取,也可以自己編寫。

driver.findElement(By.xpath("//input[@id='su']"));

 

層級與屬性結合

("//div[@class='m-container']/input").send_keys("username")

通過邏輯運算符定位

("//input[@id='a' and @class='su']/span/input")

1.2如何對頁面元素進行操作

輸入框(text field or textarea)

WebElement element = driver.findElement(By.id("passwd-id"));

element.sendKeys(“test”);//在輸入框中輸入內容:

element.clear();       //將輸入框清空

element.getText();     //獲取輸入框的文本內容:

單選項(Radio Button)

WebElement radio=driver.findElement(By.id("BookMode"));

radio.click();       //選擇某個單選項

radio.clear();      //清空某個單選項

radio.isSelected();  //判斷某個單選項是否已經被選擇

多選項(checkbox)

WebElement checkbox = driver.findElement(By.id("myCheckbox."));

checkbox.click();

checkbox.clear();

checkbox.isSelected();//是否可選

checkbox.isEnabled();//是否有效

按鈕(button)

WebElement btn= driver.findElement(By.id("save"));

btn.click();      //點擊按鈕

btn.isEnabled ();  //判斷按鈕是否enable

表單(Form)

Form中的元素的操作和其它的元素操作一樣,對元素操作完成后對表單的提交可以:

  WebElement approve = driver.findElement(By.id("approve"));

  approve.click();

  approve.submit();//只適合於表單的提交

上傳文件

上傳文件的元素操作:

  WebElement adFileUpload =driver.findElement(By.id("WAP-upload"));

  String filePath = "C:\test\\uploadfile\\media_ads\\test.jpg";

adFileUpload.sendKeys(filePath);

另:

isDisplayed()//是否展示,返回“true”或“false”

sendKeys()//只接收字符串,如“123”

Class Select

 

下拉選擇框(Select)

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

select.selectByVisibleText(“A”);

select.selectByValue(“1”);

select.deselectAll();

select.deselectByValue(“1”);

select.deselectByVisibleText(“A”);

select.getAllSelectedOptions();

select.getFirstSelectedOption();

 

 

 

Selenium 代碼:

Select seList = new Select(driver.findElement(By.name("gpc")));

seList.selectByVisibleText("最近一周");

 

 

調用Java Script

Web driver對Java Script的調用是通過JavascriptExecutor來實現的,例如:

JavascriptExecutor js = (JavascriptExecutor) driver;

        js.executeScript("JS腳本");

三、工具類:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM