如何在TestCafe中单击未渲染的虚拟元素

问题描述 投票:0回答:1

我正在使用react-virtualized列出可供选择的冗长(1000+)项目。我正在尝试设置一个端到端测试,该测试需要单击当前未呈现的元素之一。

通常,我只使用类似的东西:

await t.click(
    ReactSelector('ListPage')
        .findReact('ListItem')
        .nth(873) // or .withText(...) or .withProps(...)
)

但是由于仅渲染了ListItem的一小部分,因此TestCafe无法找到所需的元素。

我一直在尝试找出如何使用TestCafe的ClientFunction滚动列表容器,以便呈现所需的ListItem

但是,我遇到了一些问题:

  • 是否可以将Selector共享到ClientFunction中并修改DOM元素的scrollTop?还是我必须直接通过DOM重新查询元素?
  • 由于ListItem的高度不同,滚动位置不是索引x项目高度的简单计算。如何在此功能内不断更新/滚动,直到看到所需的Selector
reactjs typescript testcafe react-virtualized
1个回答
0
投票

是否可以将选择器共享到ClientFunction中并修改DOM元素的scrollTop?

有一种方法可以将Selector放入Client Function。请参考TestCafe文档中的this示例。

如何在此功能内不断更新/滚动,直到看到所需的选择器?

您可以使用TestCafe exist属性检查元素是否已渲染。下面的示例演示了该方法:

exist

为了滚动列表容器,我使用了import { Selector } from 'testcafe'; fixture`Getting Started`.page('https://bvaughn.github.io/react-virtualized/#/components/List') test('Test 1', async t => { const dynamicRowHeightsInput = Selector('._1oXCrgdVudv-QMFo7eQCLb'); const listItem = Selector('._113CIjCFcgg_BK6pEtLzCZ'); const targetItem = listItem.withExactText('Tisha Wurster'); await t.click(dynamicRowHeightsInput); while (!await targetItem.exists) { const currentLastRenderdItemIndex = await listItem.count -1; const currentLastRenderdItemText = await listItem.nth(currentLastRenderdItemIndex).textContent; const currentLastRenderdItem = await listItem.withExactText(currentLastRenderdItemText); await t.hover(currentLastRenderdItem); } await t .hover(targetItem) .click(targetItem); await t.debug(); }); 操作,最后渲染的hover作为目标元素。

© www.soinside.com 2019 - 2024. All rights reserved.