簡體   English   中英

使用Xamarin.UITest時如何偽造后台活動

[英]How to fake background activity while using Xamarin.UITest

我正在創建一個Xamarin.Forms應用程序,並希望使用UITest測試我的View的正確行為。 視圖不僅會對按鈕單擊之類的用戶輸入做出反應。 取而代之的是,有一些后台操作會導致View發生變化,例如此時隱藏一個元素並顯示另一個元素。 另一個示例是用背景操作生成的元素填充ListView。 這些更改將在其屬性綁定到View的ViewModel上進行。 現在,我想模擬后台操作並測試View的行為是否正確。 但是我無法在UITest項目中操作ViewModel,因為無法在Test類中引用Xamarin.Forms。 似乎並不打算以此方式測試應用程序。 整個應用程序是UITest的黑匣子,您只能通過鼠標和鍵盤輸入與之交互。 如何訪問應用程序的內部部件,例如相應的ViewModel。 我已經搜索了此問題,但一無所獲。 也許我在尋找錯誤的方向。 任何幫助將不勝感激。

您可以使用后門訪問平台項目中的方法,並且從那里您應該能夠訪問Forms代碼,因為您的應用程序項目引用了Forms核心項目。 參見: https : //developer.xamarin.com/guides/testcloud/uitest/working-with/backdoors/

在Android項目中創建后門方法:

在MainActivity中:

[Export("MyBackdoorMethod")]
// Can optionally take a parameter of string, int, or bool.
// Can optionally return  string or Java.Lang.String. 
public void MyBackdoorMethod() 
{
    // In through the backdoor - do some work.
}

要通過測試調用Android后門方法,請執行以下操作:

app.Invoke("MyBackdoorMethod");

在iOS項目中創建后門方法:

在AppDelegate中:

[Export("myBackdoorMethod:")] // notice the colon at the end of the method name
// Must take an NSString and return an NSString.
public NSString MyBackdoorMethod(NSString value)
{
    // In through the backdoor - do some work.
}

要通過測試調用iOS后門方法:

app.Invoke("myBackdoorMethod:", "the value");

鏈接中有更多詳細信息,但這足以滿足要求。

在iOS上,您已經有一種名為SendAppToBackground的方法來實現它。 您還可以通過TimeSpan對象(Wiki信息)將時間傳遞到后台。 但是,您無法在Android上實現此目的。

這是在UITest項目上使用它的示例:

public void SendAppToBackground(IApp app, TimeSpan timeSpan)
{
    if (OnAndroid)
    {
        return;
    }

    ((iOSApp)app).SendAppToBackground(timeSpan);

    app.Screenshot("Return from background state.");

    return this;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM