首页 > 解决方案 > 如何等到自动完成条目只显示一行

问题描述

我正在针对我无法以任何方式更改的 PHP 站点运行 Cypress。

它有一个自动完成输入字段,可以将 XHR 调用流发送到服务器。

结果填充了一个表格,其中每一行都有一个可以单击的按钮。

我需要等到只有一行,然后单击其按钮。

cy.get('#dataTables_clients_filter > label > .form-control').type(client).then(() => {
  cy.get('table#dataTables_clients > tbody > tr > td:nth-child(6) > i').click();
}

上面的结果是错误的cy.click() can only be called on a single element. Your subject contained 100 elements.

XHR 调用的数量取决于客户的价值。

困难由此而来:当theInput.type(client)一次插入一个字母时,页面会为每个字母发送一个新的 XHR。这意味着最初会有一个很长的行列表,其中一个将始终包含“客户端”。随着越来越多的字母被处理,列表变得越来越短,最终只剩下一行。

我怎样才能等到以下任何一项为真?

标签: cypress

解决方案


cy.waitUntil(() => {
  return cy.get('@Clientes').eq(0).children().eq(4).then(($cl) => {
    const res = Boolean($cl[0].innerText === client);
    return res;
  });
}, {
  errorMsg: 'Autocomplete failed to find client',
  timeout: 15000,
  interval: 500
});

这个! 为几乎所有事物添加 Cypress 等待功能


推荐阅读