有没有一种方法可以使用 Detox E2E 测试在 FlatList 中找到一个元素

Posted

技术标签:

【中文标题】有没有一种方法可以使用 Detox E2E 测试在 FlatList 中找到一个元素【英文标题】:Is there a way I can find an element in a FlatList using Detox E2E testing 【发布时间】:2021-07-16 23:39:38 【问题描述】:

所以在测试我的应用程序时,我使用了一个数据集。由于数据集有很多条目,我使用 FlatList 来显示我的列表。创建列表后,我希望能够验证并点击某些列表项。下面,我附上了我正在尝试使用的代码,但它对我不起作用。如果有人对此有更好的想法,请告诉我。

我认为应该采取的方法。我想不出其他任何东西可以让 FlatList 滚动并找到我正在寻找的项目。

let isNotFound = true;
while (isNotFound) 
   try 
       await waitFor(element(by.id((edit_details.index).toString()))).toBeVisible().withTimeout(2000)
       isNotFound = false;
    catch (e) 
       await element(by.id('credit_history_list')).swipe('up', 'slow', 0.2)
   

await element(by.id((edit_details.index).toString())).tap();

它确实有助于滚动列表,并且在实际找到我正在寻找的条目时会继续滚动。但是 .tap() 函数不起作用。相反,detox 继续执行下一行代码。

有没有更好的方法来做到这一点?

提前致谢!

【问题讨论】:

【参考方案1】:

Detox'whileElement() API 听起来恰到好处。

我认为您正在寻找的是:

const itemId = (edit_details.index).toString();
const listId = 'credit_history_list';
await waitFor(element(by.id(itemId))).toBeVisible()
        .whileElement(by.id(listId))
        .scroll(100, 'down');

【讨论】:

非常感谢@d4vidi!这确实很有帮助,但是,如果我想点击一个元素,它会给我一个错误,即视图不是 75% 可见的。所以我把那个'tap()'函数放在一个try and catch块中。如果视图不是 75% 可见,它将额外滚动 50 像素以使其可见。这是正确的方法吗?如果不清楚,请告诉我,我也会放一个sn-p @MuhammadHasanKhan 是的,我认为这种方法没有任何问题。如果它通过了用例,那就太好了。 @MuhammadHasanKhan 我不明白这是怎么回事。如果您使用的是 android,则使用 toBeVisible()+scroll 本质上会转化为 75% 的可见性断言。您能否在一个小应用程序中创建一个用例,然后作为错误提交?你真的是在 ios 上吗?

以上是关于有没有一种方法可以使用 Detox E2E 测试在 FlatList 中找到一个元素的主要内容,如果未能解决你的问题,请参考以下文章

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

在 e2e 测试中的某个点开始使用 Detox 在 react native

如何为排毒 e2e 测试提供自定义测试文件路径

使用 detox 测试 e2e 无法启动 iPhone 模拟器,而是启动 Apple TV

Detox E2E 测试不会在 react-native 项目上运行

如何在 nativescript-vue 中使用 e2e 或单元测试?