| 策略 | 語法 | 語法 | 描述 |
|---|---|---|---|
| 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 }
運行結果:


