66

Python を使用してセレン自動化プロジェクトに取り組んでいます。

複数のブラウザ ウィンドウを処理するという問題に直面しています。

シナリオは以下の通り。ホームページのリンクをクリックすると、新しいウィンドウが開きます。新しく開いたウィンドウでは、フォーカスがまだホームページ Web ドライバーにあるため、何も実行できません。

背景ウィンドウから新しく開いたウィンドウにフォーカスを変更する方法を教えてもらえますか?

考えられる解決策は ですdriver.switch_to.window()が、ウィンドウの名前が必要です。ウィンドウの名前を調べる方法は? これが間違った方法である場合、このアクションを実行するためのコード例を誰か教えてもらえますか?

4

5 に答える 5

75

window_handlesandswitch_to.windowメソッドを使用してそれを行うことができます。

リンクをクリックする前に、まずウィンドウハンドルを次のように保存します

window_before = driver.window_handles[0]

リンクをクリックした後、新しく開いたウィンドウのウィンドウハンドルを次のように保存します

window_after = driver.window_handles[1]

次に、ウィンドウメソッドへの切り替えを実行して、新しく開いたウィンドウに移動します

driver.switch_to.window(window_after)

同様に、古いウィンドウと新しいウィンドウを切り替えることができます。以下はコード例です

import unittest
from selenium import webdriver

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()
于 2015-05-01T05:58:53.003 に答える
23

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

これは、ドキュメントがウィンドウの切り替えについて述べていることです。

于 2012-05-17T08:11:22.640 に答える
4

「<strong>switchTo」メソッドを使用して名前付きウィンドウ間を移動することで、さまざまなウィンドウを処理できます。

driver.switch_to.window("windowName")

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

または、「ウィンドウ ハンドル」を「<strong>switchTo().window()」メソッドに渡すこともできます。これを知っていれば、開いているすべてのウィンドウを次のように繰り返すことができます。

for handle in driver.window_handles:
    driver.switch_to.window(handle)
于 2015-05-12T06:27:27.197 に答える