Обрабатывать несколько окон в Python
Я работаю над проектом автоматизации селена с использованием 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()
Вверху уже даных ответов, чтобы открыть новую вкладку команда 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])
Надеюсь это поможет.
window_handles
должен дать вам ссылки на все открытые окна.
это то, что документ должен сказать о переключении окон.
Например вы можете взять
driver.get('https://www.naukri.com/')
поскольку это текущее окно, мы можем назвать его
main_page = driver.current_window_handle
если есть всплывающее окно по крайней мере 1, кроме текущего окна, вы можете попробовать этот метод и поставить условие if в операторе break, нажав n пробную версию для индекса
for handle in driver.window_handles:
if handle != main_page:
print(handle)
login_page = handle
break
driver.switch_to.window(login_page)
Теперь, какие бы учетные данные вы не применили, предоставьте их после входа в систему. Окно исчезнет, но вы должны перейти к окну главной страницы, и все готово.
driver.switch_to.window(main_page)
sleep(10)
Мы можем обрабатывать разные окна, перемещаясь между именованными окнами, используя метод "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)