元素定位 使用 XPath 定位元素

2021-08-05 22:42:41 字數 3014 閱讀 8353

xpath 是 xml 路徑語言,用來查詢 xml 文件裡中的節點。主流的瀏覽器都支援 xpath,因

為 html 頁面在 dom 中表示為 xhtml 文件。

xpath 語言是基於 xml 文件的樹結構,並提供了瀏覽樹的能力,通過多樣的標準來選擇結

點。selenium webdriver 支援使用 xpath 表示式來定位元素。

利用 xpath 來定位元素非常方便,但是,便捷的定位策略犧牲了系統的效能。

xpath 和 css 中最重要的區別在於,xpath 可以向前和向後查詢 dom 結構的元素,而 css

只能向前查詢。這意味著使用 xpath 可以通過子元素來定位父元素。

1.通過絕對路徑定位元素

和 css 絕對路徑相似,xpath 絕對路徑適用於指定元素的位置。這裡的乙個例子就是使用

絕對路徑來定位使用者名稱的字段。在每乙個元素之間需要有乙個空格。

webelement username=driver.findelement(by.xpath("html/body/div/div/form/input"));

但是,這個策略有侷限性,他需要參考整個頁面的文件結構。如果改變了,此元素的定位將會

失效。

2.通過相對路徑定位元素

用相對路徑,我們可以直接找到元素而不管其在 dom 中的位置。例如,我們可以通過如下

方法來定位使用者名字段,假設這個元素處於 dom 中第乙個:

webelement username=driver.findelement(by.xpath("//input"));

3.使用索引來定位元素

在前面的示例中,xpath 查詢將返回第乙個 dom 中元素。可能會有多個元素都匹

配了 xpath 查詢。如果元素不是第乙個元素,我們也可以指定他的個數來找到它。例如在我

們的登入表單,我們可以找到密碼字段 - 第二個,方法如下:

webelement password=driver.findelement(by.xpath("//input[2]"));

4.使用 xpath 及屬性值定位元素

和 css 相似,我們可以在 xpath 中使用元素的屬性來定位元素。在下面的例子中,可以使

用 id 屬性來定位使用者名字段。

webelement username=driver.findelement(by.xpath("//input[@id='username']"));

另乙個使用 alt 屬性來定位 image 屬性的例子:

webelement previousbutton=driver.findelement(by.xpath("img[@alt='previous']"));

你可能會遇到乙個屬性不足以來定位到乙個元素的情況,你需要聯合使用其他的屬性來達到

精確匹配。下面的例子中,使用多個屬性來定位元素。

webelement previousbutton = driver.findelement(by.xpath("//input[@type='submit'][@value='login']"));

使用 xpath 和 and 操作符也同樣可以達到相同的效果

webelement previousbutton = driver.findelement(by.xpath("//input[@type='submit' and @value='login']"));

下面的例子中,使用 or 操作符任何乙個屬性滿足也將可以對元素進行定位

webelement previousbutton = driver.findelement(by.xpath("//input[@type='submit' or @value='login']"));

5.使用 xpath 及屬性名稱定位元素

這個策略和之前的有些不同,我們叧通過指定元素中屬性的名稱而不是屬性的值來定位元素。

例如,我們想要查詢所有

listimageswithalt=driver.findelements(by.xpath("img[@alt]"));

6.部分屬性值的匹配

類似於css 選擇器,xpath 還提供了一種一些方法部分匹配屬性來定位元素。這對於網頁

中的屬性在動態髮化的時候是非常有用的。例如,asp.net 應用程式中動態生成 id 屬性

值。下面的表說明了使用這些 xpath 功能: 語法

例子描述

starts-with()

input[starts-with(@id,'ctrl')]

例如,如果元素的 id 為

ctrl_12,將會匹配以 ctrl

開始的屬性值。

ends-with()

input[ends-with(@id,'_username')]

例如,如果元素的 id 為

a_1_username,將會匹配

以 username 結尾的屬性

值。contains()

input[contains(@id,'username')]

例如,如果元素的 id 為

panel_login_username

_textfield,將會匹配含

有 username 屬性值。

7.使用值來匹配任意屬性及元素

xpath 可以匹配任意元素屬性中指定的值。例如,在下面的 xpath 查詢中,「username」

是指定的。xpath 將會檢查所有元素中是否有屬性等於」username」,並將其返回。

webelement username =driver.findelement(by.xpath("//input[@*='username']"));

8.使用 xpath 軸來定位元素

xpath 軸是借助於文件中元素不元素之間的關係來定位。下面有乙個簡單的的

xpath 軸的例子。

用xpath定位元素

一 用xpath定位元素需要了解的知識 1.xml路徑語言 用來確定xml文件中某部分位置的語言 2.xpath 用於在xml文件中通過元素和屬性進行導航 3.xpath是乙個w3c標準 4.對xml html有一定的了解 二 xpath 節點型別 元素,屬性,文字,命名空間,指令處理,注釋及文件 ...

python定位元素 Python元素定位

一.id元素定位 id有兩種情況 一種id是唯一的,另一種id是動態的。1 當id是唯一,最簡單的定位方式 用法 find element by id id value 例項 find element by id kw 2 若id是動態變化,則不可以採用以上方式定位,如下 id是動態變化 二.nam...

Selenium(四)使用xpath定位元素

1.什麼是xpath 2.xpath的節點型別 3.xpath的表示式 4.開始定位 瀏覽器開啟本地檔案 python3.7的開啟語法 查詢根節點 絕對路徑 查詢子節點 查詢type屬性 絕對路徑 查詢同級的元素 絕對路徑 查詢age輸入框元素 整個文件掃瞄,找到input元素 修改html文件,在...