如何使用Selenium WebDriver导航框架集内的子框架?

Bur*_*ras 4 selenium frame

我需要从表"td"获得结果.但在我能做到之前,我需要导航一个包含它的框架.该框架是属于mainFrame的框架集元素之一.我尝试使用所有类型的导航"子"子帧非其工作:

 driver.switchTo().defaultContent();
    Thread.sleep(1000);
     driver.switchTo().frame("mainFrame.0.fr_resultsNav~ResultsMaxGroupTemplate0.9766101221774707");
    driver.switchTo().frame("main.Frame.1.fr_resultsNav~ResultsMaxGroupTemplate0.8811790466176727");

// even: driver.switchTo().frame("mainFrame.0.fs_main");
Run Code Online (Sandbox Code Playgroud)

以下是网页的简要布局:

<frame src="banner.asp" name="topFrame" scrolling="no" noresize="noresize" id="topFrame" title="topFrame">

<frame src="" name="mainFrame" id="mainFrame" title="mainFrame" wd_frame_id_="5f4c10bc7e0960070bfda831655b8b0c">

    <frameset id="fs_main" border="0" frameborder="no" framespacing="0" rows="70,87,*">
.....................

        <frameset id="fs_content" cols="23%,*" framespacing="0" frameborder="no">
.....................
            <frameset cols="*,9" id="LeftFrameSet" framespacing="0" frameborder="no">
.....................
            <frame frameborder="0" name="fr_classification~ResultsMaxGroupTemplate0.609021034867735" title="Results Classification Frame" id="fr_classification~ResultsMaxGroupTemplate0.609021034867735" src="/lnacui2api/results/shared/waitMessage.do?wmibIdRand=61_T16938265013_rand_1363544453847" scrolling="Auto" onload="paintResultsBorder('ResultsMaxGroupTemplate0.609021034867735');">

....................

<form name="results_listview_ResultsListForm" method="post" action="/lnacui2api/results/listview/listview.do" id="results_listview_ResultsListForm">

..........

<td nowrap="" height="20"> <span id="new">&nbsp;All Results</span> (294)</td>
</form>

....................
Run Code Online (Sandbox Code Playgroud)

在导航子帧之前,是否需要导航框架集?我看了文档.所有互联网示例都提供了一个简单的示例代码:driver.switchTo().frame("mainFrame.0.child").在这种情况下它不起作用.请看一下上面的脚本.

CHE*_*HKA 8

我同意,你不能直接切换到子框架.此外,每次要切换帧时,请务必切换到defaultContent(driver.switchTo.defaultContent).关于你的例子,driver.switchTo().frame("mainFrame.0.child")---这也可以,但你需要摆脱不必要的引号.

  • 谢谢!在切换到新帧之前切换回默认内容是关键.对于在python中工作的任何人,相应的方法是:`driver.switch_to_default_content()` (2认同)

Cod*_*tic 6

找到从零开始然后使用的主框架索引

driver.switchTo.frame(mainFrameindex);
Run Code Online (Sandbox Code Playgroud)

然后在主框架中找到子框架的索引

driver.switchTo.frame(subFrameIndex);
Run Code Online (Sandbox Code Playgroud)

如果不先切换到父框架,则无法直接切换到子框架.这是它的工作原理.