日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

selenium界面元素定位

發布時間:2023/12/9 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 selenium界面元素定位 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、??????? Selenium界面元素定位

本文元素定位以das2為例

#導入包

from selenium import? webdriver

#打開火狐驅動

driver=webdriver.Firefox()

#訪問網址

driver.get("http://192.168.3.217:8080/das/seatlogin.jsp ")

?

進行web頁面自動化測試,對頁面上的元素進行定位和操作是核心,對頁面元素的定位是進行自動化測試的基礎

?

1.?????? 常用的八種元素屬性:

?

??? id

??? name

??? class name

??? tag name

??? link text

??? partial link text

??? xpath

??? css selector

?

對應于webdriver中的定位方法分別是:(定位一個元素的方法)

?

??? driver.find_element_by_name()——最常用,簡單

??? driver.find_element_by_id()——最常用,簡單

??? driver.find_element_by_class_name()

??? driver.find_element_by_tag_name()——最不靠譜

??? driver.find_element_by_link_text()——定位文字連接好用

??? driver.find_element_by_partial_link_text()——定位文字連接好用

?? ?driver.find_element_by_xpath()——最靈活,萬能

??? driver.find_element_by_css_selector()

用xpath定位是最好用的最萬能的

webdriver也有定位一組元素的方法:

?

??? driver.find_elements_by_name()

??? driver.find_elements_by_id()

??? driver.find_elements_by_class_name()

??? driver.find_elements_by_tag_name()

??? driver.find_elements_by_link_text()

??? driver.find_elements_by_partial_link_text()

??? driver.find_elements_by_xpath()

??? driver.find_elements_by_css_selector()

?

總結:定位一組元素和一個元素在語法上是將element修改為elements,而生成的是一個符合元素的list

?

查看元素的方法可以使用firefox安裝組件firebug

?

以das登錄界面的用戶名密碼輸入框為例

?

2.?????? 通過id進行定位

?

?

?

??? 語法:driver.find_element_by_id(self,id)

 ? 舉例:driver.find_element_by_id("username").send_keys("yangdanhua")

即取id元素,傳值“yangdanhua”

?

??? 語法:driver.find_element(self,by,value)

??? 舉例:driver.find_element(by="id",value="username").send_keys("yangdanhua ")

???

3.?????? 通過name進行定位

?

?

?

??? 語法;driver.find_element_by_name(self,name)

??? 舉例:driver.find_element_by_name("j_username").send_keys("yangdanhua")

???

??? 語法:driver.find_element(self,by,value)

?? ?舉例:driver.find_element(by="name",value=" j_username ").send_keys("yangdanhua ")

?

4.?????? 通過class定位

??? 語法;driver.find_element_by_class_name(self,name)

??? 舉例:driver.find_element_by_class_name("s_ipt").send_keys("VseYoung")

?

5.?????? 通過tag定位

??? 一般頁面上標簽一樣的很多,通過標簽無法直接定位到某個元素

??? 通常用于定位一組元素,很難通過標記tag name去區分不同原色

?? ?

?

??? 語法;driver.find_element_by_tag_name(self,name)

???

??? 舉例:driver.find_element_by_tag_name("input").send_keys("VseYoung")

?

6.?????? 通過link定位

??? 主要用于文字鏈接的定位,準確度較高,比如下圖

?

?

  語法;driver.find_element_by_link_text(self,link_text)

???

??? 舉例:driver.find_element_by_link_text("文件查詢").click()

?

7.?????? 通過xpath定位

??? XPath是一種文檔定位語言。因為HTML可以看做是XML的一種實現,所以selenium用戶可使用這種強大的語言在web應用中定位。

??? 絕對路徑方法:

??????? 從根元素寫起,當元素層級很深的時候,路徑寫的會很長,閱讀性不好,也很難維護。不建議使絕對路徑這樣的方法。

??? 相對路徑方法:

??????? 通過Firebug很容易得到相對路徑的xpath,打開Firebug插件,在頁面上的搜索文本框,就可以顯示出xpath了:

?

//表示當前頁面某個目錄下,input 表示定位元素的標簽名,[@id=‘kw’] 表示這個元素的id 屬性值等于kw;如果不想指定標簽名也可以用星號(*)代替,.表示當前節點。

?

?

按F12,點擊紅框內的小箭頭,選中用戶名輸入框,下方元素中的input部分被標藍,右鍵標藍區域,選擇復制xpath路徑

?

語法;driver.find_element_by_xpath(self,xpath)

舉例:driver.find_element_by_xpath("//*[@id=’username’]").send_keys("yangdanhua")

???

??? driver.find_element_by_xpath("//*[@id='kw']").click()

??? 詳解:通過xpath尋找,任意(*代表)id屬性為username的元素

?

??? 根據上級目錄的屬性來定位當前元素:

??? driver.find_element_by_xpath("//span[@id=’input-container’]/input")??? #通過上一級目錄的id 屬性定位?

??? driver.find_element_by_xpath("//div[@id=’hd’]/form/span/input")??????? #通過上三級目錄的id 屬性定位?

??? driver.find_element_by_xpath("//div[@name=’q’]/form/span/input")?????? #通過上三級目錄的name 屬性定位?

?

8.?????? 通過css定位

??? 使用firepath組件即可查詢相關元素的CSS定位

CSS(Cascading Style Sheets)是一種語言,它被用來描述HTML 和XML 文檔的表現

可選中元素查看器后右鍵復制css路徑或css選擇器

?

?

通過id定位:

?

??? 語法:driver.find_element_by_css_selector(self,css_selector)

舉例:driver.find_element_by_css_selector("#username").send_keys("yangdanhua")

?

通過class定位:

?

?

???????? 舉例:driver.find_element_by_css_selector("li#usernamew>span.lb").text()

?

9.?????? 通過partial link text定位

??? partial link text定位與link text的區別在于,partial link text定位時,只需要輸入文字鏈接的部分內容即可完成定位

??? ????語法;driver.find_element_by_partial_link_text(self,link_text)

??? 舉例:driver.find_element_by_partial_link_text("新").click()

?

二、??????? Das2實戰演練

1.?????? 創建新py文件

打開pycharm,右鍵文件夾,創建一個新的python文件,命名為“測試專用”

?

?

?

2.?????? 模塊導入

Selenium模塊導入語言:

?

from selenium import webdriver

?

即從selenium框架中導入webdriver模塊

3.?????? 訪問界面

創建一個對象driver,調用webdriver的firefox方法,啟動火狐瀏覽器

瀏覽器加載das2的urlhttp://192.168.3.217:8080/das/seatlogin.jsp

?

driver = webdriver.Firefox() # 打開url driver.get("http://192.168.3.217:8080/das/seatlogin.jsp")

?

#后面為注釋內容,方便代碼走查

4.?????? 登錄界面

創建參數username、password,通過find_element_by_id函數定位界面元素id。

為防止傳參時有默認文本框內容,先通過clear方法清除內容。

將參數username、password傳至文本框。

傳參完畢,定位到登錄按鈕的界面元素id,調用click方法

由于登錄界面時有一定加載時長,我們用sleep方法來等待來2s,在進行下一步操作

?

#登錄操作 username = "yangdanhua" password = "123456" # 執行登錄操作 #用戶名的定位 driver.find_element_by_id("username").clear() #清除輸入框默認的信息 driver.find_element_by_id("username").send_keys(username) #密碼的定位 driver.find_element_by_id("password").clear() driver.find_element_by_id("password").send_keys(password) # 點擊登錄 driver.find_element_by_id("btn_login").click() time.sleep(2)

?

?

5.?????? 進入查詢頁

調用find_element_by_link_text函數定位'文件查詢',前面講過了是文本元素專用,調用click方法點擊,即可跳轉'文件查詢'表單。

調用find_element_by_link_text函數定位'疑義復核文件狀態',調用click方法點擊,即可跳轉'疑義復核文件狀態'表單。

?

# 點擊文件查詢 driver.find_element_by_link_text('文件查詢').click() # 點擊文件狀態查詢 driver.find_element_by_link_text('疑義復核文件狀態').click()

?

6.?????? 提取表格元素

這里要注意,是否是iframe元素,可在界面上,右鍵空白處查看元素,或直接搜索iframe,如果是iframe, 說明遇到了表單嵌套界面,無法直接在該界面下定位元素,此處我用的解決方法是右鍵藍色下劃線區域,復制鏈接,通過get方法跳轉到該鏈接

?

?

調用driver.find_element_by_xpath函數傳參xpath路徑獲取文件狀態列表的第一行,

,可右鍵查看第一行的元素,復制xpath路徑/html/body/div/div/div/div[1]/table/tbody/tr[1]

創建一個空列表list_all,遍歷第一行表單中的內容,調用text方法輸出內容,列表list_all調用append方法將表單的第一行按順序增加在自身列表中

?

# 由于是iframe類型的,要先獲取iframe內的鏈接并訪問 driver.get("http://192.168.3.217:8080/das/das/yiyifuhe/toFileStatusSearchPageFileStates.action")list_testfile = driver.find_element_by_xpath('/html/body/div/div/div/div[1]/table/tbody/tr') # 遍歷列表 list_all = [] for x in range(1, 15):list = list_testfile.find_element_by_xpath('td[%s]' % x).textlist_all.append(list)

?

7.?????? 添加斷言

前面已將表單第一列內容放在list_all中了,我們希望表單的值與希望的一致,此時需要設置斷言,使用方法assert,假如assert比較時發現實際與期望結果并不一致,程序會報錯,不會繼續往后走。若我們需要知道多個值是否正確,就需要設置異常。

可通過try except函數監控異常,若報錯為AssertionError就輸出'經銷商名稱錯誤'、'文件狀態不對'、'dps狀態錯誤'

?

# 設置斷言,檢查查詢的內容是否正確 try:assert list_all[4] =='漳州市天健醫藥有限公司1' except AssertionError as e:print('經銷商名稱錯誤') try:assert list_all[7] == '文件數據質檢中1' except AssertionError as e:print('文件狀態不對') try:assert list_all[11]== '處理中' except AssertionError as e:print('dps狀態錯誤') print("文件狀態查詢測試完畢")

?

?

?

七、關閉瀏覽器

前面的語句執行后不會自動關閉瀏覽區,需要通過close函數關閉

?

driver.close()

?

?

在pycharm上運行后得到結果為:

?

?

說明經銷商名稱和文件狀態都是錯誤的

轉載于:https://www.cnblogs.com/hhdw/p/10345998.html

總結

以上是生活随笔為你收集整理的selenium界面元素定位的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。