如何在 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
) .
我需要 运行 浏览用户列表并在新选项卡中打开每个用户。该选项卡应在执行操作后关闭,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
) .