1. 程式人生 > >selenium+python之元素定位方式介紹

selenium+python之元素定位方式介紹

組合 ima box switcher 關鍵字 NPU span 獲取 今天

網頁自動化測試最基本的要求就是要定位到各個元素,然後才能對該元素進行各種操作(輸入,點擊,清除,提交等),所以今天來總結下Selenuim+Python最基本的幾種定位方式及實例說明, 以百度搜索輸入框為例,用谷歌瀏覽器具體說明各個定位方式的用法。

1.導入selenium包的webdriver方法

輸入 from selenium import webdriver

2.從 time 模塊中引入sleep函數,使用sleep函數可以讓程序休眠

輸入 from time import sleep

3.打開瀏覽器

(1)獲取瀏覽器驅動,並打開谷歌瀏覽器,註意瀏覽器的第一個字母要大寫

dr=webdriver.Chrome()

(2)打開被測網頁

url = "https://www.baidu.com/"

dr.get(url)

4.元素定位方法

(1)通過id定位----find_element_by_id()

實例:dr.find_element_by_id("kw").send_keys("selenium自動化") #輸入搜索關鍵字

技術分享圖片

註意點:id值必須是唯一的,id值是動態變化的,則不能使用該方法定位。

(2)通過name定位----find_element_by_name()

實例:dr.find_element_by_name("wd").send_keys("selenium自動化") #輸入搜索關鍵字

註意點:name值也必須是唯一的。

(3)通過class_name定位----find_element_by_class_name()

實例:dr.find_element_by_class_name("s_ipt").send_keys("selenium自動化") #輸入搜索關鍵字

註意點:class_name的值也必須是唯一的。

(4)通過link_text定位----find_element_by_link_text()

實例:dr.find_element_by_link_text("新聞").click()#點擊按鈕

註意點:link_text的值也必須是唯一的。

(5)通過partial_link_ text模糊文字定位----find_element_by_partial_link_text()

實例:dr.find_element_by_partial_link_text("改革開放").click() #點擊按鈕

註意點:link_text的值也必須是唯一的。

(6)通過tag_name定位----find_element_by_tag_name()

實例:dr.find_element_by_tag_name("input").send_keys("selenium自動化") #輸入搜索關鍵字

標簽名字最容易重復,當定位一組數據時,可使用

inputBoxes = dr.find_elements_by_tag_name("input")

for inputBox in inputBoxes:

if inputBox.get_attribute("maxlength") == "255" and \
inputBox.get_attribute("sautocomplete") == ‘off‘:
inputBox.send_keys("selenum自動化")

(7)通過xpath定位,XPath是一種XML文檔中定位元素的語言----find_element_by_xpath()

(7.1).根據絕對路徑來定位

path1="/html/body/div/div/div/div/div/form/span/input"

dr.find_element_by_xpath(path1).send_keys("selenum自動化") #輸入搜索關鍵字

(7.2).根據元素屬性定位

dr.find_element_by_xpath("//input[@autocomplete=‘off‘]").send_keys("selenum自動化")#輸入搜索關鍵字

(7.3).根據通過多個屬性組合定位

dr.find_element_by_xpath("//input[@autocomplete=‘off‘ and @id=‘kw‘]").send_keys("selenum自動化")#輸入搜索關鍵字

註意點:括號內的引號和方括號內的引號不能一樣。

(7.4).通過層次與屬性組合定位

path1 = "//span/input[@class=‘s_ipt‘]"

dr.find_element_by_xpath(path1).send_keys("selenum自動化")#輸入搜索關鍵字

8.通過CSS定位----find_element_by_css_selector()

(8.1).通過class屬性

dr.find_element_by_css_selector(".‘s_ipt").send_keys("selenum自動化")#輸入搜索關鍵字

註意點:.號表示通過class屬性來定位元素

(8.2).通過id屬性定位元素

dr.find_element_by_css_selector("#kw")

註意點:#號表示通過id屬性來定位元素

(8.3).通過標簽名定位元素

dr.find_element_by_css_selector("input")

(8.4)通過屬性定位元素(挺常用的)

dr.find_element_by_css_selector("[name=‘wd‘]")

dr.find_element_by_css_selector("[maxlength=‘255‘]")

屬性值包含某個值

屬性值包含wd:適用於由空格分隔的屬性值。

dr.find_element_by_css_selector("[name~=‘wd‘]")

(8.5)通過層級的父子定位元素

查找有父親元素的標簽名為span,它的所有標簽名叫input的子元素

dr.find_element_by_css_selector("span>input")

(8.6)通過層級與屬性組合定位

標簽名#id屬性值:指的是該input標簽下id屬性為kw的元素

dr.find_element_by_css_selector("input#kw")

標簽名.class屬性值:指的是該input標簽下class屬性為s_ipt的元素

dr.find_element_by_css_selector("input.s_ipt")

標簽名[屬性=’屬性值‘]:指的是該input標簽下name屬性為wd的元素

dr.find_element_by_css_selector("input[name=‘wd‘]")

父元素標簽名>標簽名.class屬性值:指的是span下的input標簽下class屬性為s_ipt的元素

dr.find_element_by_css_selector("span>input.s_ipt")

9.通過By定位元素

定位的類型包括By.ID,By.NAME,By.CLASS_NAME,By.TAG_NAME,By.LINK_TEXT,By.PARTIAL_LINK_TEXT,By.XPATH,By.CSS_SELECTOR

具體定位方式參考上方1-8的說明。

實例:dr.find_element(By.ID,‘kw‘)

註意:使用By定位方式,需先導入By類。

技術分享圖片

5.實例登錄QQ郵箱

#導入selenium包的webdriver方法

from selenium import webdriver
#導入By類
from selenium.webdriver.common.by import By
#引入sleep函數
from time import sleep
#獲取瀏覽器驅動,並打開瀏覽器
dr=webdriver.Chrome()
url="https://mail.qq.com/"
dr.get(url)
sleep(2)
#將瀏覽器窗口最大化
dr.maximize_window()
sleep(2)
#定位表單位置
frame = dr.find_element_by_id(‘login_frame‘)
dr.switch_to.frame(frame)
dr.find_element_by_id(‘switcher_plogin‘).click()
#輸入用戶名密碼,並點擊登錄按鈕
dr.find_element_by_id(‘u‘).send_keys(‘****@qq.com‘)
dr.find_element_by_id(‘p‘).send_keys(‘password‘)
dr.find_element_by_id(‘login_button‘).click()
dr.switch_to_default_content()

selenium+python之元素定位方式介紹