В библиотеке RichFaces присутствует так называемый Pick List - управляющий блок, состоящий из двух списков и позволяющий перемещать элементы из левого списка в правый и обратно. См. его описание тут - http://livedemo.exadel.com/richfaces-demo/...t&tab=usage . Несмотря на внешнюю простоту, внутри себя пик-лист содержит сложную структуру из вложенных слоёв и таблиц. Притом каких-либо явных обработчиков событий в HTML-коде нет. Моя задача - с помощью Селениума выбрать элемент в левом списке, чтобы затем с помощью кнопки Copy скопировать его в правый. Вручную всё работает тривиально: кликаешь на элементе в левом списке - кнопка Copy активируется, затем нажимаешь на неё, и элемент копируется в правый список. Если же кликать селениумом (DefaultSelenium.click()), то элемент выделится только в том случае, если курсор мышки находится над тем фреймом, в котором находится тестируемая страница (в другом фрейме - данные от селениума) - в обратном случае click() не вызывает исключений (т.е. xpath валидный), но и элемент не выделится. Использование перед вызовом click() различных методов, позволяющих передать фокус на пик-лист (focus(), mouseOver(), mouseMove()), не помогло. Также не сработала попытка изменять вручную значения хидденов, которые поштучно имеются у каждого элемента списка, и которые изменяются при ручном клике на элементе. Поэтому у меня есть несколько разных вопросов: - Может, кто-либо сразу может сказать, как работает этот конкретный RichFaces Pick List? Т.е. какое именно событие срабатывает на каком именно элементе для выделения элемента списка?
- Посоветуйте какой-нибудь тул, который позволяет отследить работу JavaScript - т.е. чтобы после клика на элементе тул показал, какое событие сработало на каком элементе?
- Пик-лист создаётся как безымянный объект JavaScript следующим кодом. Могу ли я к нему как-нибудь обратиться джаваскриптом, чтобы напрямую вызвать тот метод, который должен выделять элемент по клику на нём? Если могу, то как адресовать этот безымянный объект?
Код | <script type="text/javascript">var clientId = 'j_id352'; new Richfaces.PickList( new Richfaces.PickList.Target('j_id352', 'j_id352tlInternal_tab', 'j_id352tlInternal_header_tab', 'j_id352tlFocusKeeper', undefined, Richfaces.PickList.Target.SelectItem, null, null), new Richfaces.PickList.Source('j_id352', 'j_id352internal_tab', 'j_id352internal_header_tab', 'j_id352focusKeeper', undefined, Richfaces.PickList.Source.SelectItem, null, null), "j_id352", [['copy', 'discopy'], ['copyAll', 'discopyAll'], ['remove', 'disremove'], ['removeAll','disremoveAll']], "false", "true", {onlistchanged: null, onlistchange: null, onfocus:null, onblur:null }, "j_id352valueKeeper");</script>
|
В HTML сам пик-лист выглядит следующим образом. Код | <table id="j_id352" class="rich-list-picklist" cellspacing="0" cellpadding="0"> <tbody> <tr> <td> <div class="rich-picklist-source-items"> <input id="j_id352focusKeeper" type="button" style="width: 1px; position: absolute; left: -32767px;"/> <table id="j_id352table" class="rich-picklist-body" cellspacing="0" cellpadding="0"> <tbody> <tr> <td style="border: 0px none ; padding: 0px;"> <div id="j_id352headerBox" class="rich-picklist-list"> <div id="j_id352contentBox" class="rich-picklist-list-content" style="width: 140px; height: 140px;"> <table id="j_id352internal_tab" class="rich-picklist-internal-tab" cellspacing="0" cellpadding="0" style="width: 100%;"> <tbody id="j_id352tbody"> <tr id="j_id352:source::0" class="rich-picklist-source-row"> <td class="rich-picklist-source-cell"> <img style="width: 1px; height: 1px;" alt=" " src="/richfaces-demo/a4j/g/3_3_1.GAorg/richfaces/renderkit/html/images/spacer.gif.jsf"/> Option 1 <input id="j_id352:source::0StateInput" type="hidden" value="1" name="j_id352:source::0"/> </td> </tr> <tr id="j_id352:source::1" class="rich-picklist-source-row"> <td class="rich-picklist-source-cell"> <img style="width: 1px; height: 1px;" alt=" " src="/richfaces-demo/a4j/g/3_3_1.GAorg/richfaces/renderkit/html/images/spacer.gif.jsf"/> Option 2 <input id="j_id352:source::1StateInput" type="hidden" value="2" name="j_id352:source::1"/> </td> </tr> <tr id="j_id352:source::2" class="rich-picklist-source-row"> <td class="rich-picklist-source-cell"> <img style="width: 1px; height: 1px;" alt=" " src="/richfaces-demo/a4j/g/3_3_1.GAorg/richfaces/renderkit/html/images/spacer.gif.jsf"/> Option 3 <input id="j_id352:source::2StateInput" type="hidden" value="3" name="j_id352:source::2"/> </td> </tr> <tr id="j_id352:source::3" class="rich-picklist-source-row"> <td class="rich-picklist-source-cell"> <img style="width: 1px; height: 1px;" alt=" " src="/richfaces-demo/a4j/g/3_3_1.GAorg/richfaces/renderkit/html/images/spacer.gif.jsf"/> Option 4 <input id="j_id352:source::3StateInput" type="hidden" value="4" name="j_id352:source::3"/> </td> </tr> <tr id="j_id352:source::4" class="rich-picklist-source-row"> <td class="rich-picklist-source-cell"> <img style="width: 1px; height: 1px;" alt=" " src="/richfaces-demo/a4j/g/3_3_1.GAorg/richfaces/renderkit/html/images/spacer.gif.jsf"/> Option 5 <input id="j_id352:source::4StateInput" type="hidden" value="5" name="j_id352:source::4"/> </td> </tr> </tbody> </table> </div> </div> </td> </tr> </tbody> </table>
|
Заранее благодарю. Я уже два дня с этим тр@хаюсь.
|