Java Selenium Webdriver ArrayList与for循环实现集合配对的代码不符合预期
核心问题定位
你现有代码存在两个明确逻辑错误,直接导致运行结果与预期不符:
- 循环边界设置错误:原代码以仅含1个元素的
lineUITextList.size()作为循环终止条件,循环自然仅执行1次就退出 - 对象引用复用错误:原代码在循环外仅初始化1个
LineDashboardDetails实例,循环过程中反复修改同一实例的属性、将同一引用加入集合。即使调整循环边界,最终集合内所有元素也会指向同一个对象,输出结果会全部是最后一组配对值
修正后实现代码
// 提前取出lineUITextList中的唯一公共值,避免循环内重复取值 String commonLineName = lineUITextList.get(0); // 遍历上限改为machineUITextList的长度,覆盖所有机器值 for (int i = 0; i < machineUITextList.size(); i++) { // 每次循环内部新建独立对象,从根源避免引用复用问题 LineDashboardDetails objLineDetail = new LineDashboardDetails(); objLineDetail.lineName = commonLineName; objLineDetail.machineNames = machineUITextList.get(i).toString(); LineDashboardDetailList.add(objLineDetail); } // 按要求格式打印验证 LineDashboardDetailList.forEach(item -> System.out.println(item.lineName + "," + item.machineNames) );
按照你给出的测试场景(lineUITextList为["Noun"]、machineUITextList为["Pen","Box","Note","Scale"]),上述代码运行后输出:
Noun,Pen
Noun,Box
Noun,Note
Noun,Scale
完全匹配预期格式。
边界注意事项
- 直接取
lineUITextList.get(0)的前提是你确认该集合永远有且仅有1个元素,若存在空集合的极端场景,建议补充非空判断,避免触发IndexOutOfBoundsException下标越界异常 - 现有变量命名采用大驼峰开头的风格不符合Java常规命名规范,后续维护时可调整为小驼峰命名,降低协作成本
内容的提问来源于stack exchange,提问作者AutomationTester
相关产品推荐
相关产品推荐

