Watir-webdriver - 无法通过id访问嵌套帧

时间:2012-08-15 17:56:16

标签: nested frame watir-webdriver

网页具有嵌套框架结构。框架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是我正在处理的网页)

1 个答案:

答案 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 ,会工作。