XPath для возврата индекса столбца - PullRequest
8 голосов
/ 09 декабря 2011

У меня есть следующий HTML:

<html>
  <head>
    <body>
      <table>
       <tr>
      <td>Something Else</td>
      <td>Something</td>
    </tr>
    <tr></tr>
  </table>
</body>

Выражение xpath для первого столбца второго ряда:

/html/body/table/tbody/tr/td[2]

Я бы хотел использовать селен, чтобы получить значение '2'.

Другими словами, каково значение для первого появления текста «Нечто». Я могу заставить селен распознать этот элемент, но не вернуть значение.

Редактировать: Пока что есть отличные ответы. Но позвольте мне уточнить, что это больше вопрос селена, чем вопроса xpath. Мне нужно выяснить, как получить селен, чтобы вернуть это значение.

Ответы [ 4 ]

5 голосов
/ 09 декабря 2011

Следующее выражение возвращает позицию (индекс столбца) первой ячейки, содержащей нужный текст:

count(/html/body/table/tr/td[.='Something'][1]/preceding-sibling::td) + 1
3 голосов
/ 11 декабря 2011

Вы можете получить индекс столбца, используя selenium.getXpathCount('/html/body/table/tbody/tr/td'), а затем итерируя по диапазону с selenium.getText('xpath=(/html/body/table/tbody/tr/td)[' + i + ']'), пока он не вернет "Something".Не забывайте считать от 1 до n, а не от 0 до n-1 - XPath считает от 1, а не от 0, как многие языки программирования.

0 голосов
/ 09 декабря 2011

Я думаю, что вы пытаетесь динамически получить значение индекса. Если я правильно понимаю ваш вопрос. Если это так, почему бы просто не сохранить объект в списке и получить текст любого элемента, который вы хотите. Это позволяет гораздо более масштабируемый анализ данных и делает ваш тест менее хрупким.

WebElement thisElement = driver.findElement(By.xPath("//table/tr/"));
List<WebElement> columns = thisElement.findElement(By.tagName("td"));

foreach(WebElement col in columns)
{
  col.Text();
}
0 голосов
/ 09 декабря 2011

Использование:

/html/body/table/tr/td[text() = 'Something']

Для XML:

<html>
    <body>
      <table>
       <tr>
      <td>Something Else</td>
      <td>Something</td>
    </tr>
    <tr></tr>
  </table>
</body>
</html>

выбирает 2-й td элемент.

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