将 Xamarin.UITest 与 MvvmCross 绑定一起使用

Posted

技术标签:

【中文标题】将 Xamarin.UITest 与 MvvmCross 绑定一起使用【英文标题】:Using Xamarin.UITest with MvvmCross Binding 【发布时间】:2015-05-15 16:52:03 【问题描述】:

我正在使用 Xamarin.UITest 框架来断言某个按钮是否被禁用或启用。 不幸的是,如果按钮的“启用”属性通过绑定设置通过 MVX(绑定正在工作 - 按钮确实被禁用),那么这个不起作用。 p>

带有两个按钮的示例 axml:

    <xxx.Widgets.Button
        android:id="@+id/btnSave"
        android:layout_
        android:layout_
        android:text="Save"
        style="@style/DefaultButton"
        local:MvxBind="Click SaveAndContinueCommand; Enabled SaveButtonActive" />
    <xxx.Widgets.Button
        android:id="@+id/btnTest"
        android:layout_
        android:layout_
        android:text="Test"
        style="@style/DefaultButton"
        android:enabled="false" />

使用 Xamarin.UITest 查询:

var button = App.Query(v => v.Button("Save")).FirstOrDefault();
Assert.IsFalse(button.Enabled); // -> Button is always enabled

var testButton = App.Query(v => v.Button("Test")).FirstOrDefault();
Assert.IsFalse(button.Enabled); // -> Button is disabled. Correct!

我需要注意不同的事情吗? 有没有人体验过 MVX 和 Xamarin.UITest 的组合?

【问题讨论】:

【参考方案1】:

我通常不会在 UI 测试级别检查按钮属性。我会在我知道有效的核心测试中检查这一点。话虽如此,您实际上可以通过 UI 测试点击按钮并验证如果可能的话没有任何反应。

接下来我会尝试在启用 Calabash 的情况下启动您的应用程序,导航到此屏幕并查询按钮以验证您正在检查您应该检查的属性。

【讨论】:

日本 我可以在点击按钮后查看屏幕。但是 Xamarin 为视图元素公开了诸如“isEnabled”之类的属性 - 显然这不适用于绑定属性(我还需要使用有界文本道具检查它)。提供的 REPL shell 只知道“树”命令,它返回屏幕上的所有视图元素,但不知道它们的属性。通过 c# 代码查询所有元素返回我提到的状态 - isEnabled Prop 是错误的。有没有办法通过将 AppQuery Result 转换为 Android Button 或使用内置方法直接读取特定属性? 如果按钮的 IsEnabled 属性在屏幕上显示为 false 后以编程方式更改为 true 会发生什么?我很好奇它是否在该属性的 Xamarin UI 测试中仍然返回 false ......我很难相信这是一个 MvvmCross 数据绑定问题,并认为这只是一个问题,也许 Xamarin UI 测试总是返回原始创建按钮上的状态? 这个案例有效。我添加了一个修改按钮的启用属性的事件 - Xamarin UI 测试提供了正确的属性值。也许我也可以通过测试绑定来测试这种行为。它真的很奇怪

以上是关于将 Xamarin.UITest 与 MvvmCross 绑定一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.UITest:如何检索设备显示的坐标

如何与 Xamarin UITest 中的自定义键盘进行交互?

如何停止 Xamarin.UITest 删除测试之间的数据?

Xamarin.UITest :: 如何点击段落中的特定单词?

Xamarin.UITest 2.2.4 启动会话在第一次测试中失败

如何使用 Xamarin UITest 滚动到页面/容器的顶部?