【问题标题】:Selenium: How to use stored value in a javascript comparisonSelenium:如何在 javascript 比较中使用存储的值
【发布时间】:2011-01-07 11:31:53
【问题描述】:

我四处寻找这个问题的答案,发现了很多 更复杂的问题,但没有一个让我有足够的洞察力 解决这个问题。
我在做什么:
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 &gt; 10);</td>
   <td>isMoreThan10</td>
</tr>
<tr>
   <td>verifyExpression</td>
   <td>${isMoreThan10}</td>
   <td>true</td>
</tr>

我只是想到了一种可能的解决方法:扩展 javascript 代码以获取那里的值并将其分配给那里的变量,这样我就更有可能在 javascript 中使用该变量。不知道具体是怎么做的——有人想帮忙吗?

但肯定有更好的方法,不是吗?我必须能够为 Selenium 中的变量赋值,然后在下一行在 javascript 中使用该变量,对吧?

【问题讨论】:

    标签: javascript selenium


    【解决方案1】:

    找到了解决方案。不仅我设置 isMoreThan10 的方式错误地执行了 storeEval;我用错误的 store 调用(而不是 storeText)设置了 resultCount 错误,并且在 storeEval 中调用了 resultCount 错误。

    这是正确的做法:

    <tr>
    <td>open</td>
    <td>http://www.google.com/search?hl=en&amp;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'] &gt; 10) ? true : false</td>
    <td>isMoreThan10</td>
    </tr>
    <tr>
    <td>verifyExpression</td>
    <td>${isMoreThan10}</td>
    <td>true</td>
    </tr>
    

    感谢 AutomatedTester 建议 storeEval 中的三元分配

    【讨论】:

      【解决方案2】:

      这是一件很容易解决的事情

      <tr>
         <td>storeEval</td>
         <td>var isMoreThan10 = new Boolean(); isMoreThan10 = (resultCount &gt; 10);isMoreThan10 ;</td>
         <td>isMoreThan10</td>
      </tr>
      

      它要求你最终得到你想要的结果。如果您要使用三元组会更好,因为它不会将结果存储在您正在传递的 javascript 中的变量中。

      例如

        <tr>
             <td>storeEval</td>
             <td>(resultCount > 10) ? true : false</td>
             <td>isMoreThan10</td>
          </tr>
      

      【讨论】:

      • 您是否在我的代码中尝试过您的解决方案?它对我不起作用,但我认为我越来越接近解决方案。由于上述相同的原因,它在第 3 步仍然失败,但我可能已经找到了一种解决方法,使用另一种方法来存储和调用变量,我将立即演示。感谢您的提示!
      • 抱歉,我没有看到 resultCode 是一个变量。
      【解决方案3】:

      这种东西真的是使用TestPlan(可以同时使用Selenium和HTMLUnit作为后端运行)

      GotoURL http://www.google.com/search?hl=en&q=selenium+verifyEval
      set %Count% (response //html/body/div[5]/div/p/b[3])
      Notice Got Value %Count%
      Checkpoint numComp %Count% > 10
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-19
        相关资源
        最近更新 更多