Как получить индекс родительского элемента с помощью Watir Webdriver?

У меня есть этот HTML-код:

<div class="A">
  <div class="B">
    Text1
  </div>
</div>
<div class="A">
  <div class="B">
    Text2
  </div>
</div>

Поэтому мне нужно найти индекс div class='A', где я нахожу текст. Я использую Watir Webdriver, и теперь у меня есть этот код:

if @ff.div(:class=>'A').div(:text=>'Text1')
  then [email protected](:class=>'A').index
end

но, конечно, это не работает, говоря «неопределенная локальная переменная или метод «индекс».


person user1116005    schedule 29.12.2011    source источник
comment
Что ты пытаешься сделать? Что вам действительно нужно знать? Вам действительно нужно знать индекс или что-то еще?   -  person Željko Filipin    schedule 29.12.2011
comment
Согласитесь с Желько здесь. Расскажите нам, что вам действительно нужно сделать, поскольку мне кажется, что «получение индекса» является чем-то, что вы видите как средство для достижения цели, и может быть гораздо лучший метод (например, см. мой ответ ниже) если бы мы только знали, чего вы на самом деле пытаетесь достичь   -  person Chuck van der Linden    schedule 30.12.2011


Ответы (2)


Невозможно получить индекс с помощью веб-драйвера, поскольку они относятся к набору совпавших элементов. Что вы можете попытаться сделать, так это собрать текст elemetns в виде массива, а затем получить индекс целевого текста.

@@ff.divs(:class, 'A').collect(&:text).index('Text1')

Обратите внимание, что это будет работать только для простых сценариев (например, вашего примера). Если вам нужно атаковать более сложный случай, обновите свой пример, чтобы он соответствовал реальному сценарию.

person robertodecurnex    schedule 29.12.2011

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

например если ваша цель состояла в том, чтобы щелкнуть экземпляр класса A, который был обернут вокруг класса div B с «Text1», затем сделайте это

browser.div(:class => 'B', :text => 'Text1').parent.click

Это особенно хорошо для ситуаций, когда внешний контейнер, который вам нужен, не имеет полезных атрибутов.

Однако в приведенном выше примере вы также можете просто сделать это

browser.div(:class => 'A', :text => 'Text1').click  
person Chuck van der Linden    schedule 29.12.2011
comment
Ну, я не хочу нажимать на это ... я хочу найти индекс div, как в ответе robertodecurnex. - person user1116005; 10.01.2012
comment
щелчок был лишь одним из примеров действия, которое вы могли предпринять. На самом деле это возвращает нас к первоначальным комментариям к вашему вопросу. Зачем? какой смысл получать индекс? что это делает для вас? Почему вы думаете, что это «то, что мне нужно»? потому что, если мы узнаем больше о том, чего вы пытаетесь достичь, мы сможем показать вам лучшие средства для достижения этой цели. - person Chuck van der Linden; 10.01.2012