1. 程式人生 > >Selenium:八種元素定位方法

Selenium:八種元素定位方法

前言:

    我們在做WEB自動化時,最根本的就是操作頁面上的元素,首先我們要能找到這些元素,然後才能操作這些元素。工具或程式碼無法像我們測試人員一樣用肉眼來分辨頁面上的元素。那麼我們怎麼來定位他們呢?

在學習元素定位之前,我們最好能懂一點html的知識。

web driver提供了八種元素定位的方法:

id name class name tag name
link text partial link text xpath css selector

 

 

簡單介紹:

# 通過ID定位目標元素
driver.find_element_by_id('i1')
 
# 通過className定位目標元素
driver.find_element_by_class_name('c1')
 
# 通過name屬性定位目標元素
driver.find_element_by_name('n1')
 
# 通過Xpath定位目標元素
driver.find_element_by_xpath('//*[@id="i1"]')
 
# 通過css Selector定位目標元素
driver.find_element_by_css_selector('
#i1') # 通過標籤名稱定位(注:在一個頁面中,標籤一定會重複,所以不用這個來進行定位) driver.find_element_by_tag_name('input') # 通過標籤中的文字查詢元素 driver.find_element_by_link_text('登入') # 通過標籤中文字的模糊匹配查詢 driver.find_elements_by_partial_link_text('')

 

詳細解釋:

1、id定位: find_element_by_id()

從上面定位到的搜尋框屬性中,有個id="kw"的屬性,我們可以通過這個id定位到這個搜尋框

 程式碼:

# coding = utf-8
from time import sleep
from selenium import webdriver


# 啟動瀏覽器
driver = webdriver.Chrome(executable_path='/usr/local/opt/drivers/chromedriver')
# 開啟百度首頁
driver.get(r'https://www.baidu.com/')
# 通過id定位搜尋框,並輸入selenium
driver.find_element_by_id('kw').send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()

2、name定位: find_element_by_name()

從上面定位到的搜尋框屬性中,有個name="wd"的屬性,我們可以通過這個name定位到這個搜尋框

程式碼:

# coding = utf-8
from time import sleep
from selenium import webdriver

# 驅動檔案路徑
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 啟動瀏覽器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 開啟百度首頁
driver.get(r'https://www.baidu.com/')
# 通過name定位搜尋框,並輸入selenium
driver.find_element_by_name('wd').send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()

3、class定位:find_element_by_class_name()

從上面定位到的搜尋框屬性中,有個class="s_ipt"的屬性,我們可以通過這個class定位到這個搜尋框

程式碼:

# coding = utf-8
from time import sleep
from selenium import webdriver

# 驅動檔案路徑
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 啟動瀏覽器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 開啟百度首頁
driver.get(r'https://www.baidu.com/')
# 通過class定位搜尋框,並輸入selenium
driver.find_element_by_class_name('s_ipt').send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()

4、tag定位:find_element_by_tag_name()

如果懂HTML知識,我們就知道HTML是通過tag來定義功能的,比如input是輸入,table是表格,等等...。每個元素其實就是一個tag,一個tag往往用來定義一類功能,我們檢視百度首頁的html程式碼,可以看到有很多div,input,a等tag,所以很難通過tag去區分不同的元素。基本上在我們工作中用不到這種定義方法,僅瞭解就行。下面程式碼僅做參考,執行時必定報錯

程式碼:

# coding = utf-8
from time import sleep
from selenium import webdriver

# 驅動檔案路徑
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 啟動瀏覽器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 開啟百度首頁
driver.get(r'https://www.baidu.com/')
# 通過tag定位搜尋框,並輸入selenium, 此處必報錯
driver.find_element_by_tag_name('input').send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()

5、link定位:find_element_by_link_text()

此種方法是專門用來定位文字連結的,比如百度首頁右上角有“新聞”,“hao123”,“地圖”等連結

我們來定位“新聞”這個連結元素

程式碼:

# coding = utf-8
from time import sleep
from selenium import webdriver

# 驅動檔案路徑
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 啟動瀏覽器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 開啟百度首頁
driver.get(r'https://www.baidu.com/')
# 通過link定位"新聞"這個連結並點選
driver.find_element_by_link_text('新聞').click()
# 等待5秒
sleep(5)
# 退出
driver.quit()

 

6、partial_link定位:find_element_by_partial_link_text()

有時候一個超連結的文字很長很長,我們如果全部輸入,既麻煩,又顯得程式碼很不美觀,這時候我們就可以只擷取一部分字串,用這種方法模糊匹配了。

我們用這種方法來定位百度首頁的“新聞”超連結

# coding = utf-8
from time import sleep
from selenium import webdriver

# 驅動檔案路徑
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 啟動瀏覽器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 開啟百度首頁
driver.get(r'https://www.baidu.com/')
# 通過partial_link定位"新聞"這個連結並點選
driver.find_element_by_partial_link_text('').click()
# 等待5秒
sleep(5)
# 退出
driver.quit()

 

7、xpath定位:find_element_by_xpath()

前面介紹的幾種定位方法都是在理想狀態下,有一定使用範圍的,那就是:在當前頁面中,每個元素都有一個唯一的id或name或class或超連結文字的屬性,那麼我們就可以通過這個唯一的屬性值來定位他們。

但是在實際工作中並非有這麼美好,有時候我們要定位的元素並沒有id,name,class屬性,或者多個元素的這些屬性值都相同,又或者重新整理頁面,這些屬性值都會變化。那麼這個時候我們就只能通過xpath或者CSS來定位了。

程式碼:

 

# coding = utf-8
from time import sleep
from selenium import webdriver

# 驅動檔案路徑
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 啟動瀏覽器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 開啟百度首頁
driver.get(r'https://www.baidu.com/')
# 通過xpath定位搜尋框,並輸入selenium
driver.find_element_by_xpath("//*[@id='kw']").send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()

8、CSS定位:find_element_by_css_selector()

這種方法相對xpath要簡潔些,定位速度也要快些,但是學習起來會比較難理解,這裡只做下簡單的介紹。

CSS定位百度搜索框

# coding = utf-8
from time import sleep
from selenium import webdriver

# 驅動檔案路徑
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 啟動瀏覽器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 開啟百度首頁
driver.get(r'https://www.baidu.com/')
# 通過CSS定位搜尋框,並輸入selenium
driver.find_element_by_css_selector('#kw').send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()