私はSelenium自動化プロジェクト Pythonを使用して作業しています。
複数のブラウザーウィンドウを処理する問題に直面しています。
シナリオは次のとおりです。ホームページのリンクをクリックすると、新しいウィンドウが開きます。新しく開いたウィンドウでは、ホームページのWebドライバーにフォーカスがあるため、アクションを実行できません。
背景ウィンドウから新しく開いたウィンドウにフォーカスを変更する方法を教えてもらえますか?
可能な解決策はdriver.switch_to.window()
ですが、ウィンドウの名前が必要です。ウィンドウの名前を調べる方法は?これが間違った方法である場合、誰かがこのアクションを実行するためのコード例を提供できますか?
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()
window_handles
は、開いているすべてのウィンドウへの参照を提供します。
this は、Docuがウィンドウを切り替えることについて言わなければならないことです。
すでに与えられた答えに加えて、新しいタブを開くには、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])
お役に立てれば。
「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)
例えばあなたは取ることができます
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)