本文實例講述了Selenium定位元素操作。分享給大家供大家參考,具體如下:
Selenium是一個用于Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。這個工具的主要功能包括:測試與瀏覽器的兼容性——測試你的應用程序看是否能夠很好得工作在不同瀏覽器和操作系統之上。測試系統功能——創建回歸測試檢驗軟件功能和用戶需求。支持自動錄制動作和自動生成 .Net、Java、Perl等不同語言的測試腳本。
在前面一篇《Selenium基本用法》中簡單記錄了Selenium的使用,接下來記錄一下元素的定位,Selenium提供了多種策略來定位頁面中的元素,Selenium提供了以下方法來定位頁面中元素,你可以根據自己的喜好來進行選擇:
- find_element_by_id:通過ID進行匹配查找,只返回匹配到的一個元素
- find_element_by_name:通過name進行匹配查找,只返回匹配到的一個元素
- find_element_by_xpath:通過xpath進行匹配查找,只返回匹配到的一個元素
- find_element_by_link_text:通過鏈接內容進行匹配查找,只返回匹配到的一個元素
- find_element_by_partical_link_text:通過部分鏈接內容進行匹配查找,只返回匹配到的一個元素
- find_element_by_tag_name:通過標簽名稱進行匹配查找,只返回匹配到的一個元素
- find_element_by_class_name:通過class名稱進行匹配查找,只返回匹配到的一個元素
- find_element_by_css_selector:通過CSS選擇器進行匹配查找,只返回匹配到的一個元素
值得注意的是,上面方法只會匹配查找只會獲取第一個元素。除了上面這些查找單個元素的方法之外,Selenium還定義查找多個元素的方法:
- find_elements_by_name:通過name進行匹配查找,返回所有匹配到的元素列表
- find_elements_by_xpath:通過xpath進行匹配查找,返回所有匹配到的元素列表
- find_elements_by_link_text:通過鏈接內容進行匹配查找,返回所有匹配到的元素列表
- find_elements_by_partical_link_text:通過部分鏈接內容進行匹配查找,返回所有匹配到的元素列表
- find_elements_by_tag_name:通過標簽名稱進行匹配查找,返回所有匹配到的元素列表
- find_elements_by_class_name:通過class名稱進行匹配查找,返回所有匹配到的元素列表
- find_elements_by_css_selector:通過CSS選擇器進行匹配查找,返回所有匹配到的元素列表
除了上面給出的公有方法之外,Selenium還提供了兩種私有方法可能對頁面對象中的定位器有用,這兩個私有方法是:find_element
和find_elements
:
1
2
3
|
from selenium.webdriver.common.by import By element = driver.find_element(By.XPATH, '//*[@id="su"]' ) elements = driver.find_elements(By.XPATH, '//button' ) |
下面是By
可用的屬性:
1
2
3
4
5
6
7
8
|
ID = 'id' NAME = 'name' XPATH = 'xpath' LINK_TEXT = '鏈接內容' PARTIAL_LINK_TEXT = '部分鏈接內容' TAG_NAME = '標簽名稱' CLASS_NAME = '類名' CSS_SELECTOR = 'CSS選擇器' |
通過ID定位
當你知道元素的ID屬性時,你可以使用它,使用此策略,將返回ID屬性值與該匹配的第一個元素。如果沒有元素匹配到此ID屬性,將會引發NoSuchElementException錯誤,舉個栗子,有這樣一個數據源:
1
|
< input id = "login_id" type = "text" /> |
我們知道了這個元素的ID,我們可以這樣進行定位:
1
|
element = driver.find_element_by_id( 'login_id' ) |
通過name定位
當你知道元素的name屬性時,你可以使用它,使用此策略,將返回name屬性值與該匹配的第一個元素。如果沒有元素匹配到此name屬性,將會引發NoSuchElementException錯誤,舉個栗子,有這樣一個數據源:
1
|
< input name = "login" type = "text" /> |
我們知道了這個元素的name,我們可以這樣進行定位:
1
|
element = driver.find_element_by_name( 'login' ) |
通過XPath定位
XPath是用于在XML文檔中查找節點的語言,由于XML可以是HTML的實現,因此Selenium用戶可以利用這種強大的語言來定位其Web應用程序中的元素。XPath擴展了通過id和name屬性定位的簡單方法,并打開了各種新的可能性,例如在頁面中查找第三個復選框。舉個栗子,有這樣一個數據源:
1
2
3
4
5
6
7
8
9
10
|
< html > < body > < form id = "loginForm" > < input name = "username" type = "text" /> < input name = "password" type = "password" /> < input name = "continue" type = "submit" value = "Login" /> < input name = "continue" type = "button" value = "Clear" /> </ form > </ body > < html > |
我們可以這樣進行定位:
1
|
user_element = driver.find_element_by_xpath( "/html/body/form/input[@name='username']" ) |
或者
1
|
user_element = driver.find_element_by_xpath( "/html/body/form/input" ) |
或者
1
|
user_element = driver.find_element_by_xpath( '//input[1]' ) |
或者
1
|
user_element = driver.find_element_by_xpath( "//input[@name='username'][@type='text']" ) |
通過鏈接內容定位
當你知道鏈接元素的內容時,你可以使用它,使用此策略,將返回鏈接內容與該匹配到的第一個元素。如果沒有元素匹配到此鏈接內容,將會引發NoSuchElementException錯誤,舉個栗子,有這樣一個數據源:
1
2
3
4
5
6
7
|
< html > < body > < p >Are you sure you want to do this?</ p > < a href = "continue.html" rel = "external nofollow" rel = "external nofollow" >Continue</ a > < a href = "cancel.html" rel = "external nofollow" >Cancel</ a > </ body > < html > |
其中<a href="continue.html" rel="external nofollow" rel="external nofollow" >Continue</a>
元素可以這樣定位:
1
|
element = driver.find_element_by_link_text( 'Continue' ) |
或者
1
|
element = driver.find_element_by_partical_link_text( 'Con' ) |
通過標簽名稱定位
當你知道標簽的名稱時,你可以使用它,使用此策略,將返回標簽名稱與該匹配到的第一個元素。如果沒有元素匹配到此標簽名稱時,將會引發NoSuchElementException錯誤,舉個栗子,有這樣一個數據源:
1
2
3
4
5
6
|
< html > < body > < h1 >Welcome</ h1 > < p >Site content goes here.</ p > </ body > < html > |
我們可以這樣對<p>
元素進行定位:
1
|
element = driver.find_element_by_tag_name( "p" ) |
通過類名進行定位
當你知道類名的時候,你可以使用它,使用此策略,將返回類名與該匹配到的第一個元素。如果沒有元素匹配到此類名稱時,將會引發NoSuchElementException錯誤,舉個栗子,有這樣一個數據源:
1
2
3
4
5
|
< html > < body > < p class = "content" >Site content goes here.</ p > </ body > < html > |
我們可以這樣對<p>
元素進行定位:
1
|
element = driver.find_element_by_class_name( 'content' ) |
通過CSS選擇器進行定位
當你想通過CSS選擇器語法找到一個元素時,你可以使用它,使用此策略,將返回匹配CSS選擇器的第一個元素。如果沒有元素匹配到此CSS選擇器時,將會引發NoSuchElementException錯誤,舉個栗子,有這樣一個數據源:
1
2
3
4
5
|
< html > < body > < p class = "content" >Site content goes here.</ p > </ body > < html > |
我們可以這樣對<p>
元素進行定位:
1
|
element = driver.find_element_by_css_selector( 'body p' ) |
希望本文所述對大家Python程序設計有所幫助。
原文鏈接:https://blog.csdn.net/y472360651/article/details/79659968