解决:SyntaxError: Non-ASCII character in file
2024-08-28 03:31:13
今天尝试用monkeyrunner脚本在夜神模拟器上安装并截图QQ,但是遇到了一些问题:
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage #连接模拟器 device = MonkeyRunner.waitForConnection() #打开锁屏 device.drag((355,1061),(621,1061),3,1) #安装QQ device.installPackage("F:\\QQ_730.apk") MonkeyRunner.sleep(8) #启动QQ device.startActivity(component="com.tencent.mobileqq/.activity.LoginActivity") MonkeyRunner.sleep(5) #点击登录 device.touch(180,1170,"DOWN_AND_UP") MonkeyRunner.sleep(3) #保存截图 result = device.takeSnapshot() result.writeToFile("qq.png","png")
无奈刚开始就报错了。
"SyntaxError: Non-ASCII character in file 'C:\Users\Administrator\qq.py'
这是一个语法错误,原因可能是我们脚本的注释用的是中文。我们可以在脚本开始加上#-*-coding:utf-8-*-
#-*-coding:utf-8-*- from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage #连接模拟器 device = MonkeyRunner.waitForConnection() #打开锁屏 device.drag((355,1061),(621,1061),3,1) #安装QQ device.installPackage("F:\\QQ_730.apk") MonkeyRunner.sleep(8) #启动QQ device.startActivity(component="com.tencent.mobileqq/.activity.LoginActivity") MonkeyRunner.sleep(5) #点击登录 device.touch(180,1170,"DOWN_AND_UP") MonkeyRunner.sleep(3) #保存截图 result = device.takeSnapshot() result.writeToFile("qq.png","png")
可是,又报错了:
再次尝试:
import sys reload(sys) sys.setdefaultencoding("utf-8") from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage #连接模拟器 device = MonkeyRunner.waitForConnection() #打开锁屏 device.drag((355,1061),(621,1061),3,1) #安装QQ device.installPackage("F:\\QQ_730.apk") MonkeyRunner.sleep(8) #启动QQ device.startActivity(component="com.tencent.mobileqq/.activity.LoginActivity") MonkeyRunner.sleep(5) #点击登录 device.touch(180,1170,"DOWN_AND_UP") MonkeyRunner.sleep(3) #保存图片 result = device.takeSnapshot() result.writeToFile("qq.png","png")
值得注意的两点是:
1. 检查夜神模拟器有没有连上:adb devices
如果没有连上,用adb connect 127.0.0.1:62001连接,再用adb devices检查。(详见lynnLi的博客monkeyrunner之夜神模拟器的安装与使用(二))
2. 一定要用好MonkeyRunner.sleep()
在实际的测试过程中,有的时候发现脚本业务逻辑是正确的,可是不知道为什么一旦执行起来结果却是错误的,那么有一种可能就是你的操作过快,导致界面元素没有完全展示出来就开始了后续操作,从而引起的问题。(引自《精通移动App测试实战:技术、工具和案例》,于涌 王磊 曹向志编著)
====================================9月26日更新======================================
不知是Eclipse出错概率多,还是我的python脚本问题,今天写了一段python脚本,在Elipse中运行也出现了相同的错误,解决的办法却不一样:
''' Created on 2017-9-26 @author: Administrator ''' from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice #连接设备 device = MonkeyRunner.waitForConnection() MonkeyRunner.sleep(5) #启动QQ device.startActivity(component="com.tencent.mobileqq/.activity.SplashActivity") MonkeyRunner.sleep(5) #点击动态 device.touch(596, 1112, "DOWN_AND_UP") MonkeyRunner.sleep(3) #点击好友动态 device.touch(119, 296, "DOWN_AND_UP") MonkeyRunner.sleep(5) #向下滑 device.drag((288, 189), (288, 947), 1, 10) MonkeyRunner.sleep(3) #向上滑 device.drag((288, 947), (288, 189), 1, 10) MonkeyRunner.sleep(3) #回到桌面 device.touch(414, 738, "DOWN-AND_UP") MonkeyRunner.sleep(3)
出现报错:
170926 23:53:26.465:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] Script terminated due to an exception 170926 23:53:26.465:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]SyntaxError: Non-ASCII character in file 'D:\Program\workspace\monkeyrunner_test01\test02.py', but no encoding declared; see http://www.python.org/peps/pep-0263.html for details 170926 23:53:26.465:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.Py.SyntaxError(Py.java:166) 170926 23:53:26.465:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.ParserFacade.fixParseError(ParserFacade.java:102) 170926 23:53:26.465:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.ParserFacade.parse(ParserFacade.java:184) 170926 23:53:26.465:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.Py.compile_flags(Py.java:1731) 170926 23:53:26.465:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.__builtin__.execfile_flags(__builtin__.java:514) 170926 23:53:26.465:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.util.PythonInterpreter.execfile(PythonInterpreter.java:225) 170926 23:53:26.465:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at com.android.monkeyrunner.ScriptRunner.run(ScriptRunner.java:116) 170926 23:53:26.465:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at com.android.monkeyrunner.MonkeyRunnerStarter.run(MonkeyRunnerStarter.java:77) 170926 23:53:26.465:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at com.android.monkeyrunner.MonkeyRunnerStarter.main(MonkeyRunnerStarter.java:189)
方法一:如果我加上
import sys reload(sys) sys.setdefaultencoding("utf-8")
报错:
170926 23:56:37.058:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] Script terminated due to an exception 170926 23:56:37.058:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]SyntaxError: Non-ASCII character in file 'D:\Program\workspace\monkeyrunner_test01\test02.py', but no encoding declared; see http://www.python.org/peps/pep-0263.html for details 170926 23:56:37.058:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.Py.SyntaxError(Py.java:166) 170926 23:56:37.058:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.ParserFacade.fixParseError(ParserFacade.java:102) 170926 23:56:37.058:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.ParserFacade.parse(ParserFacade.java:184) 170926 23:56:37.058:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.Py.compile_flags(Py.java:1731) 170926 23:56:37.058:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.__builtin__.execfile_flags(__builtin__.java:514) 170926 23:56:37.058:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.util.PythonInterpreter.execfile(PythonInterpreter.java:225) 170926 23:56:37.058:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at com.android.monkeyrunner.ScriptRunner.run(ScriptRunner.java:116) 170926 23:56:37.058:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at com.android.monkeyrunner.MonkeyRunnerStarter.run(MonkeyRunnerStarter.java:77) 170926 23:56:37.058:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at com.android.monkeyrunner.MonkeyRunnerStarter.main(MonkeyRunnerStarter.java:189)
方法二:如果我加上:
#-*-coding:utf-8-*-
依旧报错:
170926 23:58:09.631:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] Script terminated due to an exception 170926 23:58:09.631:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]SyntaxError: ('Unknown encoding: utf-8-', ('D:\\Program\\workspace\\monkeyrunner_test01\\test02.py', 1, 0, '')) 170926 23:58:09.631:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.ParserFacade.prepBufReader(ParserFacade.java:336) 170926 23:58:09.631:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.ParserFacade.prepBufReader(ParserFacade.java:286) 170926 23:58:09.631:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.ParserFacade.parse(ParserFacade.java:181) 170926 23:58:09.631:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.Py.compile_flags(Py.java:1731) 170926 23:58:09.631:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.__builtin__.execfile_flags(__builtin__.java:514) 170926 23:58:09.631:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.util.PythonInterpreter.execfile(PythonInterpreter.java:225) 170926 23:58:09.631:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at com.android.monkeyrunner.ScriptRunner.run(ScriptRunner.java:116) 170926 23:58:09.631:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at com.android.monkeyrunner.MonkeyRunnerStarter.run(MonkeyRunnerStarter.java:77) 170926 23:58:09.631:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at com.android.monkeyrunner.MonkeyRunnerStarter.main(MonkeyRunnerStarter.java:189)
方法三:如果我加上
#coding:utf-8
反而能够正常跑下去而不报错。其中原因,待我分析之后附上。
最新文章
- [LeetCode] Top K Frequent Elements 前K个高频元素
- word使用技巧-批量删除图片技巧
- NOSQL 数据库 CodernityDB
- 真机测试无缘无故finish了。程序也没有启动
- Loadrunner11.0 录制手机App脚本的方法
- 最小生成树(HDOJ 1863)
- linux exec用法总结
- Spring AOP: Spring之面向方面编程
- JS获取客户端电脑信息(转)
- Linux(CentOS)常用命令
- [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.2.3
- Winform-CheckBox、ChecklistBox控件遍历代码
- Learning WCF Chapter1 Creating a New Service from Scratch
- OpenWrt刷机
- Android自定义Activity酷炫的动画跳转效果
- SQL Server高可用——日志传送(4-1)——概论
- ubuntu 14.04 分辨率调整 -- xrandr命令
- rapidjson对于json的序列化与反序列化
- ERP承接新后台优惠规则问题
- Java动态代理、XML、正则