Selenium ActionChains、TouchAction方法

測試開發小記發表於2020-12-26

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

--THE END--

文章標題:Selenium ActionChains、TouchAction方法
本文作者:hiyo
本文連結:https://hiyong.gitee.io/posts/selenium-actionchains-touchaction/
歡迎關注公眾號:「測試開發小記」及時接收最新技術文章!

相關文章