WebDriver如何处理右键菜单

一、背景

在学习selenium webdriver的过程中,遇到这样一个问题。ActionChains类中提供了context_click的方法,它可以用来在web页面中进行右键点击的操作,但是问题来了。右键弹出的菜单如何去选择呢?

二、尝试

1、在ActionChains类中,我们可以​看到有一个send_keys的方法。该方法可以接受Keys类中键盘上大部分的按键操作,如ActionChains(driver).send_keys(Keys.DOWN),意图是发送一个向下的箭头操作来选择右键弹出菜单,但是实践后,发现是无效的;

2、既然send_keys​方法不行,那我接着找到了key_down和key_up的方法,按下某个键后再释放,达到相同的目的,实践后仍然失败;

3、我告诉自己不要气馁,一定会找到解决办法的。我又看到move_by_offset​的方法,既然键盘操作不行,那么我还可以用鼠标偏移量的方法,让鼠标移动到目标菜单上,再点击操作。残酷的现实告诉我,此路不通;

4、这时的我基本已经绝望,百度了很多方法也不行。后来,看到有人说用Robot类可以实现这个右键菜单的操作。而且,下面还有成功的代码,不过是用Java写的。对于只会python的我来说,需要找到一个python语言的实现,接下来开始找python下的“robot”​类。百度已经被我烦到死,还是没有找到;

5、最后,我在想那Python语言下是不是有模拟鼠标键盘操作的类库呢?换了一个思路,果然有所收获。win32api/win32con两个很牛的类可以做这个事,尝试成功

import win32api

import win32con

win32api.keybd_event(40,0,0,0)#下箭头的键码是40

win32api.keybd_event(40,0,win32con.KEYEVENTF_KEYUP,0)#按下后再释放

附个键位码表:

键位码表

6、还有一种解决右键菜单的方法,也列在下面,待以后有时间再尝试

使用AutoItX实现鼠标模拟

#将AutoItX3.dll 文件复制到 window目录然后注册一下

regsvr32.exe AutoItX3.dll

from win32com.client import Dispatch

def enter_game():

AutoItX = Dispatch( "AutoItX3.Control" )

# Block All Input

AutoItX.BlockInput( 1 )

AutoItX.Sleep( 20000 )

if AutoItX.WinActivate( GAME_WINDOW_TITLE, '' ):

pass

else:

if AutoItX.WinWaitActive( GAME_WINDOW_TITLE, '', 8 ):

pass

else:

# Unblock input

AutoItX.BlockInput( 0 )

return False

AutoItX.WinSetTitle( GAME_WINDOW_TITLE, '', _pre_title )

AutoItX.WinSetState( _pre_title, '', AutoItX.SW_MAXIMIZE )

AutoItX.Sleep( 5000 )

AutoItX.MouseMove( 462, 396, 10 )

AutoItX.MouseClick( "left" )

AutoItX.Sleep( 1000 )

AutoItX.Send( GAME_ACCT_NAME )

AutoItX.Sleep( 1000 )

AutoItX.MouseMove ( 462, 472, 10 )

AutoItX.MouseClick( "left" )

AutoItX.Sleep( 1000 )

AutoItX.Send( GAME_ACCT_PASS )

AutoItX.Send( "{ENTER}" )

AutoItX.Sleep( 10000 )

# Unblock input

AutoItX.BlockInput( 0 )

return True

python WebDriver如何处理右键菜单的更多相关文章

  1. 成功解决在Python文件上右键菜单无“Edit with IDLE”选项

    我电脑是Win7旗舰版,之前电脑上安装的是Python2.6版本的,前两天为了体验一下Microsoft Excel与Python之间互操作, 下载并安装了DataNitro,在安装的时候脑残的安装了 ...

  2. python 通过js控制滚动条拉取全文 通过psutil获取pid窗口句柄,通过win32gui使程序窗口前置 通过autopy实现右键菜单和另存为操作

    1.参考 利用 Python + Selenium 自动化快速截图 利用 Python + Selenium 实现对页面的指定元素截图(可截长图元素) 使用python获取系统所有进程PID以及进程名 ...

  3. python实现应用程序在右键菜单中添加打开方式

    最近项目组开发的一个小工具想要在右键菜单中添加打开方式,以有道云笔记为例进行了需求拆解和代码编写 1.需求拆解: 如何实现手动添加右键菜单的打开方式: Step1:打开注册表编辑器,Win+R-> ...

  4. windows下python管理右键菜单

    实现很简单,不记得什么时候写的了,贴出来希望能有所价值 """ Windows中创建右键菜单 """ import os import sy ...

  5. 转:python webdriver 环境搭建

    第一节 环境搭建准备工具如下:-------------------------------------------------------------下载 python[python 开发环境]ht ...

  6. 转:python webdriver API 之简单对象的定位

    对象(元素)的定位和操作是自动化测试的核心部分,其中操作又是建立在定位的基础上的,因此元素定位就显得非常重要. (本书中用到的对象与元素同为一个事物)一个对象就像是一个人,他会有各种的特征(属性) , ...

  7. Qt之国际化(系统文本-QMessageBox按钮、QLineEdit右键菜单等)

    简介 使用Qt的时候,经常会遇到英文问题,例如:QMessageBox中的按钮.QLineEdit.QSpinBox.QScrollBar中的右键菜单等.通常情况下,我们软件都不会是纯英文的,那么如何 ...

  8. 【Qt】Qt国际化(系统文本-QMessageBox按钮、QLineEdit右键菜单等)【转】

    简介 使用Qt的时候,经常会遇到英文问题,例如:QMessageBox中的按钮.QLineEdit.QSpinBox.QScrollBar中的右键菜单等.通常情况下,我们软件都不会是纯英文的,那么如何 ...

  9. python selenium-webdriver 下拉菜单处理 (九)

    测试过程中经常遇到下来菜单,比如说分页,每页显示的条数,以及语言的切换,很多时候经常是以下来菜单的形式展现,下面我们看一下selenium如何处理下来菜单. 首先selenium 很人性化的给提供了一 ...

随机推荐

  1. java后台获取参数乱码

    String title = getParam("searchTitle"); title = new String(title.getBytes("iso8859-1& ...

  2. light oj 1254 - Prison Break 最短路

    题目大意:n个点m条边的有向图,q次询问c,s,t,表示汽车邮箱容量为c,求从起点s到终点t的最小费用.汽车在每个点可以加任意的油,每个点的单位油价为a[i]. 题目思路:利用最小费优先队列优化最短路 ...

  3. RabbitMQ应用场景

    1.背景 RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现. 2.应用场景 2.1异步处理 场景说明:用户注册后,需要发注册邮件和注册短信, ...

  4. 匿名内部类可以访问的变量---静态成员变量和final修饰的局部变量

    在学习多线程的时候用到了匿名内部类,匿名内部类可以访问static静态成员变量或者final修饰的局部变量. 匿名内部类在编译之后会生成class文件,比如Test内的第一个匿名内部类编译之后就是Te ...

  5. Netty实现简单WebSocket服务器

    本文参考<Netty权威指南>├── WebSocketServerHandler.java├── WebSocketServer.java└── wsclient.html packag ...

  6. Node.js的模块系统

    编写稍大一点的程序时一般都会将代码模块化.Node.js提供了一个简单的模块系统.模块既可能是一个文件,也可能是包含一个或多个文件的目录. 模块的创建  如果模块是个文件,一般将代码合理拆分到不同的J ...

  7. 红迅JSAAS敏捷开发平台

    红迅JSAAS敏捷开发平台:    http://www.redxun.cn/

  8. vue后台项目记录

    1.当我们用axios进行接口访问时,必须同时使用Qs,否则后端接收不到所传的数据! npm 安装qs,然后引用 import Qs from 'qs' // 创建axios实例 const serv ...

  9. oracle 会话 解锁

    背景 这是当年第一次记录博客,当初记录的原因是感觉有些问题很少碰到,碰到有网上寻找一遍,文章很少是正好对症的,折腾半天终于解决了,但是没有记录过程,结果下次碰到又要从来一次.有的问题还极其不好找,or ...

  10. jQuery.extend()参数

    非原创,转载仅供学习 在处理插件参数的接收上,通常使用jQuery的extend方法.extend方法传递单个对象的情况下,这个对象会合并到jQuery身上,而当用extend方法传递一个以上的参数时 ...