3

我正在尝试使用 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"}>

谁能帮我如何选择页面中的对象?

4

2 回答 2

3

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

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

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

于 2011-06-09T02:04:31.637 回答
3

看起来它也在我的框架中

为了避免混淆索引(特别是考虑到不同风格的 Watir 是基于 0 还是基于 1 的差异),我建议通过名称来识别它。看看这是否会闪烁它。

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

有关处理框架内内容的更多信息,请参阅框架上的 Watir Wiki 页面

附言

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

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

于 2011-06-09T04:37:26.543 回答