汉堡菜单AutomationId用于UI测试

问题描述

我正在尝试在页面(About.xaml)上运行UI测试。 以下是在应用程序加载时转到页面的步骤。

  1. 启动登录屏幕
  2. 用户输入用户名
  3. 用户输入密码
  4. 用户单击登录按钮
  5. 用户登陆到AppShell的主页上。
  6. 用户点击“汉堡包”菜单
  7. 用户单击弹出菜单项中的“关于”菜单

我的问题是,如何为AppShell的汉堡菜单(弹出菜单)设置自动化ID?

这是UI测试用例。

          [Test]
public async Task AboutPage_UItest()
{

    //arange
    app.EnterText("UsernameEntryId","user1");
    app.EnterText("PasswordEntryId","Abc@123");


    //Act
    app.dismissKeyboard();
    app.Tap(x => x.Marked("LoginButtonId"));

    app.Tap(x => x.Marked("AppShellId"));
    //app.Tap(c => c.Class("OverflowMenuButton"));  I tried this as well but no luck.
    await Task.Delay(30000);


    app.Tap(x => x.Marked("AboutId"));

    //Assert

    var appResult = app.Query("EmailId").First(result => result.Text == "abc@example.com");
    Assert.IsTrue(appResult != null,"Label is not displaying the right result!");

    app.Screenshot("About Page");
}

在AppShell.xaml中,这是顶部。

        <Shell xmlns="http://xamarin.com/schemas/2014/forms"
                 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                 FlyoutHeaderBehavior="CollapSEOnScroll"
                 Shell.ItemTemplate="{StaticResource FlyoutTemplate}"
                 Shell.MenuItemTemplate="{StaticResource FlyoutTemplate}"
                 FlyoutBackgroundColor="WhiteSmoke" 
                 Navigating="OnNavigating" 
                 Navigated="OnNavigated"
                 AutomationId="AppShellId"
                 x:Class="DemoApp.AppShell">

解决方法

欢迎您!

在研究之后,可以使用以下方法为汉堡菜单设置AutomationId

AppShell.xaml.cs 中:

public AppShell()
{
    InitializeComponent();
   
    FlyoutIcon.AutomationId = "FlyoutIcon";
    //or
    FlyoutIcon.SetValue(AutomationProperties.NameProperty,"FlyoutIcon");
}

注意:还需要为FlyoutIcon设置一个值(例如:FlyoutIcon="xxx.png")使其起作用,否则上面的代码将发生错误 System.NullReferenceException :'对象引用未设置为对象的实例。'

此外,这是无需点击汉堡菜单即可转到关于页面的方法。

您可以将TabBar添加到 AppShell.xaml ,并定义关于页面和其中的其他页面。

如下:

<TabBar>
    <Tab Title="About"
         AutomationId="About"
         Icon="tab_about.png">
        <ShellContent>
            <local:AboutPage />
        </ShellContent>
    </Tab>
    <Tab Title="Browse"
         AutomationId="Browse"
         Icon="tab_feed.png">
        <ShellContent>
            <local:ItemsPage />
        </ShellContent>
    </Tab>
</TabBar>

然后在 Test 方法中可以按以下步骤导航到所需页面:

app.Tap(x => x.Marked("About"));

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...