我希望在测试失败时从 Detox e2e 运行中截取我的 React Native 应用程序的屏幕截图。这在 iOS 上运行良好,但在 Android 上,由于在我的 MainActivity.java
中使用 FLAG_SECURE
,生成了屏幕截图,但字节数为零。在其他情况下,我从 ScreencapPlugin
得到 Command failed
并且没有生成任何文件。本质上,我需要一种方法来检测应用程序是否正在从 Detox 测试运行的上下文中执行,如果是这样,请不要设置FLAG_SECURE
。
我的基本排毒配置是:
"android.emu.debug": {
"binaryPath": "android/app/build/outputs/apk/debug/app-debug.apk",
"build": "cd android && ./gradlew app:assembleDebug app:assembleAndroidTest -DtestBuildType=debug && cd ..",
"type": "android.emulator",
"device": {
"avdName": "Pixel_3a_API_27"
}
}
这是使用以下命令执行的:
detox build --configuration android.emu.debug && detox test --configuration android.emu.debug --take-screenshots failing
MainActivity.java
受影响的部分如下所示:
public class MainActivity extends ReactActivity {
// ...
@Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE);
// ...
super.onCreate(savedInstanceState);
}
}
到目前为止我已经尝试过,但没有成功:
- 向
build
配置提供额外的P
或D
参数并使用System.getProperty()
在MainActivity.java
中。 - 在
build
配置中传递环境变量,并在MainActivity.java
中使用System.getenv()
进行使用。 - 生成一个新的
DetoxActivity.java
,而不设置FLAG_SECURE
并相应地连接DetoxTest.java
。 - 读取
app.gradle
中的System.getProperty()
并分配给defaultConfig
中的变量。
有人可以建议让它发挥作用的最佳方法吗?我想我在这里很挣扎,因为我还没有完全掌握 Detox/Gradle/Java 的组合!
最佳答案
在你的MainActivity.java中
添加:
protected void onPause() {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
super.onPause();
}
protected void onResume() {
super.onResume();
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
}
这只会在应用程序位于后台时启用 FLAG_SECURE,但会允许您在前台时被禁用,从而允许您截取屏幕截图。
关于java - 检测在 MainActivity.java 中 Detox 上下文下运行的 Android React Native 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59898754/