0

我想使用 selenium IDE 1.10.0 gotoIf但我不知道如何编写一个比较 2 个变量是否相等的 if 语句。

编辑:我正在使用流控制插件 1.0.4,它提供了包括 gotoIf 在内的额外命令。从http://seleniumhq.org/download/上的 IDE 插件下载

    <tr>
    <td>store</td>
    <td>123</td>
    <td>x</td>
</tr>
<tr>
    <td>store</td>
    <td>123</td>
    <td>y</td>
</tr>
<tr>
    <td>echo</td>
    <td>javascript{storedVars.x}</td>
    <td></td>
</tr>
<tr>
    <td>gotoIf</td>
    <td>javascript{storedVars.x == storedVars.y}</td>
    <td>Yes</td>
</tr>
<tr>
    <td>label</td>
    <td></td>
    <td>No</td>
</tr>
<tr>
    <td>label</td>
    <td></td>
    <td>Yes</td>
</tr>

我尝试了以下表达式:

javascript{storedVars.x == storedVars.y}
javascript{storedVars["x"] == storedVars["y"]}
javascript{(storedVars.x == storedVars.y);}
storedVars.x == storedVars.y
${storedVars.x == storedVars.y}
${x} == ${y}
"${x}" == "${y}"
'${x}' == '${y}'
"${x} == ${y}"

(and also)
javascript{(true == true);}
javascript{true == true}

都抛出相同的错误:

[error] Unexpected Exception: fileName -> chrome://flowcontrol/content/extensions/goto-sel-ide.js?1358766136404, lineNumber -> 120, columnNumber -> 0

有任何想法吗?谢谢,皮特

EDIT2:我一直无法让流量控制 IDE 插件工作。在 Michael 的建议下,我尝试使用 sideflow.js 用户扩展。

使用 sideflow.js,我尝试了以下表达式:

'${x}'=='${y}'
${x}==${y}
'${x}'=='123'

都抛出相同的错误:

[error] Unexpected Exception: fileName -> chrome://selenium-ide/content/tools.js -> file:///U:/Code/Selenium/sideflow.js?1360682689170, lineNumber -> 86, columnNumber -> 0

但是以下表达式可以正常工作:

${x}!=${y}
${x}<${y}
${x}>${y}

== 运算符似乎存在问题...

4

3 回答 3

0

请注意变量和文本周围的单引号。这也花了我一段时间。但是不确定是否需要使用 javascript 片段,它需要如何格式化。

<tr>
    <td>storeValue</td>
<td>id=id_one_off_byline</td>
<td>oneoff</td>
</tr>

<tr>
    <td>gotoIf</td>
    <td>'${oneoff}' == 'Jeff'</td>
    <td>Jeff</td>
</tr>

我相信在每个商店变量请求之后都必须使用 runscript。我可能错了,但在我看来,这实际上是触发对 sideflow.js 的调用以执行其功能的原因。我从我自己试图解决我的问题的试验和错误中推断出这一点。对于整数,以下代码对我有用。使用 == 它评估为 true,并转到正确的标签。

   <tr>
<td>store</td>
    <td>458772</td>
    <td>x</td>
</tr>
<tr>
    <td>gotoLabel</td>
    <td>target1</td>
    <td></td>
</tr>
<tr>
    <td>runScript</td>
    <td>alert(&quot;This should not appear&quot;)</td>
    <td></td>
</tr>
<tr>
    <td>label</td>
    <td>target1</td>
    <td></td>
</tr>
<tr>
    <td>store</td>
    <td>458772</td>
<td>y</td>
</tr>
<tr>
    <td>gotoIf</td>
    <td>${y} == ${x}</td>
<td>target2</td>
</tr>
<tr>
    <td>runScript</td>
    <td>alert(&quot;This should not appear&quot;)</td>
    <td></td>
</tr>
<tr>
    <td>label</td>
    <td>target2</td>
    <td></td>
</tr>
于 2013-02-09T06:26:57.480 回答
0

如果您只需要比较两个变量,则使用命令 verifyExpression

存储值|id=id1|var1

存储值|id=id2|var2

验证表达式|${var1}|${var1}

如果两个变量匹配,则不会抛出错误,否则不会抛出错误。

谢谢

于 2013-02-12T16:47:09.647 回答
0

Selenium IDE 不提供对值进行操作的方法(如果有),您需要运行 WebDriver 并使用编程语言来提供该功能。但是在 IDE 中,如果值不相等,您可以使用任何assert变体停止测试。但是,我发现断言不能可靠地中止测试。

比较两个存储值的一种方法:

<tr>
    <td>storeValue</td>
    <td>id=value1</td>
    <td>val1</td>
</tr>
<tr>
    <td>storeValue</td>
    <td>id=value2</td>
    <td>val2</td>
</tr>
<tr>
    <td>assertEval</td>
    <td>storedVars['val1']</td>
    <td>${val2}</td>
</tr>
<tr>
    <td>echo</td>
    <td>Yay</td>
    <td></td>
</tr>

如果值相同,assertEval则返回 true 并继续测试,否则返回 false 并中止测试。

如果您只想知道值是否相同,您可以使用verifyEval,IDE 将根据结果标记评估,测试将继续正常进行。

于 2013-02-07T23:57:53.947 回答