Проблема с Selenium Client для Ruby и Xpath Selector - несколько ссылок из одной таблицы - PullRequest
1 голос
/ 05 ноября 2010

Я портирую несколько сценариев с Watir на Selenium-RC, чтобы понять, насколько сложными могут быть изменения для нашей организации.

У меня есть таблица с классом «глобальный список», которая содержит 4 столбца, каждый столбец с неупорядоченным списком и каждый элемент списка, содержащий слово с гиперссылкой.

В Watir я бы просто использовал:

@browser.table(:class, /global-list/).links.each {|link| puts link.text,link.href}

С Selenium, похоже, нет такого простого способа сделать это. Я хочу, чтобы все ссылки (href и текст) из этой таблицы. Сначала я думал, что мой Xpath неверен, потому что он покажет мне только первый столбец (из 4) или первый элемент href.

puts @browser.get_xpath_count("//table[@class='global-list']//a[@href]")
- дает мне результат 64 ссылки (общее количество по всем 4 tr и / или ul).

puts @browser.get_text("//table[@class='global-list']//a[@href]")
- дает мне один текстовый результат (только первый td в первом tr).

puts @browser.get_text("//ul[@class='global-list']")
- дает мне только первый столбец текста (первый ul в первом tr).

Я новичок в Selenium, но я прочитал документацию и доступные методы (http://selenium -client.rubyforge.org / ) и пока не вижу простого решения.

Я также попробовал метод локатора DOM, но если get_text или get_attribute - мои единственные варианты, я не смогу улучшить свои результаты таким образом.

1 Ответ

1 голос
/ 05 ноября 2010

Вы правы, в Se нет единого способа сделать это. Но вы прошли большую часть пути.

# get the number of links
num_links = @browser.get_xpath_count("//table[@class='global-list']//a[@href]")
# and now iterate over them
for i in 1 .. num_links do
  puts @browser.get_text("//table[@class='global-list']//a[@href][" + i + "])
end

Обратите внимание на итератор как часть xpath. Теперь вы можете стать еще интереснее и обойтись по количеству столбцов, а затем по количеству ссылок, использующих один и тот же прием.

Конечно, если вы используете 2.0a7, вы можете использовать CSS, как это предусмотрено библиотекой Sizzle, которая имеет альтернативные способы ссылки на конкретный элемент (хотя и не решает часть get_xpath_count).

...