如何在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
相关产品推荐
相关产品推荐

