-1

サイトでのユーザーのアクションのシミュレーションの小さな問題を解決する必要があります。特定のタグを選択してから、「OK」ボタンを押すことを模倣します。タグ付きの行がいくつかあるので、jQuery を使用して for ループで行うことにしました。しかし、このコードは最初の反復でのみ機能します (しかし、かなりうまく機能します - 数値が変化し、次に alert('gooood-goood') が表示されます)。

興味深いことに、ループが継続し、vars 'option' と 'select' が適切に割り当てられ、2 番目のボタンの alert() も表示され、イベント onclick が機能したことを示していますが、2 番目の行のタグはゼロのままで、simulate はありませんでした。実際のonclickイベントの。このコードは、サイクルのすべてのループで動作することを拒否しているように見えましたが、最初のループでした。

最終的な目標 - ユーザーをシミュレートし、JavaScript で正確に解決する必要はありません。ループ内に動的に変化するパラメーターがあります。Selenium IDE が答えになるかもしれませんが、ループ内のいくつかのロジックと変更されたパラメーターで動作する必要があります。

ここに 2 つのリストがあります: script と html で、スクリプトを実行する必要があります。

<table>
  <tr>
    <td id="c10">
      <select name="c0">
        <option value="0" selected>0</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
        <option value="9">9</option>
      </select>
    </td>
    <td id="c11">
      <select name="c1">
        <option value="0" selected>0</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
        <option value="9">9</option>
      </select>
    </td>
    <td id="c12">
      <input value="OK" type="button" onclick="alert('gooood-goood')" />
    </td>
  </tr>
  <tr>
    <td id="c20">
      <select name="c0">
        <option value="0" selected>0</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
        <option value="9">9</option>
      </select>
    </td>
    <td id="c21">
      <select name="c1">
        <option value="0" selected>0</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</optiaon>
        <option value="8">8</option>
        <option value="9">9</option>
      </select>
    </td>
    <td id="c22">
      <input value="OK" type="button" onclick="alert('gooood-goood')" />
    </td>
  </tr>
</table>

そしてスクリプト

function foo() {
  alert('inside');

  var comb = rand(10, 99) + '', row = 1, col = 0;

  for (; row <= 2; row++) {
    for (; col <= 1; col++) {
      var select = '#c' + row + col + ' select[name=c' + col + ']';
      var option = "#c" + row + col + " select option[value=" + comb[col] + "]";

      $(select).change(function () {
        $(option).prop('selected', true);
      });

      $(select).change();

      if (col == 1) {
        var i = col + 1;
        $('#c' + row + i + ' input').click();
      }
    }

    col = 0;
    comb = rand(10, 99);
  }
}

$(function () {
  document.getElementById('done').onclick = foo;
});


function rand(min, max) { // Generate a random integer
  if (max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
  } else {
    return Math.floor(Math.random() * (min + 1));
  }
}

更新

何をしたかわかりませんが、現在は機能しています。同じコード:/

4

2 に答える 2

0

あなたのコードで:

>  var option = "#c"+ row + col + " select option[value=" + comb[col] + "]";
> 
>  $(select).change(function(){
> 
>    $(option).prop('selected', true);
>  });

変更関数の変数オプションは、外側のオプション変数へのクロージャーを持っているため、値は、ループが終了したときのオプションであったものになりますcomb[col]6

 "#c21 select option[value=6]";

ところで、コームから数字を選択する方法は、インデックスによる文字列文字へのアクセスを許可しないブラウザー (少なくとも IE の一部のバージョン) では失敗し、rand関数が 0 から 9 までの数値を返すだけでよいことを意味します。包括的。

次のようなものを使用して、最初の問題を解決できます。

comb.substring(1,2)

また

 comb.charAt(1)

これにより、何をしているのかがより明確になります。

代わりに、フォーム コントロールを取得し、テーブル構造とは関係なく、それらを反復処理することを検討しましたか? それは非常に簡単です。

于 2012-08-31T06:55:12.787 に答える
0

さて、私は今気づきました。comb = rand(10, 99);最初の繰り返しの後、文字列ではなくなりました。

それを直せばいいだけcomb = rand(10, 99) + '';

于 2012-08-31T12:34:39.363 に答える