web-dev-qa-db-ja.com

Selenium IDEをランダムな値で使用する

ランダムに生成された値を使用して回帰テストを行うFirefoxプラグインを使用してSeleniumテストを作成することはできますか?

詳細:データベースのランダムな(または少なくとも擬似ランダムな)値を作成するために、いくつかのスマートを使用する一連のテストを提供することで、クライアントが受け入れテストを行うのを支援したいと思います。私のSelenium IDEテストの現時点での問題の1つは、それらが事前定義された値を持っていることです。

45
Toby Hede

まず、Selenium IDEはかなり制限されています。SeleniumRCへの切り替えを検討する必要があります。これは、JavaまたはPerlまたはRubyまたはその他の言語。

Selenium IDEのみを使用して、JavaScript式を埋め込み、コマンドパラメーターを導出できます。次の例のように、テキストフィールドに乱数を入力できるはずです。

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

更新:「user-extensions.js」というファイルにヘルパー関数を定義できます。 Selenium Reference を参照してください。

48
Thilo

(Thiloの回答に基づく)このようにリテラルと乱数を混在させることができます:

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

Gmailでは、エイリアスを使用するすべてのもの、たとえば[email protected]はあなたの住所に行きます[email protected]

* 11111を乗算して、1〜9よりもランダムな値を与えます(Thiloの例)

30
corbacho

ユーザー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文字の文字列を生成し、変数xに割り当てます

HTML形式のコードは次のようになります。

<tr>
    <td>randomString</td>
    <td>6</td>
    <td>x</td>
</tr>
<tr>
    <td>type</td>
    <td>username</td>
    <td>${x}</td>
</tr>
21
RajendraChary

JSでランダムな文字列を生成する1行のソリューションを次に示します。

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

Selenium IDEに貼り付けるのに便利です。

5
afternoon
<tr>
<td>store</td>
 <td>javascript{Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 8)}</td>
<td>myRandomString</td>
</tr>
2

少数の選択肢からランダムに選択するためのワンライナー:

javascript{['brie','cheddar','swiss'][Math.floor(Math.random()*3)]}
2
TomG

関数generateRandomStringを少し改善しました。 FFがクラッシュした場合、同じ乱数を再び使用できるようになると便利です。

基本的には、文字列を自分で入力するように求められます。何も入力しないと、生成されます。

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;} }

1
bast

上記のRajendraCharyの投稿を理解しながら、新しいSelenium IDE=拡張機能を作成するのに少し時間を費やしました。

私の拡張機能により、ユーザーは変数にlorem ipsumテキストを入力できます。多くの設定可能なオプションがあり、それは素敵な小さなコマンドに変わりました。 「5ワード|ワードキャップ|ノーマーク」などの操作を行うと、句読点なしで、すべて大文字で5つのlorem ipsumワードを生成できます。

完全なコードベースはこちら を提供するだけでなく、インストールと使用方法を徹底的に説明しました。

コードを覗いてみると、同様の機能を構築する方法がわかります。

1
agileadam

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>
0
lhoess

Math.randomは「十分」ですが、実際には、Math.random()よりもランダムクラスの方が望ましい場合があります。 Math.randomを使用すると、取得する数値は実際には完全にランダムではない場合があります。本「Effective Java Second Edition」は、アイテム#47でこれをカバーしています。

0
djangofan

数百のテストにコピーして貼り付けたもう1つのソリューション:

<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のような個別のファイルを使用します)。これらの変数をスイート全体で使用して、テストデータを設定、テスト、および削除できます。また、変数は乱数ではなく日付を使用するため、日付を共有するオブジェクトを探すことでテストスイートをデバッグできます。

0
andrew lorien

Selenium RCは、次のことができるという点で、Selenium IDEよりもはるかに自由度が高くなります。

  • (1)特定のフィールドに任意の値を入力します
  • (2)特定のHTMLフォームでテストするフィールドを選択します
  • (3)実行順序/ステップを選択して、特定のフィールドセットをテストします。

Selenium IDEを使用してフィールドにランダムな値を入力する方法を尋ねましたが、Selenium RCを使用してフィールドにランダムな値を生成して入力する方法について他の人から回答がありました。テスト段階(1)に分類されます:「特定のフィールドに任意の値を入力してください」。

Selenium RCを使用すると、フェーズ(2)および(3)を簡単に実行できます。Java、PHP、CSharp、Ruby、Perl、Pythonなどのサポートされている言語でプログラミングを行うことにより、任意の実行ステップでフィールドをテストできます。

フェーズ(2)および(3)を実行する手順は次のとおりです。

  • HTMLフィールドのリストを作成して、それらを簡単に反復できるようにします
  • ランダム変数を作成して、ステップを制御します(Rand_STEPなど)
  • Rand_FIELDなど、フィールドを制御するランダム変数を作成します
  • [最終的に、フェーズ(1)を実行する場合は、Rand_VALUEなどの特定のフィールドに入力される値を制御するランダム変数を作成します]
  • ここで、ファジングアルゴリズム内で、最初にRand_STEPの値を反復処理し、次にそのような各反復で、Rand_FIELDを反復処理し、最後にRand_VALUEを反復処理します。

my other answer ファジングテスト、Seleniumおよびホワイト/ブラックボックステストについてを参照してください。

0
CuongHuyTo