Selenium中的帧导航

时间:2013-09-19 17:37:57

标签: selenium frames

我一直在使用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;)应该让我到任何唯一命名的框架?

0 个答案:

没有答案