Не удается использовать старое окно в Selenium с firefox и python

#python #selenium #selenium-webdriver

Вопрос:

 # filename: LudusLogin
import os
from dotenv import load_dotenv
from selenium.webdriver import Firefox
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.expected_conditions import title_is
from selenium.webdriver.support.wait import WebDriverWait
import time


def login():
    # Firefox driver for running window
    driver = Firefox()

    # Going to website
    driver.get("website")

    WebDriverWait(driver, timeout=3).until(title_is("Meddelelser"))

    # Login with credentials from .env
    load_dotenv()

    usr = os.getenv("usr")
    passwd = os.getenv("passwd")

    usr_field = driver.find_element(By.CSS_SELECTOR, "#brugerIdField")
    passwd_field = driver.find_element(By.CSS_SELECTOR, "#kodeordField")

    usr_field.send_keys(usr)
    passwd_field.send_keys(passwd)
    passwd_field.send_keys(Keys.RETURN)

    # Closing messages
    time.sleep(2)
    close_btn_meddelelser = driver.find_element(By.CLASS_NAME, "v-window-closebox")
    close_btn_meddelelser.click()
    WebDriverWait(driver, timeout=3).until(title_is("Aktuelt"))

    # window_handle = driver.window_handles
    window_handle = driver.window_handles[0]

    return window_handle

 

Следующий Файл
Я хочу переключиться в окно из кода выше и продолжить выполнение кода в том же окне

 # filename: Main.py
import LudusLogin
from selenium.webdriver import Firefox
from selenium.webdriver.common.by import By
from selenium.webdriver.support.expected_conditions import title_is
from selenium.webdriver.support.wait import WebDriverWait

handle = LudusLogin.login()
print(handle)
driver = Firefox(executable_path='geckodriver.exe')
driver.switch_to.window(handle)

skema_btn = driver.find_element(By.CSS_SELECTOR, "span.v-menubar-menuitem:nth-child(4)")
skema_btn.click()
WebDriverWait(driver, timeout=3).until(title_is("Skemaer"))

 

Я хочу, чтобы все сценарии для веб-сайта были в Main.py или другие файлы и только логин в одном файле. Когда я пытаюсь, как показано на рисунке, я получаю ошибку: selenium.common.исключения.Исключение NoSuchWindowException: Сообщение: Не удается найти окно:

Ответ №1:

Создайте новый экземпляр драйвера Firefox в Main.py первом:

 driver = Firefox()
 

Измените login метод и в LudusLogin.py и внесите изменения, чтобы принять входную переменную с именем driver . Затем удалите строку

 driver = Firefox()
 

внутри LudusLogin.py и позвольте login телу использовать входную переменную driver .

Теперь у Main.py вас есть driver переменная, которую можно использовать после вызова login метода. тот driver , который вы создаете только один раз.