前言

未加'automationName': 'Uiautomator2'参数使用Uiautomator可以正常使用driver.keyevent()方法,使用Uiautomator2时driver.keyevent()方法报错:

selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: Could not proxy. Proxy error: Could not proxy command to remote server. Original error: 404 - undefined

python V3.6

selenium V2.53.6

Appium-Python-Client V0.26

appium server V1.7.1

Uiautomator2

遇到问题

未加'automationName': 'Uiautomator2'参数使用Uiautomator可以正常使用driver.keyevent()方法,使用Uiautomator2时driver.keyevent()方法报错:

from appium import webdriver
import time desired_caps = {
"platformName": "Android",
"deviceName": "emulator-5554", # 设备名称
"platformVersion": "5.1.1", # android系统版本号
"appPackage": "com.yipiao", # app包名
"appActivity": "com.yipiao.activity.LaunchActivity", # 启动launch Activity
"noReset": True, # 不清空数据
'automationName': 'Uiautomator2' # toast 必须用Uiautomator2
}
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) time.sleep(10) # 启动时间等待,放长一点 # Uiautomator2使用keyevent事件报错
driver.keyevent(4) # back事件 code 4

调用keyevent方法,执行back事件,对应的code值是4,发现报错

Traceback (most recent call last):
File "D:/apptest/ke10/t_start.py", line 25, in <module>
driver.keyevent(4) # back事件 code 4
File "E:\python36\lib\site-packages\appium\webdriver\webdriver.py", line 411, in keyevent
self.execute(Command.KEY_EVENT, data)
File "E:\python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute
self.error_handler.check_response(response)
File "E:\python36\lib\site-packages\appium\webdriver\errorhandler.py", line 29, in check_response
raise wde
File "E:\python36\lib\site-packages\appium\webdriver\errorhandler.py", line 24, in check_response
super(MobileErrorHandler, self).check_response(response)
File "E:\python36\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 192, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: Could not proxy. Proxy error: Could not proxy command to remote server. Original error: 404 - undefined

主要原因是Uiautomator2上对keyevent不支持了,用driver.press_keycode()方法可以解决

press_keycode 和keyevent

查看press_keycode 和keyevent 源码,发现这2个方法没啥区别,keyevent上面有个备注Needed for Selendroid,可能是老版本里面的功能。

新版本用Uiautomator2可以使用 press_keycode 方法

# Needed for Selendroid
def keyevent(self, keycode, metastate=None):
"""Sends a keycode to the device. Android only. Possible keycodes can be
found in http://developer.android.com/reference/android/view/KeyEvent.html. :Args:
- keycode - the keycode to be sent to the device
- metastate - meta information about the keycode being sent
"""
data = {
'keycode': keycode,
}
if metastate is not None:
data['metastate'] = metastate
self.execute(Command.KEY_EVENT, data)
return self def press_keycode(self, keycode, metastate=None):
"""Sends a keycode to the device. Android only. Possible keycodes can be
found in http://developer.android.com/reference/android/view/KeyEvent.html. :Args:
- keycode - the keycode to be sent to the device
- metastate - meta information about the keycode being sent
"""
data = {
'keycode': keycode,
}
if metastate is not None:
data['metastate'] = metastate
self.execute(Command.PRESS_KEYCODE, data)
return self

使用 press_keycode 替换 keyevent即可解决问题

from appium import webdriver
import time desired_caps = {
"platformName": "Android",
"deviceName": "emulator-5554", # 设备名称
"platformVersion": "5.1.1", # android系统版本号
"appPackage": "com.yipiao", # app包名
"appActivity": "com.yipiao.activity.LaunchActivity", # 启动launch Activity
"noReset": True, # 不清空数据
'automationName': 'Uiautomator2' # toast 必须用Uiautomator2
}
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) time.sleep(10) # 启动时间等待,放长一点 # Uiautomator2使用keyevent事件报错
# driver.keyevent(4) # back事件 code 4 # Uiautomator2使用press_keycode解决
driver.press_keycode(4)

keycode相关方法

  • driver.press_keycode(4) #发送keycode,功能:按键 Uiautomator2使用keyevent事件报错
  • driver.keyevent(4) #发送keycode,功能:按键,与press_keycode无区别 Uiautomator2正常使用
  • driver.hide_keyboard() #iOS使用key_name隐藏,安卓不使用参数,功能:隐藏键盘
  • driver.long_press_keycode(4) #发送keycode,功能:长按键

appiumQQ交流群:779429633

appium+python自动化64-使用Uiautomator2执行driver.keyevent()方法报错解决的更多相关文章

  1. appium+python自动化63-使用Uiautomator2报错问题解决

    前言 appium desktop V1.7.1版本使用命令行版本启动appium后,使用Uiautomator2定位toast信息报错:appium-uiautomator2-server-v0.3 ...

  2. appium+python自动化38-adb shell按键操作(input keyevent)

    前言 接着上篇介绍input里面的按键操作keyevent事件,发送手机上常用的一些按键操作 keyevent 1.keyevent事件有一张对应的表,可以直接发送对应的数字,也可以方式字符串,如下两 ...

  3. appium+python自动化-adb shell按键操作(input keyevent)

    前言 接着上篇介绍input里面的按键操作keyevent事件,发送手机上常用的一些按键操作 keyevent 1.keyevent事件有一张对应的表,可以直接发送对应的数字,也可以方式字符串,如下两 ...

  4. vue中使用ts后,父组件获取执行子组件方法报错问题

    一.问题产生背景: 子组件的一个方法: update () { this.$nextTick(() => { this.ul_slots.forEach((ul, cur_slots_index ...

  5. Appium+python自动化8-Appium Python API

    Appium+python自动化8-AppiumPython API   前言: Appium Python API全集,不知道哪个大神整理的,这里贴出来分享给大家. 1.contexts conte ...

  6. appium+python自动化52-多点触控MultiAction

    前言 MultiAction是针对多点触控操作的,是TouchAction的一个补充模块 TouchAction用法参考前面的一篇:appium+python自动化33-TouchAction 多点触 ...

  7. appium+python自动化61-中文输入乱码问题解决

    前言 在夜神模拟器上输入中文,发现是乱码,将unicodeKeyboard和resetKeyboard参数设置为True了,发现还是没法解决. 打开手机设置语言和输入法,发现找不到Appium And ...

  8. Appium+python自动化20-查看iOS上app元素属性

    前言 学UI自动化首先就是定位页面元素,玩过android版的appium小伙伴应该都知道,appium的windows版自带的Inspector可以定位app上的元素 Mac版的appium1.6的 ...

  9. Appium+python自动化20-查看iOS上app元素属性【转载】

    前言 学UI自动化首先就是定位页面元素,玩过android版的appium小伙伴应该都知道,appium的windows版自带的Inspector可以定位app上的元素Mac版的appium1.6的版 ...

随机推荐

  1. cube-slide组件的应用

    <template> <div> <cube-slide :data="items"/> </div> </template& ...

  2. django:删除表后怎么重新数据迁移生成表

    1.将对应app下的migrations文件夹下面的除了__init__.py文件外全部删除 2.delete from django_migrations where app='app_name' ...

  3. 【Maven学习】定制库到Maven本地资源库

    目标:手工操作将一个jar安装到本地仓库 第一步:首先获取到jar包,可以是第三方的 也可以是自己创建的,放到本地任意目录 比如:joda-time-2.10.3,放到C:\jar\  目录下面 第二 ...

  4. 【ARM-Linux开发】OpenACC并行编程实战笔记

    今年运气比较好,学了cuda之后,了解到了gpu的另两种使用语言opencl和openacc,  opencl(Open Computing Language ,开放计算语言)是面向异构系统的并行编程 ...

  5. activiti学习2:示例工程activiti-explorer.war的使用

    目录 activiti学习2:示例工程activiti-explorer.war的使用 一.搭建开发环境 二.运行示例工程 三.示例工程功能演示 1. 创建流程图 2. 部署流程图 3. 启动流程 4 ...

  6. 前端与编译原理 用js去运行js代码 js2run

    # 前端与编译原理 用js去运行js代码 js2run 前端与编译原理似乎相隔甚远,各种热门的框架都学不过来,那能顾及到这么多底层呢,前端开发者们似乎对编译原理的影响仅仅是"抽象语法树&qu ...

  7. 将python工程部署到新服务器(对virtualenv工具进行环境迁移)

    将python工程部署到新服务器(对virtualenv工具进行环境迁移) # 从开发的电脑上导出 pip list 到 requirements.txt 文件pip freeze > requ ...

  8. vue中methods、computed、watch区别

    vue中methods.computed.watch区别methods:事件调用的钩子 computed:{ // 计算属性是根据他依赖的值计算的,当依赖值发生变化,其跟着改变 // 计算属性是依赖缓 ...

  9. [转帖]浅谈分布式一致性与CAP/BASE/ACID理论

    浅谈分布式一致性与CAP/BASE/ACID理论 https://www.cnblogs.com/zhang-qc/p/6783657.html ##转载请注明 CAP理论(98年秋提出,99年正式发 ...

  10. golang使用json格式实现增删查改

    需求和思路 在一般的小项目或者一个小软件,例如客户端之类的小程序中,可能会需要数据的持久化.但是使用一般的数据库(Mysql)之类的不合适.使用sqlite3这种嵌入式的是个较好的方法,但是Go语言中 ...