フレームベースのアプリケーション「F」を正常にナビゲートするために、Selenium (Webdriver 2.32、Perl バインディング Selenium::Remote::Driver 0.16 を使用) を使用しています。
<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');
次に、メイン コンテンツで実行できる場所を呼び出します。
ここで、少し異なるページ "H" をナビゲートする必要がありますが、うまくいきません:
<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 でクリックするものを見つけることができません。私は実際には TOC にいないのではないかと疑っていますが、自分がどこにいるのかわかりません。言うまでもなく、メインセクションにも入りません。
質問 1: この 2 つのページで、Selenium はどこから始めますか? どのフレームに入っていますか?それは私が信頼できるものですか(文書化され、一貫していますか)?試行錯誤で「F」を回避しましたが、「H」では機能しません。
質問 2: を実行する$drv->switch_to_frame();
と、どこまで「上」に移動しますか? 現在のフレームの「親」と見なされるものは何ですか? いつもフレームセットですか?()の代わりに試してみ$drv->switch_to_frame("relative=top");
ましたが、「F」でも「H」でもうまくいきませんでした。
質問 3: 名前付きフレームに切り替えるとき、それは現在いる場所から子レベルにある必要がありますか?それとも、自分より下の任意の深さにある必要がありますか? それが子供でなければならない場合、「relative=top」は私をツリーの上位に置きすぎたのでしょうか?
質問 4: メイン (「F」アプリケーション) にいるとき、上記のナビゲーション (1 つ上、名前付きフレームまで) で TOC に正常に到達できます。フレームセット (TOC の兄弟) が Main の親であると思われるのに、なぜそれが機能するのでしょうか?
アップデート
ああああ!一部のページ コーダーが、タグ<b>
のスタイルを設定するのではなく、"onClick" を使用したタグを使用するとは誰が想像できたでしょ<a>
うか? そのため、目的のフレームに到達していましたが、探していたリンクはそこにはありませんでした.
それにもかかわらず、私は今それを機能させていますが(とにかく、回答してくれた人に感謝します)、switch_to_frame()とswitch_to_frame( 'name')の正式な定義が何であるかについてまだ興味があります. () は「トップ」までずっと移動しますか、それとも 1 レベル上に移動しますか (トップ/デフォルトまでずっと移動しているように見えます)、('name') は検出されるまで任意の数のレベルを下ります名前付きフレーム?(のようです)。() の後に ('name') が続くと、一意の名前のフレームが表示されますか?