Как пометить поля ввода html флажком типа в Geb?

Я не могу проверить два поля ввода html с флажком типа на веб-странице с помощью Geb.

HTML-код рассматриваемых полей показан ниже: <input id="yui-gen136" style="width: 50px;" class="assemble-document" type="checkbox"> (у другого есть id="yui-gen133").

Сначала я попробовал: $('input[type=checkbox]').click(), но это не сработало... для двух полей, которые я хочу проверить.

С другой стороны, это сработало для другого поля ввода (на этой странице 3 таких поля), которое в html: <input id="riskCheckbox" value="false" onclick="onCheckBoxClick()" type="checkbox">

Прочитав руководство Geb по заполнению входных данных и флажков, а также некоторое обсуждение Стек о флажках в Geb здесь и там я пробовал такие навигаторы:

$("div[id*='assoc_packageItems-cntrl-currentValueDisplay'] input")

который вернул мне два интересующих меня объекта ввода. Затем я получил к ним доступ по отдельности с помощью идентификатора:

("div[id*='assoc_packageItems-cntrl-currentValueDisplay']").find("input[id='yui-gen136']")

а также:

("div[id*='assoc_packageItems-cntrl-currentValueDisplay']").find("input[id='yui-gen133']")

К сожалению, применение к ним .value(true), .value("true") или .value('true'), как предлагается в руководстве Geb и обсуждениях стека, привело к ошибке:

TypeError: $(...).find(...).value is not a function

Ни в этих двух полях, ни в каком-либо окружающем элементе нет кода Javascript.

Когда я как пользователь устанавливаю эти два флажка, я получаю сообщение на консоли "элемент не найден". Итак, я пошел по этому пути, и единственная странная вещь, которую я заметил, это то, что disabled="" появляется в поле <input> на секунду, когда я устанавливаю флажок. Чтобы поле <input> выглядело так:

<input id="yui-gen136" style="width: 50px;" class="assemble-document" type="checkbox" disabled="">

Обычно внутри html-тега, который меня интересует, нет параметра «видимость».

Как в Geb обращаться с таким необычным флажком? Это проблема с опцией «отключить»?


РЕДАКТИРОВАТЬ здесь html часть окружающей формы. Проблема в том, что все эти элементы генерируются случайным образом.

<div id="page_x002e_data-form_x002e_task-edit_x0023_default_assoc_packageItems-cntrl-currentValueDisplay" class="current-values object-finder-list yui-dt form-element-border form-element-background-color">

<div class="yui-dt-mask" style="display: none; padding: 0em 0.5em;"></div>
<table id="yuievtautoid-0" summary="">

<colgroup></colgroup>
<thead></thead>

<tr id="yui-rec128" class="yui-dt-rec yui-dt-first yui-dt-even" style="">
    <td class="yui-dt116-col-nodeRef yui-dt-col-nodeRef yui-dt-first" headers="yui-dt116-th-nodeRef " style="width: 50px;"></td>
    <td class="yui-dt116-col-metadata yui-dt-col-metadata" headers="yui-dt116-th-metadata "></td>
    <td class="yui-dt116-col-update yui-dt-col-update" headers="yui-dt116-th-update "></td>
    <td id="yui-gen134" class="yui-dt116-col-download yui-dt-col-download" headers="yui-dt116-th-download "></td>
    <td id="yui-gen136" class="yui-dt116-col-check yui-dt-col-check yui-dt-last" headers="yui-dt116-th-check ">
        <div id="yui-gen138" class="yui-dt-liner" style="padding: 0em 0.5em;">
            <input id="yui-gen137" class="assemble-document" type="checkbox" style="width: 50px;"></input>

                </div>
            </td>
        </tr>
        <tr id="yui-rec129" class="yui-dt-rec yui-dt-last yui-dt-odd" style=""></tr>
    </tbody>
</table>


person cbx44    schedule 17.03.2015    source источник
comment
Возможно, вам придется показать нам больше HTML, так как yui-gen136 пахнет случайно сгенерированным, и может случиться так, что идентификатор элемента изменится каждый раз, когда он отображается. Показывая нам больше контекста HTML, может быть проще выбрать охватывающий тег, а затем подвыбрать для ввода.   -  person billjamesdev    schedule 18.03.2015
comment
@BillJames, вы правы, он генерируется случайным образом, однако для первой попытки я просто хотел запустить его и отметить флажки. Я скоро добавлю больше HTML.   -  person cbx44    schedule 24.03.2015


Ответы (3)


При выборе по определенному значению атрибута ожидаемое значение должно быть передано в виде строки. Поскольку весь селектор CSS также является строкой, вы должны использовать " для внешней строки и ' для значения внутреннего атрибута.

Чтобы установить и снять флажок, используйте

$("input[type='checkbox']").click()

Чтобы узнать, проверено ли оно в данный момент или нет, используйте

$("input[type='checkbox']").value()

Если вы можете найти более подходящий идентификатор для вашего <input> или класса, вам следует рассмотреть возможность включения его в селектор CSS, чтобы избежать установки флажков в других частях веб-сайта.

В вашем случае, поскольку у вас есть идентификатор, вы можете использовать селектор CSS по идентификатору:

$("input#yui-gen136").click()

or

$("#yui-gen136").click()

======== РЕДАКТИРОВАТЬ ========

Если сайт использует Jquery, вы можете открыть консоль и посмотреть, что возвращается на

$("input[type='checkbox']")

Если вы вернули более одного элемента, ваш селектор может быть недостаточно конкретным. Вы даже можете попробовать это на этой стороне, он вернет только флажок «Вики сообщества», который виден при редактировании сообщения.

$("input[type='checkbox']").click()

успешно устанавливает этот флажок в stackoverflow :)

person Community    schedule 17.03.2015
comment
Обе версии работают... в любом случае, это все равно не решает проблему: галочки не стоят. - person cbx44; 17.03.2015
comment
Я добавил в свой ответ способ проверить ваш селектор и способ выбора по идентификатору. Также попробуйте использовать другие браузеры, так как иногда возникают проблемы, связанные с браузером и драйвером. - person Dennis; 17.03.2015
comment
Я уже (ранее) проверил $(input[type='checkbox']).length в консоли (как в Chrome, так и в Firefox), и ответ равен 3, поэтому вы правы, что у меня есть более 1 элемента с помощью вышеуказанного селектора. Вот почему я попробовал другие селекторы, включая $(input#yui-gen136).click(), которые вы предложили, но проблема в том, что ни один из них не работает. - person cbx44; 17.03.2015
comment
Не совсем. Это корпоративная версия Alfresco Document Management System, а не версия с открытым исходным кодом. - person cbx44; 17.03.2015
comment
Не могли бы вы попробовать удалить атрибут onClick для других флажков, где вы сказали, что он работал, и посмотреть, работает ли он до сих пор? И, наконец, не могли бы вы попробовать удалить CSS и посмотреть, работает ли он. - person Dennis; 17.03.2015
comment
К сожалению нет. Я не могу изменить html-код. - person cbx44; 17.03.2015
comment
проверьте элемент в firefox или chrome, и вы сможете редактировать HTML. Изменения останутся, пока вы не перезагрузите страницу. - person Dennis; 17.03.2015
comment
yui-gen133 пахнет как случайно сгенерированный идентификатор элемента и может меняться каждый раз, когда вы визуализируете страницу (или каждый раз, когда страница визуализируется немного по-другому). Вы можете сначала попробовать выбрать для обертки div с несгенерированным идентификатором, который можно найти, использовать .find(input[type='checkbox'] ), чтобы найти флажок внутри div. - person billjamesdev; 18.03.2015
comment
yui-gen133 должен работать при использовании jQuery, потому что между ними ничего не отображается. Таким образом, через CSS может быть добавлено некоторое поведение onClick, которое взаимодействует с выполнением jQuery/Geb. - person Dennis; 18.03.2015

Если вы хотите проверить несколько флажков, возвращаемых селектором, вы можете использовать оператор распространения Groovy:

$("div[id*='assoc_packageItems-cntrl-currentValueDisplay'] input")*.value(true)
person erdi    schedule 17.03.2015
comment
возможно, я не сказал об этом прямо, но я пробовал оператор распространения ранее - к сожалению, безуспешно. - person cbx44; 24.03.2015

Спасибо за ваши предложения, ребята. Я наконец решил проблему.

Я ошибался, JS не было. Флажки находятся внутри фрейма, который был загружен с помощью AJAX. Флажки были заблокированы, пока сервер не добавит переменную. Нужно дождаться сервера, а затем поставить галочку.

Теперь все работает.

person cbx44    schedule 24.03.2015