我有一个动态生成值的列表框。列表框包含月份和年份,生成时如下所示。
<select name="arr_dtm_mon_year" tabindex="150" class="input">
<option value=""></option>
<option value="NOV 09">Nov 09</option>
<option value="DEC 09">Dec 09</option>
<option value="JAN 10">Jan 10</option>
<option value="FEB 10">Feb 10</option>
<option value="MAR 10">Mar 10</option>
<option value="APR 10">Apr 10</option>
<option value="MAY 10">May 10</option>
<option value="JUN 10" selected>Jun 10</option>
<option value="JUL 10">Jul 10</option>
<option value="AUG 10">Aug 10</option>
<option value="SEP 10">Sep 10</option>
<option value="OCT 10">Oct 10</option>
</select>
默认情况下,列表框中的元素是当前月份。当我使用selenium IDE从这个列表框中选择它工作正常。以下是我用于从列表框中进行选择的示例命令。
<tr>
<td>select</td>
<td>arr_dtm_mon_year</td>
<td>label=Oct 10</td>
</tr>
<tr>
<td>select</td>
<td>arr_dtm_mon_year</td>
<td>label=May 10</td>
</tr>
现在我遇到的问题是动态生成列表框中的值。在上面的例子中,我选择了“5月10日”的选项。生成的值是前六个月的列表以及所有未来六个月的列表。
这基本上意味着如果我从现在起6个月后重新运行测试“5月10日”将无法从列表中获得。是否可以动态选择值。例如,我可以首先计算当前月份并选择当前月份为+ 1(即下个月)的值。在确定下个月的情况后,我如何构建要选择的价值。
任何帮助将不胜感激。
答案 0 :(得分:2)
您可以根据列表中的位置选择项目(零索引)。以下将选择第三项:
<tr>
<td>select</td>
<td>name=arr_dtm_mon_year</td>
<td>index=2</td>
</tr>
如果您还想知道您所选择的值的标签(或者想要用它来选择标签作为原始代码),您可以使用以下内容:
<tr>
<td>storeText</td>
<td>css=select[name=arr_dtm_mon_year] option:nth-child(3)</td>
<td>label</td>
</tr>
然后您可以按如下方式使用它:
<tr>
<td>select</td>
<td>name=arr_dtm_mon_year</td>
<td>label=${label}</td>
</tr>
希望有道理! :)
答案 1 :(得分:2)
您可以使用storeEval
计算下个月(下个月是1月的一年)。下面是一个工作示例:
<tr>
<td>storeEval</td>
<td>var months = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); var now = new Date(); if (now.getMonth() == 11) { nextMonth = new Date(now.getFullYear() + 1, 0, 1); } else { nextMonth = new Date(now.getFullYear(), now.getMonth() + 1, 1); } months[nextMonth.getMonth()] + " " + nextMonth.getFullYear().toString().slice(2);</td>
<td>label</td>
</tr>
<tr>
<td>select</td>
<td>name=arr_dtm_mon_year</td>
<td>label=${label}</td>
</tr>
请注意,这可能会使您的测试更加脆弱。它取决于系统时钟,并且可能存在无法按预期工作的边缘情况。
答案 2 :(得分:1)
我认为它适用于目标索引=有序(从0开始)。