繁体   English   中英

自动化 Xamarin ToolbarItem 单击

[英]Automating Xamarin ToolbarItem click

我正在使用 Xamarin.UITest 编写一些自动化。 目标应用程序在其标记中包含以下内容:

<ContentPage.ToolbarItems>
    <ToolbarItem Icon="Settings" AutomationId="SettingsToolbarItem" Order="Primary" Priority="1" Command="{Binding ShowSettingsCommand}" />
</ContentPage.ToolbarItems>

到目前为止,我有 3 种方法:

使用 .Class 和 Indexing 成功找到元素

systemMenuButton = x => x.Class("android.support.v7.view.menu.ActionMenuItemView").Index(1);

使用 .Property 无法找到元素

systemMenuButton = e => e.Property("Command", "ShowSettingsCommand");

同样,使用 .Marked 也找不到元素

systemMenuButton = x => x.Marked("SettingsToolbarItem");

相关自动化代码如下:

using Query = System.Func<Xamarin.UITest.Queries.AppQuery, Xamarin.UITest.Queries.AppQuery>;
....
protected readonly Query systemMenuButton = x => x.Marked("SettingsToolbarItem");
....
app.Tap(systemMenuButton);

我得到一个通用的“无法找到元素”异常:

无法找到元素。 查询 Marked("SettingsToolbarItem") 没有结果。

单击同一视图/页面上 ContentPage.ToolbarItems 块之外的其他元素时,我没有收到此异常

我遇到了同样的问题——出于某种原因,Android 无法检测到ToolbarItem.AutomationId

一种解决方法是分配ToolbarItem.Text相同的值ToolbarItem.AutomationId

Xamarin.Forms.ContentPage

<ContentPage.ToolbarItems>
    <ToolbarItem Icon="Settings" Text="SettingsToolbarItem" AutomationId="SettingsToolbarItem" Order="Primary" Priority="1" Command="{Binding ShowSettingsCommand}" />
</ContentPage.ToolbarItems>

Xamarin.UITest

using Query = System.Func<Xamarin.UITest.Queries.AppQuery, Xamarin.UITest.Queries.AppQuery>;
// ....
protected readonly Query systemMenuButton = x => x.Marked("SettingsToolbarItem");
//....

public void TapSystemMenuButton()
{
    app.Tap(systemMenuButton);

    app.Screenshot("Tapped System Menu Button");
}

这是一个示例应用程序,我使用类似的逻辑在 UITest 中点击 ToolbarItem: https : //github.com/brminnick/InvestmentDataSampleApp/

编辑

在评论中,您提到您无权访问 Xamarin.Forms 应用程序的源代码。

如果您无法更改 Xamarin.Forms 源代码,则必须使用x => x.Class("ActionMenuItemView").Index(1)

我不建议走这条路,因为Index的 int 参数会因设备而异; 它不能保证总是1

public void TapSystemMenuButton()
{
    if (app is iOSApp)
        app.Tap(systemMenuButton);
    else
        app.Tap(x => x.Class("ActionMenuItemView").Index(1));

    app.Screenshot("Tapped System Menu Button");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM