使用 Detox 测试与超时相关的测试,例如 Popups/Tooltips 等

Posted

技术标签:

【中文标题】使用 Detox 测试与超时相关的测试,例如 Popups/Tooltips 等【英文标题】:Testing timeout-related tests, such as Popups/Tooltips etc with Detox 【发布时间】:2021-02-02 06:50:46 【问题描述】:

我已经使用detox 有一段时间了,但在升级到17.5.+ 后,我开始面临弹出窗口测试的问题。我没有找到有关堆栈溢出和排毒问题的有用信息。

这里的问题如下:我有一个测试来检查是否显示了正确的弹出窗口。它看起来像:

it('expect to see "Answer correct" popup', async () => 
  await openQuestionnaire('theory_questionnaire_learn_button');

  await scroll('questionnaire_scroll_view', 150);

  await element(by.id('select_1_button')).tap();

  await element(by.id('questionnaire_answer_button')).tap();

  // @ts-ignore
  await expect(element(by.id('questionnaire_simple_popup'))).toBeVisible();
  // @ts-ignore
  await expect(element(by.id('questionnaire_simple_popup'))).toHaveLabel('correct');

  await delay(500);

  // @ts-ignore
  await expect(element(by.id('questionnaire_simple_popup'))).toNotExist();
);

背景:点击问卷回答按钮后,会出现弹出窗口。它可见 500 毫秒,然后消失。对于这 500 毫秒,我使用的是 setTimeout( () => dismiss() , 500)

在模拟器上可以看到弹出窗口,但我的测试以Test Failed: No elements found for “MATCHER(identifier: == “questionnaire_simple_popup”)” 失败

检查层次结构我在那里没有找到这个元素。也许其他人已经面临过这个问题并知道解决方案?

【问题讨论】:

【参考方案1】:

如果未找到标识符,则表示该标识符未正确设置为本机视图的可访问性标识符。与弹出式开发人员确认 testID 已正确转发到本机视图。

【讨论】:

我完全没有更改标识符和相关代码。但正如我所说,在更新到 17.+.+ 之后,它就永远不可见了。有时,如果从await expect(element(by.id('questionnaire_simple_popup'))).toBeVisible(); 中删除await,它会起作用。但这不是解决方案 你的失败不是关于可见性,而是匹配。您正在尝试匹配在匹配时不存在的视图。这可能意味着同步被某种方式破坏了,但 Detox 17 中的同步并没有改变。 你说匹配发生时可见。这意味着在视图层次结构中找不到标识符。 这不是一个普遍的问题吗?可能我做错了什么,但它看起来像普通测试。关于您最初评论的内容:<View accessible testID=`$testID_simple_popup` accessibilityLabel=isCorrect ? 'correct' : 'wrong'>... 这意味着测试 ID 与本机视图匹配。这是无法匹配的测试 ID。我一直在检查它,甚至将它硬编码为questionnaire_simple_popup,但测试仍然失败 尝试按标签或文本匹配。 testID 无法匹配的情况并不常见,所以我不确定发生了什么。在 Xcode 中暂停您的应用程序并使用视图层次结构检查器来查找您的视图。查看它是否具有可访问性标识符。否则,您的应用程序已损坏。【参考方案2】:

好的,经过几次尝试我发现了什么。它在将超时时间从 500 毫秒增加到 3000 毫秒后开始工作。 2500还是失败了,2750还没试过。关于匹配器。 by.idby.text 也可以。

所以原因可能是超时时间。

【讨论】:

以上是关于使用 Detox 测试与超时相关的测试,例如 Popups/Tooltips 等的主要内容,如果未能解决你的问题,请参考以下文章

排毒测试挂在 detox.init 的混合应用程序中

在 iOS 上运行 detox 测试时模拟器无法打开

Detox:条件测试用例编写

排毒错误:超过 120000 毫秒的超时。用于异步测试和钩子

使用 Detox 和 React Native 更改应用程序入口点

Detox:如何为 Detox 配置提供 bitrise 构建路径以在 bitrise 上测试 E2E