行为链 ======= ``class selenium.webdriver.common.action_chains.ActionChains(driver)`` ``ActionChains`` 可以完成简单的交互行为,例如鼠标移动,鼠标点击事件,键盘输入,以及内容菜单交互。 这对于模拟那些复杂的类似于鼠标悬停和拖拽行为很有用 产生用户行为 -------------- 当你在 ``ActionChains`` 对象上调用行为方法时,这些行为会存储在 ``ActionChains`` 对象的一个队列里。 调用 ``perform()`` 时,这些动作就以他们队列的顺序来触发 ``ActionChains`` 可以使用链式模型: :: 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) action.perform() 不管怎样,这些动作总是一个接一个按他们被调用的顺序执行。 click(on_element=None) 点击一个元素 参数: * on_element:要点击的元素,如果是 ``None`` ,点击鼠标当前的位置 click_and_hold(on_element=None) 鼠标左键点击一个元素并且保持 参数: * on_element:同click()类似 double_click(on_element=None) 双击一个元素 参数: * on_element:同click()类似 drag_and_drop(source, target) 鼠标左键点击`source`元素,然后移动到 ``target`` 元素释放鼠标按键 参数: * source:鼠标点击的元素 * target:鼠标松开的元素 drag_and_drop_by_offset(source, xoffset,yoffset) 拖拽目标元素到指定的偏移点释放 参数: * source:点击的参数 * xoffset:X偏移量 * yoffset:Y偏移量 key_down(value,element=None) 只按下键盘,不释放。我们应该只对那些功能键使用(Contril,Alt,Shift) 参数: * value:要发送的键,值在 ``Keys`` 类里有定义 * element:发送的目标元素,如果是`None`,value会发到当前聚焦的元素上 例如,我们要按下 ctrl+c: :: ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform() key_up(value,element=None) 释放键。参考key_down的解释 move_by_offset(xoffset,yoffset) 将当前鼠标的位置进行移动 参数: * xoffset:要移动的X偏移量,可以是正也可以是负 * yoffset:要移动的Y偏移量,可以是正也可以是负 move_to_element(to_element) 把鼠标移到一个元素的中间 参数: * to_element:目标元素 move_to_element_with_offset(to_element,xoffset,yoffset) 鼠标移动到元素的指定位置,偏移量以元素的左上角为基准 参数: * to_element:目标元素 * xoffset:要移动的X偏移量 * yoffset:要移动的Y偏移量 perform() 执行所有存储的动作 release(on_element=None) 释放一个元素上的鼠标按键, 参数: * on_element:如果为 ``None`` ,在当前鼠标位置上释放 send_keys(*keys_to_send) 向当前的焦点元素发送键 参数: * keys_to_send:要发送的键,修饰键可以到`Keys`类里找到 send_keys_to_element(element,*keys_to_send) 向指定的元素发送键