Flutter 驱动程序与原生元素交互
Posted
技术标签:
【中文标题】Flutter 驱动程序与原生元素交互【英文标题】:Flutter driver interacting with native elements 【发布时间】:2019-08-24 04:00:52 【问题描述】:我很难使用 Flutter Driver 进行测试,我认为这可能是一个限制,问题是因为我无法与原生元素交互,我的意思是,我正在使用 Google 进行登录,并且在通话后ios 上的一个功能,它显示一个确认登录的对话框
但是在集成测试中我不知道如何与之交互
final buttonLoginFinder = find.byValueKey('login_button');
final buttonContinueFinder = find.text('Continue');
// ...
await driver.tap(buttonLoginFinder);
await driver.waitFor(buttonContinueFinder);
await driver.tap(buttonContinueFinder);
【问题讨论】:
不幸的是,目前无法通过 Flutter Driver 与此类对话框进行交互。对于 android 设备,您至少可以尝试使用 ADB 进行一些解决方法,但是在快速搜索之后,使用 iOS/Xcode 开发人员工具很可能无法实现。 Github 上的某种相关问题(我认为可能是你的 :-))--> github.com/flutter/flutter/issues/12561 谢谢 :) @Wazniak 【参考方案1】:在我看来,这不是测试您的应用程序的正确方法。 Google 登录应该被视为一个黑匣子。 因此,在集成测试期间,应该对其进行模拟,并在尝试登录时仅返回真/假,而无需特定的对话交互。 通过这种方式,您可以假设 Google Sign In as 第三方库正常工作,并跳过外部组件的集成测试。
【讨论】:
IMO 这是一个很好的提示。您应该在开始测试时设置一个标志。 (MyApp.IS_TEST_RUN = true;) 在您的代码中,您应该检查测试是否正在运行。我有一项服务正在尝试访问我的位置(= 本机权限对话框)。在此服务中,我添加了这些行“ if (MyApp.IS_TEST_RUN)return defaultPosition;”。你也可以使用 mockito 之类的东西,这样你就不必接触你的应用代码了。以上是关于Flutter 驱动程序与原生元素交互的主要内容,如果未能解决你的问题,请参考以下文章
如何与来自 Flutter integration_test 的原生 UI 元素进行交互?