如何在 each.do 列表迭代中 select 每个 li 的子元素?

How to select child element of each li in an each.do list iteration?

我需要 运行 浏览用户列表并在新选项卡中打开每个用户。该选项卡应在执行操作后关闭,return 到第一个选项卡到 select 列表中的下一个用户。我无法按顺序 select 访问列表中的下一个用户。问题是每个用户只能通过单击他们的照片来 selected - 这是列表项的子元素。

HTML

<div class="_gs38e">
 <ul class="_8q670 _b9n99">

  <li class="_6e4x5">
   <div class="_npuc5">
    <a class="_pg23k _9irns _gvoze" style="width: 100px; height: 100px;">
     <img class="_rewi8" src="https://pic.com/t51.2885-
     _1930374081979351040.jpg"></a>
    <div class="_eryrc">
     <a class="_2g7d5 notranslate _o5iw8" title="username1_" 
     href="/username1_/">username1_</a>
    </div>
   </div>
  </li>

  <li class="_6e4x5">
   <div class="_npuc5">
    <a class="_pg23k _9irns _gvoze" style="width: 100px; height: 100px;">
     <img class="_rewi8" src="https://pic.com/t51.2885-
     _1930374081979351040.jpg"></a>
    <div class="_eryrc">
     <a class="_2g7d5 notranslate _o5iw8" title="username1_" 
     href="/username1_/">username1_</a>
    </div>
   </div>
  </li>

  <li class="_6e4x5">
   <div class="_npuc5">
    <a class="_pg23k _9irns _gvoze" style="width: 100px; height: 100px;">
     <img class="_rewi8" src="https://pic.com/t51.2885-
     _1930374081979351040.jpg"></a>
    <div class="_eryrc">
     <a class="_2g7d5 notranslate _o5iw8" title="username1_" 
     href="/username1_/">username1_</a>
    </div>
   </div>
  </li>

  <li class="_6e4x5">
   <div class="_npuc5">
    <a class="_pg23k _9irns _gvoze" style="width: 100px; height: 100px;">
     <img class="_rewi8" src="https://pic.com/t51.2885-
     _1930374081979351040.jpg"></a>
    <div class="_eryrc">
     <a class="_2g7d5 notranslate _o5iw8" title="username1_" 
     href="/username1_/">username1_</a>
    </div>
   </div>
  </li>

  <li class="_6e4x5">
   <div class="_npuc5">
    <a class="_pg23k _9irns _gvoze" style="width: 100px; height: 100px;">
     <img class="_rewi8" src="https://pic.com/t51.2885-
     _1930374081979351040.jpg"></a>
    <div class="_eryrc">
     <a class="_2g7d5 notranslate _o5iw8" title="username1_" 
     href="/username1_/">username1_</a>
    </div>
   </div>
  </li>
 </ul>
</div>

这导致第一个用户每次都被 select 编辑,因为它只是在页面上找到所有列表项的第一张图片。我添加了用户名文本的输出,以确保每个 do 循环按顺序 运行ning 遍历列表项。它每次都成功打印不同列表项的用户名,同时只打开第一个用户。我需要一种方法将照片元素定义为要包含在 each.do 循环

中的每个列表项的子元素
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

如何将要selected 的元素定义为列表中当前 li 的子元素?

在循环中你需要使用

user.a(:class => '_pg23k _9irns _gvoze').click(:control)

原因是浏览器对象可用于搜索主 html 页面内的元素。如果您在循环内使用 'browser',它将查看整个 HTML,如果存在多个满足搜索条件的元素,它将 return 找到的第一个。所以即使它在循环内部,它每次都会在页面上找到相同的元素。

要使用正在迭代的列表中的当前项目,您需要使用您告诉它在遍历列表时分配给列表元素的名称(在本例中为 user) .