2017-09-05 69 views
1

我需要遍歷用戶列表並在新標籤中打開每個用戶。執行操作後,該選項卡應關閉,並返回第一個選項卡以選擇列表中的下一個用戶。我無法按順序選擇列表中的下一位用戶。問題是每個用戶只能通過點擊他們的照片來選擇 - 這是列表項的子元素。如何在each.do列表迭代中選擇每個li的子元素?

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> 

這導致在第一用戶每次被選定爲它只是找到所有的列表項頁面上的第一張照片。我添加了用戶名文本的輸出,以確保每個do循環都按順序遍歷列表項。每次打開第一個用戶時,它都會成功打印不同列表項的用戶名。我需要一種方法來定義照片元素作爲每個項目的孩子被列入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 

如何定義的元素被選擇作爲當前華里的孩子清單?

+0

你嘗試'user.a。(:類=> '_pg23k _9irns _gvoze')點擊(對照)'? –

+0

@TarunLalwani這工作!謝謝你,朋友! –

+0

如何使用用戶參數代替瀏覽器? @TarunLalwani –

回答

1

你需要使用

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

原因在循環中是一個瀏覽器對象可用於搜索主HTML頁面中的元素。如果您在循環內部使用「瀏覽器」,它將查看整個HTML,並且存在多個符合搜索條件的元素,它將返回找到的第一個元素。所以即使是在循環內部,它也會每次在頁面上找到相同的元素。

要使用正在迭代的列表中的當前項目,您需要使用名稱(本例中爲user),該名稱在您走過列表時已告訴它分配給列表元素。

+0

! –

+0

編輯的答案,希望讓它多一點有益的 –

+0

謝謝@ChuckvanderLinden :-) –

相關問題