zoukankan      html  css  js  c++  java
  • ruby+watir随机而不重复获取Menu菜单的元素

    测试用例是类似上面的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,没有找到按顺序或者随机而不重复的方法。下一步我决定使用另外一种随机的方法来解决,其实随机播放分为两种,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

  • 相关阅读:
    和大家一起了解Windows Server 2016 License许可证授权方式
    centos的cockpit安装使用
    Nscan-20150223
    JexBoss-20170328
    InsightScan-20150320
    Clusterd-20151119
    BBScan-20200419
    Astra-20190405
    为什么计算机计算时间要从1970年开始
    Appium环境搭建
  • 原文地址:https://www.cnblogs.com/zhuque/p/2796866.html
Copyright © 2011-2022 走看看