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

我有三个下拉菜单,每个下拉菜单取决于以前的值我必须一个一个地选择每个选项,然后单击 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. 获取依赖列表中的最后一个选项
  2. 在当前列表中进行选择
  3. 等待步骤 1 中的选项不再出现

以下实现了这个想法(虽然它没有经过测试,因为我没有类似的页面来测试):

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

    #Select a vehicle type and wait for the last make option to no longer appear
    last_make_option = b.select_list(:id, "MainContent_drpMake").when_present.options.last
    option.select
    last_make_option.wait_while_present

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

        #Select a make and wait for the last model option to no longer appear
        last_model_option = b.select_list(:id, "MainContent_drpModel").when_present.options.last
        option.select
        last_model_option.wait_while_present

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

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

注意:

  • 该代码假定依赖列表的最后一个选项将始终更改。如果不是这样,您可能需要检查依赖列表的所有选项。
于 2013-04-03T16:12:56.830 回答
0

我担心的一个问题是点击后会发生什么?如果页面刷新或执行某些操作,那么您很可能会使用上面的嵌套方法敬酒,因为在第一次单击之后,无法更改您在第三个列表中的选择并再次单击..

如果上述方法都不起作用,那么当您在列表中做出选择时,您可能需要进行一些窥探以查看正在发生的 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 回答