元素定位應該是自動化測試的核心扇商,要想操作一個元素歌憨,首先應該識別這個元素衣陶。
webdriver提供了一系列的元素定位方法,常用的有以下幾種:
id
name
class name
link_text
partial link text
tag_name
xpath
css selector
id和name定位
案例:打開百度首頁落竹,在搜索框自動輸入“Selenium”關鍵詞泌霍,然后點擊搜索按鈕,查看搜索頁面筋量。
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定位
案例:打開http://192.168.20.214/videoclient/頁面烹吵,在用戶名輸入框輸入用戶名“vorx”
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://192.168.20.214/videoclient/")
sleep(5)
# 定位標簽名為input的元素
#driver.find_element_by_tag_name("input").send_keys("vorx")
#獲取頁面所有標簽名為“input”的標簽。
driver.find_elements_by_tag_name("input")[2].send_keys("vorx")
driver.find_elements_by_tag_name("input")[3].send_keys("vorx")
# 點擊登錄按鈕
# driver.find_element_by_id("btnLogin").click()
driver.find_elements_by_tag_name("input")[4].click()
sleep(5)
driver.quit()
class_name定位
根據(jù)標簽中屬性class來進行定位的一種方法
案例:打開百度首頁桨武,在搜索框自動輸入“selenium”肋拔,然后點擊搜索按鈕,查看搜索頁面呀酸。
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ù)超鏈接文字進行定位凉蜂。
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("國內").click()
sleep(3)
driver.quit()
XPath定位
XPath即為XML路徑語言,它是一種用來確定XML文檔中某部分位置的語言性誉。XPath基于XML的樹狀結構窿吩,提供在數(shù)據(jù)結構樹中找尋節(jié)點的能力。
xpath絕對與相對定位
from selenium import? webdriver
from time import sleep
driver = webdriver.Firefox()driver.get("http://www.baidu.com")
# 絕對路徑定位
#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標簽中為kw的元素
# driver.find_element_by_xpath("http://input[@id='kw']").send_keys("selenium")
# 定位input標簽中name屬性為wd的元素
# driver.find_element_by_xpath("http://input[@name='wd']").send_keys("selenium")
# 定位所有標簽元素中错览,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層級與邏輯定位
from selenium import? webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://192.168.20.214/videoclient/")
# 層級和屬性結合定位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")
# 邏輯運算組合定位
# 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來定位元素,原因是CSS定位比XPath定位速度快倾哺,語法也更加簡潔轧邪。
css常用定位方法
1. find element by css selector()
2. #id id選擇器根據(jù)id屬性類定位元素
3. .class class選擇器,根據(jù)class屬性值來定位元素
4. [attribute=’value’]根據(jù)屬性來定位元素
5. element>element根據(jù)元素層級來定位 父元素>子元素
from selenium import? webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
# 根據(jù)id來定位
# 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ù)屬性來定位
#driver.find_element_by_css_selector(“[autocomplete='off']").send_keys("selenium")
# sleep(3)
# driver.find_element_by_id("su").click()
# sleep(3)
# 通過元素層級來定位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()