曲鳥全棧UI自動化教學(xué)(九):Selenium為什么慢?那是你加載策略設(shè)置不對">曲鳥全棧UI自動化教學(xué)(九):Selenium為什么慢?那是你加載策略設(shè)置不對
1057
2025-03-31
一、前言
在之前的教學(xué)中對于頁面的操作只涉及到了兩個(gè):點(diǎn)擊、輸入;其實(shí)Selenium的鍵盤鼠標(biāo)操作還有很多,現(xiàn)在就為你一一講解。
二、鍵盤事件
1. 輸入指定內(nèi)容【send_keys】
1.1 我們可以使用send_keys來輸入我們想要輸入的內(nèi)容
例如打開百度,搜索框輸入:曲鳥 csdn:
import time from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() # 啟動chrome瀏覽器 driver.get('https://www.baidu.com/') # 打開百度網(wǎng)址 # 在輸入框輸入:曲鳥 csdn driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys('曲鳥 csdn')
1.2 也可以指定按鍵輸入
例如我們打開百度輸入:csdn 曲鳥,并粘貼復(fù)制它三次
import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome() # 啟動chrome瀏覽器 driver.get('https://www.baidu.com/') # 打開百度網(wǎng)址 # 在輸入框輸入:曲鳥 csdn driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys('曲鳥 csdn') # 按下crtl+A 全選 driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys(Keys.CONTROL, 'a') # 按下crtl+C 復(fù)制 driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys(Keys.CONTROL, 'c') # 按下crtl+V 粘貼 for i in range(3): time.sleep(0.5) driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys(Keys.CONTROL, 'v')
執(zhí)行效果
1.3 組合按鍵規(guī)則
send_keys支持按鍵的組合傳遞,例如上述的粘貼【Ctrl+V】操作,代碼實(shí)現(xiàn)為:
driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys(Keys.CONTROL, 'v')
另外,通過+號做連接組合按鍵也是可行的
driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys(Keys.CONTROL+'c')
如果想同時(shí)按下三個(gè)或更多按鍵鍵,則在括號中使用,或+號追加參數(shù)即可,例如在輸入框同時(shí)輸入a、b、c:
driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys('a', 'b','c')
另外,我們可以通過【Ctrl+鼠標(biāo)左鍵】代碼中的Keys,查看支持哪些按鍵及調(diào)用代碼
2. 模擬按下/彈起【key_down/key_up】
Webdriver還提供了模擬鍵盤按下/彈起的操作,例如上述的復(fù)制操作可以改寫為下面的代碼
driver.find_element(By.XPATH, '//*[@id="kw"]') webdriver.ActionChains(driver).key_down(Keys.CONTROL).send_keys("v").key_up(Keys.CONTROL).perform()
實(shí)際該方法不常用,使用第一種方法實(shí)現(xiàn)來說更簡單。
3. 清空輸入【clear】
clear方法可以清楚輸入框中的內(nèi)容,例如下面的代碼,會先打開百度,搜索框輸入:曲鳥 csdn,然后調(diào)用clear方法進(jìn)行清空
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 打開百度網(wǎng)址 # 在輸入框輸入:曲鳥 csdn driver = driver.find_element(By.XPATH, '//*[@id="kw"]') driver.send_keys('曲鳥 csdn') driver.clear()
三、鼠標(biāo)事件
1. 點(diǎn)擊【click】
通過click方法能夠?qū)撁嬷锌牲c(diǎn)擊元素進(jìn)行點(diǎn)擊操作,例如下面的代碼會對百度的【百度一下】按鈕進(jìn)行點(diǎn)擊
from selenium import webdriver from selenium.webdriver.common.by import By driver= webdriver.Chrome() driver.get('https://www.baidu.com/') # 打開百度網(wǎng)址 # 點(diǎn)擊百度一下 driver.find_element(By.XPATH,'//*[@id="su"]').click()
2. 單擊并按住【click_and_hold】
下面的代碼會將button這個(gè)元素單擊并按住
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 打開百度網(wǎng)址 button = driver.find_element(By.XPATH, '//*[@id="s-top-left"]/a[1]') webdriver.ActionChains(driver).click_and_hold(button).perform()
3. 右鍵單擊【context_click】
下面的代碼會將button這個(gè)元素單擊并按住
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 打開百度網(wǎng)址 button = driver.find_element(By.XPATH, '//*[@id="s-top-left"]/a[1]').click() webdriver.ActionChains(driver).context_click(button).perform()
4. 移動到元素(懸浮)【move_to_element】
下面的代碼會將鼠標(biāo)移動到button這個(gè)元素上
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 打開百度網(wǎng)址 button = driver.find_element(By.XPATH, '//*[@id="s-top-left"]/a[1]') webdriver.ActionChains(driver).move_to_element(button).perform()
5. 偏移移動【move_by_offset】
此方法將鼠標(biāo)從其當(dāng)前位置(或 0,0)移動給定的偏移量。如果坐標(biāo)在視圖窗口之外,那么鼠標(biāo)將在瀏覽器窗口之外結(jié)束。
下面的代碼會將以button這個(gè)元素為起點(diǎn),將鼠標(biāo)移動長為100,高為100的距離
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 打開百度網(wǎng)址 button = driver.find_element(By.XPATH, '//*[@id="s-top-left"]/a[1]') xOffset = 100 yOffset = 100 webdriver.ActionChains(driver).move_by_offset(xOffset, yOffset).perform()
6. 拖拽【drag_and_drop】
此方法首先在源元素上執(zhí)行單擊并按住,移動到目標(biāo)元素的位置,然后釋放鼠標(biāo)。
下面的代碼會單擊按住sourceEle元素,然后拖拽到targetEle上,然后釋放鼠標(biāo)
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://crossbrowsertesting.github.io/drag-and-drop") sourceEle = driver.find_element(By.ID, "draggable") targetEle = driver.find_element(By.ID, "droppable") webdriver.ActionChains(driver).drag_and_drop(sourceEle,targetEle).perform()
7. 偏移拖拽【drag_and_drop_by_offset】
此方法首先在源元素上執(zhí)行單擊并按住,移動到給定的偏移量,然后釋放鼠標(biāo)。
下面的代碼會單擊按住sourceEle元素,將鼠標(biāo)移動長為100,高為100的距離,然后釋放鼠標(biāo)
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://crossbrowsertesting.github.io/drag-and-drop") sourceEle = driver.find_element(By.ID, "draggable") XOffset = 100 YOffset = 100 webdriver.ActionChains(driver).drag_and_drop_by_offset(sourceEle, XOffset, YOffset).perform()
8. 釋放鼠標(biāo)【release】
此動作釋放按下的鼠標(biāo)左鍵。如果傳遞了 WebElement,它將在給定的 WebElement 上釋放按下的鼠標(biāo)左鍵
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://crossbrowsertesting.github.io/drag-and-drop") sourceEle = driver.find_element(By.ID, "draggable") targetEle = driver.find_element(By.ID, "droppable") webdriver.ActionChains(driver).click_and_hold(sourceEle).move_to_element(targetEle).perform() webdriver.ActionChains(driver).release().perform()
Python Selenium 自動化測試
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。