Selenium实现AG-Grid双击编辑时动态输入框的定位与值填充
AG-Grid动态编辑输入框的Selenium关联定位实现
现存测试阻塞点
- 被测项目使用带行选择功能的Angular AG-Grid表格,
Actual列存在值为NaN的单元格 - 双击单元格进入文本编辑态时,生成的编辑输入元素使用动态随机ID,原有基于固定XPath的全局定位逻辑无法匹配目标
- 原有测试流程为:通过Actions类触发双击交互 → 显式等待定位输入框 → 清空原有值并填入目标值,目前受动态ID影响,定位输入框的步骤完全失效
- 目标是依托被双击的原单元格元素关联定位生成的输入框,不依赖动态ID完成值填入操作
可落地的关联定位方案
AG-Grid的编辑输入框会直接挂载在被激活的编辑单元格的DOM容器内部,不会被渲染到远离单元格的全局DOM节点上,因此可以直接从已获取的原单元格元素引用出发,向下查找对应的编辑输入框,完全绕开动态ID的定位限制。
分步实现逻辑
- 提前持有目标单元格的元素引用
不需要提前猜测编辑态输入框的位置,先通过列ID特征过滤定位到Actual列值为NaN的目标单元格,保留这个元素的WebElement引用:// 通过AG-Grid固定的col-id属性列定位,匹配Actual列下文本为NaN的单元格 WebElement targetCell = driver.findElements(By.cssSelector("div[col-id='actual']")) .stream() .filter(cell -> cell.getText().trim().equals("NaN")) .findFirst() .orElseThrow(() -> new NoSuchElementException("未找到Actual列值为NaN的目标单元格")); - 持有引用触发双击进入编辑态
直接使用上面拿到的单元格引用触发双击操作,不要重新全局定位单元格后执行双击,避免元素引用失效:new Actions(driver) .doubleClick(targetCell) .perform(); - 从原单元格节点关联查找编辑输入框
因为输入框是原单元格的子节点,直接基于原单元格的元素引用向下查找输入框即可,不需要在整个DOM树全局定位,不受随机ID影响:WebElement editInput = new WebDriverWait(driver, Duration.ofSeconds(3)) .until(d -> targetCell.findElement(By.cssSelector("input.ag-field-textual")));这里的选择器使用AG-Grid文本输入框固定携带的类名特征匹配,没有绑定任何动态属性,同时因为查找范围被限定在原单元格的子节点范围内,天然只会匹配当前被双击的单元格生成的输入框,哪怕表格中同时存在多个编辑状态的单元格,也不会出现定位错误的问题。
- 执行值填入操作
拿到输入框引用后直接完成值填充即可:editInput.clear(); editInput.sendKeys("你需要填入的目标值"); // 发送回车触发编辑确认 editInput.sendKeys(Keys.ENTER);
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

