Xamarin 用于UI测试的汉堡包菜单自动ID

Xamarin 用于UI测试的汉堡包菜单自动ID,xamarin,xamarin.forms,uitest,flyout,app-shell,Xamarin,Xamarin.forms,Uitest,Flyout,App Shell,我正在尝试在页面上运行UI测试(关于.xaml)。 下面是加载应用程序时进入页面的步骤 启动登录屏幕 用户输入用户名 用户输入密码 用户单击登录按钮 用户登录到AppShell的主页上 用户点击汉堡菜单 用户单击弹出菜单项中的“关于”菜单 我的问题是,如何设置AppShell的汉堡菜单(弹出菜单)的自动化Id 这是UI测试用例 [Test] public async Task AboutPage_UITest() { //Arange app.EnterTe

我正在尝试在页面上运行UI测试(关于.xaml)。 下面是加载应用程序时进入页面的步骤

  • 启动登录屏幕
  • 用户输入用户名
  • 用户输入密码
  • 用户单击登录按钮
  • 用户登录到AppShell的主页上
  • 用户点击汉堡菜单
  • 用户单击弹出菜单项中的“关于”菜单
  • 我的问题是,如何设置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">
    
    
    
    欢迎来到SO

    研究之后,您可以使用以下方法设置汉堡包菜单的
    自动ID

    在AppShell.xaml.cs中:

    public AppShell()
    {
        InitializeComponent();
       
        FlyoutIcon.AutomationId = "FlyoutIcon";
        //or
        FlyoutIcon.SetValue(AutomationProperties.NameProperty, "FlyoutIcon");
    }
    
    注意:还需要为
    弹出图标
    设置一个值(例如:
    弹出图标=“xxx.png”
    )使其正常工作,否则上述代码将出现错误System.NullReferenceException:“对象引用未设置为对象的实例。”

    此外,这里是不点击汉堡包菜单进入关于页面的方法

    您可以添加到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>
    
    app.Tap(x => x.Marked("About"));
    

    嗨,有一种方法可以做到这一点,当你有时间的时候,你可以看看我的答案。找不到弹出图标。@TS好的,Xamarin表单的版本是什么?如果不是最新版本,您可以将其更新为最新版本。此外,正如我的回答所说,您需要在Xaml中设置
    弹出图标。不需要使用有效的
    弹出式图标
    名称,因为此操作将使应用程序在运行时查找
    弹出式图标
    的实例。也许这是Shell的一个限制。期待funture版本将对此进行优化。