6

これは、 Selenium IDE HTML Tests の JavaScript 関数に従って可能である必要があります。

<tr>
    <td>storeEval</td>
    <td>function(input) {return input.replace('foo', 'bar');}</td>
    <td>replaceText</td>
</tr>
<tr>
    <td>storeEval</td>
    <td>replaceText('foo')</td>
    <td>var</td>
</tr>

代わりに、次の例外が発生します。

function statement requires a name

名前を付けた後、ステートメントが実行されます。

<tr>
    <td>storeEval</td>
    <td>function replaceText(input) {return input.replace('foo', 'bar');}</td>
    <td>replaceText</td>
</tr>

しかし、次の行では定義が見つかりません。

replaceText is not defined

また、関数の代わりに変数を参照しようとしました:

<tr>
    <td>storeEval</td>
    <td>${replaceText}('foo')</td>
    <td>var</td>
</tr>

しかし、明らかにそれはまだ定義されていません:

null is not a function

私も無名関数を作ってみました:

<tr>
    <td>storeEval</td>
    <td>(function (input) {return input.replace('foo', 'bar')})</td>
    <td>replaceText</td>
</tr>

かっこを付けて実行します。

<tr>
    <td>storeEval</td>
    <td>(${replaceText})('foo')</td>
    <td>var</td>
</tr>

エラー:

missing ) in parenthetical 

なし:

<tr>
    <td>storeEval</td>
    <td>${replaceText}('foo')</td>
    <td>var</td>
</tr>

エラー:

missing ; before statement
4

4 に答える 4

1

Katranci の回答は非常に役に立ちましたが、for ループを追加すると、変数のスコープが失われます。window.eval() 内で Katranci のソリューションを使用して終了しました。

window.eval('(function() { var trs = document.querySelectorAll(".my-list table tbody tr"); for (var x in trs) { var trc = trs[x].childNodes; for (var y in trc) { var html = trc[y].innerHTML; if (typeof html != "undefined" && html.match(/Selenium Testing/)) { return trs[x].className.replace(" lastrow", "");     }   } } } )();');

この状況では、'Selenium Testing' という接頭辞が付いたテスト エントリを作成し、このコードを使用して後続のテスト ケースでそれらを識別しています。これはたまたま jquery のないページです。

于 2014-09-17T18:47:13.753 に答える
1

上記でテストしましたが、「[エラー] 例外がスローされました:引数リストの後に ) がありません」というエラーが表示されたので、「${searchText}」を「storedVars['searchText']」に変更します。問題ありません:)

ps:JavaScript は、スクリプトと非スクリプト (通常は式) の 2 種類の Selenese パラメータで使用できます。ほとんどの場合、Selenese パラメーターとして使用される JavaScript スニペット内のテスト ケース変数にアクセスおよび/または操作する必要があります。テスト ケースで作成されたすべての変数は、JavaScript 連想配列に格納されます。連想配列には、連続した数値インデックスではなく文字列インデックスがあります。テスト ケースの変数を含む連想配列は、storedVars という名前です。JavaScript スニペット内の変数にアクセスまたは操作する場合は常に、それを storedVars['yourVariableName'] として参照する必要があります。

http://www.seleniumhq.org/docs/02_selenium_ide.jsp#store-commands-and-selenium-variables

于 2013-11-24T09:08:09.920 に答える