我正在尝试使用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"}>
任何人都可以帮我如何在页面中选择对象吗?
答案 0 :(得分:3)
您尝试访问的元素似乎位于框架内。我能够设置电子邮件:
browser.frame(:index,1).text_field(:name,“txtEmail”)。set(“myemail@gmail.com”)
答案 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/。域, 协议和端口必须匹配。