如何在Selenium IDE中创建自定义函数?

l0b*_*0b0 5 javascript selenium-ide

根据Selenium IDE HTML测试中的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>
Run Code Online (Sandbox Code Playgroud)

相反,我得到以下异常:

function statement requires a name
Run Code Online (Sandbox Code Playgroud)

给它起一个名字后,语句运行:

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

但是下一行无法找到定义:

replaceText is not defined
Run Code Online (Sandbox Code Playgroud)

我也尝试引用变量而不是函数:

<tr>
    <td>storeEval</td>
    <td>${replaceText}('foo')</td>
    <td>var</td>
</tr>
Run Code Online (Sandbox Code Playgroud)

但是显然它仍然是未定义的:

null is not a function
Run Code Online (Sandbox Code Playgroud)

我也尝试做一个匿名函数

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

并用括号运行它:

<tr>
    <td>storeEval</td>
    <td>(${replaceText})('foo')</td>
    <td>var</td>
</tr>
Run Code Online (Sandbox Code Playgroud)

错误:

missing ) in parenthetical 
Run Code Online (Sandbox Code Playgroud)

没有:

<tr>
    <td>storeEval</td>
    <td>${replaceText}('foo')</td>
    <td>var</td>
</tr>
Run Code Online (Sandbox Code Playgroud)

错误:

missing ; before statement
Run Code Online (Sandbox Code Playgroud)

kat*_*nci 3

您需要的是一个自动执行的匿名函数

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

请注意,您还可以使用变量作为参数:

<tr>
    <td>store</td>
    <td>'foo'</td>
    <td>searchText</td>
</tr>
<tr>
    <td>storeEval</td>
    <td>(function(input) {return input.replace(input, 'bar');})(${searchText})</td>
    <td>replaceText</td>
</tr>
Run Code Online (Sandbox Code Playgroud)