代码之家  ›  专栏  ›  技术社区  ›  Toby Hede

使用带有随机值的Selenium IDE

  •  42
  • Toby Hede  · 技术社区  · 17 年前

    是否可以使用Firefox插件创建Selenium测试,该插件使用随机生成的值来帮助进行回归测试?

    完整故事: 我希望通过向客户提供一套测试来帮助他们进行验收测试,这些测试使用一些smarts为数据库创建随机(或至少伪随机)值。目前我的Selenium IDE测试的一个问题是它们具有预定义的值,这使得某些类型的测试有问题。

    12 回复  |  直到 16 年前
        1
  •  48
  •   Luke Woodward    14 年前

    首先,硒IDE相当有限,您应该考虑切换到SeleRC,它可以由java或Perl或Ruby或其他一些语言驱动。

    您应该能够在文本字段中键入随机数,例如:

    type fieldName javascript{Math.floor(Math.random()*11)}
    

    您可以在名为“user extensions.js”的文件中定义助手函数。见 Selenium Reference .

        2
  •  31
  •   corbacho    15 年前

    您可以像这样混合文字和随机数:

    javascript{"joe+" + Math.floor(Math.random()*11111) + "@gmail.com";}
    

    joe+testing@gmail.com 我会去你的地址 joe@gmail.com

    乘以*11111可以得到比1到9更多的随机值(在Thilo示例中)

        3
  •  22
  •   James    15 年前

    您可以添加user exentions.js以获取随机值。

    复制下面的代码并将其另存为.js扩展名(randomgenerator.js),然后将其添加到SeleniumIDE核心扩展名(SeleniumIDE-->选项-->常规选项卡)

    Selenium.prototype.doRandomString = function( options, varName ) {
    
        var length = 8;
        var type   = 'alphanumeric';
        var o = options.split( '|' );
        for ( var i = 0 ; i < 2 ; i ++ ) {
            if ( o[i] && o[i].match( /^\d+$/ ) )
                length = o[i];
    
            if ( o[i] && o[i].match( /^(?:alpha)?(?:numeric)?$/ ) )
                type = o[i];
        }
    
        switch( type ) {
            case 'alpha'        : storedVars[ varName ] = randomAlpha( length ); break;
            case 'numeric'      : storedVars[ varName ] = randomNumeric( length ); break;
            case 'alphanumeric' : storedVars[ varName ] = randomAlphaNumeric( length ); break;
            default             : storedVars[ varName ] = randomAlphaNumeric( length );
        };
    };
    
    function randomNumeric ( length ) {
        return generateRandomString( length, '0123456789'.split( '' ) );
    }
    
    function randomAlpha ( length ) {
        var alpha = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split( '' );
        return generateRandomString( length, alpha );
    }
    
    function randomAlphaNumeric ( length ) {
        var alphanumeric = '01234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split( '' );
        return generateRandomString( length, alphanumeric );
    }
    
    function generateRandomString( length, chars ) {
        var string = '';
        for ( var i = 0 ; i < length ; i++ )
            string += chars[ Math.floor( Math.random() * chars.length ) ];
        return string;
    }
    

    使用方法

    Command                Target     Value
    -----------           ---------   ----------
    randomString           6           x
    type                username       ${x}
    

    上面的代码生成6个字符的字符串,并将其分配给变量x

    <tr>
        <td>randomString</td>
        <td>6</td>
        <td>x</td>
    </tr>
    <tr>
        <td>type</td>
        <td>username</td>
        <td>${x}</td>
    </tr>
    
        4
  •  5
  •   afternoon    15 年前

    下面是一个在JS中生成随机字母字符串的单行解决方案:

    "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split("").filter(function(e, i, a) { return Math.random() > 0.8 }).join("")
    

    用于粘贴到Selenium IDE中。

        5
  •  2
  •   TomG    15 年前

    javascript{['brie','cheddar','swiss'][Math.floor(Math.random()*3)]}
    
        6
  •  2
  •   Saifur    11 年前
    <tr>
    <td>store</td>
     <td>javascript{Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 8)}</td>
    <td>myRandomString</td>
    </tr>
    
        7
  •  1
  •   bast    15 年前

    我对函数GeneratorDomainString做了一些改进。

    function generateRandomString( length, chars ) { var string=prompt("Please today's random string",''); if (string == '') {for ( var i = 0 ; i < length ; i++ ) string += chars[ Math.floor( Math.random() * chars.length ) ]; return string;} else { return string;} }

        8
  •  1
  •   n00begon Priidu Neemre    13 年前

    我的扩展将允许用户使用lorem ipsum文本填充变量。有许多可配置的选项,它已经变成了一个漂亮的小命令。您可以执行“5个单词| wordcaps | nomarks”之类的操作来生成5个lorem ipsum单词,所有单词都大写,没有标点符号。

    full codebase here

    如果你看一下代码,你就会知道如何构建类似的功能。

        9
  •  0
  •   lhoess    14 年前

    这里是gmail示例的另一个变体:

    <tr>
      <td>runScript</td>
      <td>emailRandom=document.getElementById('email');console.log(emailRandom.value);emailRandom.value=&quot;myEmail+&quot; + Math.floor(Math.random()*11111)+ &quot;@gmail.com&quot;;</td>
     <td></td>
    </tr>
    
        10
  •  0
  •   Community Mohan Dere    9 年前

    • (1) 在某个字段中输入任意值
    • (2) 选择要在特定HTML表单中测试的任何字段

    您询问如何使用Selenium IDE在字段中输入一些随机值,其他人回答您如何使用Selenium RC在字段中生成和输入随机值。这属于测试阶段(1):“为某个字段输入任何值”。

    以下是执行阶段(2)和(3)的步骤:

    • 创建HTML字段的列表,以便可以轻松地遍历它们
    • 创建一个随机变量来控制步骤,例如RAND_步骤
    • 创建一个随机变量来控制字段,例如RAND_字段
    • [最终,创建一个随机变量来控制输入到某个字段中的值,例如RAND_value,如果您想执行第(1)阶段的操作]
    • 现在,在模糊算法中,首先迭代RAND_步骤的值,然后每次迭代,迭代RAND_字段,最后迭代RAND_值。

    my other answer 关于模糊测试、硒和白/黑盒测试

        11
  •  0
  •   djangofan    13 年前

    Math.random可能“足够好”,但在实践中 通常比Math.random()更可取。使用Math.random,您得到的数字实际上可能不是完全随机的。《有效Java第二版》一书在第47项中介绍了这一点。

        12
  •  0
  •   andrew lorien    9 年前

    还有一个解决方案,我已经复制并粘贴到数百个测试中:

    <tr>
        <td>store</td>
        <td>javascript{var myDate = new Date(); myDate.getFullYear()+&quot;-&quot;+(myDate.getMonth()+1)+&quot;-&quot;+myDate.getDate()+&quot;-&quot;+myDate.getHours()+myDate.getMinutes()+myDate.getSeconds()+myDate.getMilliseconds();}</td>
        <td>S_Unique</td>
    </tr>
    <tr>
        <td>store</td>
        <td>Selenium Test InternalRefID-${S_Unique}</td>
        <td>UniqueInternalRefID</td>
    </tr>
    <tr>
        <td>store</td>
        <td>Selenium Test Title-${S_Unique}</td>
        <td>UniqueTitle</td>
    </tr>
    <tr>
        <td>store</td>
        <td>SeleniumEmail-${G_Unique}@myURL.com</td>
        <td>UniqueEmailAddress</td>
    </tr>
    

    每个测试套件从设置一系列变量开始(如果它是一个大套件,请使用一个单独的文件,如Set_variables.html)。然后,可以在整个套件中使用这些变量来设置、测试和删除测试数据。由于变量使用的是日期而不是随机数,您可以通过查找共享日期的对象来调试测试套件。