Ruby / Capybara - Попытка преобразовать DOM в JQUERY и добавить новый атрибут HTML - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь добавить «id» для селектора ниже, однако он не работает, потому что элемент кажется DOM. Как я могу преобразовать элемент DOM для JQuery, а затем добавить атрибут "id"?

script = '$(".block-header__helper-menu .ml1").attr("id", "tempid")';
page.execute_script(script)

1 Ответ

0 голосов
/ 10 марта 2019

Если на странице, с которой вы работаете, загружен JQuery, и вы проверили, что элемент существует до запуска скрипта, то скрипт, который вы показали, должен работать нормально.Однако оба элемента, добавленные вами в комментарии (в будущем было бы лучше, если бы вы отредактировали свой вопрос, чтобы элементы могли быть лучше отформатированы), недопустимы, поскольку вам необходимо заполнить (>) элемент button перед открытиемдочерний элемент spanНе уверен, что это связано с форматированием комментариев или у вас есть ошибка в вашем HTML.Предполагая, что HTML верен (или вы исправляете это), на самом деле нет необходимости использовать JQuery, чтобы делать то, что вы делаете, поэтому, если на страницу не загружен JQuery, вы можете сделать что-то вроде

page.execute_script('document.querySelector(".block-header__helper-menu .ml1").id = "tempid")

Если вы уже нашли элемент через Капибару (чтобы убедиться, что он существует), то вы можете сделать:

element = page.find('.block-header__helper-menu .ml1')
...
element.execute_script('this.id = "tempid"')

При этом, на самом деле, нет необходимости назначать идентификаторы этим элементам.Вам просто нужно использовать опции, доступные в методах Capybara, для нацеливания на отдельные кнопки.Чтобы щелкнуть их, вы можете использовать текст кнопок

click_button 'A-'
click_button 'A+'

или, если вы просто хотите найти элементы кнопок, это будет find(:button, 'A-') и т. Д.

В качестве альтернативы вы можете найтиэлементы по различиям их атрибутов, а затем щелкните по ним

find('button[data-ga-action="zoom-out"]').click
find('button[data-ga-action="zoom-in"]').click

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

find('span.inline', text: 'A-')

и т. д.

...