Установка тайм-аутов для поиска в Selenium и Java - PullRequest
0 голосов
/ 29 марта 2019

У меня есть HTML как этот

<tr>
  <td>
    <label>...</label>
  </td>
  <td>
    <input>...</input>
  </td>
  <td>
  </td>
</tr>
<tr>
  <td>
  </td>
  <td>
  </td>
  <td>
    <a>  ...</a>
  </td>
</tr>

Вы получаете изображение.Несколько (в данном случае 3) строк, каждая строка имеет tds (67 в данном случае) и только НЕКОТОРЫЕ из tds имеют подэлементы.

Мне нужно идти строка за строкой и смотреть на каждый td.Если нет подэлемента, то я получаю текст от тд.Если есть и это вход, то, если есть только 1 вход, я получаю его значение.Если два ввода, я получаю значение, где type = "hidden".

Я нахожу свои строки с

 driver.findElements(By.xpath("blahblahblah//tr");

, я прохожу каждую строку и нахожу tds вроде

 row.findElements(By.xpath("td"));

Это не проблема.Но затем я прохожу через tds, чтобы найти элементы:

 td.findElements(By.xpath("*")) 

(пожалуйста, обратите внимание, что это нормально, поскольку это не // *) Так что, если у td есть подэлементы, он сразу возвращается.Но если нет, он ждет и ждет до истечения времени ожидания.

Я сделал

 driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);

и даже

 driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);

Ни сработало, как я ожидаю, только в работахдля

 driver.findelements(By.xpath)).

Так есть ли способ установить это время ожидания для поиска элементов?Эти tds не имеют идентификаторов или чего-либо еще, или я мог бы просто сделать

 driver.findElements(By.xpath(xpath with id + "//*")); 

, и время ожидания, вероятно, сработало бы.

Есть ли способ с элементом получить конкретный xpath, если он имеетбез идентификатора, имени или бла-бла-бла?

Итак, два вопроса: 1: как установить время ожидания элемента, 2: если у вас есть элемент, как получить для него xpath

1 Ответ

0 голосов
/ 29 марта 2019

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

    String value;
    int rows = driver.findElements(By.xpath("//table//tr")).size();
    int columns = driver.findElements(By.xpath("//table//tr[1]/td")).size();
    for(int row = 1; row <rows+1; ++row) {
        for (int col =1; col<columns+1; col++) {
            //now check if there are any children with input hidden
            if (driver.findElements(By.xpath("//table//tr["+ row +"]/td["+ col +"]/input[@type='hidden']")).size()>0) {
                value = driver.findElement(By.xpath("//table//tr["+ row +"]/td["+ col +"]/input[@type='hidden']")).getAttribute("value");
            }
            //now check if there are any children with input without hidden
            else if ((driver.findElements(By.xpath("//table//tr["+ row +"]/td["+ col +"]/input")).size()>0)) {
                value = driver.findElement(By.xpath("//table//tr["+ row +"]/td["+ col +"]/input")).getAttribute("value"); 

            }
            //just get text as there are no children input
            else {
                value = driver.findElement(By.xpath("//table//tr["+ row +"]/td["+ col +"]")).getText();
            }
            System.out.println("Row:" + row + " Col:" + col + " value:" + value);
            }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...