[英]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;
希望這可以幫助!
您詢問:
“我怎樣才能暫停Xamarin.UITest並等待圖像在屏幕上加載,然后繼續下一步呢?”
可以使用Thread.Sleep()
類的東西暫停Xamarin.UITest,無論你需要多長時間。 但是,問題在於Thread.Sleep ()
以不靈活的方式凍結測試運行。 例如,如果設置Thread.Sleep (10000)
,則線程將暫停10秒,無論您的應用程序實際加載所需元素的時間長短。
如果您的圖片只需1秒鍾就可以加載更快的設備,那么使用Thread.Sleep(10000)
您的測試仍然需要至少 10秒鍾。 更糟糕的是,如果你使用這種方法並且沒有Thread.Sleep
足夠長時間,測試仍然會失敗; 因此,您必須強制您的測試每次運行都與“最壞情況”一樣慢。 更多信息: Thread.Sleep
文檔
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秒后繼續運行,只會在等待整整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.