ruby+watir--Menuメニューの要素を繰り返し取得せずにランダムに取得

10849 ワード


テスト例は上のMenuメニューのような9つ
要素定義(yaml)を見てみましょう.
#    -  
channel_0_link: div(:class,'navMenuBg').li(:id,'num_2').link(:href,'http://beijing.xxxx.com/xxxshi')
channel_0_link_on: div(:class,'navMenuBg').li(:id,'num_2').span(:class,'curCorner')
#    -  
channel_1_link: div(:class,'navMenuBg').li(:id,'num_4').link(:href,'http://beijing.xxxx.com/xxxxian')
channel_1_link_on: div(:class,'navMenuBg').li(:id,'num_4').span(:class,'curCorner')
#    -    
channel_2_link: div(:class,'navMenuBg').li(:id,'num_5').link(:href,'http://beijing.xxxx.com/xxxxxhuo')
channel_2_link_on: div(:class,'navMenuBg').li(:id,'num_5').span(:class,'curCorner')
#    -  div(:class,'navMenuBg').li(:id,'num_6').
channel_3_link: link(:index,21)
channel_3_link_on: span(:class,'curCorner')
#    -  div(:class,'navMenuBg').li(:id,'num_7').
channel_4_link: link(:index,22)
channel_4_link_on: span(:class,'curCorner')
#    -  div(:class,'navMenuBg').li(:id,'num_8').
channel_5_link: link(:index,23)
channel_5_link_on: span(:class,'curCorner')
#    -  
channel_6_link: div(:class,'navMenuBg').li(:id,'num_9').link(:href,'http://www.xxxx.com/xxxxjiang')
channel_6_link_on: div(:class,'navMenuBg').li(:id,'num_9').span(:class,'curCorner')
#    -  
channel_7_link: div(:class,'navMenuBg').li(:id,'num_10').link(:href,'http://www.xxxx.com/xxxxxiao')
channel_7_link_on: div(:class,'navMenuBg').li(:id,'num_10').span(:class,'curCorner')
#    -    div(:class,'navMenuBg').li(:id,'num_12').
channel_8_link: link(:index,26)
channel_8_link_on: span(:class,'curCorner')

テスト例:ループを使用して、ランダムに9つのMenuメニューを取得し、それぞれをクリックして検証する必要があります.
  def channel
    @b.goto URL
    channel = 0
    while channel <= 8
        times = rand(9).to_s
        AutoTest("channel_#{times}_link").click
        sleep 1
        assert_true(AutoTest("channel_#{times}_link_on").exists?)
        channel += 1
    end
  end

スクリプトでは9回ループし、毎回ランダム値を取ります.乱数rand()は0から始まるので、要素定義時に0から9つのMenuメニューの要素をエンコードします.例えば、channel_0_link.
しかし、ここではrand()関数に重複値が取られているという問題があります.つまり、Menuメニューの中には2回以上クリックされているものもあります.これは私たちの要求に反駁します.APIをほとんど探しましたが、順番やランダムで繰り返さない方法は見つかりませんでした.次は別のランダムな方法で解決することにしましたが、実はランダム再生は2つに分かれています.randomとshuffle
  def channel_food
    @b.goto URL
    linkid=[0,1,2,3,4,5,6,7,8]
    linkid.shuffle.each{
    |i|
    times = i 
    AutoTest("channel_#{times}_link").click
    sleep 1
    assert_true(AutoTest("channel_#{times}_link_on").exists?)
    }
  end

以上のコードは,ランダムに9個のMenuメニューを取得することができ,それぞれがクリックし,需要を検証しなければならない.eachの方法は配列からデータを取得することである.shuffleの方法は取得した値を並べ替えることであり,シャッフルプログラムでもこの方法を用いて行う(重複は生じない).
    a=[1,2,3,4,5,6,7,8,9]
    a.shuffle.each{
    |i|
    b = i
    puts b
    }

みんなやってみて
参照:http://blog.sina.com.cn/s/blog_6a55d9950100v4xu.html