如何在WebdriverIO中选择ag-grid以div标签定义的表格列名?
问题根因分析
- 函数未正确执行:你定义的
fundSearchTable是返回元素数组的方法,调用时未加(),实际获取的是函数对象而非执行后的元素列表,是导致返回数量异常的核心原因之一。 - XPath类匹配规则过严:使用
[@class='完整类名']是完全匹配规则,ag-grid会动态给表头元素添加临时类(如聚焦、悬停类)或调整类名顺序,会导致大部分元素无法命中。 - 未等待表头渲染完成:ag-grid表头存在异步渲染逻辑,未等待加载完成就获取元素会出现匹配不全的情况。
修正方案
优化选择器逻辑+修正调用方式即可正常匹配所有列名元素,参考代码如下:
// 优化选择器:使用contains模糊匹配类,避免类顺序/临时类导致匹配失败 async getFundSearchTableHeaders() { // 先等待表头容器加载完成,超时时间可根据实际场景调整 await $("//ag-grid-angular//*[contains(@class,'ag-header-container')]").waitForExist({ timeout: 5000 }); return $$("//ag-grid-angular//*[contains(@class,'ag-header-container')]//*[contains(@class,'ag-header-cell') and contains(@class,'ag-header-cell-sortable')]//*[contains(@class,'ag-header-cell-text')]"); } // 调用时必须加()执行方法 const fundColumnList = await this.getFundSearchTableHeaders(); console.log("列名数量:" + fundColumnList.length);
如果你的ag-grid开启了固定列功能,固定列和非固定列的表头会放在两个独立的ag-header-container容器中,上述模糊匹配写法已经兼容该场景。
内容的提问来源于stack exchange,提问作者siri
相关产品推荐
相关产品推荐

