我正在尝试在 Eclipse android JUnit 测试中使用 Robotium 测试一个 android 应用程序。
我想使用 Robotium 在不同阶段捕获屏幕截图,并使用我的 PC 上的 OpenCV 库而不是 android 设备来处理它们。
我一直在阅读有关分离这两个任务的论坛。然而,一直没能做到。
如果有人能对此提出一些建议,那就太好了。
谢谢
我正在尝试在 Eclipse android JUnit 测试中使用 Robotium 测试一个 android 应用程序。
我想使用 Robotium 在不同阶段捕获屏幕截图,并使用我的 PC 上的 OpenCV 库而不是 android 设备来处理它们。
我一直在阅读有关分离这两个任务的论坛。然而,一直没能做到。
如果有人能对此提出一些建议,那就太好了。
谢谢
要分离这两个任务,您需要在 android 上实现(例如)REST 客户端,在桌面上实现服务器。
客户端应执行以下操作: 当您需要截屏时:
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 并调试它。