我有以下代码以打破在Java循环不会使循环停止
File src = new File("C:\\Users\\Excel Files\\XLFile.xlsx");
FileInputStream fis = new FileInputStream(src);
XSSFWorkbook wb = new XSSFWorkbook(fis);
XSSFSheet sh1 = wb.getSheetAt(0);
// Start
String chromePath = "C:\\Users\\chromedriver_win32\\chromedriver.exe";
System.setProperty("webdriver.chrome.driver", chromePath);
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
// UAT
driver.get("http://www.htmlcodetutorial.com/forms/_SELECT_MULTIPLE.html");
//Building Action Interaction
Actions act = new Actions(driver);
if (sh1.getRow(0) !=null && sh1.getRow(0).getCell(1) !=null) {
List<WebElement> allopts = driver.findElements(By.xpath("//select[@name='toppings']//option"));
List<String> xlall= new ArrayList<String>();
Iterator<Row> ixlrows = sh1.rowIterator();
while (ixlrows.hasNext())
{
Row row= ixlrows.next();
if (row.getRowNum() > 0 && row.getCell(1) != null)
{
xlall.add(row.getCell(1).getStringCellValue());
}
}
for (WebElement we : allopts)
{
if (xlall.contains(we.getText()))
{
act.keyDown(Keys.CONTROL)
.click(we)
.keyUp(Keys.CONTROL)
.build()
.perform();
}
}
}
wb.close();
fis.close();
我做什么是通过匹配从Excel里的值,并将它们与应用程序选项将选择匹配他们一个接一个。
这只是一个示例代码,实际代码有1003个选项,这个循环必须经过。只要找到excel中的值,我就想退出循环,并将它们与应用程序选项匹配并点击它们。
正如你所看到的,我已经尝试在if语句中放置break,并在if语句后尝试。但没有任何作品,它仍然在循环所有选项。
我在哪里添加中断来做到这一点?
P.S.除了循环在动作完成后被破坏以外,其他的都在工作。
P.S 2.这是使用Java的Selenium WebDriver代码的一部分。
更新1:代码更新
更新2:有没有人觉得这个突破在此代码无关与for循环本身,它存储所有从数组列表中的应用程序选项allopts = ... 。?所以即使有休息,它也会继续进行下去吗?在那种情况下,我应该做些什么来阻止阵列在看到选项并选择它时立即捕获所有选项?
UPDATE 3:还有另一条if语句。该代码已更新与父母如果语句。
编辑:最后用@DonLeopardo的帮助下,像变魔术一样,
这里是工作代码:
if (sh1.getRow(0) !=null && sh1.getRow(0).getCell(1) !=null) {
List<WebElement> allopts = driver.findElements(By.xpath("//select[@name='toppings']//option"));
List<String> xlall= new ArrayList<String>();
Iterator<Row> ixlrows = sh1.rowIterator();
while (ixlrows.hasNext())
{
Row row= ixlrows.next();
if (row.getRowNum() > 0 && row.getCell(1) != null)
{
xlall.add(row.getCell(1).getStringCellValue());
}
}
List<String> copy = new ArrayList<>(xlall)
WebElement we;
for(int i=0;i<allopts.size();i++)
{
we=(WebElement)allopts.get(i);
if (copy.contains(we.getText()))
{
act.keyDown(Keys.CONTROL)
.click(we)
.keyUp(Keys.CONTROL)
.build()
.perform();
copy.remove(copy.indexOf(we.getText()));
}
if(copy.size()<1)
{
break;
}
}
请编辑源代码并对其进行格式化,以便我们可以得到您正在发布的内容...... –
您确定它实际上进入了if吗? – DonLeopardo
如果取消注释第二个'break','for'循环只会处理'allopts'列表中的第一个元素,而不管if语句是否触发,这使得下面的语句不可能:*“它仍然保留在循环所有选项“* – Andreas