【问题标题】:Unable to execute IndexOutOfBounds exception while iterating dropdown with webtable使用 webtable 迭代下拉列表时无法执行 IndexOutOfBounds 异常
【发布时间】:2019-08-23 12:57:36
【问题描述】:

由于IndexOutOfBounds 错误,我的代码无法执行。我必须自动化迭代下拉列表,包括每个下拉列表选择的 webtable。我必须在 webtable 中进行编辑。

你能帮我解决这种情况吗?

    s = new Select(ledger.SelectPayrollCategoriesLedger);
     List<WebElement> led=s.getOptions();
     int ledselectsize=led.size();
     for(int i=0;i<ledselectsize;i++) {
     WebElement select=led.get(i);
     select.click();
     Thread.sleep(1500);
     int editactionsize=ledger.EditActionBtnLedger.size();
    System.out.println("edit size is: "+editactionsize);
    for(int j=0;j<editactionsize;j++) {

            try {
                editac=ledger.EditActionBtnLedger.get(j);
                editac.click();
            } catch (Exception e) {
                editac = ledger.EditActionBtnLedgerStale.get(j);
                editac.click();
            }   
    }   
}

它在以下位置显示异常:

editac = ledger.EditActionBtnLedgerStale.get(j);

【问题讨论】:

  • 好吧,您应该检查哪个索引超出范围。从您的(格式错误的)代码看来,最有可能的部分是ledger.EditActionBtnLedgerStale.get(j)(因为EditActionBtnLedgerStale 可能小于EditActionBtnLedger)。但是,如果您正在访问的列表可能同时更改,即在您的线程正在执行时,那么其他列表也可能有问题:例如,ledselectsize 将具有定义的值,但如果 led 的大小在迭代调用 led.get(i) 可能会失败 - 最好使用 i&lt;led.size() 等。

标签: java arrays selenium automation


【解决方案1】:

请确认尺寸

 ledger.EditActionBtnLedgerStale

与大小相同

 ledger.EditActionBtnLedger

请检查以下代码是否适合您,

for(int j=0;j<editactionsize;j++) {

        try {
            editac=ledger.EditActionBtnLedger.get(j);
            editac.click();
        } catch (Exception e) {
            if(ledger.EditActionBtnLedgerStale.size() > j){
               editac=ledger.EditActionBtnLedgerStale.get(j);
               editac.click();
           }
        }   
}   

这将有助于避免 IndexOutOfBounds。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多