выберите элементы и щелкните ссылку, если условие

Как написать код, который будет переходить по ссылкам на веб-странице с заданными условиями:

Сценарий должен просмотреть каждую строку div.table и проверить, содержит ли элемент списка (div.domains ul li) в div определенную строку (somedomain.com), и щелкнуть ссылку a.delete внутри, которая находится в div.actions. внутри div.table-строки.

Вот структура HTML:

<div class="table-row">
  <div class="domains">
    <ul>
    <li>somedomain.com</li
    <li>someotherdomain.com</li>
    </ul>
  </div>
  <div class="actions">
    <ul class="menu">
    <li><a class="delete">Delete</a></li>
  </div>
</div>

Как написать этот код в ruby ​​mechanize?

Я понятия не имею, как выбрать все строки .table и прокрутить их, чтобы щелкнуть ссылки удаления, если условие выполнено?

Спасибо за помощь


person all jazz    schedule 24.07.2012    source источник
comment
путь? См.: stackoverflow. ком/вопросы/2470202/   -  person Rimian    schedule 25.07.2012
comment
эти ссылки не имеют атрибута href, и поэтому нажатие на них не делает ничего значимого   -  person pguardiario    schedule 25.07.2012


Ответы (1)


Вам нужно будет использовать Javascript (не RoR), чтобы перебрать элементы и проверить правильное имя класса. Невозможно программно «щелкнуть» ссылку, но вы можете использовать Javascript для выполнения нужного действия.

<div class="table-row">
 <div class="domains">
  <ul>
   <li class="domain1">somedomain.com</li>
   <li class="domain2">someotherdomain.com</li>
  </ul>
 </div>
<div class="actions">
 <ul class="menu">
  <li><a class="delete">Delete</a></li>
</div>

As for the Javascript, this kind of thing is easiest with a Javascript framework like JQuery, but manually it would look something like this:

<script type="text/javascript">
  function searchForDomains(domainName) {
   var divs = document.getElementsByTagName('DIV');
    for (var i = 0; i < divs.length; i++) {
     var div = divs[i];
     if (div.className == 'table-row') {
       var tableRow = div;
       var lis = tableRow.getElementsByTagName('LI');
       for (var j = 0; j < lis.length; j++) {
         var li = lis[j];
         if (li.innerHTML == domainName) {
          doDelete(tableRow);
       }
     }
    }
  }

  function doDelete(tableRow) {
    // do whatever it is that you'd like to see happen if the delete link was clicked.
  }

What this does is loops through all the DIVs on the page, and when it finds one with the right class, it loops through all of the LIs inside that DIV, and when it finds one with the domain you're looking for, it calls a function that performs some action. You'd call this function either on page load, or in response to a user action like pressing a button.

person sgress454    schedule 24.07.2012