Tag: 页面对象模式

使用Xamarin.UITest和Page对象模式进行自动化的UI测试

移动应用程序的UI测试至关重要,以便在最终用户手中准确测量给定应用程序的可用性。 当应用程序的功能集增长时,手动测试应用程序的UI可能会效率低下,如果需要测试多个设备配置,则几乎不可能。 因此,自动化的UI测试已成为开发人员监视其移动应用程序行为的宝贵工具。 使用Xamarin.UITest框架,我们能够快速而轻松地完成此任务。 Xamarin.UITest,Calabash和NUnit概述 Xamarin.UITest是基于Calabash的自动化测试框架,允许开发人员编写以NUnit编写的验收测试。 Calabash是用Ruby编写的核心框架,它使开发人员能够编写自动UI接受测试。 最后,NUnit是用于基于.NET的语言的单元测试框架。 开发人员可以使用NUnit和Xamarin.UITests对iOS和Android应用程序运行测试。 从那里,开发人员还可以通过Visual Studio App Center(以前称为Xamarin测试云)提交这些测试,以使其在数百个物理设备上运行。 为什么要编写自动化的UI测试? 自动化的UI测试允许快速开发健壮的代码库,同时能够系统地测试多个设备目标上的常见用户方案。 如果团队决定重构其核心体系结构,它还允许用户快速测试应用程序。 这使团队可以清晰地了解可能需要检修的工作项目以及按预期工作的项目。 通常,行为驱动开发还具有隐藏的好处,例如难以发现代码库中的错误以及允许专家和开发人员更好地协作来构建用户故事。 使用Xamarin.UITest Xamarin.UITest框架需要依靠一些概念才能正常工作。 框架中的每个自动UI测试都以[Test]属性进行修饰。 在每个测试中,存在测试逻辑的类称为测试夹具 。 给定的测试套件中可以有一个或多个测试夹具。 这些测试应该按照最终用户根据Xamarin自己的“安排-行为-声明”模式与应用程序进行交互的方式进行逻辑安排。 此模式要求设置和初始化测试条件(安排),测试将像用户一样操作并与应用程序交互(执行),最后,测试将检查这些交互的结果(声明)。 下面是一个示例。 我们将对包括本文在内的所有示例使用Xamarin.iOS。 初始化 要在iOS上初始化Xamarin.UITest,请使用静态ConfigureApp类: var config = ConfigureApp .iOS .InstalledApp(“package.identifier”) .EnableLocalScreenshots(); 这允许UITest库将应用程序部署到物理设备上以运行测试。 使用InstalledApp允许在物理设备上以编程方式启动,而调用AppBundle将强制在模拟器上运行。 在物理设备上进行测试时,务必将应用程序的捆绑软件ID放置在package.identifier参数的位置。 您可以使用应用程序的相对或绝对路径在模拟器上进行测试。 在我们的情况下,如果没有用户首先通过身份验证应用程序登录,该应用程序将无法成功运行。 登录后,用户将被重定向到原始应用程序。 这可以通过框架以与上述相同的方式实例化应用程序来完成。 重要的是要注意,为了使它在iOS上成功运行,还必须已经构建了该应用程序。 调试测试 在编写UI测试时,可能有时需要手动浏览UI或快速测试一些应用程序命令。 幸运的是,Xamarin.UI测试框架配备了repl(read-eval-print-loop)来处理此问题。 该工具使开发人员可以与应用程序的UI进行交互,从而使他们可以测试单个命令,遍历界面,并清晰地了解哪些视图处于活动状态以及与每个元素相关联的元数据标签。 为了使用repl,我们只需要从测试内部调用IApp.repl()方法。 当执行repl()方法时,它将暂停当前测试,并在新的终端窗口中打开repl。 在这里,我们可以直接与该应用进行交互,测试命令和查询,并进一步了解我们的UI。 在编写测试时,我们经常需要检查屏幕上实际存在的视图。 为此,repl有一个名为tree的漂亮命令,该命令提供了屏幕上当前可见的所有视图的层次结构列表。 由于Xamarin.UI测试框架的许多方法都依赖AppQuery对象在屏幕上找到正确的视图,因此我们需要知道实际上是在获取正确的元素。 […]