作者前言
🎂 ??????🍧🍧🍧🍧🍧🍧🍧🎂
?🎂 作者介紹: 🎂🎂
🎂 🎉🎉🎉🎉🎉🎉🎉 🎂
🎂作者id:老秦包你會, 🎂
簡單介紹:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂
喜歡學習C語言、C++和python等編程語言,是一位愛分享的博主,有興趣的小可愛可以來互討 🎂🎂🎂🎂🎂🎂🎂🎂
🎂個人主頁::小小頁面🎂
🎂gitee頁面:秦大大🎂
🎂🎂🎂🎂🎂🎂🎂🎂
🎂 一個愛分享的小博主 歡迎小可愛們前來借鑒🎂
自動化相關
- **作者前言**
- 元素定位方法
- CSS selector
- 通過xpath
- 對測試對象進行操作
- 點擊
- 模擬輸入
- 清除?本內容
- 獲取文本
- 獲取當前??標題
- 獲取當前頁面的url
- get_attribute("屬性名稱")
- 窗口
- 窗口的大小
- 屏幕截圖
- 關閉當前的窗口
- 彈窗
- 等待
- 強制等待
- 隱式等待
- 顯示等待
- 瀏覽器導航
- 文件上傳
元素定位方法
CSS selector
在上一篇的文章中,寫了一個簡單自動化腳本,這個使用到的元素定位就是這個,需要我們打開瀏覽器,按下F12進入開發者工具,
如圖:
然后選擇其中的一個標簽,復制對應的css selector
通過xpath
這里的話也是跟上面的獲取方式是一樣的,復制對應的xpath來
獲取HTML??所有的節點
//*
獲取HTML??指定的節點
//[指定節點]
//ul :獲取HTML??所有的ul節點
//input:獲取HTML??所有的input節點
獲取?個節點中的直接?節點
/
//span/input
獲取?個節點的?節點
…
//input/… 獲取input節點的?節點
實現節點屬性的匹配
[@…]
//*[@id=‘kw’] 匹配HTML??中id屬性為kw的節點
對測試對象進行操作
點擊
click()
模擬輸入
send_keys("")
清除?本內容
clear()
獲取文本
text
獲取當前??標題
title
獲取當前頁面的url
current_url
get_attribute(“屬性名稱”)
獲取標簽的屬性值
?
窗口
在測試的過程中,不僅僅是單獨在一個頁面進行測試,也有可能頁面跳轉進行測試,當頁面跳轉的時候,就需要我們切換窗口了。
方法如下:
獲取當前的窗口句柄
driver.current_window_handle
獲取全部窗口的句柄
driver.window_handles
切換窗口句柄
driver.switch_to.window(某個句柄)
窗口的大小
# 設置窗口的大小
chromeDriver.maximize_window()# 最大化
time.sleep(3)
chromeDriver.minimize_window()# 最小化
time.sleep(3)
chromeDriver.set_window_size(200,200)# 設置窗口的大小
time.sleep(3)
chromeDriver.fullscreen_window()# 全屏相當于快捷鍵f11
屏幕截圖
driver.save_screenshot('../images/image.png')# 參數是保存圖片的名稱
雖然截圖好用,但是保存的路徑卻是一個疼傷,文件名必須不一樣,這就讓我們想到是否可以使用時間來進行命名,時間每一秒都是不一樣的,我們可以借助本地時間來進行命名
這里就需要使用到datetime模塊中的now對象,
datetime.now()# 創建一個當前時間的對象
如圖:
輸出的樣式不符合文件的命名規則,我們還需要使用到里面的now類方式
datetime.datetime.now().strftime('%Y-%m-%d-%H%M%S')
可以把格式轉換成對應的格式
關閉當前的窗口
driver.close()
如果涉及到窗口的切換,還需要進行一定要進行窗口句柄的切換。否則會報錯
彈窗
彈窗是在??是找不到任何元素的,這種情況怎么處理?使?selenium提供的Alert接?
彈窗一般分為警告彈窗,提示彈窗以及確認彈窗。
警告彈窗:
確認彈窗:
提示彈窗:
要對彈窗進行操作,就要先定位到彈窗**,注意:必須觸發彈窗**
alert = driver.switchTo.alert # 定位到彈窗
這里和切換到句柄不是一個樣子,接下來我們可以對彈窗進行點擊或者輸入內容,
#確認
alert.accept()
#取消
alert.dismiss()
#輸入內容
alert.send_keys("hello")
等待
強制等待
等待分為強制等待和隱式等待以及顯示等待
其中強制等待雖然使用起來簡單,但是效率低,等待夠時間才能運行后面的代碼
代碼如下:
time.sleep(5)
不建議寫
隱式等待
隱式等待是?種智能等待,他可以規定在查找元素時,在指定時間內不斷查找元素。如果找到則代碼繼續執?,直到超時沒找到元素才會報錯。
driver.implicitly_wait(5)
隱式等待的話,在規定時間內找到對應的元素就會執行后面的代碼,這在某些情況下,節約了很多不必要的時間浪費。
隱式等待作?域是整個腳本的所有元素。即只要driver對象沒有被釋放掉( driver.quit() ),隱
式等待就?直?效。
顯示等待
相對于隱式等待針對的是全局,顯示等待的話,作用于局部
WebDriverWait(driver,sec).until(functions)
導入必要的模塊:
你需要導入 WebDriverWait 和 expected_conditions 模塊。
創建 WebDriverWait 對象:
設定最大等待時間和要等待的條件。
使用等待條件(funtion):
例如,等待元素可見、可點擊等
涉及到selenium.support.ui.ExpectedConditions包下的 ExpectedConditions類
ExpectedConditions方法
進行判斷該元素是否存在等,不存在就會報錯
導入模塊
from selenium.webdriver.support import expected_conditions
使用顯示等待的好處:
能解決隱式等待無法解決的問題,例如等待彈窗,彈窗在頁面中無法找到,隱式等待就會失效,
# 點擊百度一下
chromeDriver.find_element(By.ID,"su").click()
# 顯示等待,并判斷元素是否存在
WebDriverWait(chromeDriver,10).until(expected_conditions.invisibility_of_element((By.CSS_SELECTOR,r"#\31 > div > div.cosc-card > div > div > h3 > a")))
time.sleep(3)
chromeDriver.find_element(By.CSS_SELECTOR,r"#\31 > div > div.cosc-card > div > div > h3 > a").click()
如圖:
注意:
顯示等待和隱式等待不能混用,但是強制等待可以
瀏覽器導航
打開?站
driver.get("https://tool.lu/")
瀏覽器的前進、后退、刷新
driver.back()
driver.forward()
driver.refresh()
如圖:
文件上傳
點擊?件上傳的場景下會彈窗系統窗?,進??件的選擇。selenium?法識別?web的控件,上傳?件窗?為系統?帶,?法識別窗?元素,但是可以使?sendkeys來上傳指定路徑的?件,達到的效果是?樣的
driver.get("file:///D:/file/%E6%AF%94%E7%89%B9%E6%95%99%E5%8A%A1/%E6%B5%8B%E8%A
F%95/selenium4html/selenium-html/upload.html")
ele = driver.find_element(By.CSS_SELECTOR,"body > div > div >
input[type=file]")
ele.send_keys("D:\\file\\test.txt")