zoukankan      html  css  js  c++  java
  • 解决: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:UsersAdministratorqq.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:Programworkspacemonkeyrunner_test01	est02.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:Programworkspacemonkeyrunner_test01	est02.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

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

  • 相关阅读:
    luoguP1080 国王游戏 题解(NOIP2012)(贪心+高精)
    luoguP1079 Vigenère 密码 题解(NOIP2012)
    luoguP2184 贪婪大陆 题解(树状数组)
    luoguP2680 运输计划 题解(二分答案+树上差分)
    树链剖分总结
    树上差分总结
    luoguP3258 [JLOI2014]松鼠的新家 题解(树上差分)
    简单差分(保证你一看就懂)
    luoguP3128 [USACO15DEC]最大流Max Flow 题解(树上差分)
    luoguP1541 乌龟棋 题解(NOIP2010)
  • 原文地址:https://www.cnblogs.com/my_captain/p/7583447.html
Copyright © 2011-2022 走看看