Собрать определенный атрибут из всех соответствующих элементов в клиенте Selen? - PullRequest
1 голос
/ 01 октября 2010

Я использую Selen-Client для тестирования сайта.Я хочу получить все теги, соответствующие определенному селектору, а затем вернуть атрибуты href обратно в массив.Может кто-нибудь сказать мне, как я могу это сделать?Например, это возвращает href первого совпадающего тега 'a':

browser.get_attribute "//a[contains(@id,'friendImageLink')]/@href"
=> "http://asite/some-path"

Могу ли я сделать вышеупомянутое и получить массив строк href?Такое чувство, что это должно быть легко, но я не могу разобраться: / Если я делаю это в firebug

$x("//a[contains(@id,'friendImageLink')]/@href")

Я получаю массив объектов назад, так что мне кажется, что я близко.

спасибо, макс.

РЕДАКТИРОВАТЬ - я думал о подсчете совпадающих элементов и затем итерации по ним, но я не могу выбрать n-й элемент вообще.Например, у рассматриваемой страницы есть 38 тегов, соответствующих условию «содержит», но если я сделаю это

browser.get_attribute "//a[contains(@id,'friendImageLink')][2]/@href"

, я получу сообщение об ошибке, говорящее Selenium :: CommandError: OR: Element / downndant ::a [содержит (@ id, 'friendImageLink')] [2] / не найдено

РЕДАКТИРОВАТЬ - я только что нашел способ.@browser.get_all_links возвращает все идентификаторы всех ссылок на странице в массиве.Затем я могу найти те, которые мне нужны, и перебрать получившийся отфильтрованный массив, получив каждую ссылку и получив ее href.например,

@browser.get_all_links.grep(/friendImageLink/).collect{|link_id| @browser.get_attribute("//a[@id='#{link_id}']/@href") }

1 Ответ

4 голосов
/ 02 октября 2010

Это FAQ.Это:

//a[contains(@id,'friendImageLink')][2]

Означает: Любой a второй a дочерний элемент с атрибутом id, содержащий friendImageLink

*Оператор 1013 * имеет больший приоритет, чем предикат

Вам необходимо:

(//a[contains(@id,'friendImageLink')])[2]/@href
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...