01.設置元素等待時間
自動化測試的時候,元素定位沒有錯,但是跑腳本的時候卻報錯了
例如,登錄的時候要等登錄頁面加載出來才能輸入用戶名和密碼
selenium設置元素等待時間的3種方式及區別
1.sleep() --固定等待時間:強制等待,不能把握準確的等等時間,適合調試時用
2.implicitly_wait() --隱式等待時間:等頁面加載完成才執行下壹步操作,壹般設置壹次即可
3.WebDriverWait --顯示等待時間:配合untill()和not untill()方法,根據判斷條件 靈活處理等待時間
要先設置壹個超長時間,在這個時間內,程序根據調用頻率每隔幾秒查看壹下,如果條件滿足,則執行下壹步操作,若不滿足且超過了等待時間則拋出異常
導包:from selenium.webdriver.support.ui import WebDriverWait
使用:WebDriverWait(driver, 超時時間, 調用頻率, 要忽略的異常).until(要執行的方法, 超時時返回的錯誤信息)
實例:
replace:
02.鍵盤事件Keys類
制表符:send_keys(Keys.TAB)
退出鍵:send_keys(Keys.ESCAPE)
F1:send_keys(Keys.F1) f1~f12 以此類推
03.二次定位
顧名思義,通過多個元素,定位兩次
dr.find_element(By.CLASS_NAME,"s_input").send_keys("python")
二次定位:
dr.find_element(By.NAME,"query").find_element(By.CLASS_NAME,"s_input").send_keys("python")
04.selenium鼠標懸停類-- ActionChains()
導包:from selenium.webdriver.common.action_chainsimport ActionChains
實例:將鼠標移動至更多設置,懸停鼠標
elem1= dr.find_element(By.LINK_TEXT,"設置")
ActionChains(dr).move_to_element(elem1).perform()
05.selenium警告框的處理
很多web應用經常會遇到JavaScript編寫的alert 、confirm 以及prompt?彈窗,需要用到switch_to.alert來切換彈窗,並對彈窗進行輸入信息,關閉等處理。
switch_to.alert.text? --獲取彈窗文本信息
switch_to.alert.accept()? --點擊彈窗中確定按鈕
switch_to.alert.dismiss()? --點擊彈出中取消按鈕
switch_to.alert.sendKeys("字符串")? --在彈窗中輸入信息
實例:
06.下拉菜單選擇的三種方式
導包:from selenium.webdriver.support.uiimport Select
#選擇下拉框的o2
elem1 = dr.find_element(By.ID,"s3Id")
1:根據value值定位
Select(elem1).select_by_value("o2val")
2.根據index定位
Select(elem1).select_by_index(1)
3.根據下拉框文本信息定位
Select(elem1).select_by_visible_text("o2")
07.多窗口切換
window_handles --獲取所有窗口句柄
switch_to.window(指定窗口) --切換到指定窗口
08.selenium之JS操作瀏覽器滾動條位置
execute_script("window.scrollTo(0,n);")
09.selenium之JS操作隱藏元素
隱藏元素的標識:style="display:none;"
壹般我們通過將隱藏元素的屬性修改成顯示再定位
10.操作excel文件
將測試數據參數化用到
10.1準備參數化數據文件
10.2導包
打開文件,填寫文檔路徑
運行結果:
定位到sheet的位置
讀取sheet的行和列的內容
#讀取表的行的方法
rows = sheet1.nrows
print("行數",rows)
columns = sheet1.ncols
print("列數",columns)
讀取指定行的值
#讀取指定行的值
rowValue1 = sheet1.row_values(0)
print(rowValue1)
#讀取指定列的值
colValue1 = sheet1.col_values(0)
print(colValue1)
#輸出所有用戶名和對應的密碼
for iin range(1,rows):
print("用戶名:" + sheet1.row_values(i)[0] +",密碼:" + sheet1.row_values(i)[1])