我用C#/Xamarin编写了一个UITest,测试执行得太快,导致它失败。在执行下一步之前,我需要测试来等待图像出现在屏幕上。
在继续下一步之前,我如何暂停Xamarin UITest并让它等待图像加载到屏幕上?
发布于 2016-12-08 22:50:25
根据我的经验,有几种方法可以暂停或减缓Xamarin.UITest。
最佳方式
使用WaitForElement API。
例如,这里我正在等待一个名为"imageButton“的按钮。
app.WaitForElement(x => x.Marked("imageButton"));
上面的示例等待元素"imageButton“在执行另一步之前出现。
另一种方式
如果您不知道要与哪个元素交互,或者只想暂停Xamarin.UITest,则可以使用Thread.Sleep
Thread.Sleep(8000);
在这里,我暂停了Xamarin.UITest 8秒。请注意,您需要添加此库才能使用Thread.Sleep。
using System.Threading;
希望这能有所帮助!
发布于 2017-01-06 18:39:37
“暂停”UITest的问题
你问:
“在继续下一步之前,我如何暂停Xamarin.UITest并让它等待图像加载到屏幕上?”
无论您需要多长时间,都可以使用类似于Xamarin.UITest的东西暂停Thread.Sleep()。然而,这方面的问题是,Thread.Sleep ()不灵活地冻结测试运行。例如,如果您设置了Thread.Sleep (10000),那么无论应用程序实际加载所需的元素需要多长时间,线程都会暂停10秒。
如果在更快的设备上加载图片只需1秒,那么使用Thread.Sleep(10000)测试仍然至少需要10秒。更糟糕的是,如果您使用这种方法,并且不使用Thread.Sleep足够长的时间,测试仍然会失败;因此,您必须强迫您的测试运行速度与您的“最坏情况场景”一样慢。更多信息:文档
通过等待UI元素而不“暂停”执行的解决方案
Xamarin.UITest有IApp.WaitForElement & IApp.WaitForNoElement API来处理这些场景。这些API优于Thread.Sleep,因为您可以自定义它恢复的条件,而不仅仅是等待一定的时间。
示例
这个代码片段示例将等待90秒,以便出现一个标记为“myButton”或ID为“”的元素。
// Wait up to 90 seconds for myButton to appear
app.WaitForElement(c=>c.Marked("myButton"), "Could not find myButton", new TimeSpan(0,0,0,90,0));如果该元素仅需30秒加载,而在本例中,app.WaitForElement将在30秒后继续加载,则如果在等待了整整90秒之后仍未出现该元素,它只会抛出错误“未能找到myButton”。
使用默认超时和错误消息的简单查询
您也可以在不定义超时长度的情况下使用这些API调用,在这种情况下,本地UITests将在15秒后超时,或者如果在中运行,则将在1分钟后超时。来源:Xamarin.UITest“超时与等待”指南
这是上述查询最简单的形式,使用默认超时&默认错误消息“超时等待元素.”:
app.WaitForElement (x => x.Marked ("myButton"));发布于 2018-07-09 19:22:17
如果不等待特定的UI元素,并且不想休眠当前线程,则此解决方案有效:
public static void WaitForTimeSpan(IApp app, TimeSpan timeSpan)
{
try
{
app.WaitForElement(c => c.Text("BLAH BLAH BLAH"), "Waiting for something, killing time", timeSpan);
}
catch (Exception)
{
//do nothing we just wanted to kill some time
}
}https://stackoverflow.com/questions/41049885
复制相似问题