Selenium元素定位之CSS定位


Selenium webdriver是完全模擬用戶在對瀏覽器進行操作,所有用戶都是在頁面進行的單擊、雙擊、輸入、滾動等操作,而webdriver也是一樣,所以需要我們指定元素讓webdriver進行單擊、雙擊、輸入等操作,所以元素定位是UI自動化測試的前提條件。

selenium總共有八種定位方法 

driver.find_elements_by_id()
driver.find_element_by_name()
driver.find_element_by_tag_name()
driver.find_element_by_class_name()
driver.find_element_by_link_text()
driver.find_element_by_partial_link_text()
driver.find_element_by_xpath()
driver.find_element_by_css_selector()

其中xpath與css為最常用的定位方式,本文章以百度搜索框為例重點介紹css定位的使用(python版本)

 

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

# 1)絕對路徑(一般不推薦使用,此處不介紹)
# 2)id選擇器
# driver.find_element_by_css_selector("#kw").send_keys("ethon")

# 3)class選擇器
# driver.find_element_by_css_selector(".s_ipt").send_keys("ethon")

# 4)其他屬性定位
# driver.find_element_by_css_selector("[autocomplete='off']").send_keys("ethon")

# 5)通過部分屬性定位
#      * 包含某個字符
#      ^ 以某個字符開關
#      $ 以某個字符結尾

# driver.find_element_by_css_selector("[autocomplete*='f']").send_keys("ethon")
# driver.find_element_by_css_selector("[autocomplete^='o']").send_keys("ethon")
# driver.find_element_by_css_selector("[autocomplete$='f']").send_keys("ethon")

# 6)通過層級定位
# driver.find_element_by_css_selector("form>span>input").send_keys("ethon")
# driver.find_element_by_css_selector("form#form>span>input").send_keys("ethon")  # 層級與id組合定位
# driver.find_element_by_css_selector("form.fm>span>input").send_keys("ethon")  # 層級與class組合定位

# 7)通過兄弟節點定位
# driver.find_element_by_css_selector("div#u1>a:first-child").click()
# driver.find_element_by_css_selector("div#u1>a:nth-child(2)").click()
driver.find_element_by_css_selector("div#u1>a:last-child").click()

 

CSS定位的簡單場景

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2>單選框</h2>
<div id="s_radio">
    <input type="radio" name="course" value="Java">Java<br/>
    <input type="radio" name="course" value="Python">Python<br/>
    <input type="radio" name="course" value="MySQL" checked="checked">MySQL<br/>
</div>
<h2>復選框</h2>
<div id="s_checkbox">
    <input type="checkbox" name="course" value="Java"/>Java<br/>
    <input type="checkbox" name="course" value="Python"/>Python<br/>
    <input type="checkbox" name="course" value="MySQL" checked="checked"/>MySQL<br/>
</div>
<h2>下拉框</h2>
<select id="s_select">
    <option value="Java">Java</option>
    <option value="Python">Python</option>
    <option value="MySQL">MySQL</option>
</select>
</body>
</html>
# 單選框的定位
driver = webdriver.Chrome("D:\\chromedriver.exe")
driver.get("D:\\test.html")
# s_radio input[value="Python"]  表示id為s_radio,子級為input元素且value屬性值為Python
driver.find_element_by_css_selector('#s_radio input[value="Python"]').click()
#復選框的定位
driver = webdriver.Chrome("D:\\chromedriver.exe")
driver.get("D:\\test.html")
elements = driver.find_elements_by_css_selector('#s_checkbox input[checked="checked"]')
# 取消默認選擇的數據
for element in elements:
    element.click()
driver.find_element_by_css_selector('#s_checkbox input[value="Java"]').click()
driver.find_element_by_css_selector('#s_checkbox input[value="Python"]').click()
#下拉框的定位
from selenium.webdriver.support.select import Select

driver = webdriver.Chrome("D:\\chromedriver.exe")
driver.get("D:\\test.html")
#以索引方式定位
Select(driver.find_element_by_id("s_select")).select_by_index("1")
#以value值方式定位
Select(driver.find_element_by_id("s_select")).select_by_value("Python")
#以文本值方式定位
Select(driver.find_element_by_id("s_select")).select_by_visible_text("Python")

 


免責聲明!

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



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