使用Selenium IDE随机值
是否可以使用Firefox插件创buildSeleniumtesting,该插件使用随机生成的值来帮助进行回归testing?
完整的故事:我想帮助我的客户做验收testing,为他们提供一套testing,使用一些智能为数据库创build随机(或至less是伪随机)值。 我的Selenium IDEtesting目前的问题之一是它们有预定义的值 – 这使得某些types的testing有问题。
首先,Selenium IDE是相当有限的,您应该考虑切换到Selenium RC,它可以由Java或Perl或Ruby或其他语言驱动。
仅使用Selenium IDE,您可以embeddedJavaScriptexpression式来派生命令参数。 您应该能够在文本字段中键入一个随机数字,例如:
type fieldName javascript{Math.floor(Math.random()*11)}
更新:您可以在名为“user-extensions.js”的文件中定义助手函数。 请参阅Selenium参考 。
(基于Thilo答案)你可以混合文字和随机数字,如下所示:
javascript{"joe+" + Math.floor(Math.random()*11111) + "@gmail.com";}
Gmail可以自动使用别名的所有内容,例如, joe+testing@gmail.com
将转到您的地址joe@gmail.com
乘以* 11111给你更多的随机值比1至9(以Thilo为例)
你可以添加用户exentions.js来获得随机值。
复制下面的代码并将其保存为.js扩展名(randomgenerator.js)并将其添加到Selenium核心扩展(SeleniumIDE – > Options —> general选项卡)
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个字符的string,它分配给variablesx
HTML格式的代码如下所示:
<tr> <td>randomString</td> <td>6</td> <td>x</td> </tr> <tr> <td>type</td> <td>username</td> <td>${x}</td> </tr>
下面是一个在JS中生成随机string的单行解决scheme:
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split("").filter(function(e, i, a) { return Math.random() > 0.8 }).join("")
用于粘贴到Selenium IDE中。
从一小组替代品中随机select一个单行
javascript{['brie','cheddar','swiss'][Math.floor(Math.random()*3)]}
<tr> <td>store</td> <td>javascript{Math.random().toString(36).replace(/[^az]+/g, '').substr(0, 8)}</td> <td>myRandomString</td> </tr>
我对函数generateRandomString做了一点改进。 当FF崩溃时,能够再次使用相同的随机数是很好的。
基本上,它会要求你自己input一个string。 如果你不input任何东西,它会生成它。
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;} }
在理解上面RajendraChary的post的同时,我花了一些时间写一个新的Selenium IDE扩展。
我的扩展将让用户用lorem ipsum文本填充一个variables。 有很多可configuration的选项,它变成了一个很好的小命令。 你可以做一些像“5 words | wordcaps | nomarks”的东西来生成5个lorem ipsum单词,全部大写,没有标点符号。
我已经详细解释了安装和使用情况,并提供了完整的代码库
如果您仔细阅读代码,您将会了解如何构build类似的function。
这里是gmail示例的另一个变体:
<tr> <td>runScript</td> <td>emailRandom=document.getElementById('email');console.log(emailRandom.value);emailRandom.value="myEmail+" + Math.floor(Math.random()*11111)+ "@gmail.com";</td> <td></td> </tr>
Selenium RC给你比Selenium IDE更多的自由,你可以:
- (1)input任何值到某个字段
- (2)select任何一个字段来testing一个特定的HTML表单
- (3)select任何执行顺序/步骤来testing某一组字段。
你问如何使用Selenium IDE在一个字段中input一些随机值,其他人已经回答了你如何使用Selenium RC在字段中生成和input随机值。 这属于testing阶段(1):“input任何值到某个领域”。
使用Selenium RC,您可以轻松完成阶段(2)和(3):通过使用支持的语言(如Java,PHP,CSharp,Ruby,Perl,Python)进行编程,在任何执行步骤下testing任何字段。
以下是做阶段(2)和(3)的步骤:
- 创build您的HTML字段的列表,以便您可以轻松地遍历它们
- 创build一个随机variables来控制这个步骤,比如说RAND_STEP
- 创build一个随机variables来控制字段,比如说RAND_FIELD
- [最后,创build一个随机variables来控制input到某个字段的值,比如说RAND_VALUE,如果你想做phase(1)]
- 现在,在你的模糊algorithm中,首先遍历RAND_STEP的值,然后每次迭代,遍历RAND_FIELD,最后遍历RAND_VALUE。
看到我关于模糊testing,selenium和白盒/黑盒testing的其他答案
Math.random可能“足够好”,但在实践中, Random类通常比Math.random()更可取。 使用Math.random,你得到的数字可能实际上不是完全随机的。 “有效Java第二版”一书包含在第47项中。
还有一个解决scheme,我已经复制并粘贴到数百个testing中:
<tr> <td>store</td> <td>javascript{var myDate = new Date(); myDate.getFullYear()+"-"+(myDate.getMonth()+1)+"-"+myDate.getDate()+"-"+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>
每个testing套件首先设置一系列variables(如果它是一个大套件,则使用像Set_Variables.html这样的单独文件)。 然后可以在整个套件中使用这些variables来设置,testing和删除testing数据。 由于variables使用date而不是随机数,因此可以通过查找共享date的对象来debuggingtesting套件。