如何通过浏览器登录在 Android 上自动化 appium 测试?

Posted

技术标签:

【中文标题】如何通过浏览器登录在 Android 上自动化 appium 测试?【英文标题】:How do you automate appium tests on Android with browser login? 【发布时间】:2021-08-19 19:24:38 【问题描述】:

我正在使用 Appium 为 android 应用设置测试自动化。我可以启动 Android 应用程序、查找元素、输入文本和单击按钮。我遇到的问题是我的应用程序有一个用户登录,这需要从 Identity Server (https://github.com/IdentityServer) 启动一个 Web 浏览器到一个网页。出于讨论目的,这是一个包含登录和密码输入字段的网页,并带有登录按钮。

所以自动化过程是:

    启动应用程序 在文本字段中输入登录页面(即身份服务器)的 url 点击保存按钮(保存设置) 点击登录按钮,打开网页浏览器进入登录页面(登录成功后,控制权返回到应用程序。)

这是我卡住的地方。如何使用 Appium 找到文本控件并输入登录名和密码,然后找到并单击网页的“登录”按钮(这将重定向回正在测试的 Android 应用程序并继续进行其余的自动化应用程序测试。)?

Appium 的 Inspector 只会从 com.sec.android.app.sbrowser 中找到视图。它没有找到任何浏览器元素。与 Android 的 UI Automator Viewer 相同。

有人有什么想法吗?

【问题讨论】:

【参考方案1】:

您需要将您的上下文从原生应用切换到 web 视图。

这里是我如何在测试中实现它的。

    在某些页面对象文件中,我保留了 Android 上下文。

     ANDROID_CONTEXTS = 
         'webview': 'WEBVIEW_ru.myapp',
         'native': 'NATIVE_APP'
     
    

    在一些测试中,我将上下文从 Native 切换到 Webview。

     @allure.link(url='https://jira.project.tech/browse/TEST-1', name='TEST-1 - Fill payment form')
     @allure.title('Fill payment form')
     def test_card_standard_1_month(appdriver):
    
         Paywall(appdriver).press_one_month_button()
         PaymentsPage(appdriver).select_card_payment()
         PaymentsPage(appdriver).press_payment_button()
    
    
         appdriver.switch_to.context(ANDROID_CONTEXTS['webview'])
         Payform(appdriver).fill_and_submit_payform()
    
         appdriver.switch_to.context(ANDROID_CONTEXTS['native'])
    
         assert SuccessPayment(appdriver).get_successful_payment_title_text() == 'Your subscription is successful!'
    

您可以检查应用中所有可用的上下文。更多信息在这里 -> http://appium.io/docs/en/commands/context/set-context/

【讨论】:

以上是关于如何通过浏览器登录在 Android 上自动化 appium 测试?的主要内容,如果未能解决你的问题,请参考以下文章

Android上如何实现自动登陆功能?

登录表单自动填充,在 iframe 中,在 android 浏览器中不起作用

如何在登录页面上添加 Android 和 iOS 设备图像

Facebook通过应用程序登录VS通过Android应用程序中的设备浏览器登录

Facebook通过应用程序登录VS通过Android应用程序中的设备浏览器登录

手机显示在web上登录