Поскольку Firefox больше не поддерживает Control + T для вкладки, я начал использовать driver.execute_script ("window.open ('URL', 'новое_окно')")
Я пытаюсь отобразить заголовок другой вкладки, которую я открываю, и переключаюсь между ними. В приведенном ниже примере я ожидаю, что результатом будет facebook, google и обратно в facebook. Прямо сейчас вывод - facebook, facebook и facebook.
Я попробовал ответить здесь, но он тоже не сработал: Вернитесь на родительскую вкладку с помощью selenium webdriver
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.facebook.com/")
print(driver.title)
driver.execute_script("window.open('http://google.com', 'new_window')")
print(driver.title)
driver.switch_to.window(driver.window_handles[0])
print(driver.title)
ОБНОВЛЕНО: Я попробовал следующий код, но он все равно не сработал.
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.facebook.com/")
print(driver.title)
window_before = driver.window_handles[0]
driver.execute_script("window.open('http://google.com', 'new_window')")
window_after = driver.window_handles[1]
driver.switch_to.window(window_after)
print(driver.title)






window.open откроет ссылку в новой вкладке. Драйвер Selenium Firefox не имеет возможности переключаться между вкладками, поскольку для них есть только один дескриптор окна (в отличие от Chrome, у которого их 2). Если вы дадите команде window() параметр 'specs' с шириной и высотой, он откроет новое окно, и вы сможете переключиться.
После открытия нового окна драйвер по-прежнему сосредоточен на первом, вам нужно сначала переключиться в новое окно.
size = driver.get_window_size();
driver.execute_script("window.open('http://google.com', 'new_window', 'height=argument[0], width=argument[1]')", size['height'], size['width'])
driver.switch_to.window(driver.window_handles[1])
print(driver.title)
@ tada23 Обновил мой ответ.
Я использовал driver.getWindowHandles();, чтобы заставить все окна и driver.switchTo().window(handle); переключиться на нужное.
Несколько слов о переключении / работе вкладок / окон:
Всегда отслеживайте дескриптор Родительское окно, чтобы при необходимости можно было вернуться назад в соответствии с вашим вариантом использования.
Всегда используйте WebDriverWait с ожидаемые_условия как number_of_windows_to_be(num_windows) перед переключением между Вкладки / Окна.
Всегда отслеживайте дескрипторы Дочернее окно, чтобы вы могли перемещаться, когда это необходимо.
Всегда используйте WebDriverWait с ожидаемые_условия как title_contains("partial_page_title") перед извлечением Заголовок страницы.
Вот ваш собственный код с некоторыми незначительными изменениями, упомянутыми выше:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox(executable_path=r'C:\WebDrivers\geckodriver.exe')
driver.get("http://www.facebook.com/")
print("Initial Page Title is: %s" %driver.title)
windows_before = driver.current_window_handle
driver.execute_script("window.open('http://google.com')")
WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))
windows_after = driver.window_handles
new_window = [x for x in windows_after if x != windows_before][0]
driver.switch_to.window(new_window)
WebDriverWait(driver, 20).until(EC.title_contains("G"))
print("Page Title after first window switching is: %s" %driver.title)
driver.close()
driver.switch_to.window(windows_before)
WebDriverWait(driver, 20).until(EC.title_contains("F"))
print("Page Title after second window switching is: %s" %driver.title)
driver.quit()
Консольный вывод:
Initial Page Title is: Facebook – log in or sign up
Page Title after first window switching is: Google
Page Title after second window switching is: Facebook – log in or sign up
Эта команда всегда переносит вас на недавно открытую новую вкладку в Chrome. Протестировано в последних версиях Chrome и Pytest на Mac.
selenium.switch_to.window(selenium.window_handles[-1])
Я все еще не могу распечатать заголовок второго окна после переключения. Вместо того, чтобы снова печатать facebook, теперь он просто ничего не отображает.