解决:SyntaxError: Non-ASCII character in file

今天尝试用monkeyrunner脚本在夜神模拟器上安装并截图QQ,但是遇到了一些问题:

1 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage 2 3 4 #连接模拟器 5 device = MonkeyRunner.waitForConnection() 6 7 #打开锁屏 8 device.drag((355,1061),(621,1061),3,1) 9 10 #安装QQ 11 device.installPackage("F:\\QQ_730.apk") 12 MonkeyRunner.sleep(8) 13 14 #启动QQ 15 device.startActivity(component="com.tencent.mobileqq/.activity.LoginActivity") 16 MonkeyRunner.sleep(5) 17 18 #点击登录 19 device.touch(180,1170,"DOWN_AND_UP") 20 MonkeyRunner.sleep(3) 21 22 #保存截图 23 result = device.takeSnapshot() 24 result.writeToFile("qq.png","png")

无奈刚开始就报错了。

"SyntaxError: Non-ASCII character in file 'C:\Users\Administrator\qq.py'

这是一个语法错误,原因可能是我们脚本的注释用的是中文。我们可以在脚本开始加上#-*-coding:utf-8-*-

1 #-*-coding:utf-8-*- 2 3 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage 4 5 6 #连接模拟器 7 device = MonkeyRunner.waitForConnection() 8 9 #打开锁屏 10 device.drag((355,1061),(621,1061),3,1) 11 12 #安装QQ 13 device.installPackage("F:\\QQ_730.apk") 14 MonkeyRunner.sleep(8) 15 16 #启动QQ 17 device.startActivity(component="com.tencent.mobileqq/.activity.LoginActivity") 18 MonkeyRunner.sleep(5) 19 20 #点击登录 21 device.touch(180,1170,"DOWN_AND_UP") 22 MonkeyRunner.sleep(3) 23 24 #保存截图 25 result = device.takeSnapshot() 26 result.writeToFile("qq.png","png")

可是,又报错了:

再次尝试:

1 import sys 2 reload(sys) 3 sys.setdefaultencoding("utf-8") 4 5 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage 6 7 8 #连接模拟器 9 device = MonkeyRunner.waitForConnection() 10 11 #打开锁屏 12 device.drag((355,1061),(621,1061),3,1) 13 14 #安装QQ 15 device.installPackage("F:\\QQ_730.apk") 16 MonkeyRunner.sleep(8) 17 18 #启动QQ 19 device.startActivity(component="com.tencent.mobileqq/.activity.LoginActivity") 20 MonkeyRunner.sleep(5) 21 22 #点击登录 23 device.touch(180,1170,"DOWN_AND_UP") 24 MonkeyRunner.sleep(3) 25 26 #保存图片 27 result = device.takeSnapshot() 28 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中运行也出现了相同的错误,解决的办法却不一样:

1 ''' 2 Created on 2017-9-26 3 4 @author: Administrator 5 ''' 6 7 8 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice 9 10 #连接设备 11 device = MonkeyRunner.waitForConnection() 12 MonkeyRunner.sleep(5) 13 14 #启动QQ 15 device.startActivity(component="com.tencent.mobileqq/.activity.SplashActivity") 16 MonkeyRunner.sleep(5) 17 18 #点击动态 19 device.touch(596, 1112, "DOWN_AND_UP") 20 MonkeyRunner.sleep(3) 21 22 #点击好友动态 23 device.touch(119, 296, "DOWN_AND_UP") 24 MonkeyRunner.sleep(5) 25 26 #向下滑 27 device.drag((288, 189), (288, 947), 1, 10) 28 MonkeyRunner.sleep(3) 29 30 #向上滑 31 device.drag((288, 947), (288, 189), 1, 10) 32 MonkeyRunner.sleep(3) 33 34 #回到桌面 35 device.touch(414, 738, "DOWN-AND_UP") 36 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

反而能够正常跑下去而不报错。其中原因,待我分析之后附上。

 


__EOF__

本文作者cnhkzyy
本文链接https://www.cnblogs.com/my_captain/p/7583447.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   cnhkzyy  阅读(1213)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示