1. 程式人生 > >Java Selenium - 元素定位

Java Selenium - 元素定位

選擇 很好 www. item 兩種方法 mage println ava chrom

一,單個元素對象定位

Webdriver通過findElement() , findElements()等方法調用By對象來定位和查詢元素 , findElement()返回一個元素對象,否則拋出異常。findElements返回List,如果不存在則返回空List.

有一種特殊情況需要說明,就是復合classname ,如下,classname 為“sr s_btn”中間有個空格,如果直接使用By.className("sr s_btn")會報錯。處理方法為只選擇class屬性中的一個值,下面的代碼就不會報錯了
driver.findElement(By.className("s_btn"));

<input class="sr s_btn" id="srt"........>***</input>

技術分享

二,定位多個元素

這個很好理解,就是同時獲取一系列具有相同特征的元素,使用findElements()方法,返回值存儲到List列表裏面。

下面舉個例子,就清晰了,我們用findElements()方法來定位京東的分類導航並打印出來,他們就是一組具有相同特征的元素。

技術分享

package JavaProgramEXE;

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class FindElementsTest { private static WebDriver driver; private static String baseUrl; public static void main(String[] args) { driver=new ChromeDriver(); baseUrl="https://www.jd.com/"; JD_NavLinks(driver, baseUrl);
//JD_NavLinks2(driver, baseUrl); driver.quit(); } public static void JD_NavLinks(WebDriver dr, String URL){ dr.get(URL); List<WebElement> NLinks = dr.findElements(By.className("cate_menu_item")); for (WebElement link : NLinks) { System.out.println(link.getText()); } } public static void JD_NavLinks2(WebDriver dr, String URL){ dr.get(URL); List<WebElement> NLinks = dr.findElements(By.cssSelector("ul[class=‘JS_navCtn cate_menu‘] li")); for (WebElement link : NLinks) { System.out.println(link.getText()); } } }

這個例子用了兩種方法來獲取,一個是classname定位,一個cssSelector定位,應該還有其他方式,不過方法都是類似的。稍微做下改動,我們還可以把每個連接裏的子分類打印出來,我想真實的工作中,也必須是這樣的,因為每個子分類會對應一個全新的頁面,不管是用Web selenium,還是用接口測試的辦法,每個子頁面都應該覆蓋到。

運行代碼,可以成功打印:

技術分享

三,層級定位

層級定位的思想是先定位父元素,然後再從父元素中精確定位出其我們需要選取的子元素。

層級定位一般的應用場景是無法直接定位到需要選取的元素,但是其父元素比較容易定位,通過定位父元素再遍歷其子元素選擇需要的目標元素,或者需要定位某個元素下所有的子元素。比較典型的應用是表格的定位。

其實什麽那個例子的第二種方法算是層級定位的應用: By.cssSelector("ul[class=‘JS_navCtn cate_menu‘] li")

我們首先找到的是父元素,classname為“JS_navCtn cate_menu”的ul元素,然後找到這個ul元素下面所以的li元素。

Java Selenium - 元素定位