1

我有一个关于 Xamarin 测试云的问题,希望有人能指出我正确的方向。

当用户在我的应用程序中点击一个按钮时,一个进程会运行大约 30 分钟。我添加了一个单元测试项目,它在模拟器中完美运行。

但是,我需要在真实设备上进行测试,所以我决定使用 Xamarin Test Cloud。当我在那里运行测试时,它没有完成它。正如我所说,这应该需要 30 分钟,但测试几乎立即完成。

这是我的测试代码:

[Test]
[Timeout(Int32.MaxValue)]
public async void Optimize()
{
 await Task.Run(async() =>
 {
   app.Screenshot("Start " + DateTime.Now);
   app.Tap(x => x.Marked("btnOptimize"));
   await Task.Delay(120000);
   app.Screenshot("End " + DateTime.Now);
 }
}

如果我在模拟器中运行测试,屏幕截图名称分别是(例如)“开始 12:00:00”和“结束 12:30:00”(这意味着它运行 30 分钟,正如预期的那样)。但是,在测试云中,我得到(例如)“开始 12:00:00”和“结束 12:02:00”,这意味着测试仅运行 2 分钟。但那是因为我添加了延迟。如果没有延迟,它将只运行 5 秒。

那是我需要的吗?我可以加1800000,这样30分钟就可以完成测试,但是不知道时间怎么办?

谢谢,对不起,如果这是一个基本问题

4

3 回答 3

3

像这样的东西应该可以完成这项工作:

[Test]
public async void Optimize()
{
   app.Screenshot("Start");
   app.Tap("btnOptimize");
   app.WaitForElement ("otherButton", "Timed out waiting for Button", new TimeSpan(0,30,0));
   app.Screenshot("End");
}

任务完成后,“otherButton”变为可见的位置。API中还有其他可用的等待方法。

但是,请注意 Xamarin 测试云默认情况下每个测试最多 30 分钟。可以通过联系 Xamarin 测试云支持来修改该默认值。

此外,包含不确定性信息或任何可能因设备而异或在屏幕截图标题中运行的信息也不是一个好习惯。当您在多台设备上运行时,测试报告步骤和屏幕截图部分由屏幕截图标题整理,因此它们应该在不同设备上匹配以获得最佳结果。

于 2016-04-12T00:13:06.363 回答
1

虽然我从未尝试过 30 分钟的超时长度,但 Calabash 允许您使用 ) 等待条件wait_for

以下片段是如何使用 wait_for 检测屏幕上是否存在按钮的示例:

wait_for(timeout: 60, timeout_message: "Could not find 'Sign in' button") do
    element_exists("button marked:'Sign in'")
end

参考:https ://docs.xamarin.com/guides/testcloud/calabash/working-with/timeouts/

仅供参考:对于没有用户界面交互的移动设备来说,30 分钟是一个非常长的“后台处理”时间,如果您的目标是 iOS/Apple Store,那么在获得 Apple 提交批准时会被判死刑,因为他们永远不会等待那么久让应用程序处理某事....

于 2016-04-11T17:36:52.470 回答
0

您需要通过 Id 识别 tap 并以正确的语法添加 WaitForElement(第一个参数是您要等待的查询),如下所示。它应该适合你。

app.Screenshot("Start " + DateTime.Now); app.WaitForElement(x => x.Id("btnOptimize"),"Optimization timed out",new System.TimeSpan(0,30,0),null,null); app.Tap(x => x.Id("btnOptimize")); app.Screenshot("End " + DateTime.Now);

于 2016-11-12T17:41:49.960 回答