我四处寻找这个问题的答案,发现了很多很多
更复杂的问题,但没有一个能让我有足够的洞察力
解决这个问题。
我在做什么:
1- 打开一个数字可能会很大的页面
2- 获取该数字所在的 X 路径并将其存储到变量
3- 做一个 javascript 比较上面存储的变量,看它是否大于 10,如果是,则将新变量设置为 true; else false(因为这是默认值)
4- 验证#3 中的变量是否为真
听起来很简单,不是吗?
哪里出错了:
在第 3 步,不允许将第 2 步和第 10 步的变量进行比较,至少不允许我这样写。
为什么?
详细信息:
<tr>
<td>open</td>
<td>http://www.google.com/search?hl=en&q=selenium+verifyEval</td>
<td></td>
</tr>
<tr>
<td>store</td>
<td>/html/body/div[5]/div/p/b[3]</td>
<td>resultCount</td>
</tr>
<tr>
<td>storeEval</td>
<td>var isMoreThan10 = new Boolean(); isMoreThan10 = (resultCount > 10);</td>
<td>isMoreThan10</td>
</tr>
<tr>
<td>verifyExpression</td>
<td>${isMoreThan10}</td>
<td>true</td>
</tr>
我只是想到了一个可能的解决方法:展开 javascript 代码以获取那里的值并将其分配给那里的一个变量,这样我就更有可能在 javascript 中使用该变量。不确定具体如何完成 - 有人想帮忙吗?
但肯定有更好的方法,不是吗?我必须能够在 Selenium 中为变量赋值,然后在下一行中在 javascript 中使用该变量,对吗?
最佳答案
找到解决方案。我不仅在设置 isMoreThan10 的方式上做错了 storeEval;我用错误的存储调用(而不是 storeText)设置了 resultCount 错误,并在 storeEval 中错误地调用了 resultCount。
正确的做法是:
<tr>
<td>open</td>
<td>http://www.google.com/search?hl=en&q=selenium+verifyEval</td>
<td></td>
</tr>
<tr>
<td>storeText</td>
<td>//p[@id='resultStats']/b[3]</td>
<td>resultCount</td>
</tr>
<tr>
<td>storeEval</td>
<td>(storedVars['resultCount'] > 10) ? true : false</td>
<td>isMoreThan10</td>
</tr>
<tr>
<td>verifyExpression</td>
<td>${isMoreThan10}</td>
<td>true</td>
</tr>
感谢 AutomatedTester 建议在 storeEval 中进行三元赋值
关于javascript - Selenium:如何在 javascript 比较中使用存储值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2105001/