Selenium WebDriver: функция не выходит из цикла при обнаружении двух значений в одной строке - PullRequest
0 голосов
/ 11 февраля 2019

Моя функция перебирает таблицу два раза, чтобы найти два входных значения, которые существуют в одной строке.Но это не выход из цикла, когда rowNo2 и rowNo равны.Что я делаю неправильно?Спасибо!

            WebElement table = oWebDriver.getWebElement(tableObject);
            List<WebElement> rows = table.findElements(By.tagName("tr"));
            List<WebElement> cols = table.findElements(By.tagName("td"));
            int colSize = (cols.size()) / (rows.size());
            int rowNo = 0;
            int rowNo2 = 0;
            int colNo = 0;

            for (int i = 0; i < cols.size(); i++) {

                System.out.println("row No2 = " + rowNo2);
                System.out.println("row No1 = " + rowNo);

                WebElement cellData = cols.get(i);
                if (cellData.getText().contains(rowData)||cellData.getText().contains(rowData.toUpperCase())) {
                    int l = i / colSize;
                    rowNo = l + 1;
                    for (int k = 0; k < cols.size(); k++) {
                        WebElement cellData2 = cols.get(k);
                        if (cellData2.getText().contains(rowData2)||cellData2.getText().contains(rowData2.toUpperCase())) {
                            int n = k / colSize;
                            rowNo2 = n + 1;
                            if (rowNo2 == rowNo) {
                                break;
                            }
                        }
                    }
                }

            }

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

В Java есть концепция помеченного разрыва.Может быть, вы можете попробовать что-то вроде этого -

WebElement table = oWebDriver.getWebElement(tableObject);
        List<WebElement> rows = table.findElements(By.tagName("tr"));
        List<WebElement> cols = table.findElements(By.tagName("td"));
        int colSize = (cols.size()) / (rows.size());
        int rowNo = 0;
        int rowNo2 = 0;
        int colNo = 0;

        here:for (int i = 0; i < cols.size(); i++) {

            System.out.println("row No2 = " + rowNo2);
            System.out.println("row No1 = " + rowNo);

            WebElement cellData = cols.get(i);
            if (cellData.getText().contains(rowData)||cellData.getText().contains(rowData.toUpperCase())) {
                int l = i / colSize;
                rowNo = l + 1;
                for (int k = 0; k < cols.size(); k++) {
                    WebElement cellData2 = cols.get(k);
                    if (cellData2.getText().contains(rowData2)||cellData2.getText().contains(rowData2.toUpperCase())) {
                        int n = k / colSize;
                        rowNo2 = n + 1;
                        if (rowNo2 == rowNo) {
                            break here;
                        }
                    }
                }
            }

        }
0 голосов
/ 11 февраля 2019

Вы просто останавливаете внутренний цикл, но не внешний, чтобы остановить выполнение внешнего цикла, вам также нужно поставить еще одно условие.

Существует множество способов разорвать внешний цикл, но здесьсамый простой, добавить i = cols.size(); строку после внутреннего цикла if условие:

if (rowNo2 == rowNo) {
    i = cols.size();
    break;
}

, которое также остановит выполнение внешнего цикла, как только rowNo2 == rowNo выполнится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...