前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Selenium Webdriver 3.X源码分析之ActionChains

Selenium Webdriver 3.X源码分析之ActionChains

作者头像
苦叶子
发布2019-09-17 10:09:15
6200
发布2019-09-17 10:09:15
举报
文章被收录于专栏:开源优测

> Selenium Webdriver 3.X源码分析系列第5篇,该系列原则上会将整个源码分享一遍

在实际应用action_chains是这样的,例如将鼠标左键从一个元素移动到另外一个元素上,然后做单击动作。

方式一,连环腿大招方式:

方式二,无影脚方式:

不管是哪种方式,请注意其中最后都会调用perform方法,这个action_chains有点类似游戏中,先积聚足够的能力,然后一下放出一个连贯动作的大招,而这里的perform方法就是释放这些连贯动作的触发点。

下面我们一起按下action_chains.py的源码,先看一张大概的源码结构:

我们先看一下ActionChains对外提供的API的大体能力,下面我用一张表对相关API进行必要的说明。

API

功能

备注

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”类。

下面我们重点看一下__init__函数,其实也就一句话说清了。

注意:其中self._actions = []这个变量,其用于存储动作的,下面的perform函数就会对存储在_actions中的动作进行遍历然后执行

下面看看perform函数,将存储起来的动作,进行遍历一个个的进行执行,这就是前面说到的积蓄能量放大招

下面在看一个函数,用于将已经存储的动作进行清空,这样就可以存入新的动作链了,由reset_actions函数实现,比较简单,直接对列表进行[]赋值。

其他API的源码就不一一分析了,都是比较容易的了,以click为例:

其他API大体都这样原理了,不一一写了, 欢迎点好看

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源优测 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档