2016-09-05 8 views
0

У меня есть массив определенных <a> элементов, как это:Как получить доступ к HREF массива ссылок в цикле с использованием Watir-WebDriver

array = browser.as(:class => 'foo') 

Я стараюсь идти по ссылкам, как это:

$i = 0 
while $i < num do 
    browser.goto array[$i].href 
    . 
    . 
    . 
    $i += 1 
end 

Что работает для первого цикла, но не для второго. Почему это происходит? Если я

puts array[1].href 
puts array[2].href 
puts array[-1].href 

перед тем

browser.goto array[$i].href 

показывает все ссылки на первом цикле в окне терминала.

+0

Что происходит во второй раз? любая ошибка? И каков вывод puts array [1] .href? –

+0

Вывод имеет форму 'http: // www.foo.com' Ошибка, которую я получаю, говорит, что я не могу получить доступ, используя оператор' .href', но отлично работает впервые в цикле. – Forwarding

+0

Каков результат puts array [0], помещает массив [0] .href и помещает массив [1]? –

ответ

3

Кто-то, кто знает это лучше, чем я, должен будет подтвердить/уточнить. Мое понимание состоит в том, что элементам даются ссылки при загрузке страницы. При загрузке новой страницы вы создаете все новые ссылки, даже если она похожа на одну и ту же ссылку на каждой странице.

Вы храните ссылку на этот элемент и затем просите его продолжить и вытащите из него атрибут href. Он работает в первый раз, поскольку элемент все еще существует. Как только новая страница загружена, она больше не существует. Запрос на извлечение атрибута не выполняется.

Если все, что вам нужно, это hrefs, есть более короткий, более рубиновый способ сделать это.

array = [] 

browser.as(:class => 'foo').each { |link| 
    array << link.href 
} 

array.each { |link| 
    browser.goto link 
} 

Путем перекрещивания ссылок в массив нам не нужно беспокоиться о устаревших ссылках.

+0

Этот подход работал для меня. – Forwarding

+0

Как вы дублируете тег '

'? 'addresss' не работает. – Forwarding

2

Да, в отличие от отдельных элементов, которые хранят локатор и повторно просматривают их на перезагрузках страниц, коллекция элементов хранит только элемент Selenium, который не может быть повторно просмотрен.

Другое решение, когда вам нужен этот шаблон и больше, чем просто HREF значение не для создания коллекции и использовать отдельные элементы с индексом:

num.times do |i| 
    link = browser.link(class: 'foo', index: i) 
    browser.goto link.href 
end 
+0

Я вижу, это умно. – Forwarding