无法获取有关节点的信息,因为指定的选择器与 DOM 树中的任何节点都不匹配

Cannot obtain information about the node because the specified selector does not match any node in the DOM tree

我是第一次使用 testCafe,我正在尝试编写一个测试,在显示的患者列表中单击特定患者的姓名。

我得到的错误如下:

Cannot obtain information about the node because the specified selector does not match any node in the DOM tree.

| Selector('[data-cy=Name]')

这是实际的代码块:

test
  .meta({
    code: '4.1',
    action: 'From Patient Summaries screen, click a patient name'.
    expected: 'Should take user to the weekly Patient Overview screen'
  })
  .page(url)
  ('4.1', async t => {
    await LoginPageObject.loginAsDoctor();

    const patients = Selector('[data-cy=Patients]');
    const settingsMenuItem = Selector('[data-cy=name]');

    await t.expect(patients.visible).ok().click(patients);
    await t.expect(Selector('[data-cy=table-row-0]').visible).ok()

    await t.expect(settingsMenuItem.textContent)
      .contains("Charles Shetland")
      .click(settingsMenuItem);

    await VnVScreenshot(t, '4.1', fixtureName);
  });

我试过 const settingsMenuItem = Selector('td [data-cy=Name]');.contains("Shetland,Charles"),因为从技术上讲,这就是名称的列出方式。

但我仍然遇到 Selector('td [data-cy=Name]') 的相同错误。

DOM 层次结构的外观是:

div
 table
  thead
  tbody
   tr
    td

没有样品很难确定错误的确切原因。但是,我在以下几行中发现了不正确的代码:

await t.expect(settingsMenuItem.textContent)
      .contains("Charles Shetland")
      .click(settingsMenuItem);

如果要点击指定文本的项目,需要使用withText方法: https://testcafe.io/documentation/402740/reference/test-api/selector/withtext

await t.click(settingsMenuItem.withText('Charles Shetland'))

如果这没有帮助,请准备一个演示问题的示例。

请注意,您可以使用 TestCafe 实验调试功能在 IDE 或 chrome nodejs 控制台中执行选择器。详情请参考以下文章: https://testcafe.io/documentation/402639/reference/command-line-interface#--experimental-debug

所以我能够解决它的方法是使用一些 testCafe 魔法。

我所做的是将 data-cy="Name" 更改为 data-cy="call_Shetland Charles"

起初我不确定,但这让我可以从这里开始:

const settingsMenuItem = Selector('[data-cy=Name]');

为此:

const settingsMenuItem = Selector('[data-cy*=Charles]');

而且 testCafe 能够识别我希望它点击的患者。