Xamarin.UITest: 如何暂停测试步骤
Xamarin.UITest: How To Pause a Test Step
我有一个用 C#/Xamarin 编写的 UITest,但测试执行得太快,导致失败。我需要测试在执行下一步之前等待图像出现在屏幕上。
如何暂停 Xamarin UITest 并使其在继续下一步之前等待图像加载到屏幕上?
根据我的经验,有几种方法可以暂停或放慢速度 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;
希望对您有所帮助!
"pausing"的问题UI测试
您问的是:
"How can I pause the Xamarin.UITest and make it wait for an Image to load on the screen before continuing to the next step?"
可以使用Thread.Sleep()
之类的方法暂停Xamarin.UITest,无论您需要多长时间。但是,这样做的问题是 Thread.Sleep ()
不灵活地冻结了测试 运行。例如,如果您设置 Thread.Sleep (10000)
,那么线程将恰好暂停 10 秒,而不管您的应用实际需要多长时间来加载所需的元素。
如果您的图片在更快的设备上加载只需要 1 秒,那么使用 Thread.Sleep(10000)
您的测试仍然总是需要 至少 10 秒。更糟糕的是,如果您使用这种方法并且 Thread.Sleep
时间不够长,测试仍然会失败;所以你必须每次都强制你的测试运行和你的"worst case scenario"一样慢。更多信息:Thread.Sleep
documentation
等待 UI 元素而不 "pausing" 执行的解决方案
Xamarin.UITest
有 IApp.WaitForElement & IApp.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 秒后继续,它只会抛出错误 "Could not find myButton" 如果元素等待整整 90 秒仍然没有出现。
使用默认超时和错误消息的简单查询
您也可以使用这些 API 调用中的任何一个而不定义超时长度,在这种情况下,对于本地 UI 测试,它们将在 15 秒后超时,或者如果 运行 在Xamarin Test Cloud 将在 1 分钟后超时。资料来源:Xamarin.UITest "Timeouts & Waiting" guide
这是上述查询的最简单形式,使用默认超时和默认错误消息 "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
}
}
我有一个用 C#/Xamarin 编写的 UITest,但测试执行得太快,导致失败。我需要测试在执行下一步之前等待图像出现在屏幕上。
如何暂停 Xamarin UITest 并使其在继续下一步之前等待图像加载到屏幕上?
根据我的经验,有几种方法可以暂停或放慢速度 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;
希望对您有所帮助!
"pausing"的问题UI测试
您问的是:
"How can I pause the Xamarin.UITest and make it wait for an Image to load on the screen before continuing to the next step?"
可以使用Thread.Sleep()
之类的方法暂停Xamarin.UITest,无论您需要多长时间。但是,这样做的问题是 Thread.Sleep ()
不灵活地冻结了测试 运行。例如,如果您设置 Thread.Sleep (10000)
,那么线程将恰好暂停 10 秒,而不管您的应用实际需要多长时间来加载所需的元素。
如果您的图片在更快的设备上加载只需要 1 秒,那么使用 Thread.Sleep(10000)
您的测试仍然总是需要 至少 10 秒。更糟糕的是,如果您使用这种方法并且 Thread.Sleep
时间不够长,测试仍然会失败;所以你必须每次都强制你的测试运行和你的"worst case scenario"一样慢。更多信息:Thread.Sleep
documentation
等待 UI 元素而不 "pausing" 执行的解决方案
Xamarin.UITest
有 IApp.WaitForElement & IApp.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 秒后继续,它只会抛出错误 "Could not find myButton" 如果元素等待整整 90 秒仍然没有出现。
使用默认超时和错误消息的简单查询
您也可以使用这些 API 调用中的任何一个而不定义超时长度,在这种情况下,对于本地 UI 测试,它们将在 15 秒后超时,或者如果 运行 在Xamarin Test Cloud 将在 1 分钟后超时。资料来源:Xamarin.UITest "Timeouts & Waiting" guide
这是上述查询的最简单形式,使用默认超时和默认错误消息 "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
}
}