我有以下代碼以打破在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