Ruby/Watir не может выбрать span with text

Всем доброго времени суток. Решил автоматизировать определенные действия в UI, пока что на примитивном уровне, написал первый фреймворк, который даже работает, а вот во втором начался затык.
Итак, есть страница с нижеприведенным:

<div class="col-xs-4 col-sm-2 listitem visible">
<div class="selector-option">
<div class="selector-item active">

<input name="Voice" value="7573" data-bundle="true" data-switcher="false" data-idtype="Voice" data-idsubtype="None" data-price="4" data-displayname="250 min/SMS 2 jaar" data-displaynameshort="250 min/sms" data-essential="true" data-duration="24" data-isunlimited="false" style="display:none;" type="radio">
<span class="ng-binding displayname">
<span class="mainname">250 min/sms</span>
</span>

<span class="ng-binding"></span>
<span class="euro ng-binding ballon2 "> € 4 ,- </span>
</div>
</div>
</div>
</label>

Делаю следующее -

@browser.span(:text => '250 min/sms').wait_until_present
@browser.span(:text => '250 min/sms').when_present.click

и, естественно, вываливается таймаут, потому что, как оказалось, имен “250 min/sms” несколько штук на странице, в том числе скрытые. Через xpath тоже ничего не получается найти.
Использую cucumber - watir - capybara - rspec.
Вопрос - что я не так делаю и в каком направлении надо двигаться?
Заранее благодарен

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

@browser.span(:text => '250 min/sms').wait_until_present
@browser.span(:text => '250 min/sms').first.click
1 лайк

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

Возможно имеет смысл привязаться к input выше? Там достаточно много параметров.
А к span можно выйти через ось.

А можете поподробнее потыкать меня носом? Я в автоматизации аж две недели по собственной инициативе, ибо надоело ордера руками заполнять.

Например такой xpath:

'//input[@data-displayname="250 min/SMS 2 jaar"]/following-sibling::span[@class="mainname"]'

Я полагаю что на span можно и не выходить, input’а обычно достаточно.

По приведённому куску не очень понятно чем могут отличаться другие похожие элементы, может быть адрес странички напишете, если не секрет.

1 лайк

Страничку не дам, там без логина\пароля не пускают (зарубежный телеком-провайдер).
Вам спасибо, попробую с xpath поиграться.

если воспользоваться css, то скорее всего сработает что-то типа “.visible .mainname” или “.active .mainname”