繁体   English   中英

Watir Webdriver:输入文本 <p> iframe中的标记

[英]Watir Webdriver : Entering text in <p> tag within an iframe

我现在真的被困住了。 我有一个iframe,其中有一个<p>标签,我想发送一些文字,但我无法做到。

HTML:

<iframe id="edit-field-verdict-0-value_ifr" frameborder="0" src="javascript:""" style="width: 100%; height: 100px;">
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  <html>
    <head xmlns="http://www.w3.org/1999/xhtml">
    <body id="tinymce" class="mceContentBody " spellcheck="false" dir="ltr">
      <p>
        <br mce_bogus="1">
      </p>
    </body>
    </html>
</iframe>

我试过的代码是:

@browser.elements(:xpath => '//*[@id="tinymce"]').p.send_keys [:control, 'a']

我得到的错误是:

undefined method `elements' for #<String:0x24ba570> (NoMethodError)

我也试过了

$browser.frame(:id,'edit-field-verdict-0-value_ifr').html.body(:id,'tinymce').p.send_keys [:control, 'a']

但由于Watir无法识别身体,我也尝试了elements_by_xpath 它没用。

我怎么能让这个东西工作?

对于第一次尝试,错误消息是@browser是一个字符串而不是Watir :: Browser对象。 您应该验证@browser是否已正确设置。 根据您的第二个示例,也许它是全局变量$browser

对于第二次尝试,Watir支持body 但是, html将返回页面的html而不是html元素。 鉴于应该只有一个body元素,可以省略html元素。

$browser.frame(:id,'edit-field-verdict-0-value_ifr').body(:id,'tinymce').p.send_keys [:control, 'a']

但是请记住,您只需要包含框架方法(告诉watir查看框架内部),并尽可能少地可靠地找到您正在与之交互的元素。 任何额外的东西只是让代码更加冗长,也可能使事情更脆弱,更容易破解。 所以上面的内容可以简化为

$browser.frame(:id,'edit-field-verdict-0-value_ifr').p.send_keys [:control, 'a']

根据您正在测试的元素的ID,我假设它是一个WYSIMYG编辑器。 您应该查看Watir-Webdriver页面上的一个示例 - http://watirwebdriver.com/wysiwyg-editors/ 网页上的TinyMCE编辑器示例:

require 'watir-webdriver'
b = Watir::Browser.new
b.goto 'http://tinymce.moxiecode.com/tryit/full.php'
b.execute_script("tinyMCE.get('content').execCommand('mceSetContent',false, 'hello world' );")
b.frame(:id => "content_ifr").send_keys 'hello world again'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM