0

我正在创建一个 Xamarin.Forms 应用程序并希望使用 UITest 来测试我的视图的正确行为。视图不仅对用户输入(如按钮单击等)做出反应。相反,有一些后台操作会导致 View 发生变化,比如此时隐藏一个元素并显示另一个元素。另一个例子是用后台操作产生的元素填充 ListView。这些更改将在其属性绑定到视图的 ViewModel 上进行。现在我想模拟后台操作并测试我的 View 行为是否正确。但是我无法在 UITest 项目中操作我的 ViewModel,因为我无法在 Test 类中引用 Xamarin.Forms。似乎不打算以这种方式测试应用程序。整个应用程序是 UITest 的黑匣子,您只能通过鼠标和键盘输入与之交互。如何访问我的应用程序的内部,例如相应的 ViewModel。我已经搜索过这个问题,但什么也没找到。也许我在寻找错误的方向。任何帮助将不胜感激。

4

2 回答 2

0

您可以使用后门访问平台项目中的方法,并且从那里您应该能够访问 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");

链接中的更多详细信息,但这应该足以让一个人继续下去。

于 2016-12-09T02:08:20.950 回答
0

在 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;
}
于 2019-05-28T11:43:15.683 回答