Выбор значения даты из динамически генерируемого списка - PullRequest
1 голос
/ 15 июня 2010

У меня есть список, значения которого генерируются динамически.Поле со списком содержит месяцы и годы, и при создании выглядит так.

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

Теперь у меня проблема в том, что значения в списке генерируются динамически.В приведенном выше примере я выбрал опцию «10 мая».Сгенерированные значения - это список всех предыдущих шести месяцев и список всех будущих шести месяцев.

Это в основном означает, что если я перезапущу тест через 6 месяцев, "10 мая" будет недоступно из списка.Можно ли выбрать значение динамически.Например, могу ли я сначала рассчитать текущий месяц и выбрать значение с текущим месяцем + 1 (т.е. в следующем месяце).А также, как я могу построить значение, которое будет выбрано после того, как я определил, какой будет следующий месяц.

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

2 голосов
/ 15 июня 2010

Вы можете использовать storeEval для работы в следующем месяце (и год, следующий в январе - январь). Рабочий пример ниже:

<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 голосов
/ 15 июня 2010

Вы можете выбрать элемент, основываясь на его позиции в списке (с нулевым индексом). Следующее выберет третий элемент:

<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 голос
/ 30 августа 2012

Я думаю, что это работает с целевым индексом = упорядоченность (начинается с 0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...