2014-08-30 3 views
0

Я автоматизирую сайт, на котором я хочу щелкнуть ссылки внутри таблицы. В пользовательском интерфейсе таблица, изображающая вот так:Как щелкнуть случайные ссылки один за другим внутри таблицы

Артикул товара Код продукта
Редактировать | Del CLI-757042 OpenTable System (гостевой центр) SYS010
Редактировать | Del CLI-757043 Гости, сидящие в Интернете GC

Я хочу щелкнуть по ссылкам CLI-757042, CLI-757043, CLI-757044 один за другим. Номера случайны.

Ниже приведен HTML-код:

<!-- WrappingClass --> 
<div class="listRelatedObject customnotabBlock"><div class="bPageBlock brandSecondaryBrd secondaryPalette"><div class="pbHeader"> … </div><div id="800f00000006cQt_00Na000000ASdVK_body" class="pbBody"><table class="list" cellspacing="0" cellpadding="0" border="0"><tbody><tr class="headerRow"> … </tr> 
    <!-- ListRow --> 
<tr class="dataRow even first" onmouseover="if (window.hiOn){hiOn(this);}" onmouseout="if (window.hiOff){hiOff(this);}" onfocus="if (window.hiOn){hiOn(this);}" onblur="if (window.hiOff){hiOff(this);}"><td class="actionColumn"> … </td><th class=" dataCell " scope="row"><a href="/a1if0000000ZfEv"> 
    CLI-757042 
</a></th><td class=" dataCell "><a href="/01ta0000003oV9r"> … </a></td><td class=" dataCell "> … </td><td class=" dataCell CurrencyElement"> … </td><td class=" dataCell "> … </td><td class=" dataCell CurrencyElement"> … </td><td class=" dataCell numericalColumn"> … </td><td class=" dataCell numericalColumn"> … </td><td class=" dataCell CurrencyElement"> … </td><td class=" dataCell "> … </td></tr> 
    <!-- ListRow --> 
<tr class="dataRow odd" onmouseover="if (window.hiOn){hiOn(this);}" onmouseout="if (window.hiOff){hiOff(this);}" onfocus="if (window.hiOn){hiOn(this);}" onblur="if (window.hiOff){hiOff(this);}"><td class="actionColumn"> … </td><th class=" dataCell " scope="row"><a href="/a1if0000000ZfEw"> … </a></th><td class=" dataCell "> … </td><td class=" dataCell "> … </td><td class=" dataCell CurrencyElement"> … </td><td class=" dataCell "> … </td><td class=" dataCell CurrencyElement"> … </td><td class=" dataCell numericalColumn"> … </td><td class=" dataCell numericalColumn"> … </td><td class=" dataCell CurrencyElement"> … </td><td class=" dataCell "> … </td></tr> 
    <!-- ListRow --> 
<tr class="dataRow even" onmouseover="if (window.hiOn){hiOn(this);}" onmouseout="if (window.hiOff){hiOff(this);}" onfocus="if (window.hiOn){hiOn(this);}" onblur="if (window.hiOff){hiOff(this);}"> … </tr> 
    <!-- ListRow --> 
<tr class="dataRow odd" onmouseover="if (window.hiOn){hiOn(this);}" onmouseout="if (window.hiOff){hiOff(this);}" onfocus="if (window.hiOn){hiOn(this);}" onblur="if (window.hiOff){hiOff(this);}"> … </tr> 
    <!-- ListRow --> 
<tr class="dataRow even last" onmouseover="if (window.hiOn){hiOn(this);}" onmouseout="if (window.hiOff){hiOff(this);}" onfocus="if (window.hiOn){hiOn(this);}" onblur="if (window.hiOff){hiOff(this);}"> … </tr></tbody></table><div class="pShowMore"> … </div></div><div class="pbFooter secondaryPalette"> … </div></div></div><div class="listElementBottomNav"></div><script> … </script> 
    <!-- End ListElement --> 
</div> 
    <!-- End RelatedListElement --> 

    <!-- Begin RelatedListElement --> 
<div id="800f00000006cQt_00Na000000ASdVM" class="bRelatedList"><a name="800f00000006cQt_00Na000000ASdVM_target"></a> 
    <!-- Begin ListElement --> 

    <!-- motif: Contract --> 

    <!-- WrappingClass --> 
<div class="listRelatedObject Custom18Block"><div class="bPageBlock brandSecondaryBrd secondaryPalette"><div class="pbHeader"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="pbTitle"><img class="minWidth" width="1" height="1" title="" alt="" src="/s.gif"></img><img class="relatedListIcon" title="Order" alt="Order" src="/s.gif"></img><h3 id="800f00000006cQt_00Na000000ASdVM_title"> … </h3></td><td class="pbButton"> … </td><td class="pbHelp"> … </td></tr></tbody></table></div><div id="800f00000006cQt_00Na000000ASdVM_body" class="pbBody"> … </div><div class="pbFooter secondaryPalette"> … </div></div></div><div class="listElementBottomNav"></div><script> … </script> 
    <!-- End ListElement --> 
</div> 
    <!-- End RelatedListElement --> 

    <!-- Begin RelatedListElement --> 
<div id="800f00000006cQt_00Na000000ASdVR" class="bRelatedList"> … </div> 
    <!-- End RelatedListElement --> 

    <!-- Begin RelatedListElement --> 
<div id="800f00000006cQt_RelatedActivityList" class="bRelatedList"> … </div> 
    <!-- End RelatedListElement --> 

    <!-- Begin RelatedListElement --> 
<div id="800f00000006cQt_RelatedHistoryList" class="bRelatedList"> … </div> 
    <!-- End RelatedListElement --> 

    <!-- Begin RelatedListElement --> 
<div id="800f00000006cQt_00Na000000AT3VB" class="bRelatedList"> … </div> 
    <!-- End RelatedListElement --> 

    <!-- Begin RelatedListElement --> 
<div id="800f00000006cQt_RelatedNoteList" class="bRelatedList"> … </div> 
    <!-- End RelatedListElement --> 

    <!-- Begin RelatedListElement --> 
<div id="800f00000006cQt_00N3000000A6gu9" class="bRelatedList"> … </div> 
    <!-- End RelatedListElement --> 

    <!-- Begin RelatedListElement --> 
<div id="800f00000006cQt_RelatedEntityHistoryList" class="bRelatedList"> … </div> 
    <!-- End RelatedListElement --> 
<div class="fewerMore"> … </div><script> … </script> 
    <!-- Body events --> 
<script type="text/javascript"> … </script><div id="datePicker" class="datePicker"> … </div> 
    <!-- End page content --> 
</td></tr></tbody></table></div><div class="bPageFooter noTableFooter"> … </div><div></div></div><script> … </script><script src="/jslibrary/1402506602000/sfdc/ChatterDefer.js" defer="true"></script><script src="/jslibrary/1404472812000/sfdc/Zen.js" defer="true"></script><script> … </script><script async="" defer="" src="/jslibrary/1400606638000/sfdc/SfdcSessionBase190.js"></script><iframe title="sessionserver" style="position: absolute; top: -999px; left: -999px;" src="https://test.salesforce.com/login/sessionserver190.html"></iframe><div id="devSlide" style="display: block;"> … </div><div id="InlineEditDialog" class="overlayDialog cssDialog inlineEditDialog" role="dialog" aria-live="assertive" aria-describedby="InlineEditDialogTitle" style="margin-top: 0px; margin-left: 0px;"> … </div> 

Когда я инспектировать элемент в 1-й линии он показывает таблицу с классом = Datacell. Но на странице есть еще 2-3 таблицы с тем же именем класса.

ответ

1

Вы можете использовать метод links для сбора ссылок, а затем итерации по коллекции ссылок.

Вот надуманный стол в качестве примера:

<table class="foo"><tr> 
<td><a href="http://www.example.org">one</a></td> 
<td><a href="http://www.example.org">two</a></td> 
</tr></table> 

<table class="foo"><tr> 
<td><a href="http://www.example.org">three</a></td> 
<td><a href="http://www.example.org">four</a></td> 
</tr></table> 

<table class="bar"><tr> 
<td><a href="http://www.example.org">five</a></td> 
<td><a href="http://www.example.org">six</a></td> 
</tr></table> 

Вы можете собрать все ссылки на странице или нацеливания на определенную таблицу на основе атрибута класса или позиции индекса.

# print the text attribute for all links 
b.links.each { |link| puts link.text} 
#=> one 
#=> two 
#=> three 
#=> four 
#=> five 
#=> six 

# print the text attribute for links in the table with a class attribute of "foo" 
b.table(:class => "foo").links.each { |link| puts link.text} 
#=> one 
#=> two 

# print the text attribute for links in the table with a index position of 1 
b.table(:index => 1).links.each { |link| puts link.text} 
#=> three 
#=> four 

# print the text attribute for links in the table with a class attribute of "bar" 
b.table(:class => "bar").links.each { |link| puts link.text} 
#=> five 
#=> six 

В теории - как только вы собрали соответствующий набор ссылок - вы можете перемещаться по ссылкам и click их (хотя я считаю, это склонным к StaleElementReferenceError ошибок).

Смежные вопросы