念のため、最初に大文字にして大胆に説明することを理解していない人が常にいます。
フレームセットをカットする必要はありません。フレームをレイヤーごとにカットする必要があります。
多くの人は、セレンを使用するとページ要素を見つけることができないという問題に直面します。要素ははっきりとそこにあり、firebugで見ることができますが、見つけることができません。この場合、フレームがめちゃくちゃになっています(理由1.別の日、要素を見つけられない理由と解決策について具体的に説明します)。
フレームタグには、frameset、frame、iframeの3種類があります。Framesetは他の通常のタグと同じで、通常のポジショニングには影響しません。Frameとiframeは、セレンのポジショニングで同じです。Seleniumには、フレーム。
1.フレームに切り替える方法(switch_to.frame())
Seleniumは、フレームを切り替えるためのswitch_to.frame()メソッドを提供します
switch_to.frame(reference)
1
switch_to_frame()について言及する必要があります。多くの人は、この方法で書くときにこの文が打ち消されていることに気付くでしょう。理由は、このメソッドが廃止され、後でサポートされない可能性があるためです。推奨される書き方はswitch_to。frame( )
参照は渡されたパラメーターであり、フレームを見つけるために使用されます。id、name、index、およびseleniumWebElementオブジェクトを渡すことができます。次のHTMLコードindex.htmlがあるとします。
<html>
<頭>
<title> FrameTest </ title>
</ head>
<ボディ>
<iframe src = "a.html" id = "frame1" name = "myframe"> </ iframe>
</ body>
</ html>
1
2
3
4
5
6
7
8
iframeを見つけて切り込むには、次のコードを使用できます。
セレンインポートWebドライバーから
ドライバー= webdriver.Firefox()
driver.switch_to.frame(0)#1。フレームインデックスを使用して検索します。最初のインデックスは0です。
#driver.switch_to.frame( "frame1")#2。idを使用して検索します
#driver.switch_to.frame( "myframe")#3。名前を使用して検索します
#driver.switch_to.frame(driver.find_element_by_tag_name( "iframe"))#4。WebElementオブジェクトを使用して検索します
1
2
3
4
5
6
通常、idとnameでほとんどの問題を解決できます。ただし、フレームに次の2つの属性がない場合は、indexとWebElementを使用して次の場所を見つけることができます。
インデックスは0から始まります。integerパラメータが渡されると、indexによって配置されていると判断され、strパラメータが渡され、id / nameによって配置されていると判断されます。
WebElementオブジェクト、つまり、find_elementシリーズのメソッドによって取得されたオブジェクト。tag_name、xpathなどを使用してフレームオブジェクトを見つけることができます。
栗を与える:
<iframe src = "myframetest.html" />
1
xpathを使用して、WebElementオブジェクトを見つけて渡します。
driver.switch_to.frame(driver.find_element_by_xpath( "// iframe [contains(@ src、 'myframe')]"))
1
2.フレームからメインドキュメントに戻ります(switch_to.default_content())
フレームに切り替えた後は、メインドキュメントの要素を操作し続けることができなくなります。この時点で、メインドキュメントのコンテンツを操作する場合は、メインドキュメントに戻す必要があります。
driver.switch_to.default_content()
1
3.ネストされたフレームの操作(switch_to.parent_frame())
次のように、ネストされたフレームが発生することがあります。
<html>
<iframe id = "frame1">
<iframe id = "frame2" />
</ iframe>
</ html>
1
2
3
4
5
1.メインドキュメントからframe2にカットし、レイヤーごとにカットします
driver.switch_to.frame( "frame1")
driver.switch_to.frame( "frame2")
1
2
2. frame2からframe1に切り替えます。ここで、seleniumは、メインドキュメントに切り替えてから再度切り込むことなく、子フレームから親フレームに切り替える方法を提供します。
driver.switch_to.parent_frame()#現在メインドキュメントである場合、効果はありません
1
後方メソッドと同等のparent_frame()を使用すると、さまざまなフレームを自由に切り替えて、自由にジャンプできます。
次の3つの方法をうまく利用している限り、フレームに遭遇したときに数分で取得できます。
driver.switch_to.frame(reference)
driver.switch_to.parent_frame()
driver.switch_to.default_content()
1
2
3
補足
また、ドット方式で入れ子になったフレームに切り込む方法も見たことがありますが、実験後にフレームが見つからないことがわかりました。成功する生徒がいらっしゃいましたら、メッセージを残してお知らせください。
driver.switch_to.frame( 'frame1.0.frame3')
1
上記のコードは、「frame1」の下の「firstframe」の下の「frame3」にカットできると言われています。