0

我正在尝试在页面 (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">
4

1 回答 1

0

欢迎来到 SO!

经过研究,您可以使用以下方法来设置AutomationId汉堡菜单。

AppShell.xaml.cs 中

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

注意:还需要为FlyoutIcon(如:)设置一个值FlyoutIcon="xxx.png"才能正常工作,否则上面的代码会出现错误System.NullReferenceException: 'Object reference not set to an instance of an object。.

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

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

如以下:

<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"));
于 2020-09-01T09:24:14.533 回答