文章目錄
- 一、元素定位的八大方法
- 1、基于 id/name/class/tag_name 定位
- 2、基于 a 標簽元素的鏈接文本定位
- 3、基于xpath定位
- 4、css定位
- 二、瀏覽器操作
- 1、信息獲取
- 2、 瀏覽器關閉
- 3、 瀏覽器控制
一、元素定位的八大方法
web 自動化測試就是通過代碼對網頁進行測試,在對網頁進行測試之前,必須掌握如何
1、基于 id/name/class/tag_name 定位
2、基于 a 標簽元素的鏈接文本定位
import time
from selenium import webdriverdriver=webdriver.Chrome()
driver.get("http://www.baidu.com")
time.sleep(2)
# type: WebElement
el_select=driver.find_element_by_id("kw")
#通過元素的name屬性定位
el2=driver.find_element_by_name("wd")
# 通過標簽定位 一般情況下 不用這個
el4=driver.find_element_by_tag_name("input")
# class屬性定位
el3=driver.find_element_by_class_name("s_ipt")# 通過鏈接文本定位
el6=driver.find_element_by_link_text("新聞")
el6.click()
# 通過部分鏈接文本定位
el7=driver.find_element_by_partial_link_text("新")
el7.click()
# 返回元素列表[]
els=driver.find_elements_by_partial_link_text("新")
3、基于xpath定位
# 通過絕對路徑定位
import time
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
time.sleep(2)
# driver.find_element_by_xpath("xpath語句如何來寫")
# 通過絕對路徑定位(不要用) 不只是為了定位這個元素,考慮腳本的穩定 通過/從頁面開
始標簽一直導航到目標標簽
el1=driver.find_element_by_xpath("/html/body/div[1]/div[1]/div[5]/div/di
v/form/span[1]/input")
# 通過相對路徑定位 //開頭 經常用到的方法
el2=driver.find_element_by_xpath("//form/span/input")
# 標簽+索引=唯一定位目標標簽
el3=driver.find_element_by_xpath("//form/span[1]/input")
# 唯一定位標簽+屬性
el4=driver.find_element_by_xpath("//form[@id='form']/span[1]/input[@id
='kw']")
# 唯一定位標簽+多個屬性
el5=driver.find_element_by_xpath("//form[@id='form'and @name='f']/span
[1]/input[@id='kw']")
# 標簽+部分屬性定位 s_ipt
el6=driver.find_element_by_xpath("//form/span[1]/input[substring(@class,
3)='ipt']")
el7=driver.find_element_by_xpath("//form/span[1]/input[contains(@id,'k
w')]")
el8=driver.find_element_by_xpath("//form/span[1]/input[starts‐with(@i
d,'k')]")
el9=driver.find_element_by_xpath("//div[@id='s‐top‐left']/a[text()='新
聞']")
# 元素操作:輸入 send_keys
el7.send_keys("web 自動化測試")
time.sleep(2)
driver.close()
# copyxpath 頁面工具復制
el10=driver.find_element_by_xpath('//*[@id="kw"]')
# //標簽[屬性]
# 通過文本定位
el11=driver.find_element_by_xpath("//a[text()='新聞']")
el6.click()
# xpath定位 =屬性+文本+索引 綜合使用
# xpath定位能否定位到
4、css定位
import time
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver=webdriver.Chrome()
driver.get("https://www.baidu.com")
# 1通過絕對路徑進行定位 一般不用
el1=driver.find_element_by_css_selector("html body div div div div div f
orm span input ")
el2=driver.find_element_by_css_selector("html>body> div> div> div> div >
div> form> span> input ")# 2通過id定位 #id屬性值
# 3通過class屬性定位 .class屬性值 s_ipt
el3=driver.find_element_by_css_selector("#kw")
el4=driver.find_element_by_css_selector('.s_ipt')# 4通過其他屬性定位,并且多個屬性定位
el5=driver.find_element_by_css_selector("[autocomplete='off']")
el6=driver.find_element_by_css_selector("[autocomplete='off'][class='s_i
pt']")# 5通過標簽定位 標簽名+屬性/id/class進行定位 組合定位
el7=driver.find_element_by_css_selector("input#kw")
el8=driver.find_element_by_css_selector("input.s_ipt")
el9=driver.find_element_by_css_selector("input[autocomplete='off']")#6通過層級定位 層級之間通過>或者空格隔開 相對路徑
el10=driver.find_element_by_css_selector("form#form>span>input#kw")
# 通過兄弟節點定位
# 場景:同一個元素下面多一個相同的元素 多胞兄弟
# 第一個元素 標簽:first‐child
# 第二個元素 標簽:nth‐child(n)
# 最后元素 標簽:last‐of‐type
el11=driver.find_element_by_css_selector("div#s‐top‐left>a:first‐child")
el12=driver.find_element_by_css_selector("div#s‐top‐left>a:nth‐
child(3)")
el13=driver.find_element_by_css_selector("div#s‐top‐left>a:last‐of‐
type")
# el13.click()
# el10.send_keys("chromedriver")
# time.sleep(2)
# driver.close()"""
定位多個元素
"""
ellist=driver.find_elements_by_css_selector("#kw")
print(ellist)
# 返回WebElement
el14=ellist[0]"""
元素定位是否通過一個方法,支持所有的定位方式定位到元素
find_element()
find_elements() 基于多個定位方式找到一組元素
"""el15=driver.find_element(By.CSS_SELECTOR,"#kw")
el16=driver.find_element(By.ID,"kw")
el14.send_keys("chromedriver")
time.sleep(2)
driver.close()
"""
webdriver底層關于元素定位 8+8+2=18
"""
二、瀏覽器操作
1、信息獲取
print("瀏覽器名稱",driver.name)
print("網站標題",driver.title)
print("網站地址",driver.current_url)
print("網站源碼",driver.page_source)
2、 瀏覽器關閉
- python 執行完畢會自動關閉
- 退出瀏覽器
driver.quit()
- 關閉當前窗口
driver.close()
3、 瀏覽器控制
代碼是 driver.xxxxxx
driver.maximize_window() #最大化窗口
driver.set_window_size(390, 844) #設置窗口大小
driver.back() #回到空白頁面
driver.forward() #前進到上一次訪問的頁面
driver.refresh() #刷新:地址不變,輸入框的內容全部丟失