一怜姿、鼠標和鍵盤操作
1、鼠標操作
1.1 鼠標操作實現(xiàn)方式
-
selenium提供鼠標操作的方法及步驟
需要導(dǎo)入ActionChains類
通過ActionChains實例化鼠標對象 action = ActionChains(driver) # driver表示的是瀏覽器驅(qū)動對象
調(diào)用鼠標的事件方法
調(diào)用鼠標的執(zhí)行方法 action.perform()
import time
import selenium import webdriver
# 實例化瀏覽器驅(qū)動
from selenium.webdriver import ActionChains
from slenium.webdriver.common .by import By
driver = webdriver.Chrome()
driver.get('****')
# 在用戶戶名文本框上點擊鼠標郵件
# 創(chuàng)建鼠標對象
action = actionChains(driver)
# 調(diào)用鼠標右擊方法
action.context_click(driver.find_elemnt(By.ID,'user'A))
#調(diào)用鼠標執(zhí)行方法
action.perform()
1.3 鼠標雙擊操作
-
鼠標雙擊的實現(xiàn)步驟
- 創(chuàng)建鼠標對象 action=ActionChains(driver)
- 調(diào)用鼠標雙擊事件方法 action.double_click(element) # element表示是元素對象
- 調(diào)用鼠標的執(zhí)行方法 action.perform()
# 輸入用戶名admin整葡,暫停3秒鐘后,雙擊鼠標左鍵讥脐,選中admin
element = driver.find_element(By.ID, "userA")
element.send_keys("admin")
time.sleep(3)
action = actionChain(driver)
action.double_click(element)
# 調(diào)用鼠標執(zhí)行方法
action.perform()
1.4 鼠標拖動操作
- 鼠標拖動的實現(xiàn)步驟:
- 創(chuàng)建鼠標對象 action = ActionChains(driver)
- 調(diào)用鼠標拖動事件方法 action.drag_and_drop(source, target) # source表示的是源元素遭居,被拖動的元素, target表示是目標源攘烛,也就是要拖動到哪個元素上魏滚。
- 調(diào)用鼠標執(zhí)行方法 action.perform()
# 把紅色方框拖拽到藍色方框上
source = driver.find_element(By.ID, 'div1')
target = driber.find_elemt(By.ID, 'div2')
action = ActionChain(driver)
# 調(diào)用鼠標拖動事件方法
action.drag_and_drop(source, target)
action.prrform
1.5鼠標懸停操作
- 鼠標懸停實現(xiàn)步驟:
- 實例化鼠標對象 action = ActionChains(driver)
- 調(diào)用鼠標懸停事件方法 action.move_to_element(element) # element表示的是元素對象
- 調(diào)用鼠標執(zhí)行方法 action.perform()
# 模擬鼠標懸停在’注冊‘按鈕上
element = driver.find_elemnt(By.CSS_SELECTOR, 'button')
# 創(chuàng)建鼠標對象
action = ActionChains(driver)
# 調(diào)用鼠標懸停事件方法
action.move_to_element(element)
# 調(diào)用鼠標執(zhí)行方法
action.perform()
1.6 鼠標單元素拖動操作
- 鼠標單元素拖動實現(xiàn)步驟
- 創(chuàng)建鼠標對象 action=ActionChains(driver)
- 調(diào)用鼠標單元素拖動事件方法 action.drag_and_drop_by_offset(element, x, y) x, y 表示的元素拖動時橫向和縱向移動的距離,單位為像素坟漱, element表示的是元素對象 移動的像素最終要比在web頁面中看到的移動像素值要大鼠次,最好大于5個像素或者10像素
- 調(diào)用鼠標執(zhí)行方法 action.perform()
# 模擬鼠標實現(xiàn)滑塊驗證碼的操作
element = driver.find_element(By.CSS_SELECTOR, '.handler_bg')
# 創(chuàng)建鼠標對象
action = ActionChains(driver)
# 調(diào)用鼠標單元素拖動事件方法
action.drag_and_drop_by_offset(element, 265, 0)
# 調(diào)用鼠標執(zhí)行方法
action.perform()
2、鍵盤操作
模擬鍵盤上面的快捷鍵的操作
-
調(diào)用鍵盤操作的快捷鍵的方法 element.send_keys(快捷鍵的鍵值)
需要導(dǎo)入Keys類, 第一個字母是大寫
單鍵值: 直接傳入對應(yīng)的鍵值
組合鍵: 鍵值之間由逗號分隔
send_keys(Keys.CONTROL, Keys.SHIFT, 'i')
常用的快捷鍵
- send_keys(Keys.BACK_SPACE) 刪除鍵(BackSpace)
- send_keys(Keys.SPACE) 空格鍵(Space)
- send_keys(Keys.TAB) 制表鍵(Tab)
- send_keys(Keys.ESCAPE) 回退鍵(Esc)
- send_keys(Keys.ENTER) 回車鍵(Enter)
- send_keys(Keys.CONTROL,'a') 全選(Ctrl+A)
- send_keys(Keys.CONTROL,'c') 復(fù)制(Ctrl+C)
- send_keys(Keys.CONTROL, 'v') 粘貼
# 1). 輸入用戶名:admin1芋齿,暫停2秒腥寇,刪除1
element = driver.find_element(By.ID, 'userA')
element.send_keys("admin1")
time.sleep(2)
element.send_keys(Keys.BACK_SPACE) # 刪除最后一個字符串 clear()
# 2). 全選用戶名:admin,暫停2秒
element.send_keys(Keys.CONTROL, 'a')
time.sleep(2)
# 3). 復(fù)制用戶名:admin觅捆,暫停2秒
element.send_keys(Keys.CONTROL, 'c')
time.sleep(2)
# 4). 粘貼到密碼框
driver.find_element(By.ID, 'passwordA').send_keys(Keys.CONTROL, 'V')
二赦役、元素等待
HTML加載需要時間,影響HTML加載的因素:
- 服務(wù)器性能
- 網(wǎng)絡(luò)速度
- 本身電腦的配置
1栅炒、隱式等待
概念:首先要等待整個頁面加載完成掂摔,再去進行元素定位术羔,如果在定位過程中找到了元素,直接返回該元素乙漓,繼續(xù)后面的操作级历,如果在指定的時間內(nèi)沒有找到該元素,那么每隔0.5秒再去找叭披,如果超過了指定時間寥殖,就會拋出NoSuchElementException的異常錯誤。
隱式等待實現(xiàn)方式:
driver.implicitlty_wait(timeout) # timeout表示的是最長的等待時間 單位為S
隱式等待只需要設(shè)置一次涩蜘,對所有的元素定位的方法都是有效的嚼贡。
# 導(dǎo)包
import time
from selenium import webdriver
# 實例化瀏覽器驅(qū)動
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(5) # 隱式等待的時間,設(shè)置為5S
# 打開測試網(wǎng)站
driver.get("file:///D:/software/UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%E5%90%88/pagetest/%E6%B3%A8%E5%86%8CA.html")
顯示等待的實現(xiàn):
WebDriverWait(driver, timeout, poll_frequency=0.5).until(lambda x:x.find_element(By.ID, "userA"))
WebDriverWait等待類需要導(dǎo)入
driver指的是瀏覽器驅(qū)動對象
timeout表示的是最長等待時間
poll_frequency表示的是檢測的間隔時間同诫,默認是0.5和
后面跟上until方法粤策,在until方法跟上匿名函數(shù)來實現(xiàn)元素定位。
顯示等待與隱式等待的區(qū)別:
1剩辟、拋出的異常不一樣 掐场, 隱式等待超時,報的NoSuchElementException 贩猎,顯示等待超時熊户,報的是 TimeOutException
2、作用域不一樣吭服, 隱式等待對所有元素定位的方法都有效嚷堡,只需要定義一次, 顯示等待只針對單個元素
3艇棕、顯示等待不需要等待整個頁面的HTML的DOM樹加載完成蝌戒,顯式等待的效率更高,工作當中一般使用顯示等待沼琉。而隱式等待需整個HTML DOM樹加載完成北苟。
# 導(dǎo)包
import time
from selenium import webdriver
# 實例化瀏覽器驅(qū)動
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Chrome()
driver.maximize_window()
element = webDriverwait(driver,9,1).until(lambda x: x.find_elemnt(By.xpath, '//*[@id = 'wait']/input[1] '))
element.send_keys('admin')
# 等待3S
time.sleep(3)
# 退出瀏覽器驅(qū)動
driver.quit()
3、強制等待
-
強制等待就是讓代碼休眠打瘪,不做任何的操作
time.sleep(time) 單位為time
-
常用的場景:
- 當要獲取元素的文本內(nèi)容時友鼻,而元素的文本內(nèi)容是需要通過后臺接口請求并渲染的,此時闺骚,如果使用隱式等待或顯示等待是沒有辦法獲取到文本內(nèi)容彩扔,所以需要使用強制等待
- 當要操作的元素已經(jīng)存在,但是有其他的元素需要等待且與該操作的元素有業(yè)務(wù)關(guān)聯(lián)僻爽,如果使用隱式等待或顯示等待對該元素進行操作的話虫碉,是沒有辦法進行的,也需要使用強制等待胸梆。
2敦捧、彈出框操作
- 彈出框處理步驟:
- driver.switch_to.alert 獲取彈出框?qū)ο?/li>
- 處理彈出框
- alert.text 獲取彈出框提示信息
- alert.accept() 確定彈出框
- alert.dismiss() 取消彈出框
driver.find_element(By.ID, "alerta").click()
time.sleep(3)
# 處理彈出框
# 獲取彈出框
alert = driver.switch_to.alert
# 打印信息须板,然后取消
print(alert.text())
alert.dissmiss()
3、滾動條操作
-
滾動實現(xiàn)步驟:
控制滾動條到最下方
-
1兢卵、定義js
js = "window.scrollTo(0, 2000)" # 如果想要移動到最下方逼纸,y值給最大值就可以了。
-
2济蝉、執(zhí)行JS
driver.execute_script(js)
-