网页具有嵌套框架结构。框架FCCBMain
嵌套在框架Main
中。我可以这样访问它:
browser.frame(:id => "FCCBMain").frames[0]
=> #<Watir::Frame:0x504e155578d49f34 located=false selector={:index=>0}>
browser.frame(:id => "FCCBMain").frames[0].id
=> "MainLeft"
但不是这样:
brwoser.frame(:id => "FCCBMain").frame(:id => "MainLeft").id
Selenium::WebDriver::Error::StaleElementReferenceError: Element belongs to a different frame than the current one - switch to its containing frame to use it
from [remote server] resource://fxdriver/modules/web_element_cache.js:5634:in `unknown'
from [remote server] file:///tmp/webdriver-profile20120816-21551-1a8xyvv/extensions/fxdriver@googlecode.com/components/driver_component.js:5329:in `unknown'
from [remote server] file:///tmp/webdriver-profile20120816-21551-1a8xyvv/extensions/fxdriver@googlecode.com/components/driver_component.js:6623:in `unknown'
from [remote server] file:///tmp/webdriver-profile20120816-21551-1a8xyvv/extensions/fxdriver@googlecode.com/components/command_processor.js:9924:in `unknown'
...
我认为这两种方式非常相似。为什么后来没有工作?
(如果有帮助,here是我正在处理的网页)
答案 0 :(得分:2)
首先,我认为你有一个拼写错误的“brwoser.frame”
其次,如果您要访问带有链的帧,则必须在路径IE中包含所有帧和框架集:browser.frame(:id =&gt;“FCCBMain”)。frameset.frameset.frame(:id =&gt;“MainLeft”)。id
你的第二个解决方案无法正常工作的原因是因为它正在寻找框架(FCCBMain)的直接子节点具有“MainLeft”的id。 Frame(FCCBMain)只有一个frameset子元素,而frameset没有ID。如果框架集的ID为“MainLeft”并且是一个框架(不是框架集),那么行,browser.frame(:id =&gt;“FCCBMain”)。frame(:id =&gt;“MainLeft”)。id ,会工作。