如何使用 watir-webdriver 访问循环中链接数组的 href
How to access href of array of links in a loop using watir-webdriver
我有一个包含某些 <a>
元素的数组,如下所示:
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
它显示终端 window 中第一个循环的所有链接。
有比我更了解的人需要验证/澄清。我的理解是元素在页面加载时被赋予引用。加载新页面时,您正在构建所有新引用,即使它在每个页面上看起来都一样 link。
您正在存储对该元素的引用,然后要求它继续并从中提取 href 属性。它第一次起作用,因为该元素仍然存在。新页面加载后,它不再存在。拉取属性的请求失败。
如果您只关心 href,那么有一种更短、更多的 Ruby 方法。
array = []
browser.as(:class => 'foo').each { |link|
array << link.href
}
array.each { |link|
browser.goto link
}
通过将 link 塞入数组,我们不必担心引用过时。
是的,与存储定位器并会在页面重新加载时重新查找的单个元素不同,元素集合仅存储无法重新查找的 Selenium 元素。
当您需要此模式且不仅仅是 href 值时,另一种解决方案是不创建集合并使用具有索引的单个元素:
num.times do |i|
link = browser.link(class: 'foo', index: i)
browser.goto link.href
end
我有一个包含某些 <a>
元素的数组,如下所示:
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
它显示终端 window 中第一个循环的所有链接。
有比我更了解的人需要验证/澄清。我的理解是元素在页面加载时被赋予引用。加载新页面时,您正在构建所有新引用,即使它在每个页面上看起来都一样 link。
您正在存储对该元素的引用,然后要求它继续并从中提取 href 属性。它第一次起作用,因为该元素仍然存在。新页面加载后,它不再存在。拉取属性的请求失败。
如果您只关心 href,那么有一种更短、更多的 Ruby 方法。
array = []
browser.as(:class => 'foo').each { |link|
array << link.href
}
array.each { |link|
browser.goto link
}
通过将 link 塞入数组,我们不必担心引用过时。
是的,与存储定位器并会在页面重新加载时重新查找的单个元素不同,元素集合仅存储无法重新查找的 Selenium 元素。
当您需要此模式且不仅仅是 href 值时,另一种解决方案是不创建集合并使用具有索引的单个元素:
num.times do |i|
link = browser.link(class: 'foo', index: i)
browser.goto link.href
end