ActionChains和TouchAction可以用來模擬點選、雙擊、滑動等事件。ActionChains用於執行PC端的滑鼠移動、按鍵、拖拽等事件;TouchActions用法與ActionChains類似,可以用來模擬PC和移動端的點選、滑動、拖拽等手勢操作。
ActionChains和TouchAction都是將動作儲存在佇列中,然後執行perform()方法,按佇列順序執行動作。
ActionChains
有兩種執行方式
鏈式:
ActionChains(driver).move_to_element(element).click(element).perform()
分散式:
actions=ActionChains(driver)
actions.move_to_element(element)
actions.click(element)
actions.perform()
例一:點選,右鍵,雙擊操作
測試頁面:http://sahitest.com/demo/clicks.htm
python程式碼:
self.driver.get("http://sahitest.com/demo/clicks.htm")
click = self.driver.find_element_by_xpath("//*[@value='click me']")
doubleclick = self.driver.find_element_by_xpath("//*[@value='dbl click me']")
rightclick = self.driver.find_element_by_xpath("//*[@value='right click me']")
action= ActionChains(self.driver)
action.click(element_click)
action.context_click(element_rightclick)
action.double_click(element_doubleclick)
action. perform()
例二:移動滑鼠到某個元素上
將滑鼠移動到“新聞”後進行點選
python程式碼:
self.driver.get("http://www.baidu.com")
ele = self.driver.find_element_by_link_text("新聞")
action = ActionChains(self.driver)
action.move_to_element(ele)
action.click()
action.perform()
例三:通過畫素座標點選頁面
使用move_by_offset()方法實現點選頁面,畫素座標可以使用截圖工具來獲取。
python程式碼:
ActionChains(self.driver).move_by_offset(x, y).click().perform() #左鍵點選
ActionChains(self.driver).move_by_offset(x, y).context_click().perform() #右鍵點選
例四:模擬鍵盤輸入
模擬鍵盤輸入可以使用win32api模組,也可以用 selenium的WebElement物件的send_keys()方法來實現:
element = self.driver.find_element_by_id(element) element.send_keys(**"test"**) element.send_keys(Keys.BACK_SPACE) assert element.get_attribute("value") == "tes"
ActionChains類也可以模擬鍵盤輸入:
Action = ActionChains(driver) action.send_keys(Keys.BACK_SPACE) # 回退
action.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL) # CTRL+A
action.perform() # 執行
測試頁面:http://sahitest.com/demo/label.htm
在文字框1中輸入內容,然後將文字框1的內容複製貼上到文字框2
self.driver.get("http://sahitest.com/demo/label.htm")
ele1 = self.driver.find_element_by_xpath("/htmL/body/label[1]/input")
ele2 = self.driver.find_element_by_xpath("/html/body/label[2]/table/tbody/tr/td[2]/input")
ele1.click()
action= ActionChains(self.driver)
action.send_keys("testing").pause(1)
action.send_keys(Keys.SPACE).pause(1) # 空格
action.send_keys("1").pause(1)
action.send_keys(Keys.BACK_SPACE) #回退
action.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL) #CTRL+A
action.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL) #CTRL+C
action.key_down(Keys.CONTROL,ele2).send_keys('v').key_up(Keys.CONTROL) #CTRL+V
action.send_keys(Keys.BACK_SPACE).perform()
例五:拖拽
測試頁面:http://sahitest.com/demo/dragDropMooTools.htm
python程式碼
self.driver.get("http://sahitest.com/demo/dragDropMooTools.htm")
drag_ele = self.driver.find_element_by_id("dragger")
Item1 = self.driver.find_element_by_xpath("/htmL/body/div[2]")
Item2 = self.driver.find_element_by_xpath("/html/body/div[3]")
Item3 = self.driver.find_element_by_xpath("/html/body/div[4]")
action= ActionChains(self.driver)
action.drag_and_drop(drag_ele, Item1).pause(1) # 方法1
action.click_and_hold(drag_ele).release(Item2).pause(1)# 方法2
action.click_and_hold(drag_ele).move_to_element(Item3).release()# 方法3
action.perform()
TouchAction
ActionChains無法操作H5頁面,TouchAction可以對H5頁面進行操作,實現點選,滑動,拖拽,模擬手勢等各種操作。
手勢控制方法
-
double_tap 雙擊
-
flick 滑動
-
flick_element 從某個元素位置開始滑動
-
long_press 長按
-
move 手勢移動指定偏移
-
Perform 執行
-
release 釋放手勢
-
scroll 點選並滾動
-
scroll_from_element 從某個元素位置開始手勢點選並滾動(向下滑動為負數,向上滑動為正數)
-
flick_element——從某個元素位置開始手勢滑動(負數:向上滑動,正數:向下滑動)
-
tap 在指定元素上點選
-
tap_and_hold 在指定元素上點選但不釋放
例一:點選、滑動
百度搜尋關鍵字,tap方法點選百度一下,滑動到底部,點選下一頁
python程式碼:
self.driver.get("http://www.baidu.com")
input = self.driver.find_element_by_id("kw")
search = self.driver.find_element_by_id("su")
input.send_keys("test")
action = TouchActions(self.driver)
action.tap(search)
action.perform()
action.scroll_from_element(input, 0, 10000).perform()
next = self.driver.find_element_by_link_text("下一頁 >")
next.click()
總結
ActionChains和TouchAction實現了滑鼠和鍵盤的模擬輸入,更詳細的介紹可以參考官方文件 https://selenium-python.readthedocs.io/api.html。
文章標題:Selenium ActionChains、TouchAction方法
本文作者:hiyo
本文連結:https://hiyong.gitee.io/posts/selenium-actionchains-touchaction/
歡迎關注公眾號:「測試開發小記」及時接收最新技術文章!