gpt4 book ai didi

c# - 自动化 Xamarin ToolbarItem 单击

转载 作者:太空宇宙 更新时间:2023-11-03 12:05:33 25 4
gpt4 key购买 nike

我正在使用 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);

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

Unable to find element. Query for Marked("SettingsToolbarItem") gave no results.

在同一 View /页面上单击 ContentPage.ToolbarItems block 之外的其他元素时,我没有遇到此异常

最佳答案

我遇到了同样的问题 - 由于某种原因 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com