2

我正在 Firebase 测试实验室中使用 Robo 测试测试我的应用,但如果没有 Facebook 登录,我的应用无法启动,并且 Firebase 模拟器卡在 Facebook Web 登录。

我尝试记录“Espresso 测试”并输入我的 FB 测试登录凭据,但没有成功,因为它没有记录 Facebook 登录 WebView 中 TextView 中的字符。

有什么方法可以让我的 Facebook 测试帐户凭据继续在 Firebase 模拟器上进行测试?

Firebase 构建了一个良好的测试环境,但他们无法将您的 FB 凭证用于测试,这对我来说似乎很奇怪。(顺便说一句,我无法删除 Facebook 登录,因为该应用程序基于 FB 信息)

4

2 回答 2

2

截至 2020 年 6 月 9 日,Firebase 测试实验室机器人脚本仍然不支持 facebook 登录。这里说明了,

注意:Robo 脚本记录不会捕获您在测试应用程序之外的操作。例如,不会记录通过 Facebook、Twitter 和其他社交应用程序的登录。

因此,您不能指示机器人通过机器人脚本在 sdk 登录页面中输入您的 facebook 测试凭据。

骇人听闻的把戏

但是,我想出了一个绕过 facebook 登录的技巧。我在 alpha 版本中引入了一个隐藏功能(确保它没有交付到生产环境中),如下所述:

  • 当登录屏幕中的版本文本被按下 10 次时,我显示了一个带有 EditText 的对话框以手动输入 facebook 访问令牌。
  • 从 facebook 开发者控制台我创建了一个测试用户并获得了它的访问令牌
  • 我从 android studio 中的 firebase assistant 插件中录制了robo 脚本。
  • 在对话框中输入访问令牌后,我执行了从 facebook sdk 获取访问令牌时调用的函数。
  • 我构建了一个新的应用程序包并将其与记录的机器人脚本一起提交到机器人测试中。

而已。现在绕过了 facebook 登录。这是示例代码,

    var fbTokenInputDialogVisibiltyCountDown = 0
    binding.textViewVersion.setOnClickListener {
        if (fbTokenInputDialogVisibiltyCountDown < 10) {
            fbTokenInputDialogVisibiltyCountDown = fbTokenInputDialogVisibiltyCountDown.inc()
            return@setOnClickListener
        }
        val inputFbTokenBinding =
            ViewInputDialogBinding.inflate(LayoutInflater.from(requireContext()))
        AlertDialog.Builder(requireContext())
            .setView(inputFbTokenBinding.root)
            .setNegativeButton("Cancel", null)
            .setPositiveButton("Submit") { _, _ ->
                val fbAccessToken =
                    inputFbTokenBinding.editTextToken.value() // extension function show error for invalid input
                if (fbAccessToken.isNotEmpty()) onGetFacebookAccessToken(fbAccessToken)
            }
            .show()
        fbTokenInputDialogVisibiltyCountDown = 0
    }

我希望它有所帮助。如果您有任何问题,请告诉我?

于 2020-06-09T00:12:31.383 回答
2

可能最好的方法是学习如何使用 UI Automator 进入 WebView 以操作其元素,这些元素由 Android 的可访问性 API 公开。这并不简单,但绝对可行。

为登录 Facebook 的 android 应用编写测试:UIAutomator 无法在 Facebook 的用户名字段中填写文本

于 2017-01-19T17:59:28.147 回答