XPath无法区分Datagrid中不同表格,获取单个表格列名失败咨询
问题原因与解决方法
你的问题出在XPath位置谓词的作用域理解上:
- 当你写
//thead[@class='k-table-thead'][1]/th时,[1]是对每个父节点下的thead做筛选,意思是“找到所有父元素下的第一个符合class的thead”。因为你的嵌套表格结构里,顶级表格的thead和展开行里的子表格的thead,都是各自父table元素下的第一个thead,所以这个表达式会同时匹配两个thead节点,最终拿到所有th元素,也就是两个表格的所有列名。
正确的XPath写法
要获取整个文档中第N个符合条件的thead,需要用括号改变优先级,先获取所有匹配的thead集合,再取集合中的第N个元素:
获取第一个表格的列名:
(//thead[@class='k-table-thead'])[1]/th获取第二个表格的列名:
(//thead[@class='k-table-thead'])[2]/th
更稳健的定位方式(推荐)
如果页面可能存在更多嵌套表格,或者DOM结构有变化,建议通过表格的层级关系来定位,避免依赖节点的顺序:
定位顶级表格(无父表格)的列名:
//table[not(ancestor::table)]/thead[@class='k-table-thead']/th定位嵌套在顶级表格行内的子表格列名:
//table[ancestor::table]/thead[@class='k-table-thead']/th
这种写法通过表格的嵌套关系来区分,比依赖节点顺序更可靠,尤其是当你需要展开多个行、出现多个子表格时,还可以进一步通过父行的状态(比如展开状态)来筛选:
//table[not(ancestor::table)]//tr[contains(@class, 'k-expanded')]//table/thead[@class='k-table-thead']/th
内容的提问来源于stack exchange,提问作者Елена
相关产品推荐
相关产品推荐

