Java Selenium如何用CSV两列数据循环填充页面双元素?
问题
有一个包含两列的.csv文件,需要通过Java Selenium导航至页面,将CSV第一列数据输入页面Element1,第二列数据输入Element2,随后点击Element3和Element4,循环处理下一行直至所有数据处理完成。
目前已完成CSV读取并能打印数据,但无法实现“第一列数据对应Element1、第二列数据对应Element2”的赋值操作。现有CSV读取代码如下:
Scanner scan = new Scanner(new File("FilePathway")); ArrayList<String[]> records = new ArrayList<String[]>(); String[] record = new String[2]; while (scan.hasNext()) { record = scan.nextLine().split(","); records.add(record); } // now records has your records. // here is a way to loop through the records (process) for (String[] temp : records) { for (String temp1 : temp) { System.out.print(temp1 + " "); } System.out.print("\n"); }
若为单列数据填充单个元素,以下代码可行,但无法适配两列对应两个元素的场景:
for (String[] temp : records) { for (String temp1 : temp) { driver.findElement(By.id("Element1")).sendKeys(temp1); driver.findElement(By.id("Element2")).click(); driver.findElement(By.id("Element3")).click(); driver.findElement(By.id("Element4")).click(); }
解决方案
你不需要嵌套遍历每行的元素,直接通过数组索引获取每行的两列数据即可:
修改后的处理循环代码:
for (String[] temp : records) { // 取当前行第一列数据输入Element1 driver.findElement(By.id("Element1")).sendKeys(temp[0]); // 取当前行第二列数据输入Element2 driver.findElement(By.id("Element2")).sendKeys(temp[1]); // 执行后续点击操作 driver.findElement(By.id("Element3")).click(); driver.findElement(By.id("Element4")).click(); // 可选:如果需要重置输入框状态,可添加清空操作 // driver.findElement(By.id("Element1")).clear(); // driver.findElement(By.id("Element2")).clear(); }
说明
- 原代码中的嵌套
for (String temp1 : temp)会遍历当前行的每个元素,导致一行数据被处理两次(分别给Element1输入两次,不符合需求)。 - 直接使用
temp[0]和temp[1]可以精准获取每行的第一、第二列数据,对应赋值给Element1和Element2,一次循环处理完整一行数据。 - 如果CSV中存在包含逗号的内容,
split(",")会导致数据拆分错误,这种情况建议使用专业的CSV解析库(如OpenCSV)来处理,但当前场景下若数据格式规范,现有拆分方式可正常工作。
内容的提问来源于stack exchange,提问作者CrombopulousSqueeze
相关产品推荐
相关产品推荐

