9

いくつか検索しましたが、適切な答えが見つかりません。基本的に、さまざまな長さの順序なしリストがあります。リストを反復処理し、他のことを行ってから、リストに戻って次の項目を選択したいと考えています。リスト内のアイテムの量を知っているので、ループを反復する回数を定義すると、これをうまく行うことができます。

ただし、テストごとにこれを定義したくはありません。リスト内のアイテムの数を取得し、それを変数にポップして、ループを終了し、次のことを実行できるようにしたいと考えています。

HTML は次のようになります。

<ul id="PageContent_cat">
  <li class="sel">
    <a target="_self" href="/searchlocation.aspx?c=S1">S1</a>
  </li>
  <li>
    <a target="_self" href="/searchlocation.aspx?c=S2">S2</a>
  </li>
  <li>
    <a target="_self" href="/searchlocation.aspx?c=S3">S3</a>
  </li>
  <li>
    <a target="_self" href="/searchlocation.aspx?c=S4">S4</a>
  </li>
  <li>
    <a target="_self" href="/searchlocation.aspx?c=S5">S5</a>
  </li>
  <li>
    <a target="_self" href="/searchlocation.aspx?c=S6">S6</a>
  </li>
  <li>
    <a target="_self" href="/searchlocation.aspx?c=S7">S7</a>
  </li>
</ul>

リストには7つのアイテムがあることがわかります。どうやら watir では、次のようなものを使用できたはずです。

arr= ie.select_list(:name,'lr').getAllContents.to_a

しかし、webdriverではありません。

「lis」を使用できると思いましたが、16 進数の結果が得られます。

$bob = browser.ul(:id => "PageContent_cat").lis put $bob

ありがとう、

ポール

4

2 に答える 2

11

収集したい情報とその目的に応じて、一般的に行われる方法を次に示します。反復を定義する数値を取得してその回数反復するのではなく、最後の要素に到達したときに自然に停止させることができます。

MyList = browser.ul(:id => "PageContent_cat")

#Scrape links from the UL for visiting
MyList.links.each do |link|
  puts link
  puts link.text
  b.goto(link)
  #etc
end

#Save li items to an array for later processing
MyArray = []

MyList.lis.each do |li|
  puts li.text
  MyArray << li.text
  #etc
end

#Iterate through your array in the same method, to report/visit/etc
MyArray.each do |item|
  puts "I collected something: #{item}"
  b.goto(item)
end #
于 2011-08-30T16:37:04.140 に答える