我正在针对无法以任何方式更改的PHP网站运行赛普拉斯。
它具有一个自动完成输入字段,该字段将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。这意味着一开始,将有一长行的行,其中总是包含“ client”。随着越来越多的字母被处理,列表变得越来越短,最终仅以一行结尾。
我如何才能等到以下任一条件成立?
tbody > tr:nth-child(0) > td:nth-child(4)
等于client
答案 0 :(得分:0)
最简单的方法是仅确保所有3个均有效。您可以这样做:
// wait until the XHR call is done:
cy.server()
cy.route('/api-call/which/should/be/finished').as('xhr')
cy.wait('@xhr') // will wait until xhr has appeared.
// Be sure that "tbody > tr:nth-child(0) > td:nth-child(4) equals 'client'"
cy.get('tbody')
.contains('td', 'client') // will search for a td with 'client' in it.
// The length of the tables array of rows is equal to 1
cy.get('tbody')
.find('tr') // this will be valid if there is at least 1 row.
答案 1 :(得分:0)
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
});