如有任何學習問題,可以添加作者微信:lockingfree
目錄
- Selenium自動化測試基礎
- Selenium自動化測試第一天(上)
- Selenium自動化測試第一天(下)
- Selenium自動化測試第二天(上)
- Selenium自動化測試第二天(下)
Selenium是一款浏覽器自動化架構,Webdriver是其核心,同過Webdriver将自動化腳本轉化為浏覽器操作指令。
一般操作邏輯為:
- 打開網頁
- 定位頁面元素(連結,按鈕,輸入框等)
- 操作頁面元素(點選,輸入)
- 定位并操作下一個頁面元素
Webdriver的工作原理
Webdriver會在本地啟動一套WebService服務并綁定一個動态端口,腳本運作時通過selenium将請求發送到Webdriver服務端,然後經過不同的浏覽器驅動,轉換為浏覽器指令。
浏覽器基本操作
- 方法
- get():打開網頁
- forward():前進
- back(): 後退
- refresh(): 重新整理頁面
- maximize_window():最大化視窗
- set_window_size():設定視窗大小
- close(): 關閉目前頁面
- quit(): 退出浏覽器
- 屬性
- title:标題
- current_url:目前網址
-
page_source:網頁源代碼
示例:
from selenium import webdriver
from time import sleep
browser = webdriver.Chrome() # 打開Chrome
# browser = webdriver.Firefox() # 打開Firefox
# browser = webdriver.Edge() # 打開Edge
# browser = webdriver.Ie() # 打開Ie
browser.get("http://www.baidu.com") # 打開網頁
browser.maximize_window() # 視窗最大化
print(browser.title) # 目前頁面的标題
print(browser.current_url) # 目前url
print(browser.page_source) # 網頁源代碼
sleep(1)
browser.get("http://115.28.108.130/control.html")
sleep(1)
browser.back() # 後退
sleep(1)
browser.forward() # 前進
browser.refresh() # 重新整理
sleep(3)
browser.quit() # 退出
頁面元素定位
8種基本定位方式
- 通過id定位: find_element_by_id()
- 通過name定位: find_element_by_name()
- 通過class定位: find_element_by_class_name()
- 通過tag定位: find_element_by_tag_name()
- 通過link定位: find_element_by_link_text()
- 通過partial link定位: find_element_by_partial_link_text()
- 通過xpath定位: find_element_by_xpath()
- 通過css定位: find_element_by_css_selector()
from selenium import webdriver
from time import sleep
browser = webdriver.Chrome()
browser.maximize_window()
browser.get("http://115.28.108.130/control.html")
browser.find_element_by_id("accountID").send_keys("hello")
browser.find_element_by_name("password").send_keys("123456")
browser.find_element_by_class_name("stuname").send_keys("class")
div = browser.find_element_by_tag_name("div") # 重複較多,隻能定位到第一個,不推薦使用
print(div.get_attribute("id"))
# browser.find_element_by_link_text("百度首頁走起~").click()
link = browser.find_element_by_link_text("百度首頁走起~")
print(link.text)
link.click()
sleep(1)
browser.back()
browser.find_element_by_partial_link_text("百度首頁").click()
browser.back()
label2 = browserb.find_element_by_xpath('/html/body/div[4]/label[2]')
print(label2.text)
summer = browser.find_element_by_xpath('//input[@id="u"][@value="summer"]')
summer.click()
browser.find_element_by_css_selector('#input > input').send_keys("1111")
browser.find_element_by_css_selector("#accountID").send_keys("張三")
補充:用By定位元素:
- find_element(By.ID,"")
- find_element(By.NAME, "")
- find_element(By.CLASS_NAME, "")
- find_element(By.TAG_NAME, "")
- find_element(By.LINK_TEXT, "")
- find_element(By.PARTIAL_LINK_TEXT, "")
- find_element(By.XPATH, "")
- find_element(By.CSS_SELECTOR, "")
定位一組元素
當元素擁有相同的id/name/class_name/tag_name等時,可以定位到所有的元素,然後按順序取得具體某個元素,這裡使用
find_elements_by_***
,注意對一個s
from selenium import webdriver
from time import sleep
browser = webdriver.Chrome()
browser.maximize_window()
browser.get("http://115.28.108.130/control.html")
l = browser.find_elements_by_id("u")
for i in l:
i.click()
l[2].click()
lables = browser.find_elements_by_tag_name("label")
print(lables[2].text)
分層定位
當一個元素不好定位時,可以先定位到容易定位的父級/祖先級元素,然後使用父級/祖先級元素繼續定位,如:
from selenium import webdriver
from time import sleep
browser = webdriver.Chrome()
browser.maximize_window()
browser.get("http://115.28.108.130/control.html")
fardiv = browser.find_element_by_class_name("fathdiv") # 先定位到父級元素
labels = fardiv.find_elements_by_tag_name("label") # 使用父級元素向下定位
print(labels[2].text)
頁面元素操作
- link 連結
- click()
- input 輸入框
- send_keys(): 輸入
- clear(): 清空輸入框
- get_attribute("value"): 擷取輸入框的值
- button 按鈕
- click():
- isEnabled(): 是否可用
- submit():type=submit的按鈕可以使用submit()同click()用于送出表單
- radio/checkbox 單選/複選框
- click(): 定位到選框可直接點選
- is_displayed(): 是否展示
- is_selected(): 是否選中狀态
- select 下拉框(需要用Select)
- select_by_index(): 按索引選擇選項
- select_by_value(): 按value值選擇選項
- select_by_visiable_text(): 按選項名選擇選項
from selenium import webdriver
from time import sleep
browser = webdriver.Chrome()
browser.maximize_window()
browser.get("http://115.28.108.130/control.html")
area = Select(browser.find_element_by_id("areaID"))
area.select_by_visible_text("上海")
sleep(1)
area.select_by_index(1)
sleep(1)
area.select_by_value("1")