0

環境:

  • ルビー 1.8.7
  • セレン WebDriver 2
  • Ubuntu 12.04 デスクトップ
  • Firefox 13.0.1

問題:

選択として使用されている div タグがあります。div をクリックすると、ドロップダウン スタイルのウィンドウが表示され、選択オプションとしてさらに div タグが表示されます。これで、「div as select」ごとにこれらの各オプションをクリックする方法を作成できますが、私が本当に望んでいるのは、知っているdivをクリックしてどのdivを決定するコードを書くことですクリック後に表示され、有効になります。次に、オプションの 1 つをランダムにクリックします。

だから私の現在のコードは次のようなものです:

allDivs = brwsr.find_elements(:tag_name, 'div')
origDivs = allDivs
allDivs.each do |e|
  if ... # Get the div I want
    e.click
    newDivs = brwsr.find_elements(:tag_name, 'div')
    origDivs.each do |orig|
      newDivs.delete(orig)
    end
    # Do something with remaining new divs here
  end
end

私が抱えている主な問題は、これが非常に遅いことです。現在、約 200 の div をスピンスルーしており、このメソッドが完了するまでに数分かかります。通常、数百の配列要素を処理するのに非常に時間がかかるとは思いません。しかし、そうです。

時間を短縮するために、allDivs と newDivs を一度スピンしてフィルタリングし、表示されておらず有効になっていないものをすべて削除しようとしました。

だから私は現在、本当に遅い解決策で立ち往生しています。この「新しい div の検索」が少し遅くなっても気にしません。スクリプトの開発時間も大幅に短縮されるはずだからです。ただし、完了するのに数分かかるのは長すぎます。

最初の質問: Selenium は、find_elements 呼び出しの周りに追加の API 文字列で表示および有効化された要素のみを返すことができますか?

2 番目の質問:要素の配列を調べることなく、新しい div 要素を見つけるためのより良い方法を誰かが持っていますか。

4

1 に答える 1