当我尝试使用 Screengrab 捕获屏幕截图时,我在 fastlane 中的语言设置出现错误

Posted

技术标签:

【中文标题】当我尝试使用 Screengrab 捕获屏幕截图时,我在 fastlane 中的语言设置出现错误【英文标题】:I am getting error for the Language Setting in fastlane when i trying to capture screenshots using Screengrab 【发布时间】:2018-08-09 05:45:36 【问题描述】:

我在takeScreenShot() 中收到错误,并且在执行命令fastlane Screengrab 时它也给了我语言配置错误

这是我的测试执行代码

/**
 * Instrumentation test, which will execute on an android device.
 *
 */
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest 

    @ClassRule
    public static final LocaleTestRule localeTestRule = new LocaleTestRule();

    @Rule
    public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class);


    @Test
    public void testTakeScreenshot() 
        Screengrab.screenshot("Dashboard");
    

    @Test
    public void useAppContext() 
    

终端错误:-

[11:09:17]:▸ com.tcc.gstknowledge.ExampleInstrumentedTest: [11:09:17]:▸ 错误 testTakeScreenshot(com.tcc.gstknowledge.ExampleInstrumentedTest): [11:09:17]:▸ java.lang.IllegalStateException:无法获取 视图上下文中的活动 [11:09:17]:▸ at tools.fastlane.screengrab.DecorViewScreenshotStrategy$ScreenshotViewAction.perform(DecorViewScreenshotStrategy.java:69) [11:09:17]: ▸ 在 android.support.test.espresso.ViewInteraction$SingleExecutionViewAction.perform(ViewInteraction.java:356) [11:09:17]: ▸ 在 android.support.test.espresso.ViewInteraction.doPerform(ViewInteraction.java:248) [11:09:17]: ▸ 在 android.support.test.espresso.ViewInteraction.access$100(ViewInteraction.java:63) [11:09:17]: ▸ 在 android.support.test.espresso.ViewInteraction$1.call(ViewInteraction.java:153) [11:09:17]: ▸ 在 android.support.test.espresso.ViewInteraction$1.call(ViewInteraction.java:150) [11:09:17]: ▸ 在 java.util.concurrent.FutureTask.run(FutureTask.java:237) [11:09:17]: ▸ 在 android.os.Handler.handleCallback(Handler.java:751) [11:09:17]: ▸ 在 android.os.Handler.dispatchMessage(Handler.java:95) [11:09:17]: ▸ 在 android.os.Looper.loop(Looper.java:154) [11:09:17]: ▸ 在 android.app.ActivityThread.main(ActivityThread.java:6776) [11:09:17]: ▸ at java.lang.reflect.Method.invoke(Native Method) [11:09:17]: ▸ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518) [11:09:17]: ▸ 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408) [11:09:19]:▸。 [11:09:19]: ▸ 时间: 5.788 [11:09:19]: ▸ 有 1 失败:[11:09:19]:▸ 1) testTakeScreenshot(com.tcc.gstknowledge.ExampleInstrumentedTest) [11:09:19]:▸ java.lang.IllegalStateException:无法获取 视图上下文中的活动 [11:09:19]:▸ at tools.fastlane.screengrab.DecorViewScreenshotStrategy$ScreenshotViewAction.perform(DecorViewScreenshotStrategy.java:69) [11:09:19]: ▸ 在 android.support.test.espresso.ViewInteraction$SingleExecutionViewAction.perform(ViewInteraction.java:356) [11:09:19]: ▸ 在 android.support.test.espresso.ViewInteraction.doPerform(ViewInteraction.java:248) [11:09:19]: ▸ 在 android.support.test.espresso.ViewInteraction.access$100(ViewInteraction.java:63) [11:09:19]: ▸ 在 android.support.test.espresso.ViewInteraction$1.call(ViewInteraction.java:153) [11:09:19]: ▸ 在 android.support.test.espresso.ViewInteraction$1.call(ViewInteraction.java:150) [11:09:19]: ▸ 在 java.util.concurrent.FutureTask.run(FutureTask.java:237) [11:09:19]: ▸ 在 android.os.Handler.handleCallback(Handler.java:751) [11:09:19]: ▸ 在 android.os.Handler.dispatchMessage(Handler.java:95) [11:09:19]: ▸ 在 android.os.Looper.loop(Looper.java:154) [11:09:19]: ▸ 在 android.app.ActivityThread.main(ActivityThread.java:6776) [11:09:19]: ▸ at java.lang.reflect.Method.invoke(Native Method) [11:09:19]: ▸ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518) [11:09:19]: ▸ 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408) [11:09:19]: ▸ 失败!!! [11:09:19]:▸ 测试运行:2,失败:1

[!] 设备 3300dea196566381 上的语言环境 en-US 测试失败

【问题讨论】:

尝试设置默认策略? docs.fastlane.tools/getting-started/android/screenshots/… 【参考方案1】:

这可能会有所帮助:

从 screengrab 0.5.0 开始,您可以指定不同的策略来控制 screengrab 捕获屏幕截图的方式。较新的策略委托给 UI Automator,与原始策略相比,它修复了许多问题:

为材质 UI 正确捕获阴影/高程 正确捕捉多窗口情况(对话框等) 适用于 Android N

但是,UI Automator 需要 API 级别 >= 18 的设备,因此它还不是默认策略。要默认为所有屏幕截图启用它,请在测试运行之前进行以下调用:

 Screengrab.setDefaultScreenshotStrategy(new UiAutomatorScreenshotStrategy());

https://docs.fastlane.tools/getting-started/android/screenshots/#improved-screenshot-capture-with-ui-automator

【讨论】:

关键似乎是文档引用末尾的代码行。

以上是关于当我尝试使用 Screengrab 捕获屏幕截图时,我在 fastlane 中的语言设置出现错误的主要内容,如果未能解决你的问题,请参考以下文章

使用多个 CALayers 捕获 UIVIew 的屏幕截图显示白色背景,同时将图像保存在图库中

当我的应用在IOS中处于活动状态时如何阻止屏幕截图[关闭]

如何使用 Selenium Webdriver 捕获特定元素而不是整个页面的屏幕截图?我尝试了已经可用的答案

使用 Java 代码在 Android 上捕获屏幕截图 [重复]

如何在不调整窗口大小的情况下使用 Java 在 Selenium Webdriver 中捕获屏幕截图 [重复]

如何使用Selenium Webdriver捕获特定元素而不是整个页面的屏幕截图?