[selenium webdriver Java]元素定位——findElement/findElements


 

策略 語法 語法 描述
By id driver.findElement(By.id()) driver.findElements(By.id()) 通過id屬性定位元素
By name driver.findElement(By.name()) driver.findElements(By.name()) 通過name屬性定位元素
By class name driver.findElement(By.className()) driver.findElements(By.className()) 通過class屬性定位元素
By tag name driver.findElement(By.tagName()) driver.findElements(By.tagName()) 通過HTML標簽名定位元素
By link text driver.findElement(By.linkText()) driver.findElements(By.linkText()) 通過鏈接內容定位元素
By partial link text driver.findElement(By.partialLinkText()) driver.findElements(By.partialLinkText()) 通過部分鏈接內容定位元素
By css driver.findElement(By.cssSelector()) driver.findElements(By.cssSelector()) 通過css選擇器定位元素
By xpath driver.findElement(By.Xpath()) driver.findElements(By.Xpath()) 通過xpath定位元素

 

 

 

 

 

 

 

 

findElement:

1. By id

使用id,name,class屬性是定位元素的首選方法。其中,用元素的id是最首選的方法,是最快速的策略。

當發生下列情況時,無法使用id屬性:

  • 不是所有的頁面元素都擁有id屬性
  • id屬性的值是動態生成的

2. findElement()方法定位元素時,會查詢整個DOM,然后返回第一個匹配的元素

3. WebElement類可支持查詢子類元素。假設頁面上有一些重復的元素,它們有不同的父元素。我們可以先定位其父元素,然后定位其子元素,方法如下:

WebElement father = driver.findElement(By.id("father"));
WebElement son = father.findElement(By.linkText("xxx"));

也可以將他們縮寫成一行:

1 WebElement son = driver.findElement(By.id("father")).findElement(BylinkText("xxx"));

4. NoSuchElementFoundException

findElement()和findElements()方法找不到相應的元素時,會拋出該異常。

 

findElements:

Selenium WebDriver的findElements()方法,可以得到指定規則的集合,適用於需要在一組相似的元素上進行操作的情況。

例:驗證百度首頁導航鏈接的數量,並打印出它們的超鏈接地址

 

實現代碼:

復制代碼
 1 import java.util.List;
 2 
 3 import org.openqa.selenium.By;
 4 import org.openqa.selenium.WebDriver;
 5 import org.openqa.selenium.WebElement;
 6 import org.openqa.selenium.chrome.ChromeDriver;
 7 import org.testng.annotations.Test;
 8 
 9 import com.thoughtworks.selenium.SeleneseTestNgHelper;
10 
11 public class FindElements {
12 
13     @Test
14     public void test(){
15         System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
16         WebDriver driver = new ChromeDriver();
17         driver.get("http://www.baidu.com");
18         List<WebElement> links = driver.findElements(By.cssSelector("#u1 a"));
19         //獲取集合中元素的總數量並轉為String格式(下方assertEquals方法參數格式要求)
20         String size = String.valueOf(links.size());
21         //String size = Integer.toString(links.size());
22         //String size = links.size()+"";
23         //驗證鏈接數量
24         SeleneseTestNgHelper.assertEquals("8", size);
25         
26         //打印href屬性
27         //通過for循環獲得list中的所有元素,再調用getAttribute()方法得到元素的屬性
28         for(int i=0; i<links.size();i++){
29             System.out.println(links.get(i).getAttribute("href"));
30         }
31         driver.quit();
32     }
33 }
復制代碼

運行結果:

 


免責聲明!

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



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