t.me/atinfo_chat Telegram группа по автоматизации тестирования

Select


(Julia87) #1

Подскажите пожалуйста в чем может быть причина) На странице есть три выпадающих списка- Request Source, User Assignment, Work Item.

Но похоже что они реализованы как одной таблицей...Получается когда селениум начинает выбирать из списка значение то в двух полях он с горем пополам выбирает а в последнем никак не хочет хотя проходит без ошибки, когда я смотрю ход выполнения то получается что при переходе на последний выпадающий список-предыдущий не закрывается или вобще все развернуты списки,скоре всего это связано с тем что оно реализовано как одна таблица.

Вот код кусочка где это сделано:

<div class="fieldset">

    <table cellpadding="0" cellspacing="0" border="0" style="table-layout: fixed;">

        <tbody><tr>

            <td class="editor-label" style="width: 90px;">

                <label for="RequestSourceId">Request Source</label>

            </td>

            <td class="editor-field" style="width: auto">

                <div class="t-widget t-dropdown t-header" id="RequestSourceId" style="width:100%" tabindex="0">

<div class="t-dropdown-wrap t-state-default">

<span class="t-input">&lt; Not defined &gt;</span>

<span class="t-select">

<span class="t-icon t-arrow-down">select</span>

</span>

</div><input id="RequestSourceId-value" name="RequestSourceId" style="display:none" type="text" value="-1"></div>

            </td>

            <td class="editor-label" style="width: 80px;">

                <label for="RequestTypeId">Work Item</label>

            </td>

            <td class="editor-field">

                <div class="t-widget t-dropdown t-header" id="RequestTypeId" style="width:100%" tabindex="0">

<div class="t-dropdown-wrap t-state-default">

<span class="t-input">&lt; Not defined &gt;</span>

<span class="t-select"><span class="t-icon t-arrow-down">select</span>

</span>

</div>

<input id="RequestTypeId-value" name="RequestTypeId" style="display:none" type="text" value="-1"></div>

  </td>

        </tr>

        <tr>

            <td class="editor-label" style="width: 90px;">

                <label for="UserAssignmentId">User Assignment</label>

            </td>

            <td class="editor-field" style="width: auto">

                <div class="t-widget t-dropdown t-header" id="UserAssignmentId" style="width:100%" tabindex="0">

<div class="t-dropdown-wrap t-state-default">

<span class="t-input">&lt; Not defined &gt;</span>

<span class="t-select">

<span class="t-icon t-arrow-down">select</span>

</span>

</div><input id="UserAssignmentId-value" name="UserAssignmentId" style="display:none" type="text" value="-1"></div>

            </td>

            <td class="editor-label" style="width: 80px;">

                &nbsp;

            </td>

            <td class="editor-field">

                &nbsp;

            </td>

        </tr>

    </tbody></table>

</div>

Вот как прописано в селениуме:

<tr>
    <td>waitForTable</td>
    <td>css=div.fieldset &gt; table.0.1</td>
    <td>&lt; Not defined &gt;select</td>
</tr>
<tr>
    <td>verifyElementPresent</td>
    <td>//form[@id='SelectRequestTypeForm']/div/table/tbody/tr/td[4]</td>
    <td></td>
</tr>
<tr>
    <td>click</td>
    <td>css=#RequestTypeId &gt; div.t-dropdown-wrap.t-state-default &gt; span.t-select &gt; span.t-icon.t-arrow-down</td>
    <td></td>
</tr>
<tr>
    <td>click</td>
    <td>//div[3]/div/ul/li[4]</td>
    <td></td>
</tr>
<tr>
    <td>click</td>
    <td>//div[3]/div/ul/li[4]</td>
    <td></td>
</tr>
<tr>
    <td>verifyElementPresent</td>
    <td>//form[@id='SelectRequestTypeForm']/div/table/tbody/tr[2]/td[2]</td>
    <td></td>
</tr>
<tr>
    <td>click</td>
    <td>css=#UserAssignmentId &gt; div.t-dropdown-wrap.t-state-default &gt; span.t-select &gt; span.t-icon.t-arrow-down</td>
    <td></td>
</tr>
<tr>
    <td>click</td>
    <td>//div[3]/div/ul/li[3]</td>
    <td></td>
</tr>
<tr>
    <td>click</td>
    <td>//div[3]/div/ul/li[3]</td>
    <td></td>
</tr>
<tr>
    <td>click</td>
    <td>css=div.t-dropdown-wrap.t-state-default</td>
    <td></td>
</tr>
<tr>
    <td>click</td>
    <td>//div[3]/div/ul/li[4]</td>
    <td></td>
</tr>
<tr>
    <td>click</td>
    <td>//div[3]/div/ul/li[4]</td>
    <td></td>
</tr>
<tr>
    <td>verifyElementPresent</td>
    <td>css=div.formButtonsContainer</td>
    <td></td>
</tr>


(Mykhailo Poliarush) #2

подскажите на каком шаге ошибка в вашем тесте?


(Julia87) #3

это трудно обьяснить) получается что код проходит без ошибки, но два списка открывается нормально и из них выбирается нужное значение, а когда открывается последний список, получается что вместе с ним почему то одновременно открывается и предыдущий список-в итоге ничего в последнем списке не выбирается(


(Mykhailo Poliarush) #4

кстати, вполне может быть что первый списко заслоняет последний, 

а попробуйте выбирать данные с начала в третьем, потом в втором, а потом в первом списке.


(Julia87) #5

Я так и делаю но проблема в следующем))))Дело в том, что эти списки расположены в следующем порядке----список2 находится под списком1, а список3 напротив списка1-и действительно если заполнять сначало 1 -то он перекрывает второй(так как почему то не закрывается после выбора значения) и так же само если наоборот-сначало 2 потом 1. Такая же ситуация происходит с последовательностью 1-3 или 3-1.Какое я решение придумала на первое время(не судите строго)))))) На той странице необходимо заполнить эти три поля и нажать кнопку "Далее".Соответственно, если не ввести в одном из полей значение и нажать кнопк Далее-сработает валидация. Я вначале заполняю список 3, потом 2, потом нажимаю Далее и только после этого возможно заполнение первого списка. Просто хотелось бы знать как правильно реализовать такое заполнение)


(Mykhailo Poliarush) #6

правильно можно сказать, если увидеть конечную страницу

так тежело советовать, так как ситуаций разных очень много и в чем тут проблема не извесно

но если у вас работает, то как минимум у вас уже есть рабочий вариант, надо которым можно дальше работать.


(mbeider) #7

The problem that developers using same id for different elements in DOM. You request for element always coming to first one webdriver found in DOM. Try to make you xpath more complicated in order to find right element