提问人:RenDhark 提问时间:8/25/2023 最后编辑:Mark RotteveelRenDhark 更新时间:8/31/2023 访问量:78
通过对另一个按钮的单击操作等待表格行更改 [复制]
Wait for table row change with click action on another button [duplicate]
问:
我必须等待显示需要 0 到 n 秒的表格行。要显示该行,您必须单击搜索按钮。我试着去做。while 循环,但这是不可能的。
使用的代码:
let blnFound = false
do {
cy.get(pageCommonID.btnSearch(),{timeout: Cypress.env('GLOBAL_TIMEOUT_ms'),log: True}).scrollIntoView().click({force: true,multiple: true});
cy.get(pageWorkloadCaseID.tblResult()).find('tr').then((rows) => {
if (rows.length != 0) {
blnFound = true
return true
} else {
actualTime = new Date().getTime()
cy.wait('BIT_GLOBAL_TIMEOUT_MEDIUM')
let elapsedTime = actualTime - startTime
console.log('info', strID, 'startTime: ' + startTime)
console.log('info', strID, 'actualTime: ' + actualTime)
console.log('info', strID, 'Case not found in Table. Waiting...\n
Elapsed Time: ' + (Math.ceil(elapsedTime / 1000)) / 60 + ' Min')
if ((Math.ceil(elapsedTime / 1000)) / 60 >= 45) {
console.log('info', strID, 'Case not found in Table. Waiting Time was bigger than 45Min')
throw new Error('Case not found in Table. Waiting Time was 45Min\'')
}
}
})
console.log('blnFound out of Then: ' + blnFound)
if (intCount >= 360) {
// interrupt do While
break;
}
intCount++
} while (!blnFound)`
脚本不会中断,因为 blnFound 始终为 false。 当时间未预定义且反应仅在按钮单击事件上时,如何等待表格行显示?
代码片段是测试前提条件的一部分。它不是对搜索功能的测试。因此,由于缺少超时功能,不可能在 a 之前或之前执行此前提条件。因此,单击和下一次等待只会执行一次,直到所有超时结束。
我尝试使用包装、别名、将所有功能转移到其他功能、构建子方法来封装相关命令。
答:
3赞
Minnie Gale
8/26/2023
#1
看起来你想发明自己的测试框架,但实际上你可以省去很多混乱。
举个例子,我使用了 id 作为搜索按钮和结果表,但您可以根据需要替换其他选择器。
该测试是根据您输入的搜索文本编写的,该文本将产生一些结果。如果你错过了这一步,那并不是真正的测试。
通过定义预期结果,无需重复单击 - 您可以让 Cypress 在预期超时内等待结果。
it('tests the search feature', {timeout:Cypress.env('GLOBAL_TIMEOUT_ms')}, ()=> {
cy.get('input#search-input').type('search for me')
cy.get('button#search-button').click()
cy.get('table#results tr')
.its('length')
.should('be.gt', 0)
})
评论
0赞
RenDhark
8/27/2023
我还没有写出带有前提条件的完整测试,等等。因为它与这个问题无关。单击一次后的简单等待超时将永远不会得到结果。如果不单击搜索按钮,该表将永远不会自动填充。这是因为后端的基础设施。有几个外部系统具有不同的反应时间和不同的反应时间段。结果可能在 1 秒内可用,或者大约需要 45 分钟。但是,只有单击搜索按钮才能显示可用的结果。
评论
cy.get(pageWorkloadCaseID.tblResult()).find('tr')
cy.find()
do...while