C# Xamarin UITest-如何断言元素存在且文本正确

Posted

技术标签:

【中文标题】C# Xamarin UITest-如何断言元素存在且文本正确【英文标题】:C# Xamarin UITest- how to assert that both an element exists and text is correct 【发布时间】:2018-04-13 18:48:54 【问题描述】:

场景:

在使用 C#(即 Xamarin UITest、Nunit 等)编写自动化测试时,我想断言元素存在并且该元素的文本是正确的。 (即元素 X 存在,看到的文本是 Y)

Intellisense 告诉我 Assert 是一种选择,但我似乎无法弄清楚实现此目的的方法。

我可以做类似“app.Flash(e => e.Id("TheId"));”的事情,这将向人类用户显示元素闪烁,但我想真正断言它在那里,并向用户呈现正确的文本。

【问题讨论】:

【参考方案1】:

这是一个等待页面出现的示例,测试某个元素是否可用,然后测试该元素是否包含某个值。

单一资产测试用例

[Test]
public void StackOverEntry()

    // Wait for the page to appear, test to see if some static (always present) element is available
    AppResult[] results = app.WaitForElement(c => c.Marked("Welcome to Xamarin Forms!"));

    var elementQuery = app.Query(c => c.Marked("SOEntry"));
    var elementAvailable = elementQuery.Any();
    string elementValue = "";
    if (elementAvailable)
        elementValue = elementQuery.First().Text;

    Assert.IsTrue(elementAvailable && elementValue == "***", "Not available and/or correct");

个别断言测试用例

[Test]
public void StackOverEntry()

    // Wait for the page to appear, test to see if some static (always present) element is available
    AppResult[] results = app.WaitForElement(c => c.Marked("Welcome to Xamarin Forms!"));
    // Test of the element is on the page (via AutomationId in this class)
    Assert.NotNull(app.Query(c => c.Marked("SOEntry")).FirstOrDefault());
    // Test the the element contains the proper value
    Assert.AreEqual("***", app.Query(c => c.Marked("SOEntry")).First().Text);

正在测试 XAML:

<StackLayout Orientation="Vertical">
    <Label Text="Welcome to Xamarin Forms!" VerticalOptions="Center" HorizontalOptions="Center" />
    <Entry AutomationId="SOEntry" Text="***" />        
</StackLayout>

【讨论】:

以上是关于C# Xamarin UITest-如何断言元素存在且文本正确的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.UITest 检索视图中的所有元素

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

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

类似元素的 Xamarin UItest 查询

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

测试记录器和 Xamarin 表单 - ID 不适用于 UITest