首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xamarin.UITest:如何暂停测试步骤

Xamarin.UITest:如何暂停测试步骤
EN

Stack Overflow用户
提问于 2016-12-08 22:22:57
回答 3查看 5.4K关注 0票数 6

我用C#/Xamarin编写了一个UITest,测试执行得太快,导致它失败。在执行下一步之前,我需要测试来等待图像出现在屏幕上。

在继续下一步之前,我如何暂停Xamarin UITest并让它等待图像加载到屏幕上?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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;

希望这能有所帮助!

票数 11
EN

Stack Overflow用户

发布于 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.UITestIApp.WaitForElement & IApp.WaitForNoElement API来处理这些场景。这些API优于Thread.Sleep,因为您可以自定义它恢复的条件,而不仅仅是等待一定的时间。

示例

这个代码片段示例将等待90秒,以便出现一个标记为“myButton”或ID为“”的元素。

代码语言:javascript
复制
    // 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“超时与等待”指南

这是上述查询最简单的形式,使用默认超时&默认错误消息“超时等待元素.”:

代码语言:javascript
复制
    app.WaitForElement (x => x.Marked ("myButton"));
票数 8
EN

Stack Overflow用户

发布于 2018-07-09 19:22:17

如果不等待特定的UI元素,并且不想休眠当前线程,则此解决方案有效:

代码语言:javascript
复制
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
    }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41049885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档