如何使用Xamarin.UITest在iOS上访问照片时,点击权限对话框中的“确认”按钮?

8
我正在使用Xamarin.UITest在iOS应用上执行自动化。问题在于:当访问相册上传照片时,会出现一个权限对话框,我需要点击“OK”按钮来关闭它。我尝试了以下方法,但都行不通:
- 使用tree命令无法显示该对话框的层次结构,因此无法找到UI元素进行自动化。 - 使用iOSApp.InvokeUia("UIATarget.localTarget().frontMostApp().alert().buttons()[\"OK\"].tap()")命令会报错:“由于该元素不可见,因此无法点击UIATarget.localTarget().frontMostApp().alert().buttons()["OK"] tap@[Native code]” - 使用app.TapCoordinate似乎可以工作,但是必须知道正确的坐标位置,这取决于不同的屏幕和对话框出现的时间。
有没有解决此问题的方案?谢谢。
3个回答

5

权限的系统对话框不在应用程序范围内,不会显示在tree或任何其他UITest查询中。相反,这些通常由calabash自动处理。 "自动"行为是接受出现的任何权限对话框。

如果您的对话框使用的是非英语语言中的“OK”,我们需要为该特定语言环境提交问题,以便可以实施。

此外,请确保您拥有最新的UITest版本。查看 iOS 10 和 InvokeUia 的更改 此处


1
这是正确的问题。但当使用测试记录器时,它不会自动关闭对话框。自动确认也意味着您无法为用户拒绝权限的情况创建UI测试。 - Cheesebaron
1
XTR的观点很有意思,我会跟进。你可以考虑使用“后门”技术来避免实际接受权限,以便您可以分支测试所需的行为和路径。https://developer.xamarin.com/guides/testcloud/uitest/working-with/backdoors/ - therealjohn
这个讨论的最新进展是,Xamarin Test Recorder的新版本实际上会自动解除权限。@PhucThai应该接受这个答案,因为这是最正确的。 - Cheesebaron

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

0

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

如果你正在使用Visual Studio企业版,你可以使用Xamarin Test Recorder来更轻松地进行测试,它的效果非常好!

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


3
这不起作用。由于应用程序是从操作系统启动而不是应用程序本身启动,因此“确定”按钮不在应用程序的可视树中。 - Cheesebaron
有没有解决方案或更新?我也遇到了同样的问题 - 应用程序在第一次安装时会要求通知权限,似乎没有办法关闭权限对话框。这是使用Xamarin.UITest。 - James Lavery

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接