如何在Watir中找到文本框

时间:2011-06-09 00:02:49

标签: ruby dom screen-scraping watir watir-webdriver

我正在尝试使用watir-webdriver访问一个网站,但我似乎找不到我在Firefox + Firebug中可以看到的watir文本框。

我的代码是

require 'rubygems'
require 'irb/completion'
require 'watir-webdriver'
browser = Watir::Browser.new(:firefox)
browser.goto('http://emersonecologics.com/')
browser.text_field(:name, "txtEmail").set("myemail@gmail.com")

我收到错误:

Watir::Exception::UnknownObjectException: unable to locate element, using {:type=>"(any text type)", :name=>"txtEmail", :tag_name=>"input or textarea"}

但是,我知道有一个名为txtEmail的文本框,因为Firebug向我显示

<input id="txtEmail" class="textbox" type="text" tabindex="1" name="txtEmail">

当然,正是这个文本框位于树的深处。因此,我认为我应该在DOM中导航到它,我试图访问名为“all”的div。

如果我这样做

>>browser.divs[1].id
=> "all"
>> browser.divs[1].tag_name
=> "div"

但是当我尝试按照以下方式处理它时,我似乎无法找到它。

>>browser.div(:id, "all")
=> #<Watir::Div:0x101a8fd70 located=false selector={:tag_name=>"div", :id=>"all"}>

任何人都可以帮我如何在页面中选择对象吗?

2 个答案:

答案 0 :(得分:3)

您尝试访问的元素似乎位于框架内。我能够设置电子邮件:

browser.frame(:index,1).text_field(:name,“txtEmail”)。set(“myemail@gmail.com”)

了解更多信息:http://wiki.openqa.org/display/WTR/Frames

答案 1 :(得分:3)

看起来它也在我的框架中

以避免对索引产生混淆(特别是考虑到Watir的各种风格如何基于0或基于1的各种变化)我建议通过名称识别它。看看是否会闪现它。

browser.frame(:id, "ctrlLoginSSL_ifLogin").text_field(:id, "txtEmail").flash

有关处理框架内部内容的更多信息,请参阅Watir Wiki page on frames

P.S。

注意(与网站相关,并且使用框架):您可能还会向网站开发人员提及某些浏览器(例如chrome)注意到框架协议(https)与外部容器不匹配的协议不一致( http)Chrome的开发者工具正在发布以下投诉

  

不安全的JavaScript尝试访问   带URL的框架   https://www.emersonecologics.com/User/LoginFrame.aspx?redir=/default.aspx   来自带框架的框架   http://emersonecologics.com/。域,   协议和端口必须匹配。