selenium3 + python - action_chains源碼分析

ActionChains簡介

actionchains是selenium裏面專門處理鼠標相關的操做如:鼠標移動,鼠標按鈕操做,按鍵和上下文菜單(鼠標右鍵)交互。
這對於作更復雜的動做很是有用,好比懸停和拖放。css

actionchains也能夠和快捷鍵結合起來使用,如ctrl,shif,alt結合鼠標一塊兒使用html

當你使用actionchains對象方法,行爲事件是存儲在actionchains對象隊列。當你使用perform(),事件按順序執行。web

  • 方法一:能夠寫一長串
    • menu = driver.find_element_by_css_selector(".nav")
    • hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
    • ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()
  • 方法二:能夠分幾步寫

    menu = driver.find_element_by_css_selector(".nav")spa

    hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1") orm

    actions = ActionChains(driver) htm

    actions.move_to_element(menu) 對象

    actions.click(hidden_submenu) actions.perform()blog

 

方法介紹 

1.如下提到的Keys類,是selenium裏面的鍵盤事件類,導入方法:隊列

from selenium.webdriver.common.keys import Keys事件

2.鼠標事件使用導入方法:

from selenium.webdriver.common.action_chains import ActionChains

class ActionChains(object):
def __init__(self, driver):
self._driver = driver
self._actions = []

def perform(self):

# 執行行爲事件

def click(self, on_element=None):
點擊:
- 若是參數不寫,那麼點擊的是當前鼠標位置
- 若是參數寫定位到的元素對象element,那就是點這個元素

def click_and_hold(self, on_element=None):
鼠標左鍵按住某個元素
- 若是參數不寫,那麼點的是當前鼠標位置
- 若是參數寫定位到的元素對象element,那就是點這個元素

def context_click(self, on_element=None):
鼠標右鍵點擊
- 若是參數不寫,那麼點的是當前鼠標位置
- 若是參數寫定位到的元素對象element,那就是點這個元素

def double_click(self, on_element=None):
雙擊鼠標
- 若是參數不寫,那麼點的是當前鼠標位置
- 若是參數寫定位到的元素對象element,那就是點這個元素

def drag_and_drop(self, source, target):
按住源元素上的鼠標左鍵,而後移動到目標元素並釋放鼠標按鈕
- source: 按住鼠標的元素位置
- target: 鬆開鼠標的元素位置

def drag_and_drop_by_offset(self, source, xoffset, yoffset):
按住源元素上的鼠標左鍵,而後移動到目標偏移量並釋放鼠標按鈕。
- source: 按住鼠標的元素位置
- xoffset: X
軸的偏移量
- yoffset: Y
軸的偏移量

def key_down(self, value, element=None):
只發送一個按鍵,而不釋放它。只應用於修飾鍵(控制、alt和shift)。

- value: 要發送的修飾符鍵。值在「Keys」類中定義。
- element: 定位的元素
若是element參數不寫就是當前鼠標的位置

舉個例子,按住
ctrl + c::

ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()

def key_up(self, value, element=None):

# 釋放按鍵,配合上面的一塊兒使用

def move_by_offset(self, xoffset, yoffset):
將鼠標移動到當前鼠標位置的偏移量

- xoffset: X軸
做爲一個正整數或負整數移動到x偏移量
- yoffset: Y軸
偏移,做爲正整數或負整數。

def move_to_element(self, to_element):
鼠標懸停
- to_element: 定位須要懸停的元素

def move_to_element_with_offset(self, to_element, xoffset, yoffset):
經過指定元素的偏移量移動鼠標。偏移量與元素的左上角相對
- to_element: 定位須要懸停的元素
- xoffset: X
軸偏移量
- yoffset: Y
軸偏移量

def release(self, on_element=None):
釋放一個元素上的鼠標按鈕。

- 若是參數不寫,那麼是當前鼠標位置
- 若是參數寫定位到的元素對象element,那就是這個元素.

def send_keys(self, *keys_to_send):
發送到當前焦點元素
要發送的按鍵。修飾符鍵常數能夠在「Keys」類。

def send_keys_to_element(self, element, *keys_to_send):
發送到定位到的元素上
- element: 定位的元素
- keys_to_send: 要發送的按鍵。修飾符鍵常數能夠在「Keys」類。

1.實現Ctrl +F5 的組合鍵功能

from selenium import webdriver

from selenium.webdriver.common.action_chains import ActionChains

from selenium.webdriver.common.keys import Keys

import time driver = webdriver.Chrome()

driver.get("https://www.baidu.com")

time.sleep(3) # 實現Ctrl+F5刷新

ActionChains(driver).key_down(Keys.CONTROL).send_keys(Keys.F5).key_up(Keys.CONTROL).perform()

 

 

轉載:http://www.javashuo.com/article/p-zlyhoyts-kk.html

相關文章
相關標籤/搜索