Тестируем сайт с помощью Selenium rc. Есть страница сайта в HTML формате. На ней данные (в том числе и различные ссылки) расположены с помощью тегов таблицы. Каким образом, используя Xpath, можно кликнуть по всем ссылкам, расположенным на этой странице?
Варианты:
//a
//a[i]
//a[i]/descendant-or-self::*
не проходят.
вполне логично. (если я не ошибаюсь) в XPath позиция элемента ( [i] or its equivalent [position() = i]) не имеет отношения к его порядковому номеру в списке найденного. Это позиция элемента в списке найденных siblings, т.е.
//A[1] найдет 2 (выделенных) элемента в данном случае:
<A/>
</D>
<B>
<A/>
<A/>
</B>
_linenums:0'><D> <A/></D><B> <A/> <A/></B>
т.е. варианты, на мой взгляд такие:
1. написать custom locator (по образу и подобию PageBot.prototype._findElementUsingFullXPath и PageBot.prototype.locateElementByXPath) понимающий, что XPath может вернуть массив (сейчас там всегда берётся первый найденный элемент) и принимающий как параметр номер нужного элемента
2. для данного случая проще использовать dom locator, dom=document.getElementsByTagName( 'a' )[i] (i - с нуля, в XPath - с 1), типа:
public static void main(String[] args) { Selenium sel; sel = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.easysite.dplus.ru"); sel.start(); sel.open("http://www.easysite.dplus.ru/index.php?menuidx=lmenu&itemidx=item1"); int len = sel.getAllLinks().length; for (int i = 0; i < len; i++) { sel.click( "dom=document.getElementsByTagName( 'a' )[" + i + "]" ); sel.open("http://www.easysite.dplus.ru/index.php?menuidx=lmenu&itemidx=item1"); }}