ActionChains簡介
actionchains是selenium里面專門處理鼠標相關的操作如:鼠標移動,鼠標按鈕操作,按鍵和上下文菜單(鼠標右鍵)交互。
這對於做更復雜的動作非常有用,比如懸停和拖放。
actionchains也可以和快捷鍵結合起來使用,如ctrl,shif,alt結合鼠標一起使用
當你使用actionchains對象方法,行為事件是存儲在actionchains對象隊列。當你使用perform(),事件按順序執行。
- 方法一:可以寫一長串
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")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
actions = ActionChains(driver)
actions.move_to_element(menu)
actions.click(hidden_submenu)
actions.perform()
無論哪種方式,操作都是按照調用的順序執行挨個執行!
方法介紹
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 = []
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">perform</span><span class="hljs-params">(<span class="hljs-keyword">self</span>)</span></span>:
<span class="hljs-comment"># 執行行為事件</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">click</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, on_element=None)</span></span>:
點擊:
- 如果參數不寫,那么點擊的是當前鼠標位置
- 如果參數寫定位到的元素對象element,那就是點這個元素
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">click_and_hold</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, on_element=None)</span></span>:
鼠標左鍵按住某個元素
- 如果參數不寫,那么點的是當前鼠標位置
- 如果參數寫定位到的元素對象element,那就是點這個元素
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">context_click</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, on_element=None)</span></span>:
鼠標右鍵點擊
- 如果參數不寫,那么點的是當前鼠標位置
- 如果參數寫定位到的元素對象element,那就是點這個元素
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">double_click</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, on_element=None)</span></span>:
雙擊鼠標
- 如果參數不寫,那么點的是當前鼠標位置
- 如果參數寫定位到的元素對象element,那就是點這個元素
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">drag_and_drop</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, source, target)</span></span>:
按住源元素上的鼠標左鍵,然后移動到目標元素並釋放鼠標按鈕
- <span class="hljs-symbol">source:</span> 按住鼠標的元素位置
- <span class="hljs-symbol">target:</span> 松開鼠標的元素位置
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">drag_and_drop_by_offset</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, source, xoffset, yoffset)</span></span>:
按住源元素上的鼠標左鍵,然后移動到目標偏移量並釋放鼠標按鈕。
- <span class="hljs-symbol">source:</span> 按住鼠標的元素位置
- <span class="hljs-symbol">xoffset:</span> X 軸的偏移量
- <span class="hljs-symbol">yoffset:</span> Y 軸的偏移量
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">key_down</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, value, element=None)</span></span>:
只發送一個按鍵,而不釋放它。只應用於修飾鍵(控制、alt和shift)。
- <span class="hljs-symbol">value:</span> 要發送的修飾符鍵。值在“Keys”類中定義。
- <span class="hljs-symbol">element:</span> 定位的元素
如果element參數不寫就是當前鼠標的位置
舉個例子,按住 ctrl+c::
ActionChains(driver).key_down(Keys.CONTROL).send_keys(<span class="hljs-string">'c'</span>).key_up(Keys.CONTROL).perform()
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">key_up</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, value, element=None)</span></span>:
<span class="hljs-comment"># 釋放按鍵,配合上面的一起使用</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">move_by_offset</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, xoffset, yoffset)</span></span>:
將鼠標移動到當前鼠標位置的偏移量
- <span class="hljs-symbol">xoffset:</span> X軸 作為一個正整數或負整數移動到x偏移量
- <span class="hljs-symbol">yoffset:</span> Y軸 偏移,作為正整數或負整數。
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">move_to_element</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, to_element)</span></span>:
鼠標懸停
- <span class="hljs-symbol">to_element:</span> 定位需要懸停的元素
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">move_to_element_with_offset</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, to_element, xoffset, yoffset)</span></span>:
通過指定元素的偏移量移動鼠標。偏移量與元素的左上角相對
- <span class="hljs-symbol">to_element:</span> 定位需要懸停的元素
- <span class="hljs-symbol">xoffset:</span> X 軸偏移量
- <span class="hljs-symbol">yoffset:</span> Y 軸偏移量
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">release</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, on_element=None)</span></span>:
釋放一個元素上的鼠標按鈕。
- 如果參數不寫,那么是當前鼠標位置
- 如果參數寫定位到的元素對象element,那就是這個元素.
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">send_keys</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, *keys_to_send)</span></span>:
發送到當前焦點元素
要發送的按鍵。修飾符鍵常數可以在“Keys”類。
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">send_keys_to_element</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, element, *keys_to_send)</span></span>:
發送到定位到的元素上
- <span class="hljs-symbol">element:</span> 定位的元素
- <span class="hljs-symbol">keys_to_send:</span> 要發送的按鍵。修飾符鍵常數可以在“Keys”類。</code></pre>
舉個案例
1.實現Ctrl +F5 的組合鍵功能
# coding:utf-8