4

テーブル「td」から結果を取得する必要があります。しかし、それを行う前に、それを含むフレームをナビゲートする必要があります。フレームは、mainFrameに属するフレームセット要素の1つです。「子」サブフレームをナビゲートするすべてのタイプを使用しようとしましたが、いずれも機能しません。

 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");

以下は、Webページの簡単なレイアウトです。

<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>

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

サブフレームをナビゲートする前に、フレームセットをナビゲートする必要がありますか?ドキュメントを読みました。すべてのインターネットの例は、単純なサンプルコードを示しています:driver.switchTo()。frame( "mainFrame.0.child")。この場合は機能しません。上記のスクリプトをご覧ください。

4

4 に答える 4

9

同意します。子フレームに直接切り替えることはできません。また、フレームを切り替えるたびに必ずdefaultContent( )に切り替えてください。driver.switchTo.defaultContentあなたの例に関しては、driver.switchTo().frame("mainFrame.0.child")---これも機能する可能性がありますが、不要な引用符を取り除く必要があります。

于 2013-03-20T00:50:11.270 に答える
7

ゼロから始まるメインフレームのインデックスを見つけて、

driver.switchTo.frame(mainFrameindex);

次に、メインフレームのサブフレームのインデックスを見つけます

driver.switchTo.frame(subFrameIndex);

最初に親フレームに切り替えることなく、子フレームに直接切り替えることはできません。これがその仕組みです。

于 2013-03-18T07:31:59.740 に答える
3

メソッドをチェーン化することで、一度switchTo().defaultContent作成すると、tagNameによってfindElements()を介して使用可能なフレームの一時リストを作成し、その特定のフレームのインデックスに移動できます。

例えば

driver.switchTo()defaultContent();
driver.switchTo().frame(driver.findElement(By.tagName("frameset")).findElements(By.tagName("frame")).get(2));
于 2018-08-15T22:04:08.133 に答える
1

xPathを使用して、必要なフレームに直接切り替えることができます。開発者コンソールからXpathを取得し、次の手順を実行します。

driver.switch_to.frame(driver.find_element_by_xpath('html / frameset / frameset / frame[1]'))

于 2017-03-22T21:05:18.303 に答える