WATIR - 设置复选框而不直接访问它

WATIR - Setting a checkbox without accessing it directly

我正在使用 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

其中 as far as I know 是使用 Watir 设置复选框的方法,我得到

method_missing': undefined method为 # (NoMethodError)

设置'

为什么我得到的是 Watir::HTMLElement 而不是 Watir::CheckBox 实例? 有没有办法获得一个复选框?

那是因为,下面的代码returns元素对象

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

因此未为该对象定义 set 方法。为 CheckBox class 定义了 set 方法。所以你试试下面的代码,它会为你工作。

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

to_subtype returns 该标签对应的对象。所以你的 set 方法会起作用。