使用页面对象模型设计模式时,如何在Appium测试中导航到特定页面



我的Android应用程序的Appium测试运行顺利。使用Maven和Kotlin编码。我的应用程序只有一个Launchher活动,即我的SplashScreenActivity。

目前,我有一个baseTest类,它提供操作系统级别的功能,比如waitForElementswipeScreen(dir: Direction, amount: Int)

然后我有一个AppTest类,它扩展了它并提供了一些特定于应用程序的功能。最重要的是一个名为startApp()的函数,它启动我的应用程序,以测试用户的身份登录并导航到我的主屏幕。然后,针对特定UI的每个测试都扩展了这个AppTest类,并创建了自己的getToUI函数,该函数只需运行startApp函数,然后自动单击其他几个按钮即可到达要测试的特定UI。

现在我正在尝试将页面对象模型设计模式添加到我的测试中。我应该如何实现对要测试的UI的这种导航?我应该把导航到页面的代码放在每个页面类的init中吗?或者有更优雅的解决方案吗?

如果您只是想在测试特定UI时优化导航到页面的方式,我建议您使用Appium的启动活动命令,前提是UI不是碎片。

有一些方法可以伪造登录功能,即生成测试身份验证令牌并将其添加到HTTP标头中,或者添加身份验证cookie并将其随HTTP请求一起发送,但这更具体地取决于在项目中如何实现身份验证。

在BDD风格的测试中,它应该看起来像:

given: a user and user is logged in
when: user opens SOME PAGE
then: SOME VALIDATION HERE
页面对象模型只是一个抽象。粒度级别由您决定:它可以是应用程序片段、UI上的屏幕、UI上屏幕的一部分等。

您还可以有一个全局Actions类来包装一般操作,例如启动/重新启动应用程序、启动活动、将应用程序置于后台等。

假设你应该登录一次,然后为了加快速度,你只需要重新开始活动,它可能看起来像:

before:
LoginScreen loginScreen = Actions.launchApp(); // should load login screen
HomeScreen home = loginScreen.loginWithValidUser();
beforeEach:
HomeScreen homeScreen = Actions.launchHomeActivity() // no need to login, it is cached, just restart activity; maybe you need to make server API call to flush user data?
test
UserProfileScreen userScreen = homeScreen.openUserProfile()
userScreen.changePassword(newPassword)
userScreen.save()
Actions.navigateBack()
homeScreen....

仍然由您在导航到其他屏幕的过程中返回PO实例。只要有静态功能、个人品味和可用性就可以了。

最新更新