Web自動(dòng)化測(cè)試 四 ----- python selenium 八大元素定位
python selenium 八大元素定位方法
前提條件:先要引入webdriver模塊,創(chuàng)建一個(gè)Chrom瀏覽器對(duì)象,以及打開一個(gè)網(wǎng)頁(yè)(以百度為例)。
1 from selenium import webdriver 2 3 driver = webdriver.Chrome() 4 5 driver.get('http://www.baidu.com')
一、ID定位
driver.find_element_by_id('kw')
備注:
- 此方法相當(dāng)于JS中的getElementById(),ID是唯一的
- 但是ID值也是有可能動(dòng)態(tài)變化的,如果ID是帶數(shù)字的或者是使用的不太規(guī)則的字符串(可能經(jīng)過(guò)編碼處理),那么ID值很有可能是動(dòng)態(tài)變化的
- 盡量避免使用帶數(shù)字或者不規(guī)則的屬性去定位元素
二、name定位
driver.find_elements_by_name('wd') # 返回的是列表,找出來(lái)的元素不一定是唯一的
driver.find_element_by_name('wd') # 只會(huì)返回找到的第一個(gè)元素
- name屬性經(jīng)常用來(lái)進(jìn)行元素定位(input輸入、標(biāo)記),但是要注意radio和checkbox,返回的是一個(gè)WebElement。
實(shí)例:
new_ele = driver.find_element_by_name('tj_trnews')
print(new_ele.text) # 獲取元素的文本
print(new_ele.get_attribute('href')) # get_attribute方法用于獲取某個(gè)元素的某個(gè)屬性
print(new_ele.tag_name)
# 使用這種不唯一的屬性定位元素時(shí)。可以現(xiàn)在網(wǎng)頁(yè)上用js定位一下看屬性是否是唯一的
# 一個(gè)類的方法上有@property,表示把一個(gè)方法變?yōu)橐粋€(gè)屬性,叫做動(dòng)態(tài)屬性
三、classname定位
d = driver.find_element_by_class_name('s_btn')
d1 = driver.find_elements_by_class_name('s_btn')
- 如果classname有空格,要把有空格的部分去掉,再次確認(rèn)用沒(méi)用空格的部分查找看是否是唯一的元素
四、tagname標(biāo)簽名定位
- 基本不用,因?yàn)檎页鰜?lái)的元素一大把
五、超鏈接定位
a = driver.find_element_by_link_text('新聞')
六、partialLink定位
b = driver.find_element_by_partial_link_text('新') # 通過(guò)一部分查找
七、Xpath定位
1、定義
Xpath即為XML(XML Path Languagr),他是一種用來(lái)確定XML文檔中某個(gè)部分的語(yǔ)言。
組合:可以過(guò)濾很多元素。
層級(jí)關(guān)系:
- /表示兒子
- //表示所有的下屬標(biāo)簽(子孫)
- ..表示上一級(jí)
- .表示當(dāng)前層級(jí)
2、使用方法
//input[@class='s_ipt'] (謂語(yǔ)條件)
//input[@class='s_ipt' and not @name='wd' and @id='kw']
//input[text()='新聞']
//input[contains(text(), 'value')]
//input[contains(@class, 'value')]
元素構(gòu)成:
- tagname
- 屬性
- text
- 下屬標(biāo)簽
//相對(duì)定位[謂語(yǔ)條件(@class='')]/子元素tag[謂語(yǔ)條件]
軸定位/軸運(yùn)算:?jiǎn)聫?fù)古的寫法,但是更加靈活。
通過(guò)相對(duì)路徑定位
//parent::form[@id='form']
//軸關(guān)系::元素類型[謂語(yǔ)條件]
//input[@name='ie']//parent::form[@id='form']
//input[@name='ie']//parent::form[@class, 'value']
*表示 通配符
八、CSS定位
暫時(shí)沒(méi)總結(jié)
實(shí)例練習(xí):
"""
_*_ coding: utf - 8 _*_
@Time :2019/7/14:23:32
@Author :lemon_qiao
@Email :841195863@qq.com
@File :八大元素定位練習(xí).py
@ Software:PyCharm Community Edition
"""
from selenium.webdriver import Chrome
driver = Chrome()
driver.get('http://www.baidu.com')
# 1、ID定位
by_id = driver.find_element_by_id('kw') # 百度首頁(yè)的輸入框
print('by_id定位的ype為:【{}】,value為:【{}】'.format(type(by_id), by_id))
# 2、name定位
by_name = driver.find_element_by_name('wd') # 百度首頁(yè)的輸入框
by_name1 = driver.find_elements_by_name('wd') # 百度首頁(yè)的輸入框
print('by_name的type為:【{}】,value為:【{}】'.format(type(by_name), by_name))
print('by_name1的type為:【{}】,value為:【{}】'.format(type(by_name1), by_name1))
# 3、classname定位
# by_class = driver.find_element_by_class_name('btn self-btn bg s_btn') 有空格會(huì)報(bào)錯(cuò)
by_class = driver.find_element_by_class_name('s_btn')
by_class1 = driver.find_elements_by_class_name('s_btn')
print('by_class的type為:【{}】,value為:【{}】'.format(type(by_class), by_class))
print('by_class1的type為:【{}】,value為:【{}】'.format(type(by_class1), by_class1))
# 4、tagname標(biāo)簽名定位
by_tag = driver.find_element_by_tag_name('input')
print('by_tag的value為:【{}】:'.format(by_tag))
# 5、超鏈接定位
a = driver.find_element_by_link_text('新聞')
print('超鏈接定位a的type為:【{}】,value為:【{}】'.format(type(a), a))
# 6、partialLink定位
b = driver.find_element_by_partial_link_text('新') # 通過(guò)一部分查找
print('partialLink定位b的ype為:【{}】,value為:【{}】'.format(type(b), b))
# 7、Xpath定位
c = driver.find_element_by_xpath("http://a[text()='學(xué)術(shù)']")
# d = driver.find_element_by_xpath("http://span[contains(@class, 'refresh')]")
d = driver.find_element_by_xpath("http://input[@class='s_ipt' and @name='wd' and @id='kw']")
print('Xpath定位c的ype為:【{}】,value為:【{}】'.format(type(c), c))
print('Xpath定位d的ype為:【{}】,value為:【{}】'.format(type(d), d))
e = driver.find_element_by_xpath("http://a[contains(text(), '123')]")
f = driver.find_element_by_xpath("http://input[contains(@class, 'ipt')]")
# 軸定位
h = driver.find_element_by_xpath("http://input[@name='ie']//parent::form[@id='form']")
print(h)
運(yùn)行結(jié)果:
by_id定位的ype為:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value為:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-1")>】 by_name的type為:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value為:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-1")>】 by_name1的type為:【<class 'list'>】,value為:【[<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-1")>]】 by_class的type為:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value為:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-2")>】 by_class1的type為:【<class 'list'>】,value為:【[<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-2")>]】 by_tag的value為:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-3")>】: 超鏈接定位a的type為:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value為:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-4")>】 partialLink定位b的ype為:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value為:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-4")>】 Xpath定位c的ype為:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value為:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-5")>】 Xpath定位d的ype為:【<class 'selenium.webdriver.remote.webelement.WebElement'>】,value為:【<selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-1")>】 <selenium.webdriver.remote.webelement.WebElement (session="d60407228c0913a1db912c04f71b1683", element="0.6784901581685296-7")>

浙公網(wǎng)安備 33010602011771號(hào)