java селен, как использовать, если еще - PullRequest
0 голосов

Есть таблица с номерами приложений и пользовательскими данными. в начале таблицы номер заявки в конце - зеленая стрелка. В таблице может быть бесконечное количество полей, и оно всегда меняется. Мне нужно найти зеленую стрелку рядом с номером приложения и соответственно щелкнуть по ней.

пытался сделать что-то вроде

String myorder = "629/0000/000000021059";


    if (myorder.equalsIgnoreCase(driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div/div[1]/table/tbody/tr/td[5]\n")).getText())){
        driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div[1]/table/tbody/tr/td[18]/a/img\n")).click();

    }  if (myorder.equalsIgnoreCase(driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div[2]/table/tbody/tr/td[5]\n")).getText())) {
        driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div[2]/table/tbody/tr/td[18]/a/img\n")).click();

    } if (myorder.equalsIgnoreCase(driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div[3]/table/tbody/tr/td[5]\n")).getText())) {
        driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div[3]/table/tbody/tr/td[18]/a/img\n")).click();

и так далее до 100+ Первая проблема в том, что я действительно не нравится вариант писать если еще 100 раз. И есть только один ди git в диве, где id приложения и один в ди git в диве, где зеленая стрелка другая (img)

Вторая проблема в том, что нет независимо от того, как я вставляю разрыв; при нахождении нужного приложения он нажимает на желаемую стрелку, но после очевидной попытки продолжить поиск на странице, но страница уже изменилась, и ошибка падает

(WARNING: The server did not provide any stacktrace information)

, если я использую код, который был прикреплен выше или просто указание элемента (который идет сразу после того, который оказался правильным, и страница изменилась) с примечанием, что я не могу его найти, если я использую else if с break;

пробовал это сделать

for (int i = 1; i < 25; i++) {
        String myorder = "629/6300/000000412067";

        if (myorder.equalsIgnoreCase(driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div["+ i++ +"]/table/tbody/tr/td[5]\n")).getText())) {
            driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div["+ i++ +"]/table/tbody/tr/td[18]/a/img\n")).click();
            break;
        }

Но если элемент находится, то он нажимает на самую первую стрелку в таблице, а не на стрелку в том же столбце, что и номер заявки

Буду очень признателен за вашу помощь!

Ответы [ 2 ]

0 голосов
for (int i = 1; i < 25; i++) {
        String myorder = "629/3500/000000329976";

        if (myorder.equalsIgnoreCase(driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div[" + i + 1 + "]/table/tbody/tr/td[5]\n")).getText())) {
            driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div[" + i + 1 + "]/table/tbody/tr/td[18]/a/img\n")).click();
            break;
        }
    }


Unable to locate element: {"method":"xpath","selector":"/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div[31]/table/tbody/tr/td[5]

"}

Итак, поиск выполнялся до 31. И это странно, потому что я использовал для i <25, а в таблице всего 25 строк, но все равно у меня не работает; (</p>

0 голосов
/ 07 мая 2020

XPaths основаны на 1, а не на 0, поэтому вы правы, думая, что вам нужно добавить один, однако эти два не равны, поскольку i++ изменяет значение i (даже встроенное, как у вас), что вы делаете дважды внутри своего l oop. Следовательно, вторая итерация вашего l oop i будет 3, а не 1, как ожидалось. В вашем l oop замените i++ на i + 1, и вам должно быть хорошо go.

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