2010-06-15 83 views
1

我有一个列表框,其值是动态生成的。列表框包含月份和年份,生成时间如下所示。从动态生成的列表框中选择日期值

<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> 

列表框中默认选中的元素是当前月份。当我使用硒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(即下个月份)的值。而且,在我确定了下个月是什么之后,我该如何建立要选择的价值。

任何帮助将不胜感激。

回答

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> 

希望是有道理的! :)

+0

是的,它非常有意义。如果它有效,那么这太棒了。我马上试试它。许多THANKs – ziggy 2010-06-15 15:27:39

+0

嗨,它完美的作品。有没有办法找出第n个项目(或索引2)中的值是当前月份加1? 谢谢 – ziggy 2010-06-15 15:59:40

+0

这是可能的,是的。由于这是一个不同的解决方案,我将它作为一个单独的答案加入。 – 2010-06-15 17:05:22

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> 

被警告,这可能会使您的测试更加脆弱。它依赖于系统时钟,并且可能会出现无法按预期工作的边缘情况。

+0

谢谢你一直非常有帮助。我需要修改它轻微得到我需要的东西,但是你给了我一个很好的开头。谢谢 – ziggy 2010-06-15 17:29:40

1

我认为它适用于目标指数=有序性(从0开始)。