Selenium 八種元素定位方法


前言:

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

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

一、查看頁面元素

用谷歌瀏覽器打開百度首頁,按F12,就可以看到整個頁面的html代碼了

二、元素定位

  • id定位: find_element_by_id()
from selenium import webdriver
from time import sleep

drive = webdriver.Chrome()
drive.get('http://www.baidu.com')
sleep(3)
drive.find_element_by_id("kw").send_keys("selenium python")  # 通過 id 定位到搜索框,發送值 selenium python,find_element_by_id 查找元素通過 id
sleep(3)
drive.find_element_by_id("su").click()  # 通過 id 定位到搜索按鈕,點擊
sleep(3)
drive.quit()
  • name定位:find_element_by_name()
from selenium import webdriver
from time import sleep

drive = webdriver.Chrome()
drive.get('http://www.baidu.com')
sleep(3)
drive.find_element_by_name("wd").send_keys("selenium python")  # 通過 id 定位到搜索框,發送值 selenium python,find_element_by_id 查找元素通過 id
sleep(3)
drive.find_element_by_id("su").click()  # 通過 id 定位到搜索按鈕,點擊
sleep(3)
drive.quit()
  • tag定位:find_element_by_tag_name() ---下面代碼僅做參考,運行時必定報錯
from selenium import webdriver
from time import sleep

drive = webdriver.Chrome()
drive.get('http://www.baidu.com')
sleep(3)
drive.find_element_by_tag_name("input").send_keys("selenium python")  # 通過 id 定位到搜索框,發送值 selenium python,find_element_by_id 查找元素通過 id
sleep(3)
drive.find_element_by_id("su").click()  # 通過 id 定位到搜索按鈕,點擊
sleep(3)
drive.quit()
  • link定位:find_element_by_link_text()
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_link_text('新聞').click()
sleep(3)
driver.quit()
  • partial_link定位:find_element_by_partial_link_text()
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_partial_link_text('聞').click()
sleep(3)
driver.quit()
  • class_name定位:find_element_by_class_name()
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_class_name("s_ipt").click()
sleep(3)
driver.quit()
  • CSS定位:find_element_by_css_selector()
    Selenium 推薦使用 css 定位,而不是 xpath 來定位元素,原因是 css 定位比 xpath 定位速度快,語法也更加簡潔
    Css 常用方法定位
    (1) find_element_by_css_selector()
    (2) #id id 選擇器根據 id 屬性來定位元素
    (3) .class class 選擇器,根據 class 屬性值來定位元素
    (4) [attribute=’value’] 根據屬性來定位元素
    (5) element>element 根據元素層級來定位 父元素>子元素
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_css_selector('#kw').click()
sleep(3)
driver.quit()

css相對路徑定位:

driver.find_element_by_css_selector("input[value='查詢']")
  • xpath定位:find_element_by_xpath
    1.標簽+屬性定位——xpath = "//標簽名[@屬性='屬性值']"
    例如,百度首頁的輸入框的xpath就可以表示為//[@id="kw"],其中表示所有的標簽名
    當單一的屬性無法確定到一個元素時,可以使用組合屬性的方式
    例如,百度首頁的輸入框可以表示為//*[@id="kw" and @name="wd"]
    當然,也可以使用其他的邏輯運算,比如or、not
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_xpath('//*[@id="kw"]').click()
sleep(3)
driver.quit()

2.text()方法定位

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_xpath("//*[text()='新聞']").click()
sleep(3)
driver.quit()

3.contains()方法定位,也叫模糊定位
xpath = "//標簽名[contains(@屬性, '屬性值')]"

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_xpath("//a[contains(@name,'news')]").click()
sleep(3)
driver.quit()

4.starts-with ,ends-with方法定位
starts-with -- 匹配以xx開頭的屬性值;ends-with -- 匹配以xx結尾的屬性值

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_xpath("//*[starts-with(@value,'百度一')]").click()
sleep(3)
driver.quit()

5.如果一個元素無法通過自身的屬性定位到,那么可以先定位到他的上一級或者上N級,然后再一級一級地找到他

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_xpath("//form[@id='form']/span[contains(@class,'s_ipt_wr')]/input").send_keys("selenium")
sleep(3)
driver.quit()


免責聲明!

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



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