分享

Selenium3源码之common下action_chains.py模块分析

 开源优测 2021-12-09

阅读源码是掌握Selenium的最好方式

我的公众号:开源优测

Selenium3源码之common下action_chains.py模块分析

介绍

本文主要对action_chains.py模块的源码进行分析说明,其代码位置如图:

在action_chains.py模块中定义和实现了类:ActionChains,主要实现鼠标移动,鼠标按键动作,按键和上下文菜单交互。
这对于执行更复杂的操作(如鼠标悬停、拖放)非常有用。

该模块源码是掌握selenium必须阅读和掌握的!!!

分类说明

下面我们通过该源码模块的结构大致了解下ActionChains类的成员:

下面我们通过一张表对上图中对外使用的成员进行分类(即带下划线的成员不放入下表):

分类函数名描述
鼠标操作def click(self, on_element=None)鼠标左键单击
鼠标操作def click_and_hold(self, on_element=None)鼠标左键按键,不释放
鼠标操作def context_click(self, on_element=None)鼠标右击
鼠标操作def double_click(self, on_element=None)鼠标左键双击
鼠标操作def drag_and_drop(self, source, target)鼠标拖曳动作,将指定元素位置拖曳到目标元素位置,来移动元素
鼠标操作def drag_and_drop_by_offset(self, source, xoffset, yoffset)鼠标拖曳动作,将指定元素按沿x、y方向拖曳指定距离来移动元素
鼠标操作def move_by_offset(self, xoffset, yoffset)将鼠标光标沿x、y方向移动指定距离,来实现鼠标的移动
鼠标操作def move_to_element(self, to_element)将鼠标光标移动到指定的元素上
鼠标操作def move_to_element_with_offset(self, to_element, xoffset, yoffset)将鼠标光标移动到指定的元素相对元素左上角位置偏移(xoffset、yoffset)的位置
鼠标操作def release(self, on_element=None)释放鼠标,与click_and_hold函数配对使用
键盘操作def key_down(self, value, element=None)按下指定的键盘按键
键盘操作def key_up(self, value, element=None)释放已按下的键盘按键(与key_down配套使用)
键盘操作def send_keys(self, *keys_to_send)键盘输入
键盘操作def send_keys_to_element(self, element, *keys_to_send)给指定元素(可输入元素)进行键盘输入
其他def perform(self)执行所有存储的动作
其他def reset_actions(self)清空所有存储的动作
其他def pause(self, seconds)在指定的时间内暂定所有的输入

开源优测

分享软件测试开源技术、经验、方案的首发平台

长按二维码/微信扫描 关注开源优测

苦叶子个人微信:liyimin1912

有问题,可留言或加好友进微信群

源码分析

下面从上节分类中各抽取一个函数进行分析说明,其他的请自行阅读源码学习:

__init__函数说明

用于初始化创建ActionChains实例

def __init__(self, driver): """    初始化一个ActionChains实例    :参数说明:        - driver: webdriver实例对象    """ self._driver = driver
   
   # 动作存储列表
self._actions = [] # 判断是否为w3c兼容的浏览器 if self._driver.w3c: self.w3c_actions = ActionBuilder(driver)

perform函数说明
用于执行所有存储的动作

def perform(self): """    执行所有存储的动作    """ # 如果是w3c兼容的浏览器 if self._driver.w3c: self.w3c_actions.perform() else: # 遍历动作列表,按序执行动作 for action in self._actions: action()

click函数
用于实现模拟鼠标左键单击动作

def click(self, on_element=None): """    模拟鼠标左键单击    :参数说明:        - on_element: 鼠标要单击的目标元素.        如果为 None, 则在鼠标光标当前位置单击.    """ # 如果是w3c兼容性浏览器则执行该片段代码 if self._driver.w3c: # 单击动作 self.w3c_actions.pointer_action.click(on_element) # 单击完后,暂停下 self.w3c_actions.key_action.pause() self.w3c_actions.key_action.pause() else: # 先判断元素是否存在 if on_element: # 存在则,先移动到目标元素上 self.move_to_element(on_element) # 发送单击指令     self._actions.append(lambda: self._driver.execute( Command.CLICK, {'button': 0})) return self

总结

总体而言action_chains.py实现了模拟鼠标和键盘的动作,并提供了可以批量执行动作的方法。

总体的代码实现这里未深入解析其上下和相互的调用逻辑,但本文所演示的基本分析足够一个软件测试人员来进一步了解和学习,关键还是在于自身去熟悉和阅读源码,克服代码阅读的陌生感,为后续深入实战打下基础。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多