使用Xamarin.UITest与MvvmCross绑定

4

我正在使用Xamarin.UITest框架来断言某个按钮是否已禁用或启用。 不幸的是,如果按钮的“Enabled”属性通过MVX绑定设置(绑定有效-按钮确实被禁用),则似乎这种方法无法正常工作

以下是具有两个按钮的示例axml:

    <xxx.Widgets.Button
        android:id="@+id/btnSave"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:text="Save"
        style="@style/DefaultButton"
        local:MvxBind="Click SaveAndContinueCommand; Enabled SaveButtonActive" />
    <xxx.Widgets.Button
        android:id="@+id/btnTest"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        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个回答

0

通常我不会在UI测试层级检查按钮属性。我会在核心测试中检查,因为那里我知道它是否有效。话虽如此,如果可能的话,您实际上可以使用UI测试点击按钮并验证是否有任何反应。

接下来,我建议启用Calabash,进入该屏幕并查询按钮,以确保您正在检查应该检查的属性。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接