2017-11-29 10 views
2

私は、順序付けられていないリストからlist_itemsを得る方法に関する最高のパフォーマンス入力を探しています。表示されるlist_itemsだけが必要な場所隠された要素の大きなコレクションの中で可視のlist_itemsを返すための最良の選択

次は私が

<div id="queue-body"> 
<ul id="queue-list"> 
    <li class="message" style="display: none;">oculto</li> 
    <li class="message" style="display: none;">oculto</li> 
    <li class="message" style="display: none;">oculto</li> 
    <li class="message">vidljiv</li> 
    <li class="message">vidljiv</li> 
    <li class="message">vidljiv</li> 
    <li class="message">vidljiv</li> 
</ul> 
</div> 

あり、ほぼ300 list_itemsがあり、現在、私は目に見える

ある40を返すために約19秒を取っていると働いているHTMLのサンプルです私のページオブジェクト内の次を使用してメートル

unordered_list(:queue_list, :id => 'queue-list') 
def visible_queue_submissions 
    queue_list_element.list_items.find_all(&:visible?) 
end 

これは私のenv

のスタックであります
page-object 2.2.4 
watir 6.10 
selenium-webdriver 3.7.0 

答えて

4

find_all(&:visible?)は、Watirが各リスト項目に対してワイヤコールを行う必要があるため、処理が遅くなります。より高速にするには、反復処理を必要としないセレクターを選択する必要があります。これは通常、WatirがXPathビルダーに組み込むことができるプロパティを見つけることを意味します。

この場合、可視要素にはスタイル属性がありません。したがって、あなたが新しい存在/不在ロケータを使用することができます。でも、この小さなリストと

def visible_queue_submissions 
    queue_list_element.lis(style: false) 
end 

を、私は0.14sまで1.26sから実行時間を見ました。

+0

ありがとうございました。この回答は、watirの仕組みを理解するのに非常に役立ちました。また、新しい存在/不在のロケータ – niartseoj

関連する問題