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