web-dev-qa-db-ja.com

Selenium for Pythonで新しいウィンドウに切り替える方法は?

私はSelenium自動化プロジェクト Pythonを使用して作業しています。

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

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

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

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

45

window_handlesおよびswitch_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
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 __== "__main__":
unittest.main()
39
vishy dewangan

window_handles は、開いているすべてのウィンドウへの参照を提供します。

this は、Docuがウィンドウを切り替えることについて言わなければならないことです。

21
mata

すでに与えられた答えに加えて、新しいタブを開くには、javascriptコマンドwindow.open()を使用できます。

例えば:

# 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])

お役に立てれば。

15
Elliot Ledger

switchTo」メソッドを使用して名前付きウィンドウ間を移動することにより、異なるウィンドウを処理できます。

driver.switch_to.window("windowName")

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

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

for handle in driver.window_handles:
    driver.switch_to.window(handle)
3
Shaik

例えばあなたは取ることができます

driver.get('https://www.naukri.com/')

現在のウィンドウなので、名前を付けることができます

main_page = driver.current_window_handle

現在のウィンドウ以外に少なくとも1つのウィンドウポップアップがある場合は、このメソッドを試して、インデックスのn回の試行によってbreakステートメントにif条件を入れることができます。

for handle in driver.window_handles:
    if handle != main_page:
        print(handle)
        login_page = handle
        break

driver.switch_to.window(login_page)

今、あなたが適用しなければならない資格情報が何であれ、それはloggenになった後に提供します。ウィンドウは消えますが、メインページウィンドウに来なければなりません

driver.switch_to.window(main_page)
sleep(10)
2
Sanyam Gupta