WebDriver — поиск родственных элементов

У меня есть такая html-разметка:

<html>
...
<body>
    ....
    <fieldset>
        <legend>Other Details</legend>
        <div>
            <input type='text' id='txt1' title='Detail 01'/>
        </div>
        <div>
            <input type='text' id='txt2' title=''/>
        </div>
        <div>
            <input type='text' id='txt3' title=''/>
        </div>
        <div>
            <input type='text' id='txt4' title='Detail 04'/>
        </div>
    </fieldset>
    .....
<body>
</html>

Это то, что я хочу сделать.

Мне нужно быстро перемещаться по экрану, подбирать все текстовые поля и их заголовки. Когда я сталкиваюсь с текстовым полем без заголовка (как два из них в моем примере выше), мне нужно проверить, встречаются ли они в наборе полей, что они и делают. Теперь для этих текстовых полей без заголовка все, что мне нужно сделать, это взять значение легенды набора полей и присвоить его текстовому полю.

Например, второе и третье текстовые поля в приведенном выше примере не имеют заголовка. В этом случае я хочу сделать следующее:

  1. Возьмите значение легенды содержащего поля набора (в данном случае «Другие детали»)
  2. Получите положение текстового поля в наборе полей и добавьте его к легенде набора полей, например Другие сведения 2.
  3. Сделайте то же самое для третьего текстового поля.

Я выполнил шаг 1. Когда я нахожусь на шаге 2, мне нужно узнать положение текстового поля в родительском наборе полей. У меня есть код Selenium WebDriver ниже:

WebElement textbox = driver.findElement(By.id("txt2"));
List<WebElement> precedingSiblings =
  textbox.findElement(By.xpath("preceding-sibling::input[@type='text' or @type='Text' or @type='TEXT']"));
String myTitle =
  fieldSetLegend + " " + Integer.toString(precedingSiblings.size()+1);

Я ожидаю, что этот код даст мне значение myTitle как Other Details 2 и Other Details 3 для моих второго и третьего текстовых полей.

Но проблема в том, что каждый раз, когда я нажимаю PreviousSiblings.size(), он всегда возвращает 0. Это потому, что каждый ввод содержится в div и, следовательно, не имеет братьев и сестер.

Теперь я хочу узнать, как я могу найти, в какой позиции находится мой текущий элемент в содержащем наборе полей.

Пожалуйста помоги.!!!


person Sriram Sridharan    schedule 29.04.2014    source источник


Ответы (1)


А как насчет перехода к родительскому элементу div, нахождения его предшествующего брата и сестры, а затем поиска соответствующего input оттуда.

Грубо:

parent::div/preceding-sibling::div/input[@type='text' or @type='Text' or @type='TEXT']

person anotherdave    schedule 29.04.2014
comment
Я попробовал это, и это работает для текущего примера. Но то, что я пытаюсь сделать, немного общее. Скажем, в некоторых случаях может не быть div, закрывающего входные данные. Я ищу общий способ найти позицию. - person Sriram Sridharan; 29.04.2014