Обрабатывать несколько окон в Python

Я работаю надselenium automation project используя Python.

Я столкнулся с проблемой, которая обрабатывает несколько окон браузера.

Сценарий выглядит следующим образом. Когда я нажимаю ссылку на домашней странице, открывается новое окно. В открывшемся окне я не могу выполнять никаких действий, потому что все еще фокусируюсь на веб-драйвере домашней страницы.

Кто-нибудь может показать мне, как изменить фокус с фонового окна на недавно открытое окно?

Возможное решениеdriver.switch_to.window(), но для этого требуется имя окна. Как узнать имя окна? Если это неправильный способ сделать это, кто-нибудь может привести несколько примеров кода для выполнения этого действия?

Ответы на вопрос(4)

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 __name__ == "__main__":
unittest.main()
 Curious Student09 окт. 2018 г., 19:05
@ LucSpan У меня была та же проблема, но использование time.sleep (10) для ожидания загрузки другой веб-страницы решило эту проблему
 LucSpan27 июл. 2017 г., 18:21
Следуя твоему коду, я получаюIndexError: list index out of range при выполненииwindow_after = browser.window_handles[1]. Что не так? Видеть: / Stackoverflow.com вопросы / 45354850 / ...

window_handles должен дать вам ссылки на все открытые окна.

эт это то, что документ должен сказать о переключении окон.

которые уже даны, чтобы открыть новую вкладку, команда javascriptwindow.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])

Надеюсь это поможет

 Stephan Schielke13 июл. 2017 г., 13:08
switch_to_window устарела. Используйте switch_to.window
 Elliot Ledger22 июл. 2017 г., 11:21
Спасибо @StephanSchielke, обновленный ответ

перемещаясь между именованными окнами, используя переключиться н »Метод:

driver.switch_to.window("windowName")

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

Кроме того, вы можете передать «дескриптор окна» на switchTo (). окно () »Метод. Зная это, можно перебирать каждое открытое окно следующим образом:

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

Ваш ответ на вопрос