天天看點

selenium八種元素定位方式id和nametag name和class nameCSS定位XPath定位link text定位partial link text定位

元素的定位是自動化測試的核心, 要想操作一個對象, 首先應該識别這個對象. 一個對象就是像一個人一樣, 她們會有各種的特征, 我們可以通過一個人的身份證号, 姓名等找到這個人. 那麼對象也有類似的屬性, 我們可以通過這個屬性找到這個對象.

webdriver提供了一系列的對象定位方法, 常用的有以下幾種:

  • id
  • name
  • tag name
  • class name
  • css
  • XPath
  • link text
  • partial link text

id和name

id和name是我們最常用的定位方式, 因為大多數空間都有這兩個屬性, 而且在對控件的id和name命名時一般使其有意義也會取不同的名字, 通過這兩個屬性定位一個屬性變得比較容易

通過前端工具, 例如Chrome的F12, 找到了百度輸入框的屬性資訊:

<input id = "kw" class = "s_ipt" type = "text" maxlength = "100" name = "wd" autocomplete = "off">
           

id = “kw” 通過**find_element_by_id(“kw”)函數就是捕獲到百度輸入框

name = “kd” 通過find_element_by_name(“wd”)**函數也同樣可以捕獲百度輸入框

tag name和class name

從上面的百度輸入框中的屬性資訊中, 我們可以看到, 不單單隻有id和name屬性, 比如class和tag name

  • input就是一個标簽的名字, 可以通過**find_element_by_tag_name(“input”)**函數來定位
  • class = “s_ipt”, 通過**find_element_by_class_name(“s_ipt”)**函數捕獲百度輸入框

CSS定位

CSS使用選擇器來為頁面元素綁定屬性, 這些選擇器可以倍selenium用作另外的定位政策

CSS可以靈活的選擇控件的任意屬性find_element_by_css_selector()函數

CSS的擷取可以用chrome的F12開發者模式中的element-右鍵-copy selector來擷取

XPath定位

XPath是一種在XML文檔中定位元素的語言. 因為HTML可以看作XML的一種實作, 是以selenium使用者可以是使用這種強大的語言在web應用中定位元素

XPath擴充了上面id和name定位方式, 提供了很多種可能性

find_element_by_xpath()

XPath的擷取可以用chrome的F12開發者模式中的element-右鍵-copy selector來擷取

link text定位

這種方法主要是用來定位文本連結的, 比如百度首頁上面有"新聞","地圖"等, 以定位"新聞"這個連結元素為例

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

# 驅動檔案路徑
driverfile_path = ****(chrome的路徑)
# 啟動浏覽器
driver = webdriver.Chrome(executable_path = driverfile_path)
# 打開百度首頁
driver.get(r'https://www.baidu.com/')
# 通過link定位"新聞"這個連結并點選
driver.find_element_by_link_text("新聞").click()
# 等待5s
sleep(5)
# 退出
driver.quit()
           

partial link text定位

通過部分連結定位, 有時候超連結的文本很長很長, 如果全部輸入, 既麻煩又不美觀, 這時候就可以隻截取部分字元串, 用這種方法模糊比對

用這種方法來定位百度首頁的"新聞超連結", 就是把上面代碼中的定位代碼換為driver.find_element_by_partial_link_text(‘聞’).clock()