Python+Selenium+Unittest 之selenium12--WebDriver操作方法2-鼠标操作1(ActionChains类简介)

news/2024/7/8 1:55:19

        在我们平时的使用过程中,会使用鼠标去进行很多操作,比如鼠标左键点击、双击、鼠标右键点击,鼠标指针悬浮、拖拽等操作。在selenium中,我们也可以去实现常用的这些鼠标操作,这时候就需要用到selenium中的ActionChains类了,ActionChains类里包含了上述一些列的鼠标操作。

1、ActionChains的使用语法

(1)首先第一步我们是要先导入ActionChains类。

from selenium.webdriver import ActionChains

(2)定位一个元素并赋值

baidu_cl=driver.find_element_by_link_text("新闻") #定位元素新闻并赋值给baidu_cl

(3)使用ActionChains来点击新闻按钮

ActionChains(driver).click(baidu_cl).perform()   #点击新闻

常用的写法为:ActionChains(driver).鼠标要进行的操作(鼠标要操作的元素).perform()

        这里其实是执行了两个操作,1是调用ActionChains中的click()方法发出对元素进行点击的指令,2是进行执行perform()方法,运行之前发出的指令。如果这里不加perform(),ActionChains(driver).click(baidu_cl)是不会运行的,只有运行了perform才会去运行之前的指令。可以这么去理解,就像我们在调试代码一样,先把需要的代码都写好,只有点了运行按钮才会从上到下的运行之前写好的代码。

整体运行:

from selenium import webdriver              #导入selenium模块的webdriver
from selenium.webdriver import ActionChains #导入ActionChains类
driver = webdriver.Chrome()           #webdriver.Chrome()是启动谷歌浏览器然后定义成变量driver
driver.get("https://www.baidu.com")   #打开百度浏览器  
baidu_cl=driver.find_element_by_link_text("新闻")    #定位元素新闻按钮并赋值给baidu_cl
ActionChains(driver).click(baidu_cl).perform()      #发出点击新闻按钮的指令并执行

下面来分开写看下,不加perform()的情况下是否会运行click()指令。

from selenium import webdriver              #导入selenium模块的webdriver
from selenium.webdriver import ActionChains #导入ActionChains类
driver = webdriver.Chrome()           #webdriver.Chrome()是启动谷歌浏览器然后定义成变量driver
driver.get("https://www.baidu.com")   #打开百度浏览器  
baidu_cl=driver.find_element_by_link_text("新闻")    #定位元素新闻按钮并赋值给baidu_cl
ActionChains(driver).click(baidu_cl)    #发出点击新闻按钮的指令

运行后发现,只会打开浏览器不会执行点击的操作。

下面再分开写看下是否会正常执行。(先点击首页新闻推荐的换一换,然后再点击新闻按钮)

from selenium import webdriver              #导入selenium模块的webdriver
from selenium.webdriver import ActionChains #导入ActionChains类
driver = webdriver.Chrome()           #webdriver.Chrome()是启动谷歌浏览器然后定义成变量driver
driver.get("https://www.baidu.com")   #打开百度浏览器  
baidu_cl=driver.find_element_by_link_text("新闻")    #定位元素新闻按钮并赋值给baidu_cl
baidu_huan=driver.find_element_by_class_name("hot-refresh-text")   #定位到换一换
cli=ActionChains(driver)      #ActionChains(driver)实例化给cli
cli.click(baidu_cl)           #发出点击新闻元素的指令
cli.click(baidu_cl)           #发出点击换一换的指令
cli.perform()                #运行上面的所有指令(从上到下执行,先点击换一换,再点击新闻)

      运行这段代码就可以较为明显的看出来perform()的作用了。先是把用户生成行为或者就是说发出指令全部储存在ActionChains的对象中,然后使用perform()方法把储存在ActionChains中的指令按顺序去进行执行。

        发一个学习中发现的问题,这时候就会有疑问,为什么之前使用click()进行点击的时候,没有使用perform()也能正常调用,后来进行一系列搜索发现,两个click()是不一样的,一个是selenium中的click(),这时候可以直接单独使用,一般进行比较简单的场景时,直接使用click()就能满足,而另一个ActionChains类中的click(),这时候使用click()就需要满足上面说的ActionChains的使用方法,并且用perform()后才能正常进行点击。


http://lihuaxi.xjx100.cn/news/1764824.html

相关文章

windows cmake x86 x64 下载与安装

cmake 下载路径:cmake 下载选择: 界面下拉选取适合自己的版本 这里是windows x86 x64 (x86是32位系统;x64是64位系统) 安装: 点击安装。 此处选择添加环境变量 命令提示符 验证查看 cmake 桌面可以…

平面和射线交点

设平面 A x B y C z D 0 ( A 2 B 2 C 2 ≠ 0 ) AxByCz D0\left(A^2B^2C^2\neq 0\right) AxByCzD0(A2B2C20), 点 P ( P x , P y , P z ) P(P_x, P_y, P_z) P(Px​,Py​,Pz​) (1)求点 P P P到平面距离 (2)过点 P P P作直线,方向为 ( D x , D y , D z ) \lef…

cad打开后好多圈圈

原因:标注比例出问题 解决:d——修改标注样式——把自己的标注样式【置为当前】即可解决

【洛谷 P1591】阶乘数码 题解(模拟+高精度)

阶乘数码 题目描述 求 n ! n! n! 中某个数码出现的次数。 输入格式 第一行为 t ( t ≤ 10 ) t(t \leq 10) t(t≤10),表示数据组数。接下来 t t t 行,每行一个正整数 n ( n ≤ 1000 ) n(n \leq 1000) n(n≤1000) 和数码 a a a。 输出格式 对于…

el-select下拉框默认显示全部选项

这里一直不默认显示全部,但这部分代码是正确的, 经过查询发现: 所以找到了这段: 发现之前role_id和status是 修改成0后就可以默认选中全部选项了

python使用memory_profiler分析代码运行内存占用

memory_profile memory_profiler源码仓库 安装 pip install memory_profiler 使用 请参考以下文章,写的很详细 【精选】Python代码优化工具——memory_profiler_被Python玩的Kenny的博客-CSDN博客 本文要增加介绍的是API使用 目录结构 |--my.py |--tests | |-- test_m…

Word背景图片插入,5个简单方法快速完成!

“我想在我的Word文档里加入一些背景图片,让整个文档看起来更美观,但是我不知道应该怎么操作,希望大家帮帮我!” 很多朋友在工作和学习中都会用到Word来编写文章,为Word设置背景图片可以增加文档的吸引力和个性化。Wor…

[yarn]yarn异常

一、运行一下算圆周率的测试代码,看下报错 cd /home/data_warehouse/module/hadoop-3.1.3/share/hadoop/mapreduce hadoop jar hadoop-mapreduce-examples-3.1.3.jar pi 1000 1000 后面2个数字参数的含义: 第1个1000指的是要运行1000次map任务 …