0

我正在尝试在 Eclipse android JUnit 测试中使用 Robotium 测试一个 android 应用程序。

我想使用 Robotium 在不同阶段捕获屏幕截图,并使用我的 PC 上的 OpenCV 库而不是 android 设备来处理它们。

我一直在阅读有关分离这两个任务的论坛。然而,一直没能做到。

如果有人能对此提出一些建议,那就太好了。

谢谢

4

1 回答 1

0

要分离这两个任务,您需要在 android 上实现(例如)REST 客户端,在桌面上实现服务器。

  1. 客户端应该连接到服务器
  2. 服务器 ping 客户端,客户端向他发送屏幕截图。也许,您需要在测试中创建单独的线程。

客户端应执行以下操作: 当您需要截屏时:

Object res = null;
res = new File(takeScreenShot(solo));

然后

    public static String takeScreenShot(Solo _solo) {
    solo = _solo;
    String dir = "/sdcard/Robotium-Screenshots/";
    String fileName = "screenshot";

    java.io.File file = new java.io.File(dir, fileName);
    if (file.exists()) {
        file.delete();
    }

    solo.takeScreenshot(fileName);
    solo.sleep(2000);
    return "/sdcard/Robotium-Screenshots/" + fileName + ".jpg";
    }

你需要发送它

    service.sendScreen(file);

并且在您的服务中会这样做:

public static JSONObject sendScreen(final File file) {

JSONObject res;
String response;

    DefaultHttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(host + "/" + methodName);

    MultipartEntity entity = new MultipartEntity();


entity.addPart("file", new FileBody(file));

httppost.setEntity(entity); 

    try{ 
        response = httpclient.execute(httppost, responseHandler);
        res = (JSONObject) JSONValue.parse(response);
    }
    catch(IOException e)
    {
        res = null;
        e.printStackTrace();
    }

    return res;
}

这是 C# 上解析屏幕截图的代码示例

    public void StepError(Stream stream)
    {
        var result = new DCStepErrorResponce();
        const string imageName = "file";
        string fullFileName = String.Empty;

        var parser = new MultipartFormDataParser(stream);

        if (parser.Files.Any(file => file.Name == imageName))
        {
            Stream data = parser.Files.First(file => file.Name == imageName).Data;

            string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "HFAutomationTesting", "Temp", "ScreenShots");
            if (!Directory.Exists(path))
                Directory.CreateDirectory(path);
            do
            {
                string fileName = String.Format("{0:yy_MM_dd_HH_mm_ss_ffff}.jpg", DateTime.Now);
                fullFileName = Path.Combine(path, fileName);
            } while (File.Exists(fullFileName));

            var fileToUpload = new FileStream(fullFileName, FileMode.Create);
            byte[] bytearray = ToByteArray(data);
            fileToUpload.Write(bytearray, 0, bytearray.Length);
            fileToUpload.Close();
            fileToUpload.Dispose();
        }
    }

你只需要在 C# 上实现 rest server 并调试它。

于 2013-09-10T06:41:41.230 回答