保持内部for循环直到List数组的结尾

时间:2018-03-28 17:14:10

标签: java selenium-webdriver

当我使用继续返回第二个for循环的开始进入下一次迭代时,它不起作用。我用过休息和一些东西。我不知道还能做什么。我的鳕鱼如下。基本上在测试结束后或者如果条件为假,我想回到第二次循环迭代。

 for (String client: Arrayclients) {

   // do some stuff

   //** Begin *2nd inner for-loop****

   for (int i = 0; i < links; i++) {

    PS_OBJ_CycleData.ScrollToTop(driver); // scroll up
    List < WebElement > CCTable = driver.findElements(By.cssSelector(selector));
    WebElement code = CCTable.get(i);
    // changing code to mcode to look for first 3 characters    
    String mcode = code.getText().substring(0, 3).trim();
    System.out.println("\n" + "modified " + mcode);
    // System.out.println("\n"+code.getText().substring(0, 3).trim()+"\n");

    //----------------------checking for bad code -----------------------------------------
    String[] badcodes = {
     "5H9",
     "5GJ",
     "5AX",
     "5A4",
     "5HD"
    };
    boolean check = Arrays.asList(badcodes).contains(mcode);
    System.out.println(check + "code in array list");
    //check == true will work as well
    if (check) {
     System.out.println(check + "-Bad Code found breaking loop");
     continue;
    } else {
     //checking to make sure element is clickable
     PS_OBJ_CycleData.isClickable(code, driver);
     System.out.println("Clickable?" + code.isEnabled());
     code.click();
    }



    for (WebElement cc: MulCCodeProcess) {

    }
    Thread.sleep(2000);
    PS_OBJ_CycleData.PreviewPayroll(driver).click();
    PS_OBJ_CycleData.VerifyCalcPreviewPayrollBox(driver);

    for (int x = 0; x < 9; i++) {
     String PreviewStatus = "//table[@id='cppProcessInfoTable_rows_table']//tr[@id='cppProcessInfoTable_row_0']/td[starts-with(@id,'cppProcessInfoTable_row_0_cell_2')]";

     List < WebElement > Status = driver.findElements(By.xpath(PreviewStatus));
     WebElement status = Status.get(x);
     String pstatus = status.getText().trim();
     System.out.println("\n" + "status " + pstatus);

     String Status1 = "Complete";
     String Status2 = "Sucessfull";
     String Status3 = "Payroll Delayed";
     String Status4 = "Error";

     WebElement CalcPreviewPayroll = driver.findElement(By.xpath("//*[contains(@id,'cppBatch_title')]"));

     if (CalcPreviewPayroll.isDisplayed() && pstatus.equals(Status1) || pstatus.equals(Status2)) {
      PS_OBJ_CycleData.Close(driver).click();
      break;
     }

     if (!CalcPreviewPayroll.isDisplayed()) {
      break;
     }

     if (CalcPreviewPayroll.isDisplayed() && pstatus.equals(Status3) || pstatus.equals(Status4)) {
      PS_OBJ_CycleData.Close(driver).click();
      PS_OBJ_CycleData.VerifyCycleStatusID(driver);
      System.out.println("breaking loop cause " + pstatus);
      continue;
     }

    }

    // do some stuff

   } //** END 2nd inner for-loop****

  } //**END outter for-loop****

1 个答案:

答案 0 :(得分:1)

我不确定“第二”循环是什么意思。为清楚起见,我将循环称为内部和外部。

continue用于本质上跳到continue所在的循环的下一次迭代。因此,如果你有一个嵌套循环,将continue放在内部循环中,将跳到它自己的下一次迭代。如果在内循环内部,continue对外循环不会有任何影响。

如果这不是正在发生的事情,那么Java的某些东西是错的,或者某个地方的逻辑出了问题。我怀疑Java出了什么问题。

尝试使用调试器来确定与条件相关的变量值。您的调试器可以比我们更好地帮助您。