2017-10-24 6 views
0

これはSelenium Webdriver(Chromedriver)とCapybaraに関するパフォーマンスに関する質問です。Capybara/Selenium:ドロップダウンのスピードアップを選択していますか?

私はいくつかのデータを使って反応を選択するドロップダウンをいくつか持っています。何らかの理由で、反応選択は非常に長い時間がかかってオプションを選択します。コードは非常にシンプルで、私はここからそれをつかん:https://github.com/JedWatson/react-select/issues/832

しかし、それは基本的にダウンしています:

page.find('.Select-control').click 
page.find('.Select-option', text: 'the text').click 

事があり、これは正常に動作します。しかし、非常に長い時間がかかります(1分以内にドロップダウン)。今...カピバスの防衛では、これらのドロップダウンには選択肢がたくさんあるので、一番上の項目から選択するのが最速になると思ったが、それは影響を与えないようだ。

Capybara/Seleniumは別のソートリストの「オプション」を保持していますか?私はドロップダウンのトップオプションから選択する方が速くなると思うので、それはそうではありませんか?

答えて

2

通常、textオプションを使用すると、findは、現在のセレクタタイプのロケータを使用して一致するすべての要素を最初に見つけます。あなたのセレクタのタイプは、デフォルトでは:cssで、ロケータは '.Select-option . So Capybara will find all elements with the class Select-option`です。次に、テキストを比較して一致するものを見て(そして可視性をチェックする)セレクタがあいまいでないことを確認するためにそれらをすべて比較する必要があります。それをスピードアップする

一つの方法は、それが曖昧な要素を心配する必要はありませんので、テキストと可視性チェックの一部を省略することができますminimumオプション

page.first('.Select-option', text: 'the text', minimum: 1).click 

firstを使用することです。あなたはこの

のカスタムセレクタを作成することも別の解決策は、あなたがあなたのアプリケーションでこれをたくさんやっている場合は完全に textオプションをスキップして

page.find(:xpath, XPath.css('.Select-option')[XPath.string.n.is('the text')]).click # Haven't verified this is 100% correct but it should be close 

の線に沿ってのXPathにそれを書くことだろうその後、目のすべてので、もしあなたが要素の種類を制限することができれば、それはまた、クエリをより効率的になり、あなたは

page.find(:react_option, 'the text').click 

注を行うことができるようになる

Capybara.add_selector(:react_option) do 
    xpath do |locator| 
    XPath.css('.Select-option')[XPath.string.n.is(locator)] 
    end 
    # You can add other filters in here - see https://github.com/teamcapybara/capybara/blob/master/lib/capybara/selector.rb 
end 

e要素は<li>要素です

XPath.css('li.Select-option')[XPath.string.n.is(locator)] 
+0

ありがとう、それをスピードアップするものは私がこれらを試してみましょう。 Xpathを脆く使っていないのですか?特にオプションの注文が変更された場合は?あるいは、ここで影響を受けることはありません。 – msmith1114

+0

@ msmith1114 XPathが脆いわけではありません。それは、Capybaraのほとんどの新しいユーザーがそれを使用しようとする方法が脆弱なものにつながることです。彼らは、ブラウザによって生成された本当に長いXPathをコピーしてCapybaraにドロップする傾向があります。つまり、少しのページ構造が変更された場合、期待される要素に対して無効です。これによって生成されるXPathは、要素の特定のクラスと要素のテキストのみを探します。一般的に、XPathはCSSよりも読みにくいので、可能であればCSSに固執する経験則がありますが、XPathではテキストコンテンツの一致機能はありません。 –

+0

@ msmith1114これがあなたのために高速化するならば、答えを受け入れることを忘れないでください。 –

関連する問題