汉堡菜单AutomationId用于UI测试

如何解决汉堡菜单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"));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?