如何在需要使用 Xamarin.UITest 访问 iOS 上的照片的权限对话框中点击确定按钮?

Posted

技术标签:

【中文标题】如何在需要使用 Xamarin.UITest 访问 iOS 上的照片的权限对话框中点击确定按钮?【英文标题】:How to tap OK button in permission dialog that required to access to photos on iOS using Xamarin.UITest? 【发布时间】:2015-05-19 04:52:24 【问题描述】:

我正在使用 Xamarin.UITest 在 ios 应用上执行自动化。

问题是:访问图库上传照片时,有一个权限对话框,我需要点击“确定”按钮将其关闭。

我尝试了以下方法,但没有奏效:

使用树命令不显示该对话框的层次结构,因此我 找不到要自动化的 UI 元素

使用 iOSApp.InvokeUia("UIATarget.localTarget().frontMostApp().alert().buttons()[\"OK\"].tap()"); 这显示错误: UIATarget.localTarget().frontMostApp().alert().buttons()["OK"] could not be tapped because the element is not visible tap@[native code]

使用app.TapCoordinate,似乎可以工作,但必须知道正确的坐标取决于不同的屏幕以及何时出现对话框。

有解决这个问题的方法吗? 谢谢。

【问题讨论】:

【参考方案1】:

权限的系统对话框超出了应用程序的范围,不会显示在tree 或您可以通过 UITest 执行的任何其他查询中。相反,这些通常由葫芦自动处理。 “自动”行为是接受出现的任何权限对话框。

您的对话框是否使用其他语言,其中“确定”可能会以非英语语言显示?如果是这样,我们可能需要为该特定语言环境提交问题,以便可以实施。

另外,请确保您拥有最新的 UITest 版本。看看 iOS 10 和 InvokeUia here 的变化。

【讨论】:

这是正确的问题。但是,在使用测试记录器时,它不会自动关闭对话框。自动确定还意味着您无法针对用户拒绝权限的情况进行 UI 测试。 关于 XTR 的有趣点,我会跟进。您可能会考虑对不依赖于实际接受权限的不同路径使用“后门”技术,以便您可以对要测试的行为进行分支。 developer.xamarin.com/guides/testcloud/uitest/working-with/… 只是此讨论的更新。新版本的 Xamarin 测试记录器实际上会自动关闭权限。 @PhucThai 可能应该接受这个答案,因为这是最正确的。【参考方案2】:

试试这个: target.frontMostApp().mainWindow().elements()[0].elements()[2].elements()[1].tap()

【讨论】:

【参考方案3】:

如果你使用 Repl();在您的代码中,您可以尝试使用 tree 命令获取 OK 按钮的标记。

如果您使用的是 Visual Studio Entrerprise Edition,则可以使用 Xamarin 测试记录器使您的测试变得更加容易,它的效果非常好!

另外需要注意的是,UI 测试通常用于屏幕截图和屏幕布局验证,您的功能应该使用另一个框架或工具包的另一种测试来测试。

【讨论】:

这不起作用。确定按钮不在应用程序的可视化树中,因为它是从操作系统而不是应用程序启动的。 对此有任何解决方案/更新吗?我面临同样的问题 - 应用程序在首次安装时要求通知权限,似乎没有办法关闭权限对话框。这是使用 Xamarin.UITest。

以上是关于如何在需要使用 Xamarin.UITest 访问 iOS 上的照片的权限对话框中点击确定按钮?的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.UITest:如何检索设备显示的坐标

如何使用 Xamarin UITest 滚动到页面/容器的顶部?

如何停止 Xamarin.UITest 删除测试之间的数据?

如何使用 xamarin.UITest 从 iOS 上的表格单元格中清除文本?

Xamarin.UITest 检索视图中的所有元素

如何阻止我的 Xamarin.UITest 两次运行测试?