元素定位應(yīng)該是自動(dòng)化測(cè)試的核心,要想操作一個(gè)元素,首先應(yīng)該識(shí)別這個(gè)元素。
webdriver提供了一系列的元素定位方法,常用的有以下幾種:
id
name
class name
link_text
partial link text
tag_name
xpath
css selector
id和name定位
案例:打開(kāi)百度首頁(yè),在搜索框自動(dòng)輸入“Selenium”關(guān)鍵詞,然后點(diǎn)擊搜索按鈕,查看搜索頁(yè)面。
from selenium import? webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
#driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_name("wd").send_keys("selenium")
sleep(2)
driver.find_element_by_id("su").click()
sleep(3)
driver.quit()
tag name定位
案例:打開(kāi)http://192.168.20.214/videoclient/頁(yè)面,在用戶名輸入框輸入用戶名“vorx”
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://192.168.20.214/videoclient/")
sleep(5)
# 定位標(biāo)簽名為input的元素
#driver.find_element_by_tag_name("input").send_keys("vorx")
#獲取頁(yè)面所有標(biāo)簽名為“input”的標(biāo)簽。
driver.find_elements_by_tag_name("input")[2].send_keys("vorx")
driver.find_elements_by_tag_name("input")[3].send_keys("vorx")
# 點(diǎn)擊登錄按鈕
# driver.find_element_by_id("btnLogin").click()
driver.find_elements_by_tag_name("input")[4].click()
sleep(5)
driver.quit()
class_name定位
根據(jù)標(biāo)簽中屬性class來(lái)進(jìn)行定位的一種方法
案例:打開(kāi)百度首頁(yè),在搜索框自動(dòng)輸入“selenium”,然后點(diǎn)擊搜索按鈕,查看搜索頁(yè)面。
from selenium import? webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_class_name("s_ipt").send_keys("selenium")
sleep(2)
driver.find_element_by_id("su").click()
sleep(3)
driver.quit()
link_text定位
link_test定位就是根據(jù)超鏈接文字進(jìn)行定位。
from selenium import? webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("https://www.baidu.com/")
driver.find_element_by_link_text("新聞").click()
sleep(2)
driver.find_element_by_partial_link_text("國(guó)內(nèi)").click()
sleep(3)
driver.quit()
XPath定位
XPath即為XML路徑語(yǔ)言,它是一種用來(lái)確定XML文檔中某部分位置的語(yǔ)言。XPath基于XML的樹(shù)狀結(jié)構(gòu),提供在數(shù)據(jù)結(jié)構(gòu)樹(shù)中找尋節(jié)點(diǎn)的能力。
xpath絕對(duì)與相對(duì)定位
from selenium import? webdriver
from time import sleep
driver = webdriver.Firefox()driver.get("http://www.baidu.com")
# 絕對(duì)路徑定位
#driver.find_element_by_xpath("/html/body/div[1]/div[1]/div[1]/div[1]/div[1]/form/span[1]/input").send_keys("selenium")
# 利用元素屬性定位--定位到input標(biāo)簽中為kw的元素
# driver.find_element_by_xpath("http://input[@id='kw']").send_keys("selenium")
# 定位input標(biāo)簽中name屬性為wd的元素
# driver.find_element_by_xpath("http://input[@name='wd']").send_keys("selenium")
# 定位所有標(biāo)簽元素中,class屬性為s_ipt的元素
driver.find_element_by_xpath("http://*[@class='s_ipt']").send_keys("selenium")
sleep(2)
driver.find_element_by_id("su").click()
sleep(3)
driver.quit()
Xpath層級(jí)與邏輯定位
from selenium import? webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://192.168.20.214/videoclient/")
# 層級(jí)和屬性結(jié)合定位driver.find_element_by_xpath("http://form[@id='form1']/div[4]/div[1]/div[2]/div[2]/input").send_keys("vorx")
driver.find_element_by_xpath("http://form[@id='form1']/div[4]/div[1]/div[2]/div[3]/input").send_keys("vorx")
# 邏輯運(yùn)算組合定位
# driver.find_element_by_xpath("http://input[@class='i-text' and @name='UserName']").send_keys("vorx")
# driver.find_element_by_xpath("http://input[@class='i-text' and @name='PassWord']").send_keys("vorx")
sleep(3)
driver.find_element_by_xpath("http://*[@id='btnLogin']").click()
sleep(3)
driver.quit()
Css定位
Selenium極力推薦使用CSS定位,而不是Xpath來(lái)定位元素,原因是CSS定位比XPath定位速度快,語(yǔ)法也更加簡(jiǎn)潔。
css常用定位方法
1. find element by css selector()
2. #id id選擇器根據(jù)id屬性類定位元素
3. .class class選擇器,根據(jù)class屬性值來(lái)定位元素
4. [attribute=’value’]根據(jù)屬性來(lái)定位元素
5. element>element根據(jù)元素層級(jí)來(lái)定位 父元素>子元素
from selenium import? webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
# 根據(jù)id來(lái)定位
# driver.find_element_by_css_selector("#kw").send_keys("selenium")
# driver.find_element_by_css_selector("#su").click()
# 根據(jù)class定位
# driver.find_element_by_css_selector(".s_ipt").send_keys("selenium")
# driver.find_element_by_css_selector(".bg.s_btn").send_keys("selenium")
# 根據(jù)屬性來(lái)定位
#driver.find_element_by_css_selector(“[autocomplete='off']").send_keys("selenium")
# sleep(3)
# driver.find_element_by_id("su").click()
# sleep(3)
# 通過(guò)元素層級(jí)來(lái)定位driver.find_element_by_css_selector("form#form>span>input").send_keys("selenium")
driver.find_element_by_css_selector("form#form>span>input[type='submit']").click()
sleep(3)
driver.quit()