элемент не найден Ошибка отображается при попытке найти элемент и работать с ним с помощью переключателя в окно - PullRequest
0 голосов
/ 28 апреля 2020

из селена. Импорт веб-драйвера из selenium.webdriver.common.by import По времени импорта

класс SwtWin ():

def swwn(self):
    driver=webdriver.Firefox()
    driver.get("https://learn.letskodeit.com/p/practice")
    driver.implicitly_wait(2)
    ParentWin=driver.current_window_handle
    print(ParentWin)
    driver.find_element_by_id("openwindow").click()
    windows=driver.window_handles
    print(windows)
    for Tab in windows:
          print(Tab)
          if Tab != ParentWin:
             print("Switched to sub window")
             driver.switch_to.window(Tab)
             print(Tab)
             sel=driver.find_element_by_partial_link_text("Login")
             sel.click()
             driver.close()
             break
    driver.switch_to.window(ParentWin)
    driver.execute_script("window.scrollBy(0, 1000);")
    driver.quit()

SwtWin (). Swwn () enter image description here

1 Ответ

0 голосов
/ 28 апреля 2020

Элемент не может быть найден, если поиск элемента выполняется до появления элемента на странице.

В данном коде при выполнении driver.find_element_by_id("openwindow").click() открывается новая страница. и sel=driver.find_element_by_partial_link_text("Login") завершается ошибкой, так как элемент не отображается (проблемы с сетью, медленный ноутбук и т. д. c.).

Стандартное решение, в данном случае, состоит в использовании класса WebDriverWait для дождитесь состояния элемента и, только если появится желаемое состояние (например, наличие элемента на странице), продолжить выполнение.

Вот пример

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Firefox()
driver.get("https://learn.letskodeit.com/p/practice")
driver.implicitly_wait(2)
ParentWin = driver.current_window_handle
print(ParentWin)
driver.find_element_by_id("openwindow").click()
windows = driver.window_handles
print(windows)
for Tab in windows:
    print(Tab)
    if Tab != ParentWin:
        print("Switched to sub window")
        driver.switch_to.window(Tab)
        print(Tab)
        # wait until "Login" appers on the page
        sel = WebDriverWait(driver, 5).until(
            expected_conditions.visibility_of_element_located(
                (By.PARTIAL_LINK_TEXT, "Login")
            )
        )
        # work with login button
        sel.click()
        driver.close()
        break
driver.switch_to.window(ParentWin)
driver.execute_script("window.scrollBy(0, 1000);")
driver.quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...