使用Selenium IDE解析查询字符串值的URL

时间:2009-09-03 20:44:18

标签: selenium integration-testing

我是集成测试的新手,但到目前为止,使用Se:IDE创建了一套测试,取得了很大的成功。因为我一直在运行我的测试,我发现我正在生成大量数据,而且我想在自己之后进行清理。

我的大多数测试都涉及创建一个新的“页面”,并且查询字符串中提供了id。我想让Se:IDE存储一个查询字符串值并将其传递给另一个调用delete方法的页面,以便在我运行验证后进行整理。

我看到我可以使用命令storeLocation,但我不确定如何解析查询字符串中id的值,然后使用Open将其传递给另一个页面。

我是否已达到需要将测试迁移到c#的程度,或者是否可以使用IDE?

3 个答案:

答案 0 :(得分:5)

如果您将所有测试用例保存在同一个测试套件中。他们可以毫无问题地在执行之间共享变量。 因此,您所要做的就是存储所需的值:

storeLocation | variable | |

在将来的测试中,您必须使用以下变量:

open | ${variable} | |

注意:有关测试套件的更多信息,请查看: http://seleniumhq.org/docs/03_selenium_ide.html#writing-a-test-suite

更新

现在,您可以使用javascript正则表达式从变量中获取子字符串:

storeEval | reg = /substring pattern/;reg.exec(${variable}) | substring
open | ${substring} | |

示例

store | "012la4la" | a
storeEval | re = /[0-3]*la/;re.exec(${a}) | new
echo | ${new} | 

输出

[info] echo: 012la 

答案 1 :(得分:3)

我在工作中遇到了类似的问题,这个Q& A博客帮了我很多忙。在我的例子中,我不得不从aspx URL中剥离查询字符串参数,并验证它们的存在。

我使用了2阶段过滤方法进行验证 (1)storeLocation,storeEval和verifyExpression。 (2)验证HTMLMLsource和globbing字符串

<tr>
    <td>verifyLocation</td>
    <td>http://qa.clockstock.com/confirmation.aspx?exrc=90210&amp;csrc=</td>
    <td></td>
</tr>
<tr>
    <td>storeLocation</td>
    <td>urlconf</td>
    <td></td>
</tr>
<tr>
    <td>echo</td>
    <td>${urlconf}</td>
    <td></td>
</tr>
<tr>
    <td>storeEval</td>
    <td>storedVars['urlconf'].indexOf('exrc=90210');</td>
    <td>exrcurlconf</td>
</tr>
<tr>
    <td>verifyExpression</td>
    <td>javascript{(storedVars['CIDurlconf']&gt;0)}</td>
    <td>true</td>
</tr>
<tr>
    <td>storeEval</td>
    <td>storedVars['urlconf'].indexOf('csrc=');</td>
    <td>CSRCurlconf</td>
</tr>
<tr>
    <td>verifyExpression</td>
    <td>javascript{(storedVars['CSRCurlconf']&gt;0)}</td>
    <td>true</td>
</tr>
<tr>
    <td>verifyHtmlSource</td>
    <td>glob:*confirmation.aspx*exrc=90210*csrc=*</td>
    <td></td>
</tr>

答案 2 :(得分:2)

从查询字符串中提取id参数的快速示例如下:

storeLocation | myLocation
store | javascript{ storedVars['myLocation'].substring(storedVars['myLocation'].indexOf('id=')+3, storedVars['myLocation'].length); } | idValue

这假设id参数是查询字符串中的最后一个。如果不是那么你可能最好将位置拆分为'&amp;'并在结果数组中循环'id'参数值。