2
b.select_list(:id, "MainContent_drpVehicleType").when_present.options.each do |option|
    option.select

    b.select_list(:id, "MainContent_drpMake").when_present.options.each do |option|
        option.select

        b.select_list(:id, "MainContent_drpModel").when_present.options.each do |option|
            option.select

            b.button(:id,"MainContent_imgbtnsearch").click
        end
    end
end

3 つのドロップダウンがあります 各ドロップダウンは前の値に依存します 各オプションを 1 つずつ選択してから、 Button をクリックする必要があります。*そのようにやっていると、次のエラーが発生する* 要素が DOM に関連付けられなくなった (Selenium::WebDriver::Error::StaleElementReferenceError)

また試した:

 b.driver.manage.timeouts.implicit_wait = 3
4

3 に答える 3

0

以下を試してください。

b.select_list(:id, "MainContent_drpVehicleType").when_present.options.each do |type_option|
  type_option.select
  sleep 5
  b.select_list(:id, "MainContent_drpMake").when_present.options.each do |make_option|
    make_option.select
    sleep 5
    b.select_list(:id, "MainContent_drpModel").when_present.options.each do |model_option|
      model_option.select
      sleep 5
      b.button(:id,"MainContent_imgbtnsearch").click
    end
  end
end
于 2013-04-03T15:17:05.820 に答える
0

私が持っている懸念の 1 つは、クリック後に何が起こるかということです。ページが更新されるか、上記のネストされたアプローチで乾杯できるような何かが行われる場合、最初のクリックの後、3番目のリストで選択を変更して再度クリックする方法がないため..

上記のいずれもうまくいかない場合は、リストで選択を行うときに、どのような種類の HTML 要求 (おそらく REST API に対して) が行われているかを確認するために、少しスヌーピングを行う必要があるかもしれません。それを使用して、独自の種類の多次元配列を構築して選択肢をマッピングできる場合があります。または、上記と同様のループ構造でさまざまな選択リストの内容を取得し、ループしてクリックを行うことができる場合があります

マップを取得したら、上記と同様のネストされたループを使用して次元ごとに反復しますが、すべてのアクションを最も内側のループで実行します。これは、この疑似コードに相当します。

gather the types and store
for each stored-type do
  pick the type 
  gather makes available for that type and store
  for each make of that type do
    pick the type, then make
    gather models available for that type
    for each model of that make do
      goto starting point
      select type
      select make
      select model
      click
      validate what should happen
    end
   end
 end
于 2013-04-03T18:22:48.330 に答える