仅排毒测试启动画面

Posted

技术标签:

【中文标题】仅排毒测试启动画面【英文标题】:Detox only testing Splash Screen 【发布时间】:2019-07-19 09:40:18 【问题描述】:

我在我的 React-Native 项目上运行 detox,只能测试启动画面。初始屏幕转到登录屏幕,但排毒代码不允许我测试此元素。

测试代码:

describe('Splash', () => 
  beforeEach(async () => 
    await device.reloadReactNative();
  );

  it('should have splash screen', async () => 
    await expect(element(by.id('splash'))).toBeVisible();
    await expect(element(by.id('login'))).toBeVisible();
  );
);

给出的错误:

● Splash › should have splash screen

    Failed: [Error: Error: Cannot find UI Element.
    Exception with Assertion: 
      "Assertion Criteria":  "assertWithMatcher:matcherForSufficientlyVisible(>=0.750000)",
      "Element Matcher":  "((!(kindOfClass('RCTScrollView')) && (respondsToSelector(accessibilityIdentifier) && accessibilityID('login'))) || (((kindOfClass('UIView') || respondsToSelector(accessibilityContainer)) && parentThatMatches(kindOfClass('RCTScrollView'))) && ((kindOfClass('UIView') || respondsToSelector(accessibilityContainer)) && parentThatMatches((respondsToSelector(accessibilityIdentifier) && accessibilityID('login'))))))",
      "Recovery Suggestion":  "Check if the element exists in the UI hierarchy printed below. If it exists, adjust the matcher so that it accurately matches element."
    


    Error Trace: [
      
        "Description":  "Interaction cannot continue because the desired element was not found.",
        "Error Domain":  "com.google.earlgrey.ElementInteractionErrorDomain",
        "Error Code":  "0",
        "File Name":  "GREYElementInteraction.m",
        "Function Name":  "-[GREYElementInteraction matchedElementsWithTimeout:error:]",
        "Line":  "124"
      
    ]

第一个测试在运行时没有测试登录组件通过

【问题讨论】:

试一试waitFor,看看它是否有效,因为当 detox 检查视图层次结构时,您的login 可能不可见。 这样? it('应该有启动画面', async () => await expect(element(by.id('splash'))).toBeVisible(); waitFor expect(element(by.id('login'))) .toBeVisible(); 是的,当我改变期望等待时,这有效,谢谢 没有排毒有什么方法可以测试吗?或者我们如何使用 JEST 进行测试? 【参考方案1】:

在屏幕上呈现项目需要时间。您可以使用 detox 提供的waitFor 属性。

在大多数情况下,测试应自动与应用同步。当同步不起作用时,您可以使用 waitFor 进行故障保护。

您可以在documentation 中阅读有关使用waitFor 的更多信息。

注意:每个 waitFor 调用都必须使用 withTimeout() 设置超时。在不设置超时的情况下调用 waitFor 将无济于事。

注意:waitFor 在超时时不会抛出,而是会继续到下一行。为确保您的测试按预期工作,请在下一行添加 expect()。

因此,根据文档中的示例,您应该将测试更新为

it('should show login screen', async () => 
  await expect(element(by.id('splash'))).toBeVisible()
  await waitFor(element(by.id('login'))).toBeVisible().withTimeout(2000);
  await expect(element(by.id('login'))).toBeVisible()
);

【讨论】:

以上是关于仅排毒测试启动画面的主要内容,如果未能解决你的问题,请参考以下文章

如何在排毒测试中从 RNN 中识别导航选项卡按钮

如何在 iPhone sdk 中以 LandScape 模式启动启动画面

启动画面应用程序并隐藏操作栏

如何在 Flutter 中移除原生闪屏和主屏幕之间的默认淡入淡出过渡? (仅使用本机启动画面)

Android 12 启动画面 API 定制

为啥 PhoneGap 总是显示默认的启动画面?