仅排毒测试启动画面
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()
);
【讨论】:
以上是关于仅排毒测试启动画面的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iPhone sdk 中以 LandScape 模式启动启动画面