WebDriver 定位元素的8種方式

2021-09-22 16:22:52 字數 3154 閱讀 4280

在ui層面的自動化測試開發中,元素的定位與操作是基礎,也是經常遇到的困難所在。webdriver提供了8種定位:

id定位:find_element_by_id(「id值」);id屬性是唯一的

(1). driver.find_element_by_id(「loginname」).clear()#使用者名稱輸入框的id屬性

(2). driver.find_element_by_id(「loginname」).send_keys(「admin」)

(3). driver.find_element_by_id(「pwdtip」).send_keys(keys.tab)#密碼輸入框的id屬性

(4).driver.find_element_by_id(「pwdtip」).send_keys(「111111」)

name定位:元素的名稱,find_element_by_name(「name值」);name屬性值在當前頁面可以不唯一

(1). driver.find_elements_by_name(「periodname」)[1].click()#選擇學段:初中

(2). driver.find_elements_by_name(「subjectname」)[0].click()#選擇學科:語文

find_elements_by_name(「periodname」)是因為當前頁面有一組radiobutton的name值是periodname,所以可以用定位一組元素的方法findelements,定位出來的是結果乙個list

class定位:元素的類名,find_element_by_class_name(「class值」)

driver.find_elements_by_class_name(「u-btn-levred」)[0].click()#選擇年級:七年級

tag定位:頁面html文件下的各種標籤,find_element_by_tag_name(「input」);

tag往往用來定義一類功能,所以通過tag識別某個元素的概率很低。任意開啟乙個頁面,都會發現大量的

、、 等tag,所以tag name定位很少用

driver.find_element_by_link_text(u"退出").click()#頁面右上方的一些個人操作,比如退出、個人中心、訊息通知等

※注:以上的方式稍有侷限,且經常頁面沒有id,name這些屬性值,class name重複性較高,link定位有針對性,所以xpath與css定位更靈活些。

xpath定位:find_element_by_xpath("");有多種定位策略,用firepath外掛程式自動生成的涵蓋以下幾種方式

1)絕對路徑定位:對於沒有id,name、classname不好定位的,這也是我最常用的,因為可以通過firefox的firepath外掛程式可以方便的獲取到xpath值

2)利用元素屬性定位:

find_element_by_xpath(".//*[@id=『title』]"),這裡是用的id,也可以用元素其他能夠 唯一標識的屬性,不侷限於id、name、class這些;代表的是標籤名,不指定時就可以用代替

3)層級與屬性結合:下圖中就是這種

4)使用邏輯運算子

① driver.find_element_by_xpath(".//*[@id=『divword』]/input[7]").click()#登入

②driver.find_element_by_xpath(「html/body/div[4]/div/div[2]/div/div[3]/a[1]」).click()#個人頁面的發布課程操作

css定位(薄弱,用的很少,但很強大,比xpath簡潔靈活):使用選擇器來為頁面元素繫結屬性,可以靈活地選擇控制項的任意屬性;find_element_by_css_selector("");同樣也可以用firepath生成css喲!

1)通過class屬性定位:點號(".")表示通過class屬性定位

① 《input class=「u-btn mart5」 type=「submit」 οnclick=「return user.check()」 value=「登入」》

②driver.find_element_by_css_selector(".u-btn.mart5").click()

2)通過id屬性定位:("#")表示通過id定位元素

driver.find_element_by_css_selector("#loginname")

3)通過其他屬性定位:(""),中括號裡的屬性可以唯一標識這個元素就可以;屬性的值可以加引號,也可以不加

① 《》input class=「u-btn mart5」 type=「submit」 οnclick=「return user.check()」 value=「登入」》

② driver.find_element_by_css_selector("[type=submit]").click()

4)組合定位

平時使用生成的xpath,id,name,classname這些比較多,今天根據最近這段時間的實踐,並參照書上整理了下,發現原來xpath和css下還有這麼多方式,順便拿最近一些**試驗了下,有些簡單的css定位能夠成功,有的firepath生成的並不可用,一些組合定位還需要再研究,是有些難度的。最後記錄一種定位方式,更接近底層實現方式的定位,but書上說webdriver更推薦前面那些寫法,為毛捏?

用by定位元素

除find_element_by_***這種方式,還有另一套寫法,也就是統一呼叫find_element()方法,兩個引數,第乙個引數是定位的型別,由by提供;第二個引數是定位的具體值

複製**

from selenium.webdriver.common.by import by #使用by這種定位前要將by類匯入

find_element(by.id,「loginname」)

find_element(by.name,「subjectname」)

find_element(by.class_name,「u-btn-levred」)

find_element(by.tag_name,「input」)

find_element(by.link_text,「退出」)

find_element(by.partial_link_text,「退」)

find_element(by.xpath,".//*[@id='title")

find_element(by.css_selector,"[type=submit]")

複製**

WebDriver定位元素的方法

本文主要是講解在web頁面中如何定位元素,這是進行自動化操作的前提。我們主要是要做web自動化,通常乙個web頁面上有輸入框 按鈕 文字鏈結 等元素,自動化測試要做的就是模擬滑鼠和鍵盤來操作這些元素,如單擊 輸入 滑鼠懸停等。操作這些元素的前提是要定位它們,就是找到它們的位置,所以下面可以利用web...

定位元素8種方法

1.find element by class name通過class name定位元素 2.find element by id通過id定位元素 3.find element by tag name通過html tag定位 4.find element by name通過name定位 input框...

css selector定位元素

selenium中經常要用css selector定位元素,雖說可以用firefox的firebug firepath直接copy元素的xpath路徑,但有時還是很必要用css selector來定位,也算技多不壓身吧 系統的學習一下,也當是臨陣磨槍。一共8種方式的選擇器。根據元素的標籤定位,如下 ...