Cypress中parentsUntil返回元素内find目标元素失败问题咨询
Cypress定位问题:parentsUntil后find无法找到目标元素
我尝试通过以下代码选择元素的祖先元素:
cy.contains('someText').parentsUntil('[role="row"]').find('div.ag-header-cell.ag-header-cell-sortable.flex-grow-1.flex-shrink-0.ag-focus-managed');
执行后出现超时错误:
Timed out retrying after 30000ms: Expected to find element: div.ag-header-cell.ag-header-cell-sortable.flex-grow-1.flex-shrink-0.ag-focus-managed, but never found it.
控制台显示parentsUntil('[role="row"]')的返回结果中存在我要找的索引为2的目标元素,但使用find()无法定位到它,而索引1的div.ag-header-cell-comp-wrapper元素可正常找到。
原因分析
parentsUntil()会返回从当前元素向上遍历到指定祖先(不包含该祖先)的所有父级元素,形成一个元素集合。而find()的作用是在这个集合中每个元素的后代节点里查找匹配元素,不会直接匹配集合中的元素本身。
如果你的目标元素是parentsUntil返回集合中的一员,而非这些元素的子/后代元素,那么find()自然无法找到它——这就是问题的核心。
解决方法
使用
filter()替换find()
直接过滤parentsUntil返回的元素集合,匹配目标元素:cy.contains('someText') .parentsUntil('[role="row"]') .filter('div.ag-header-cell.ag-header-cell-sortable.flex-grow-1.flex-shrink-0.ag-focus-managed');调试确认元素位置
在链式调用中加入.debug(),可以直观查看parentsUntil返回的元素集合,确认目标元素的层级关系:cy.contains('someText').parentsUntil('[role="row"]').debug();检查选择器准确性
若目标元素确实是后代节点,核对类名拼写是否正确,或添加.should('be.visible')确保元素已加载完成:cy.contains('someText') .parentsUntil('[role="row"]') .find('div.ag-header-cell.ag-header-cell-sortable.flex-grow-1.flex-shrink-0.ag-focus-managed') .should('be.visible');
内容的提问来源于stack exchange,提问作者zoe
相关产品推荐
相关产品推荐

