1

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

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

我在参考文档中看到还有 BEGINSWITH、LIKE 等,但我没有看到任何类型的 IsEmpty 或 IsNotEmpty。有没有办法找到文本不为空的元素?我期待看到一个 Length 方法,所以我可以这样做:

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

还有另一种方法来完成我所追求的吗?

4

3 回答 3

2

我正在这样做,因为UILabels。我不认为它适用UIButtons于按钮,你必须在 中更深入地挖掘AppResult[],但它应该是单独可行的,当我做 UITests 时,我从来没有机会在按钮中包含文本。

AppResult[] labelContainer = app.WaitForElement(x => x.Marked("MyTextControl");
AppResult label = labelContainer[0]; 

数组中总是至少有一个元素,否则WaitForElement失败。所以这里没有越界的风险。

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

Assert.IsFalse(string.IsNullOrEmpty(label.Text));

如果你想彻底,你可以在 a 中应用下一行 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)); 

有了这一切,接下来的几分钟你应该是一个快乐的人:)

于 2017-01-09T19:18:37.653 回答
2

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

于 2017-01-19T21:34:46.733 回答
0

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

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

如果你想得到不为空的文本元素!

我试过了,但我不确定它是否适用于所有情况!如果您发现我的回答有问题,请纠正我!非常感谢!:D

于 2018-10-30T02:44:34.043 回答