Xamarin UITest(Calabash)查询非空文本属性

时间:2017-01-09 19:05:19

标签: c# calabash xamarin-test-cloud xamarin.uitest

在Xamarin UITest(使用Calabash)中,我可以查询具有some text的元素,如下所示:

app.WaitForElement(x => x.Marked("MyTextControl")
                   .Property("text")
                   .Contains("some text"));

我在reference docs中看到还有BEGINSWITH,LIKE等等,但我没有看到任何类型的IsEmpty或IsNotEmpty。有没有办法找到一个非空文本的元素?我期待看到一个长度方法,所以我可以做类似的事情:

app.WaitForElement(x => x.Marked("MyTextControl")
                   .Property("text")
                   .Length() > 0);

还有另一种方法可以实现我的目标吗?

3 个答案:

答案 0 :(得分:2)

我这样做,UILabels。我认为它不适用于UIButtons,因为你必须在AppResult[]中深入挖掘一些按钮,但它应该可以单独使用,我从来没有机会在AppResult[] labelContainer = app.WaitForElement(x => x.Marked("MyTextControl"); AppResult label = labelContainer[0]; 我做UITests时的按钮。

WaitForElement

数组中始终至少有一个元素,否则Assert.IsFalse(string.IsNullOrEmpty(label.Text)); 会失败。所以这里没有越界的风险。

现在我们确保有文字,应该专门回答你的问题。

for loop

如果你想成为过去,你可以在for (int i = 0; i < labelContainer.Length ; i++) { AppResult label = labelContainer[i]; Assert.IsFalse(string.IsNullOrEmpty(label.Text)); } 中应用下一行来测试给定项目数组的每个元素。

  Assert.IsFalse(string.IsNullOrEmpty(app.WaitForElement(x => x.Marked("MyTextControl")[0].Text)); 

当然你可以制作一个扩展方法,为给定的Mark做一切,或者像这样一行:

{{1}}

有了这一切,你应该在接下来的几分钟内成为一个幸福的人:)

答案 1 :(得分:2)

对于具体问题,我不相信可以在UITest API的特定查询中完成此操作。最好的解决方法是@Zil建议的内容,并查询特定标识符的所有元素,然后循环遍历它们以找到您要查找的内容,或类似于该主意的内容。

答案 2 :(得分:0)

或者您可以简单地这样做:

app.WaitForElement(x => x.Marked("MyTextControl")
                         .Property("text")
                         .Like(*));

如果您想获取不为null的文本元素!

我尝试过,但不确定是否适用于所有情况!如果您发现我的答案有问题,请修复我!非常感谢! :D