Как найти таблицу без идентификатора или имени - PullRequest
2 голосов
/ 01 июля 2011

Мне нужно найти таблицу, затем найти tr и td, но таблица не имеет идентификатора и имени, так как найти таблицу?Я знаю, следует использовать индекс, к сожалению, он не работает.на странице 10 таблиц, я хочу, чтобы найти «refesh» в строке таблицы, может быть так просто, но я не могу ее решить ... я не знаю, как найти конкретную таблицу ...без идентификатора, без имени, как я могу судить, какую таблицу я хочу найти.

Есть часть кода:

<table cellspacing="0" border="0" style="height:63px; width:">
  <tbody>
    <tr>
      <td style=" ">
        <table cellspacing="0" border="0" style="margin-top:14px; width:112px; padding-left:15px;">
          <tbody>
            <tr>
              <td style="" rowspan="2"></td>
              <td id="tdrefresh" style="height:28px;" colspan="2">
                <div align="center" onclick="refresh(this,13652,1,1,0,0)" style="margin-bottom:15px;">
                  <div align="center" style="color:#414141;">refresh</div>
                </div>
              </td>
            </tr>
          </tbody>
        </table>
      </td>
    </tr>
  </tbody>
</table>

Ответы [ 3 ]

0 голосов
/ 01 июля 2011

Если ваша истинная цель - найти ячейку «обновить», то у Аластера есть то, что звучит как разумный ответ.Тем не менее, обратите внимание, что событие 'wiring' находится на уровне div внутри ячейки, поэтому, если ваша цель состоит в том, чтобы нажать на 'refresh', это действительно div, на который вам нужно нажать

browser.cell(:id, "tdrefresh").div(:index, 1).click # note index would be 0 for firewatir

Примечаниечто если у вас есть вклад с вашими разработчиками с точки зрения способности к тестированию, вы можете предложить им разместить идентификатор на уровне элемента, который фактически вызывает действие.Например, указанная выше ячейка с идентификатором ничего не делает и является просто пассивным контейнером, потому что событие onclick находится на уровне div внутри этой ячейки.Так что было бы гораздо ценнее иметь идентификатор в этом div, а не в ячейке, в которой он находится.Если это так, то ваш код становится намного проще (и более совместимым с браузерами).

browser.div(id, 'tdrefresh').click

В противном случае вам понадобится одна из двух вещей.

1) нечто уникальное,это может быть другой элемент или текст, который находится внутри таблицы.Идентификатор, поскольку он должен быть уникальным на странице (исключая контент в фреймах), является отличным выбором, если он существует, в противном случае может потребоваться комбинация других атрибутов. Некоторые потенциальные примеры:

browser.cell(:id, "tdrefresh").parent.parent.parent #parents are row, tbody, table respectively
browser.cell(:text, "refresh").parent.parent.parent  #will need to combine with index of text occurs in more than one cell) 

browser.table(:text, /refresh/)  # not likely to work well with nested tables

2) некоторый внешний контейнер, такой как div или span, который инкапсулирует таблицу, которую можно идентифицировать по уникальному свойству или комбинации свойств.(ничего не могу предложить, поскольку вы ничего не указали над табличным тегом в своем примере.

0 голосов
/ 04 июля 2011

Аластер и Чак ван дер Линден Спасибо за ваш ответ, действительно полезно. Я пробовал этот код: ie.div (: text => "refresf",: index => 2) .click, теперь все в порядке. Я все еще проверяю эту проблему с помощью вашего ответа. Большое спасибо, вы даете мне больше идей для решения этой проблемы.

0 голосов
/ 01 июля 2011

Вы пробовали browser.cell (: id => "tdrefresh"), чтобы найти ячейку?

...