解决: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

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

 

转载于:https://www.cnblogs.com/my_captain/p/7583447.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值