2012-05-17 3 views
22

私はセレンオートメーションプロジェクトで作業しています。ここでは、Javaの代わりにセレンの自動化のためのPython言語を使用しています。Pythonで複数のウィンドウを処理する

は、私はコントロールが家にまだあるので、新しく開いたウィンドウopens.In新しいウィンドウが、私は任意のアクションを実行することができないホーム・ページ内のリンクをクリックすると、複数のウィンドウに

シナリオをされて扱う、問題に直面していますページのWebドライバ。

誰でもここにいくつかのコードを貼り付けて、コントロールをバックグラウンドウィンドウから新しく開いたウィンドウにフォーカスすることができます。

可能な解決策は、ライブラリにあるself.driver.switchtowindow()です。しかし、ウィンドウ名が必要です。どのようにウィンドウ名を見つけるのですか?これが間違っていれば誰でもこの行動を実行するためのコードを与えることができますか?

答えて

15

window_handlesには、開いているすべてのウィンドウの参照が表示されます。

thisは、ウィンドウの切り替えに関するドキュメントの内容です。

11

window_handlesswitch_to_windowメソッドを使用するとできます。最初のリンクをクリックする前に

を移動するために、ウィンドウメソウへの切り替えを実行し

window_after = driver.window_handles[1] 

としてリンクストア新しく開いたウィンドウのウィンドウハンドルをクリックした後

window_before = driver.window_handles[0] 

としてウィンドウハンドルを保存します新たに開いたウィンドウに

driver.switch_to_window(window_after) 

同様に、あなたは賭けを切り替えることができます古いものと新しいものを分け合わせる。私たちは「switchTo」方法使用して、指定されたウィンドウ間で移動することによって、異なるウィンドウを扱うことができ

import unittest 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common.by import By 

class GoogleOrgSearch(unittest.TestCase): 

    def setUp(self): 
     self.driver = webdriver.Firefox() 

    def test_google_search_page(self): 
     driver = self.driver 
     driver.get("http://www.cdot.in") 
     window_before = driver.window_handles[0] 
     print window_before 
     driver.find_element_by_xpath("//a[@href='http://www.cdot.in/home.htm']").click() 
     window_after = driver.window_handles[1] 
     driver.switch_to_window(window_after) 
     print window_after 
     driver.find_element_by_link_text("ATM").click() 
     driver.switch_to_window(window_before) 


    def tearDown(self): 
    self.driver.close() 

if __name__ == "__main__": 
unittest.main() 
+0

あなたのコードに続いて、 'window_after = browser.window_handles [1]'を実行すると 'IndexError:list index of range'を受け取ります。なにが問題ですか?参照:https://stackoverflow.com/questions/45354850/focus-on-second-page-form-with-selenium – LucSpan

2

コード例を次に示します。また

driver.switch_to.window("windowName") 

<a href="somewhere.html" target="windowName">Click here to open a new window</a> 

が、あなたは、「ウィンドウハンドルを」に渡すことができます"switchTo()。window()"メソッドです。 JavaScriptのコマンドwindow.open()を使用できる新しいタブを開くには、すでに与えられた回答の上部には

for handle in driver.window_handles: 
    driver.switch_to.window(handle) 
5

:これを知って、それはそうのように、すべての開いているウィンドウを反復処理することが可能です。例えば

# Opens a new tab 
self.driver.execute_script("window.open()") 

# Switch to the newly opened tab 
self.driver.switch_to.window(self.driver.window_handles[1]) 

# Navigate to new URL in new tab 
self.driver.get("https://google.com") 
# Run other commands in the new tab here 

あなたはその後、

# Switch to original tab 
self.driver.switch_to.window(self.driver.window_handles[0]) 

# Close original tab 
self.driver.close() 

# Switch back to newly opened tab, which is now in position 0 
self.driver.switch_to.window(self.driver.window_handles[0]) 

を次のように元のタブを閉じたり、新しく開いたタブ

# Close current tab 
self.driver.close() 

# Switch back to original tab 
self.driver.switch_to.window(self.driver.window_handles[0]) 

を閉じることができるしているが、この情報がお役に立てば幸いです。

+1

switch_to_windowは推奨されていません。 switch_to.windowを使用してください –

+0

ありがとう@StephanSchielke、更新された答え –