我一直在使用Selenium(Webdriver 2.32,使用Perl绑定Selenium :: Remote :: Driver 0.16)成功导航基于框架的应用程序" F":
<frameset rows=35,*> // divide page two rows, 35px and remainder high
<frame name="Header"> // top row is Header
<frameset cols=182,*> // divide second row into two columns, 182px and remainder wide
<frame name="TOC"> // left column is TOC
<frameset rows=*,0,0> // right column two hidden rows
<frame name="Main"> // (top) row is Main content
<frame name="HiddenFrame"> // hidden stuff
<frame name="UploadFrame"> // hidden stuff
首次进入页面时,我调用$drv->switch_to_frame(); $drv->switch_to_frame('TOC');
转到目录,然后单击重新加载主要内容的链接。然后我打电话给$drv->switch_to_frame(); $drv->switch_to_frame('Main');
然后我可以在主要内容中做些什么。
现在我需要浏览一个稍微不同的页面&#34; H&#34;,但它不起作用:
<frameset rows=115,*> // divide page two rows, 115px and remainder high
<frame name="Header"> // top row is Header
<frameset cols=180,*> // divide second row into two columns, 180px and remainder wide
<frameset rows=0,*> // hidden row and remainder of column
<frame name="DataChannelFrame"> // hidden stuff
<frame name="TOC"> // left column is TOC
<frame name="Main"> // (top) row is Main content
在这种情况下,Selenium无法在TOC中找到任何可以点击的内容,无论我是否使用与以前相同的导航。我怀疑我实际上并不是 in TOC,但我不知道我在哪里。不用说,它也没有进入主要部分。
问题1:在这两页上,其中是Selenium的开头?它在哪个框架?这是我可以信赖的(记录和一致)吗?我找到了自己的方式&#34; F&#34;通过反复试验,但它没有在&#34; H&#34;。
中工作问题2:当我做$drv->switch_to_frame();
时,距离&#34;向上&#34;它去了吗?什么被认为是&#34;父母&#34;目前的框架?它总是一个框架集吗?我尝试了$drv->switch_to_frame("relative=top");
而不是(),它并没有在&#34; F&#34;或者&#34; H&#34;。
问题3:当我切换到命名框架时,它是否必须位于我所在的子级别,或者它位于我下方的任何深度?如果它必须是一个孩子,可能&#34; relative = top&#34;让我在树上太高了?
问题4:当我在Main(&#34; F&#34;应用程序)中时,我可以通过上述导航成功进入TOC(向上一个,到命名框架)。当大概是一个框架集(兄弟对TOC)是主要的父母时,怎么会有效呢?
Arrrrgh!谁会梦想某个页面编码器会使用<b>
标签和#34; onClick&#34;而不是样式<a>
标签?所以它 到达了理想的框架,但我正在寻找的链接并不是那么。
尽管如此,即使我现在正在工作(无论如何,感谢那些回复的人),我仍然很好奇switch_to_frame()和switch_to_frame(&#39; name&#39;)的正式定义是什么。是()一直到#34; top&#34;,或者只是向上一级(它似乎一直到顶部/默认),并且(&#39; name&#39; )下去任何级别,直到找到命名框架? (好像是)。所以()后跟(&#39; name&#39;)应该让我到任何唯一命名的框架?