前言
現(xiàn)在開始使用 Selenium 中的 Webdriver 框架編寫自動(dòng)化代碼腳本,我們常見的在瀏覽器中的操作都會(huì)有相對(duì)應(yīng)的類方法,這些方法需要定位才能操作元素,不同網(wǎng)頁(yè)的元素也不同,可以根據(jù)自己情況選擇使用類方法。下面開始學(xué)習(xí)元素定位 ;
New一個(gè)后綴為.py的Python文件寫一段代碼,先感受一下代碼吧!寫完以后Ctrl+Shift+F10運(yùn)行代碼。
# -*- coding:utf-8 -*-
from selenium import webdriver # 從selenium模塊中導(dǎo)入webdrive類
driver = webdriver.Chrome() # 定義新的變量名,打開瀏覽器
driver.maximize_window() # 瀏覽器窗口最大化
driver.get("https://baidu.com") # 打開百度網(wǎng)址
# 定位百度首頁(yè)的搜索框,然后在搜索框中輸入Selenium
driver.find_element_by_id('kw').send_keys('Selenium')
# 定位百度首頁(yè)的百度一下,然后點(diǎn)擊一下
driver.find_element_by_id('su').click()
瀏覽不同的網(wǎng)頁(yè)元素也不同,可以選擇使用最合適你的情況的方法使用,下面介紹Selenium其中的16種定位方法:
WebDriver8種基本元素定位方式:
id定位:find_element_by_id(self, id_)
name定位:find_element_by_name(self, name)
class定位:find_element_by_class_name(self, name)
tag定位:find_element_by_tag_name(self, name)
link定位:find_element_by_link_text(self, link_text)
partial_link定位:find_element_by_partial_link_text(self, link_text)
xpath定位:find_element_by_xpath(self, xpath)
css定位:find_element_by_css_selector(self, css_selector)
這8種其實(shí)和上面的8種一樣的只不過后者是以復(fù)數(shù)形式出現(xiàn)(這些復(fù)數(shù)定位方法會(huì)返回一個(gè)列表的值):
id復(fù)數(shù)定位:find_elements_by_id(self, id_)
name復(fù)數(shù)定位:find_elements_by_name(self, name)
class復(fù)數(shù)定位:find_elements_by_class_name(self, name)
tag復(fù)數(shù)定位:find_elements_by_tag_name(self, name)
link復(fù)數(shù)定位:find_elements_by_link_text(self, text)
partial_link復(fù)數(shù)定位:find_elements_by_partial_link_text(self, link_text)
xpath復(fù)數(shù)定位:find_elements_by_xpath(self, xpath)
css復(fù)數(shù)定位:find_elements_by_css_selector(self, css_selector)
想要深入了解xpath、css、復(fù)數(shù)定位的請(qǐng)加入我們,642830685,領(lǐng)取最新軟件測(cè)試大廠面試資料和Python自動(dòng)化、接口、框架搭建學(xué)習(xí)資料!技術(shù)大牛解惑答疑,同行一起交流
8種基本定位介紹,掌握這8種基本可以橫著走了:
以百度為例這張圖是百度輸入框的,一眼看過去就看到了三種定位方式:

1. 通過id定位:

driver.find_element_by_id('kw').send_keys('Selenium')
2. 通過name定位:

driver.find_element_by_name('wd').send_keys('Selenium')
3. 通過class定位:

driver.find_element_by_class_name('s_ipt').send_keys('Selenium')
4. 通過tag定位:
tag其實(shí)是通過標(biāo)簽名去定位的,一般情況下一個(gè)頁(yè)面會(huì)存在大量相同的標(biāo)簽名這種定位方式不是很實(shí)用,所以用的也就比 較少;

driver.find_element_by_tag_name('input').send_keys('Selenium')
5. 通過link_text定位:
HTML代碼中以a標(biāo)簽開頭的一般是超鏈接元素的標(biāo)記可以使用link_text可以精準(zhǔn)匹配;
<a name="tj_trnews" class="mnav">新聞</a>


driver.find_element_by_link_text('新聞').click()
6. 通過partial_link_text定位:
這種定位方式和上面的一樣也是通過HTML的a標(biāo)簽定位,唯一不同的這種方式是模糊匹配,當(dāng)超鏈接名稱過長(zhǎng)時(shí),這時(shí)候可以使用模糊匹配方式,截取其中一部分字符串就可以了;

driver.find_element_by_partial_link_text('聞').click()
7. 通過xpath定位:
xpath是XML路徑語(yǔ)言,它可以用來確定xml文檔中的節(jié)點(diǎn)元素位置,通過元素的路徑來完成對(duì)元素的查找。HTML就是XML的一種實(shí)現(xiàn)方式,可以自行選擇絕對(duì)路徑和相對(duì)路徑作為匹配的路徑

雙斜杠(//) = 相對(duì)路徑,可以選擇任何一個(gè)節(jié)點(diǎn)作為起始點(diǎn)
單斜桿(/) = 絕對(duì)路徑,就是從網(wǎng)頁(yè)代碼的html開始一層一層找
() = 匹配任何元素節(jié)點(diǎn);(@)= 匹配任何屬性節(jié)點(diǎn)
1、xpath可以使用id,name,class元素進(jìn)行定位:

# 使用xpath方法的id屬性定位'
driver.find_element_by_xpath("http://*[@id='kw']").send_keys('Selenium')
# 使用xpath方法的name屬性定位
driver.find_element_by_xpath("http://*[@name='wd']").send_keys('Selenium')
# 使用xpath方法的class屬性定位
driver.find_element_by_xpath("http://*[@class='s_ipt']").send_keys('Selenium')
2、除了使用class,id,name定位,也可以手動(dòng)選取節(jié)點(diǎn)來進(jìn)行定位:

# 使用 // 選取當(dāng)前節(jié)點(diǎn)
driver.find_element_by_xpath("http://input[@id='kw']").send_keys('Selenium')
# 使用 // 選取父節(jié)點(diǎn)
driver.find_element_by_xpath("http://span[@class='bg s_ipt_wr quickdelete-wrap']/input").send_keys('Selenium')
# 使用 // 選取爺節(jié)點(diǎn)
driver.find_element_by_xpath("http://form[@id='form']/span[1]/input").send_keys('Selenium')
3、使用絕對(duì)路徑定位代碼會(huì)很長(zhǎng),有其中一個(gè)元素發(fā)生變化就會(huì)失效還有程序在運(yùn)行的時(shí)候會(huì)檢索會(huì)比較慢,剝絲抽繭一層層的找會(huì)很慢,不建議使用;


driver.find_element_by_xpath('html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input').send_keys('Selenium')
8. 通過css定位:
1、css也頗為強(qiáng)大xpath可以干的事css也可以干,css的語(yǔ)法更為簡(jiǎn)潔,更為高效。而相對(duì)初學(xué)者xpath看起來更直觀,更好理解;

# 使用 css 通過 id 定位
driver.find_element_by_css_selector('#kw').send_keys('Selenium')
# 使用 css 通過 class 定位
driver.find_element_by_css_selector('.s_ipt').send_keys('Selenium')
# 使用 css 通過 name 定位
driver.find_element_by_css_selector("[name='wd']").send_keys('Selenium')
# 使用 css 通過 autocomplete 定位
driver.find_element_by_css_selector("[autocomplete='off']").send_keys('Selenium')
2、css除了使用元素的屬性定位也可以和xpath一樣使用層級(jí)關(guān)系進(jìn)行定位:

# 使用 css 通過 標(biāo)簽定位
driver.find_element_by_css_selector('input').send_keys('Selenium')
# 使用 css 標(biāo)簽屬性定位
driver.find_element_by_css_selector('input.s_ipt').send_keys('Selenium')
driver.find_element_by_css_selector('input#kw').send_keys('Selenium')
# 層級(jí)關(guān)系
driver.find_element_by_css_selector("input[id='kw']").send_keys('Selenium')
driver.find_element_by_css_selector("input[name='wd']").send_keys('Selenium')
driver.find_element_by_css_selector("input[autocomplete='off']").send_keys('Selenium')
# 層級(jí)關(guān)系
driver.find_element_by_css_selector("form#form>span>input").send_keys('Selenium')
driver.find_element_by_css_selector("form.fm>span>input").send_keys('Selenium')
driver.find_element_by_css_selector("form[name='f']>span>input").send_keys('Seleniu