android - 带有机器人框架的 MonkeyRunner

标签 android automation monkeyrunner sikuli robotframework

我打算使用 monkeyrunner 脚本做自动化测试用例,我想使用 robotframework(我对 robotium 不感兴趣)。 我看到了一个关于使用机器人框架自动化 sikuli 脚本的优秀教程 http://blog.mykhailo.com/2011/02/how-to-sikuli-and-robot-framework.html

有没有什么方法可以用 robotframework 和 monkeyrunner 做类似的事情?

这是我的示例 monkeyrunner 脚本,它在使用 monkeyrunner 调用时正确执行。

from __future__ import with_statement
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice

def testCase() :
    device = MonkeyRunner.waitForConnection()
    result2 = device.takeSnapshot()
    # Writes the screenshot to a file
    result2.writeToFile("scr.png","png")

def my_keyword():
    print 'Hello, world!'

if __name__ == '__main__':
    testCase()

我想用 roboframework 调用相同的方法。我正在尝试以下操作。我不确定下面的调用是否正确,我只是从sikuli自动化示例中复制并修改它。

monkey_jar=/home/user/android-sdks/tools/lib/monkeyrunner.jar
guava_jar=/home/user/android-sdks/tools/lib/guavalib.jar
java -cp "robotframework-2.7.4.jar:$monkey_jar:$guava_jar" -Dpython.path="/home/user/android-sdks/tools/lib/" \
org.robotframework.RobotFramework --pythonpath=./  --outputdir=results --loglevel=TRACE $1

当我这样做时,出现以下错误。

 Importing test library 'MyLibrary' failed: NoClassDefFoundError: Could not initialize class com.android.monkeyrunner.MonkeyDevice
java.lang.NoClassDefFoundError: 
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:247)
    at MyLibrary$py.f$0(/home/user/automation/DemoScripts/MyLibrary.py:9)
    at MyLibrary$py.call_function(/home/user/automation/DemoScripts/MyLibrary.py)
    at robot.utils.importer$py._import$13(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/importer.py:154)
    at robot.utils.importer$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/importer.py)
    at robot.utils.importer$py.import_$28(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/importer.py:241)
    at robot.utils.importer$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/importer.py)
    at robot.utils.importer$py._import_class_or_module$4(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/importer.py:67)
    at robot.utils.importer$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/importer.py)
    at robot.utils.importer$py.import_class_or_module$3(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/importer.py:64)
    at robot.utils.importer$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/importer.py)
    at robot.run$py.main$3(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/run.py:367)
    at robot.run$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/run.py)
    at robot.utils.application$py._execute$10(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/application.py:87)
    at robot.utils.application$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/application.py)
    at robot.utils.application$py.execute_cli$5(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/application.py:45)
    at robot.utils.application$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/utils/application.py)
    at robot.run$py.run_cli$6(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/run.py:396)
    at robot.run$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/run.py)
    at robot.jarrunner$py._run$3(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/jarrunner.py:60)
    at robot.jarrunner$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/jarrunner.py)
    at robot.jarrunner$py.run$2(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/jarrunner.py:53)
    at robot.jarrunner$py.call_function(/Users/jmalinen/Documents/workspace/robot/tmp-jar-dir/Lib/robot/jarrunner.py)
    at org.robotframework.RobotFramework.run(RobotFramework.java:62)
    at org.robotframework.RobotFramework.main(RobotFramework.java:37)
PYTHONPATH:
  /home/user/automation/DemoScripts
  /home/user/automation/DemoScripts/robotframework-2.7.4.jar/Lib/robot/libraries
  /home/user/automation/DemoScripts/robotframework-2.7.4.jar/Lib
  /home/user/android-sdks/tools/lib/
  /home/user/automation/DemoScripts/Lib
  __classpath__
  __pyclasspath__/
  .
  /home/user/automation/DemoScripts
CLASSPATH:
  robotframework-2.7.4.jar
  /home/user/android-sdks/tools/lib/monkeyrunner.jar
  /home/user/android-sdks/tools/lib/guavalib.jar
==============================================================================

我相信与 roboframework 一起执行 monkeyrunner 测试用例是很有可能的。

有什么意见吗?

最佳答案

好吧,经过几天的尝试,我发现可以将 MonkeyRunner 脚本与 Robotframework 一起使用。

简而言之,您可以使用以下命令与 monkeyrunner 一起启动 robotframework。

export cpath=$(echo libs/*.jar | tr ' ' ':')
java   -Dpython.path=$cpath -jar robotframework-2.7.4.jar robo-tests.txt

但唯一的问题是,monkeyrunner 的 main 没有被调用,因此没有初始化 ChimpChat 对象,这导致空指针异常。我在 MonkeyRunner.java 中修复了它,并创建了一个新的 monkeyrunner.jar。这样,我就可以从 roboframework 运行 monkeyrunner 脚本。我将尝试创建一个分步教程并将其发布。

关于android - 带有机器人框架的 MonkeyRunner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12693744/

相关文章:

android - 如何在monkeyrunner测试文件中导入一个py文件函数

android - Spinner 使 Android 应用程序崩溃

java - 获取 Parcelable 写入可序列化对象时遇到 IOException

mysql - 在 MySQL 中检查时间戳是否来自今天

c# - 我们可以使用 UI 自动化来自动化远程机器吗

android - 想在windows平台运行Monkeyrunner加载图片对比

java - 安卓工作室 : How to exclude google-services module in product flavor?

java - 一行代码我看不懂

visual-studio - 每个解决方案/项目的 Visual Studio 设置

android - 如何在monkeyrunner代码中运行外部程序?