Выбор флажка, скрытого под кнопкой


Мне нужно установить флажок, но нажмите кнопку function fails.

У меня есть кнопка на веб-странице:

<button type="button" class="ui-multiselect ui-widget ui-state-default ui-corner-all" aria-haspopup="true" style="">
spans...
</button>

И у нас есть флажок:

<ul class="classa123 classb123" style="">
<li class=" ">
<label class="classoflabel" title="" for="checkbox-123">
<input type="checkbox" title="Select This" value="1" name="multiselect-box-type" id="checkbox123">
<span>Select This</span>
</label></li>
    ...

Как я могу установить этот флажок? С помощью find_element_by_id("checkbox123").is_selected() я обнаружил, что флажок не установлен, но когда я пытаюсь .click() это не удается. Я думаю, что, возможно, я должен сначала открыть флажок, нажав на кнопку, но кнопка не имеет уникального идентификатора или класса. Я использую selenium webdriver с python. Вы можете писать код и на других языках, если знаете, как это делается. чтобы решить эту проблему. Спасибо...

2 2

2 ответа:

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

$('#checkbox123')

Однако, если вам нужна коллекция входных данных checkboxes в ul, то вы можете выбрать как:

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

Наконец, определить, проверено это или нет, чрезвычайно просто.

var checked = $('#checkbox123').is(':checked');
//  see your result in developer console with 
console.log(checked); // will be `true` or `false`

Если вы пытаетесь получить интервал (с текстом Select This) после того, как вы нажмете кнопку, Вы можете попробовать что-то вроде:

$('button').click(function(e) {
    $('ul input[type=checkbox]:checked').each(function(i) {
        var span = $(this).next('span');
        alert(span.text())
    });
})

Последний вызов, если вам нужно изменить состояние флажка, используйте .prop on checked с булевым значением. Например:

$('#checkbox123').prop('checked', true); // will make it checked
$('#checkbox123').prop('checked', false); // will uncheck it
Я полагаю, что это, возможно, было обновлено с момента моего последнего ответа на вопрос, поэтому я обновлю ответ здесь, чтобы показать, что явно отсутствует. Наконец, использование jQuery для запуска события, такого как click, чрезвычайно просто. Есть также несколько способов сделать это, некоторые в основном то же самое.

Проще всего использовать .click(). Это так просто, как:

$('#checkbox123').click();

Следующее использование:.trigger(). В принципе то же самое, что и .click. на самом деле это просто личное использование в удобочитаемости .

$('#checkbox123').trigger('click');
Имейте в виду, если вы используете это, и это не работает. Возможно, что-то не так с вашим селектором. Один из способов узнать наверняка-это войти в консоль. Если вы не видите элемент объекта jQuery, напечатанный на консоли, содержащий элемент, который вы ожидаете, то вы знаете, что ваш селектор не работает. Имейте в виду, что это будет показывать объект jQuery независимо, но он не будет иметь HTML-элемент в нем.
console.log($('#checkbox123').trigger('click'));

Если существует, то будет выглядеть примерно так:

[input#checkbox123, context: document, selector: "#content", jquery: "1.9.......and so on for rest of object

Если не существует, будет выглядеть примерно так:

[context: document, selector: "#checkbox123", jquery: "1.9.......and so on for rest of object

Попробуйте запустить событие click следующим образом:

   var element = $('#checkbox123')[0];
   if (document.createEvent) { 
      var e = document.createEvent("MouseEvents");
      e.initMouseEvent("mousedown", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
      element.dispatchEvent(e);
  }