无法使用Watir </p> </comment>为<comment>和<p>元素设置值

时间:2014-02-27 07:06:08

标签: ruby watir-webdriver paragraph

我正在使用Watir并遇到为

元素设置值的问题。

这是HTML:

<div comment-editor-area="" class="comment-editor-area" contenteditable="true">
   <comment>    
       <p> "value goes in here"
          <br>
       </p>
 </comment>
</div>

当我使用时,我得到未定义的方法“set”:

 browser.element(:xpath, "//*[@id='comment-editor']/div/div/comment/p" ).set "Value"

有人可以帮忙吗?

错误讯息:

NoMethodError: undefined method `set' for #<Watir::HTMLElement:0x..fdae41aef064b3f16    located=false selector={:xpath=>"//*[@id='comment- editor']/div/div/comment/p"}>:Watir::HTMLElement  

1 个答案:

答案 0 :(得分:2)

以下是2个解决方法。

使用send_keys:

使用send_keys似乎允许将密钥发送到div元素:

browser.div.send_keys 'Value'

会向div添加文字:

<div comment-editor-area="" class="comment-editor-area" contenteditable="true">Value
  Value
  <comment>    
    <p> "value goes in here"
      <br>
    </p>
  </comment>
</div>

假设您打算替换现有值,您可以这样做:

browser.div.send_keys [:control, 'a'], :delete, 'Value'

这将提供以下内容:

<div comment-editor-area="" class="comment-editor-area" contenteditable="true">
  Value<br>
</div>

不幸的是,在p元素上尝试相同的方法似乎不起作用。似乎此解决方案仅在将密钥发送到第一个contenteditable元素(而不是其子元素)时才有用。

(注意:以上内容是使用Firefox测试的。您可能会从其他浏览器获得不同的结果。)

使用execute_script:

另一种方法是通过javascript:

更改p元素的文本
paragraph = browser.element(:xpath, "//*[@id='comment-editor']/div/div/comment/p" )
browser.execute_script('arguments[0].innerHTHML = "Value";', paragraph)

哪会给:

<div comment-editor-area="" class="comment-editor-area" contenteditable="true">
  <comment>    
    <p>Value</p>
  </comment>
</div>