2010-06-15 84 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開始)。