Вкладки переключателя селена - PullRequest
0 голосов
/ 09 декабря 2018

Поскольку Firefox больше не поддерживает Control + T для вкладки, я начал использовать driver.execute_script ("window.open ('URL', 'new_window')")

Я пытаюсь отобразитьНазвание другой вкладки я открываю и переключаюсь между ними.Для примера ниже, я ожидаю, что результатом будет facebook, Google и обратно в Facebook.Прямо сейчас выходной Facebook, Facebook и Facebook.

Я попробовал ответ отсюда, но он также не работал: Переключиться на родительскую вкладку с помощью веб-драйвера selenium

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)

Ответы [ 3 ]

0 голосов
/ 09 декабря 2018

Я использовал driver.getWindowHandles();, чтобы получить все окна, и driver.switchTo().window(handle);, чтобы переключиться на требуемое.

0 голосов
/ 09 декабря 2018

Несколько слов о переключении / обработке вкладок / окон:

  • Всегда отслеживайте дескриптор Родительское окно , чтобы вы могли вернуться позже, если потребуется, согласно вашему сценарию использования.
  • Всегда использовать WebDriverWait с ожидаемые условия как number_of_windows_to_be(num_windows) перед переключением между Вкладки / Windows .
  • Всегда отслеживайте маркеры Child Window , чтобы вы могли перемещаться в любое время.
  • Всегда использовать WebDriverWait с expected_conditions как 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
    
0 голосов
/ 09 декабря 2018

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)
...