Xamarin UITest (Calabash) 查询非空文本 属性
Xamarin UITest (Calabash) Query for Non-Empty text Property
在 Xamarin UITest(使用 Calabash)中,我可以查询具有 some text
的元素,如下所示:
app.WaitForElement(x => x.Marked("MyTextControl")
.Property("text")
.Contains("some text"));
我在 reference docs 中看到还有 BEGINSWITH、LIKE 等等,但我没有看到任何类型的 IsEmpty 或 IsNotEmpty。有没有办法找到文本不为空的元素?我期待看到 Length 方法,所以我可以做类似的事情:
app.WaitForElement(x => x.Marked("MyTextControl")
.Property("text")
.Length() > 0);
还有其他方法可以实现我的目标吗?
我这样做是为了 UILabels
。我不认为它适用于 UIButtons
,对于按钮你必须在 AppResult[]
中挖掘得更深一点,但它应该单独完成,我只是从来没有机会在里面输入文字我做 UITest 时的按钮。
AppResult[] labelContainer = app.WaitForElement(x => x.Marked("MyTextControl");
AppResult label = labelContainer[0];
数组中始终至少有一个元素,否则 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));
有了这一切,接下来的几分钟你应该是个快乐的人:)
对于具体问题,我认为不可能在 UITest API 的特定查询中完成此操作。最好的解决方法是按照@Zil 的建议查询特定标识符的所有元素,然后遍历它们以找到您要查找的内容或类似的想法。
或者您也可以直接这样做:
app.WaitForElement(x => x.Marked("MyTextControl")
.Property("text")
.Like(*));
如果你想获取非空文本元素!
我试过了,但我不确定它是否适用于所有情况!如果您发现我的回答有问题,请修复我!非常感谢! :D
在 Xamarin UITest(使用 Calabash)中,我可以查询具有 some text
的元素,如下所示:
app.WaitForElement(x => x.Marked("MyTextControl")
.Property("text")
.Contains("some text"));
我在 reference docs 中看到还有 BEGINSWITH、LIKE 等等,但我没有看到任何类型的 IsEmpty 或 IsNotEmpty。有没有办法找到文本不为空的元素?我期待看到 Length 方法,所以我可以做类似的事情:
app.WaitForElement(x => x.Marked("MyTextControl")
.Property("text")
.Length() > 0);
还有其他方法可以实现我的目标吗?
我这样做是为了 UILabels
。我不认为它适用于 UIButtons
,对于按钮你必须在 AppResult[]
中挖掘得更深一点,但它应该单独完成,我只是从来没有机会在里面输入文字我做 UITest 时的按钮。
AppResult[] labelContainer = app.WaitForElement(x => x.Marked("MyTextControl");
AppResult label = labelContainer[0];
数组中始终至少有一个元素,否则 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));
有了这一切,接下来的几分钟你应该是个快乐的人:)
对于具体问题,我认为不可能在 UITest API 的特定查询中完成此操作。最好的解决方法是按照@Zil 的建议查询特定标识符的所有元素,然后遍历它们以找到您要查找的内容或类似的想法。
或者您也可以直接这样做:
app.WaitForElement(x => x.Marked("MyTextControl")
.Property("text")
.Like(*));
如果你想获取非空文本元素!
我试过了,但我不确定它是否适用于所有情况!如果您发现我的回答有问题,请修复我!非常感谢! :D