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

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


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

使用.Class和索引成功找到元素

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");
}

关于c# - 自动化Xamarin ToolbarItem单击,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55226990/

10-13 03:42