Python中Selenium模擬JQuery滑動(dòng)解鎖實(shí)例
本文介紹了Python中Selenium模擬JQuery滑動(dòng)解鎖實(shí)例,分享給大家,也給自己留個(gè)筆記
滑動(dòng)解鎖一直做UI自動(dòng)化的難點(diǎn)之一,我補(bǔ)一篇滑動(dòng)解鎖的例子,希望能給初做Web UI自動(dòng)化測試的同學(xué)一些思路。
首先先看個(gè)例子。

當(dāng)我手動(dòng)點(diǎn)擊滑塊時(shí),改變的只是樣式:
1、slide-to-unlock-handle 表示滑塊,滑塊的左邊距在變大(因?yàn)樗谙蛴乙苿?dòng)嘛?。?/p>
2、Slide-tounlock-progress 表示滑過之后的背景黃色,黃色的寬度在增加,因?yàn)榛瑒?dòng)經(jīng)過的地方都變黃了。
除些之外,沒其它任何變化了,所以我們利用鼠標(biāo)的拖動(dòng)貌似不行!因?yàn)槭髽?biāo)的拖動(dòng)是將一個(gè)元素移動(dòng)到另一個(gè)元素上。這樣:
# 定位元素的原位置
element = driver.find_element_by_id("xx")
# 定位元素要移動(dòng)到的目標(biāo)位置
target = driver.find_element_by_id("xx")
ActionChains(driver).drag_and_drop(element, target).perform()
但在我手動(dòng)演示的過程中,元素的位置并沒有發(fā)生變化。
接下來看我是怎么實(shí)現(xiàn)的。
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import UnexpectedAlertPresentException
from time import sleep
driver = webdriver.Chrome()
driver.get("https://www.helloweba.com/demo/2017/unlock/")
dragger = driver.find_elements_by_class_name("slide-to-unlock-handle")[0]
action = ActionChains(driver)
action.click_and_hold(dragger).perform() #鼠標(biāo)左鍵按下不放
for index in range(200):
try:
action.move_by_offset(2, 0).perform() #平行移動(dòng)鼠標(biāo)
except UnexpectedAlertPresentException:
break
action.reset_actions()
sleep(0.1) #等待停頓時(shí)間
# 打印警告框提示
success_text = driver.switch_to.alert.text
print(success_text)
sleep(5)
driver.quit()
driver.find_elements_by_class_name("slide-to-unlock-handle")[0]
首先,我要操作的頁面上有好幾個(gè)滑塊,我先通過通過class屬性找到所有的里面的第一個(gè)。
click_and_hold()
通過click_and_hold()方法對(duì)滑塊按下鼠標(biāo)左鍵。
move_by_offset()
接下來就是通過for循環(huán)動(dòng)滑塊的位置,move_by_offset()方法第一個(gè)參數(shù)是X軸,第二個(gè)參數(shù)是Y軸,單位為像素。因?yàn)槭瞧叫幸苿?dòng),所以Y設(shè)置為0。 X每次移動(dòng)兩2個(gè)像素。
當(dāng)解鎖成功后會(huì)拋UnexpectedAlertPresentException異常,捕捉后跳出循環(huán)。
每次循環(huán)休眠0.1秒,時(shí)間間隔越小,移動(dòng)越順滑喲!
核心的幾步介紹完了,接下來就是獲取警告框上面的提示信息并打印,然后關(guān)閉瀏覽器。
打印結(jié)果為:
successfully unlock!
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解tf.device()指定tensorflow運(yùn)行的GPU或CPU設(shè)備實(shí)現(xiàn)
這篇文章主要介紹了詳解tf.device()指定tensorflow運(yùn)行的GPU或CPU設(shè)備實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
Python易忽視知識(shí)點(diǎn)小結(jié)
這篇文章主要介紹了Python易忽視知識(shí)點(diǎn),實(shí)例分析了Python中容易被忽視的常見操作技巧,需要的朋友可以參考下2015-05-05
Python深度學(xué)習(xí)線性代數(shù)示例詳解
這篇文章主要為大家講解了Python深度學(xué)習(xí)中線性代數(shù)的示例詳解有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10
python使用gTTS實(shí)現(xiàn)文本轉(zhuǎn)語音功能
gTTS(Google?Text-to-Speech),?這個(gè)庫是Google的Text-to-Speech?API的一個(gè)接口,提供了一種簡單的方式來生成聽起來自然的語言,下面我們就來看看如何使用gTTS實(shí)現(xiàn)文本轉(zhuǎn)語音功能吧2024-03-03
Python基礎(chǔ)之元編程知識(shí)總結(jié)
很多人不理解“元編程”是個(gè)什么東西,關(guān)于它也沒有一個(gè)十分準(zhǔn)確的定義.這篇文章要說的是Python里的元編程,實(shí)際上也不一定就真的符合“元編程”的定義.只不過我無法找到一個(gè)更準(zhǔn)確的名字來代表這篇文章的主題,所以就借了這么一個(gè)名號(hào),需要的朋友可以參考下2021-05-05
Python?PyQt5中窗口數(shù)據(jù)傳遞的示例詳解
開發(fā)應(yīng)用程序時(shí),若只有一個(gè)窗口則只需關(guān)心這個(gè)窗口里面的各控件之間如何傳遞數(shù)據(jù)。如果程序有多個(gè)窗口,就要關(guān)心不同的窗口之間是如何傳遞數(shù)據(jù)。本文介紹了PyQt5中三種窗口數(shù)據(jù)傳遞,需要的可以了解一下2022-12-12

