zoukankan      html  css  js  c++  java
  • Selenium3+python3自动化(四十四)--行为事件(ActionChains)源码详解

    ActionChains简介

    actionchains是selenium里面专门处理鼠标相关的操作如:鼠标移动,鼠标按钮操作,按键和上下文菜单(鼠标右键)交互。

    这对于做更复杂的动作非常有用,比如悬停和拖放。

    actionchains也可以和快捷键结合起来使用,如ctrl,shift,alt结合鼠标一起使用

    需要导入: from selenium.webdriver.common.action_chains import ActionChains

    当你使用actionchains对象方法,行为事件是存储在actionchains对象队列。当你使用perform(),执行

    # coding:utf-8
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    driver=webdriver.Chrome()
    driver.get("https://www.baidu.com")
    s=driver.find_element_by_id("s-usersetting-top")
    ActionChains(driver).move_to_element(s).perform()
    # h=driver.find_element_by_link_text("搜索设置")
    h=driver.find_element_by_xpath("//div[@id='s-user-setting-menu']/div/a[1]")
    h.click()
    

     方法介绍

    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 的组合键功能
    
    # coding:utf-8
    
    # 作者:上海-悠悠
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys
    import time
    
    driver = webdriver.Firefox()
    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()
    

     

    越努力,越幸运!!! good good study,day day up!!!
  • 相关阅读:
    [PY3]——logging
    [PY3]——对iterator的处理(解析式、map、reduce、filter)
    php基础语法(文件加载和错误)
    php基础语法(控制语句、数组、函数)
    php基础语法(数据类型、运算符)
    php基础语法(变量)
    java基础语法
    ztree 获取根节点
    每天一个linux命令
    浅谈Web自适应
  • 原文地址:https://www.cnblogs.com/canglongdao/p/13617172.html
Copyright © 2011-2022 走看看