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