You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Selenium中执行无参JS函数usunK?解决定义错误问题

解决Selenium调用无参数JavaScript函数usunK时"komorka_EIS is undefined"的问题

我来帮你分析下这个问题,你遇到的komorka_EIS is undefined错误根源在于对usunK函数的调用方式不对,结合你给出的函数代码,咱们一步步解决:

问题根源拆解

先看你提供的usunK函数代码:

function usunK(){ 
  var poziomWarstwy = currentRozdzial==""?0:currentRozdzial; 
  var tabela = tabelaManager.znajdzElementyPoziomuRozdzialu()[currentTable]; 
  var tabela_EIS = document.getElementById("TABELA_EIS" + currentRozdzial + "_" + currentTable); 
  var rows = parseInt(liczbaWierszy.get(poziomWarstwy)[currentTable]); 
  var cols = parseInt(liczbaKolumn.get(poziomWarstwy)[currentTable]); 
  var rowsNaglCount = tabelaManager.getLiczbaWierszyNagl(tabela.rowsNagl); 
  var komorka_EIS = selection.getSelectedCell_EIS(); 
  var col = komorka_EIS.col.nr; 
  // ... 剩余代码
}

这个函数是无参数的,它内部完全依赖selection.getSelectedCell_EIS()来获取要删除的单元格对象komorka_EIS。而你之前尝试调用时,给usunK传了一个包含getSelectedCell_EIS的对象,这完全不符合函数的预期——函数根本不会读取你传入的参数,还是会去selection对象里找选中的单元格,如果此时selection里没有有效选中项,就会返回undefined,进而触发报错。

正确的调用方式

你已经通过setOnClickKomorka定位了目标单元格,接下来只需要确保该单元格被selection对象识别为选中状态,然后直接调用无参数的usunK即可:

基础版代码

if(driver instanceof JavascriptExecutor) { 
    // 先执行定位函数,确保目标单元格被选中
    ((JavascriptExecutor) driver).executeScript("setOnClickKomorka({col: 1, colspan: 1, row: 1,rowspan: 1, siatkaCol: 1,siatkaRow: 1})");
    // 直接调用无参数的usunK函数
    ((JavascriptExecutor) driver).executeScript("usunK()");
}

增强版(处理选中失效的情况)

如果执行setOnClickKomorka后,selection对象依然没有获取到选中的单元格,可以手动设置选中状态后再调用usunK:

if(driver instanceof JavascriptExecutor) { 
    JavascriptExecutor js = (JavascriptExecutor) driver;
    // 执行定位函数
    js.executeScript("setOnClickKomorka({col: 1, colspan: 1, row: 1,rowspan: 1, siatkaCol: 1,siatkaRow: 1})");
    
    // 检查当前选中的单元格是否有效
    Object selectedCell = js.executeScript("return selection.getSelectedCell_EIS()");
    if(selectedCell == null) {
        // 手动设置选中状态
        js.executeScript("selection.setSelectedCell_EIS({col: 1, colspan: 1, row: 1,rowspan: 1, siatkaCol: 1,siatkaRow: 1})");
    }
    
    // 调用删除函数
    js.executeScript("usunK()");
}

关键注意点

  • 绝对不要给usunK传参数,它的定义就是无参数函数,传入的参数不会被使用
  • 核心是确保selection.getSelectedCell_EIS()能返回有效的单元格对象,这是usunK正常执行的前提

内容的提问来源于stack exchange,提问作者Podolanka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:17:56