Как да получите индекс на родителски елемент с помощта на 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
Съгласен съм със Zeljko тук.. Кажете ни какво наистина трябва да направите, тъй като „получаването на индекса“ ми се струва нещо, което виждате като средство за постигане на целта и може да има много по-добър метод (например вж. моят отговор по-долу), ако знаехме само какво наистина се опитвате да постигнете   -  person Chuck van der Linden    schedule 30.12.2011


Отговори (2)


Няма начин да получите индекса с помощта на уебдрайвера, тъй като те са относителни към колекцията от съответстващи елементи. Това, което можете да опитате да направите, е да съберете текста на елементите като масив и след това да получите индекса на целевия текст.

@@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
click беше само един пример за действие, което можете да предприемете. Наистина това ни връща към първоначалните коментари на вашия въпрос. защо? какъв е смисълът да взема индекса? какво прави това за теб? Защо мислиш, че това е „това, от което имам нужда“? защото ако знаем повече за това, което се опитвате да постигнете, може да сме в състояние да ви покажем по-добро средство за тази цел - person Chuck van der Linden; 10.01.2012