selenium

在使用selenium webdriver進行元素定位時,一般使用findElement或findElements方法結合By類返回的元素句柄來定位元素。其中By類的經常使用定位方式共八種css

1. By.name()html

假設咱們要測試的頁面源碼以下:程序員

<button id="gbqfba" aria-label="Google Search" name="btnK" class="gbqfba"><span id="gbqfsa">Google Search</span></button>

當咱們要用name屬性來引用這個button並點擊它時,代碼以下:web

1 public class SearchButtonByName {
2         public static void main(String[] args){
3                WebDriver driver = new FirefoxDriver();
4                driver.get("http://www.forexample.com");
5                WebElement searchBox = driver.findElement(By.name("btnK"));
6                searchBox.click();
7         }
8 }

2. By.id()
 1 public class SearchButtonById {
 2 
 3         public static void main(String[] args){
 4 
 5             WebDriver driver = new FirefoxDriver();
 6 
 7             driver.get("http://www.forexample.com");
 8 
 9             WebElement searchBox = driver.findElement(By.id("gbqfba"));
10 
11             searchBox.click();
12 
13         }
14 
15 }

3. By.tagName()瀏覽器

該方法能夠經過元素的標籤名稱來查找元素。該方法跟以前兩個方法的區別是,這個方法搜索到的元素一般不止一個,因此通常建議結合使用findElements方法來使用。好比咱們如今要查找頁面上有多少個button,就能夠用button這個tagName來進行查找,代碼以下:測試

public class SearchPageByTagName{

     public static void main(String[] args){

            WebDriver driver = new FirefoxDriver();
            driver.get("http://www.forexample.com");
            List<WebElement> buttons = driver.findElements(By.tagName("button"));

            System.out.println(buttons.size());  //打印出button的個數

    }

}                    
複製代碼 4. By.className()

className屬性是利用元素的css樣式表所引用的僞類名稱來進行元素查找的方法。對於任何HTML頁面的元素來講,通常程序員或頁面設計師會給元素直接賦予一個樣式屬性或者利用css文件裏的僞類來定義元素樣式,使元素在頁面上顯示時可以更加美觀。通常css樣式表可能會長成下面這個樣子:spa

 1 .buttonStyle{
 2 
 3     width: 50px;
 4 
 5     height: 50px;
 6 
 7     border-radius: 50%;
 8 
 9     margin: 0% 2%;
10 
11 }
複製代碼

定義好後,就能夠在頁面元素中引用上述定義好的樣式,以下:設計

1 <button name="sampleBtnName" id="sampleBtnId" class="buttonStyle">I'm Button</button>

 

若是此時咱們要經過className屬性來查找該button並操做它的話,就可使用className屬性了,代碼以下:code

複製代碼
 1 public class SearchElementsByClassName{
 2 
 3     public static void main(String[] args){
 4 
 5         WebDriver driver = new FirefoxDriver();
 6 
 7         driver.get("http://www.forexample.com");
 8 
 9         WebElement searchBox =  driver.findElement(By.className("buttonStyle"));
10 
11         searchBox.sendKeys("Hello, world");
12 
13     }
14 
15 }
複製代碼
 

5. By.linkText()orm

 

這個方法比較直接,即經過超文本連接上的文字信息來定位元素,這種方式通常專門用於定位頁面上的超文本連接。一般一個超文本連接會長成這個樣子:

 
1 <a href="/intl/en/about.html">About Google</a>

 

咱們定位這個元素時,可使用下面的代碼進行操做:

 
複製代碼
 1 public class SearchElementsByLinkText{
 2 
 3     public static void main(String[] args){
 4 
 5         WebDriver driver = new FirefoxDriver();
 6 
 7         driver.get("http://www.forexample.com");
 8 
 9         WebElement aboutLink = driver.findElement(By.linkText("About Google"));
10 
11         aboutLink.click();
12 
13     }
14 
15 }
複製代碼
6. By.partialLinkText()

這個方法是上一個方法的擴展。當你不能準確知道超連接上的文本信息或者只想經過一些關鍵字進行匹配時,可使用這個方法來經過部分連接文字進行匹配。代碼以下:

 
複製代碼
 1 public class SearchElementsByPartialLinkText{
 2 
 3     public static void main(String[] args){
 4 
 5         WebDriver driver = new FirefoxDriver();
 6 
 7         driver.get("http://www.forexample.com");
 8 
 9         WebElement aboutLink = driver.findElement(By.partialLinkText("About"));
10 
11         aboutLink.click();
12 
13     }
14 
15 }

複製代碼
 

7. By.xpath()

 

這個方法是很是強大的元素查找方式,使用這種方法幾乎能夠定位到頁面上的任意元素。在正式開始使用XPath進行定位前,咱們先了解下什麼是XPath。XPath是XML Path的簡稱,因爲HTML文檔自己就是一個標準的XML頁面,因此咱們可使用XPath的語法來定位頁面元素。

 

假設咱們如今以圖(2)所示HTML代碼爲例,要引用對應的對象,XPath語法以下:

 

 

 

圖(2)

 

絕對路徑寫法(只有一種),寫法以下:

 

引用頁面上的form元素(即源碼中的第3行):/html/body/form[1]

8. By.cssSelector()

ssSelector這種元素定位方式跟xpath比較相似,但執行速度較快,並且各類瀏覽器對它的支持都至關到位,因此功能也是蠻強大的。

 

下面是一些常見的cssSelector的定位方式:

 

定位id爲flrs的div元素,能夠寫成:#flrs     注:至關於xpath語法的//div[@id=’flrs’]

 

定位id爲flrs下的a元素,能夠寫成 #flrs > a  注:至關於xpath語法的//div[@id=’flrs’]/a

 

定位id爲flrs下的href屬性值爲/forexample/about.html的元素,能夠寫成: #flrs > a[href=」/forexample/about.html」]

 

若是須要指定多個屬性值時,能夠逐一加在後面,如#flrs > input[name=」username」][type=」text」]。

 

 

 

明白基本語法後,咱們來嘗試用cssSelector方式來引用圖(3)中選中的那個input對象,代碼以下:

 
WebElement password = driver.findElement(By.cssSelector("#J_login_form>dl>dt>input[id=’ J_password’]"));
相關文章
相關標籤/搜索