WATIR - Установка флажка без прямого доступа к нему - PullRequest
0 голосов
/ 30 апреля 2020

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

HTML выглядит как

<div>
 ...
 <input type='checkbox'>
 <div>
  <div class='text'>text I know</div>
  ...
  </div>
</div>

Я могу найти флажок с

browser.div(class: 'text', text: /text I know/).parent.preceding_sibling

. Как доказательство этого, если я запускаю puts browser.div(class: 'text', text: /text I know/).parent.preceding_sibling/.html, я получаю "<input type=\"checkbox\">".

Однако , если я пытаюсь

browser.div(class: 'text', text: /text I know/).parent.preceding_sibling.set

Который, , насколько я знаю, , является способом установки флажков с Watir, я получаю

method_missing': undefined method set 'для # (NoMethodError)

Почему я получаю Watir::HTMLElement, а не Watir::CheckBox экземпляр? Есть ли способ получить вместо этого флажок?

1 Ответ

1 голос
/ 30 апреля 2020

Это потому, что следующий код возвращает объект элемента

browser.div(class: 'text', text: /text I know/).parent.preceding_sibling

Таким образом, метод set для этого объекта не определен. Метод set определен для класса CheckBox. Поэтому попробуйте следующий код, он будет работать для вас.

browser.div(class: 'text', text: /text I know/).parent.preceding_sibling.to_subtype.set

to_subtype возвращает соответствующий объект для этого тега. Таким образом, ваш метод будет работать.

...