Web自動化測試 四 ----- python selenium 八大元素定位


python selenium 八大元素定位方法

前提條件:先要引入webdriver模塊,創建一個Chrom瀏覽器對象,以及打開一個網頁(以百度為例)。

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')

  備注:

  • 此方法相當於JS中的getElementById(),ID是唯一的
  • 但是ID值也是有可能動態變化的,如果ID是帶數字的或者是使用的不太規則的字符串(可能經過編碼處理),那么ID值很有可能是動態變化的
  • 盡量避免使用帶數字或者不規則的屬性去定位元素

二、name定位

driver.find_elements_by_name('wd') # 返回的是列表,找出來的元素不一定是唯一的
driver.find_element_by_name('wd') # 只會返回找到的第一個元素
  • name屬性經常用來進行元素定位(input輸入、標記),但是要注意radio和checkbox,返回的是一個WebElement。

實例:

new_ele = driver.find_element_by_name('tj_trnews')
print(new_ele.text)  # 獲取元素的文本
print(new_ele.get_attribute('href')) # get_attribute方法用於獲取某個元素的某個屬性
print(new_ele.tag_name)
# 使用這種不唯一的屬性定位元素時。可以現在網頁上用js定位一下看屬性是否是唯一的
# 一個類的方法上有@property,表示把一個方法變為一個屬性,叫做動態屬性

  

三、classname定位

d = driver.find_element_by_class_name('s_btn')
d1 = driver.find_elements_by_class_name('s_btn')
  • 如果classname有空格,要把有空格的部分去掉,再次確認用沒用空格的部分查找看是否是唯一的元素

四、tagname標簽名定位

  • 基本不用,因為找出來的元素一大把

五、超鏈接定位

a = driver.find_element_by_link_text('新聞')

六、partialLink定位

b = driver.find_element_by_partial_link_text('新') # 通過一部分查找

七、Xpath定位

1、定義

Xpath即為XML(XML Path Languagr),他是一種用來確定XML文檔中某個部分的語言。

組合:可以過濾很多元素。

層級關系:

  • /表示兒子
  • //表示所有的下屬標簽(子孫)
  • ..表示上一級 
  • .表示當前層級

2、使用方法

//input[@class='s_ipt'] (謂語條件)
//input[@class='s_ipt' and not @name='wd' and @id='kw']

//input[text()='新聞']
//input[contains(text(), 'value')]
//input[contains(@class, 'value')]

元素構成:

  • tagname
  • 屬性
  • text
  • 下屬標簽

//相對定位[謂語條件(@class='')]/子元素tag[謂語條件]

軸定位/軸運算:啰嗦復古的寫法,但是更加靈活。 

通過相對路徑定位

//parent::form[@id='form']
//軸關系::元素類型[謂語條件]
//input[@name='ie']//parent::form[@id='form']
//input[@name='ie']//parent::form[@class, 'value']
*表示 通配符

八、CSS定位

暫時沒總結

 

實例練習:

""" 
 _*_ coding: utf - 8 _*_
 @Time        :2019/7/14:23:32
 @Author      :lemon_qiao
 @Email       :841195863@qq.com
 @File        :八大元素定位練習.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') # 百度首頁的輸入框
print('by_id定位的ype為:【{}】,value為:【{}】'.format(type(by_id), by_id))

# 2、name定位
by_name = driver.find_element_by_name('wd')  # 百度首頁的輸入框
by_name1 = driver.find_elements_by_name('wd')  # 百度首頁的輸入框
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')  有空格會報錯
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標簽名定位
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('新') # 通過一部分查找
print('partialLink定位b的ype為:【{}】,value為:【{}】'.format(type(b), b))

# 7、Xpath定位
c = driver.find_element_by_xpath("//a[text()='學術']")
# d = driver.find_element_by_xpath("//span[contains(@class, 'refresh')]")
d = driver.find_element_by_xpath("//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("//a[contains(text(), '123')]")
f = driver.find_element_by_xpath("//input[contains(@class, 'ipt')]")

# 軸定位
h = driver.find_element_by_xpath("//input[@name='ie']//parent::form[@id='form']")
print(h)

  運行結果:

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")>

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM