我现在真的被困住了我有一个iframe,其中有一个
标记,我想在其中发送一些文本,但我就是做不到。
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']
但由于瓦蒂尔无法认出尸体,我也试过了。它不起作用。
我怎样才能让这件事成功?
最佳答案
对于第一次尝试,错误消息是@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']
但也要记住,您只需要包含frame方法(告诉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'
关于ruby - Watir Webdriver:在iframe中的<p>标记中输入文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16061919/