繁体   English   中英

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

[英]Xamarin.UITest: How To Pause a Test Step

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

如何暂停Xamarin UITest并使其等待图像加载到屏幕上,然后再继续下一步?

根据我的经验,有几种方法可以暂停或减慢Xamarin.UITest。

最好的办法

使用WaitForElement API。

例如,我在这里等待名为“imageButton”的Button。

app.WaitForElement(x => x.Marked("imageButton"));

上面的示例在执行另一个步骤之前等待元素“imageButton”出现。

其他方式

如果您不知道要与哪个元素进行交互,或者只是想暂停Xamarin.UITest,则可以使用Thread.Sleep

Thread.Sleep(8000);

在这里,我暂停了Xamarin.UITest 8秒。 请务必注意,您需要添加此库以使用Thread.Sleep

using System.Threading;

希望这可以帮助!

“暂停”UITest的问题

您询问:

“我怎样才能暂停Xamarin.UITest并等待图像在屏幕上加载,然后继续下一步呢?”

可以使用Thread.Sleep()类的东西暂停Xamarin.UITest,无论你需要多长时间。 但是,问题在于Thread.Sleep ()以不灵活的方式冻结测试运行。 例如,如果设置Thread.Sleep (10000) ,则线程将暂停10秒,无论您的应用程序实际加载所需元素的时间长短。

如果您的图片只需1秒钟就可以加载更快的设备,那么使用Thread.Sleep(10000)您的测试仍然需要至少 10秒钟。 更糟糕的是,如果你使用这种方法并且没有Thread.Sleep足够长时间,测试仍然会失败; 因此,您必须强制您的测试每次运行都与“最坏情况”一样慢。 更多信息: Thread.Sleep文档

通过等待UI元素而不“暂停”执行的解决方案

Xamarin.UITest具有IApp.WaitForElementIApp.WaitForNoElement API来处理这些场景。 这些API优于Thread.Sleep因为您可以自定义恢复的条件,而不仅仅是等待一段时间。

此代码段示例将等待90秒,以便显示标记或ID为“myButton”的元素。

    // 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秒后超时,或者如果在Xamarin Test Cloud中运行,则将在1分钟后超时。 来源: Xamarin.UITest“超时和等待”指南

这是上述查询的最简单形式,使用默认超时和默认错误消息“Timed out waiting for element ...”:

    app.WaitForElement (x => x.Marked ("myButton"));

如果您不等待特定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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM