Ruby 如何在each.do列表迭代中选择每个li的子元素?
我需要浏览一个用户列表,并在新选项卡中打开每个用户。该选项卡应在执行操作时关闭,并返回到第一个选项卡以选择列表中的下一个用户。我无法按顺序选择列表中的下一个用户。问题是每个用户只能通过单击他们的照片来选择,照片是列表项的子元素 HTMLRuby 如何在each.do列表迭代中选择每个li的子元素?,ruby,selenium,foreach,selenium-chromedriver,watir,Ruby,Selenium,Foreach,Selenium Chromedriver,Watir,我需要浏览一个用户列表,并在新选项卡中打开每个用户。该选项卡应在执行操作时关闭,并返回到第一个选项卡以选择列表中的下一个用户。我无法按顺序选择列表中的下一个用户。问题是每个用户只能通过单击他们的照片来选择,照片是列表项的子元素 HTML 如何定义要选择的元素作为列表中当前li的子元素?在需要使用的循环中 user.a(:class => '_pg23k _9irns _gvoze').click(:control) 原因是浏览器对象可用于搜索主html页面内的元素。如果在循环中使用“br
如何定义要选择的元素作为列表中当前li的子元素?在需要使用的循环中
user.a(:class => '_pg23k _9irns _gvoze').click(:control)
原因是浏览器对象可用于搜索主html页面内的元素。如果在循环中使用“browser”,它将查看整个HTML,如果存在多个符合搜索条件的元素,它将返回找到的第一个元素。因此,即使它在循环中,每次都会在页面上找到相同的元素
要使用正在迭代的列表中的当前项,您需要使用您告诉它在遍历列表时分配给列表元素的名称(在本例中为
user
) 您是否尝试了user.a(:class=>“\u pg23k\u 9irns\u gvoze”)。单击(:control)
?@TarunLalwani这很有效!谢谢你,朋友!如何使用用户参数代替浏览器@TARUNLALWANITH是遍历列表的工作方式。在命令中Mylist.users.each_和| index do | user |
。您已经告诉它依次检查集合中的每个项,并且希望引用当前列表项“user”。因此,当您在该循环的内部代码中引用user
时,它将是集合的当前元素。由于您的集合由HTML用户中的li项组成,因此该li及其包含的所有HTML元素都将是li。顺便说一句,由于您没有使用项目的索引,您可以使用。each
而不是。each_with_index
。each_with_index是我计划创建列表中所有lis的索引时留下的,因为我不确定如何迭代每个列表。我意识到它使用起来简单多了。每一个都很有意义!编辑了答案,希望能让它更有用谢谢@ChuckvanderLinden:-)谢谢@ChuckvanderLinden非常有用!
Mylist = browser.ul(:class => "_8q670 _b9n99")
#Index the UL to open each user in order
Mylist.users.each_with_index do |user|
#open user in new tab by selecting photo
browser.a(:class => '_pg23k _9irns _gvoze').exists?
browser.a(:class => '_pg23k _9irns _gvoze').click(:control)
browser.windows.last.use
#performs action and closes tab
browser.windows.last.close
puts user
puts user.text
end
user.a(:class => '_pg23k _9irns _gvoze').click(:control)