• Как определить элемент TextInputbox с помощью selenium?

    kelwin27, там все очень просто, такого элемента на странице не существует, сама форма добавлена на страницу через iframe, а в браузере вы его находите так как там поиск работает и по основной странице и по всем вложенным iframe.

    Ниже пример работающего кода с вашими локаторами
    import time
    
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.remote.webelement import WebElement
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.chrome.options import Options
    from webdriver_manager.chrome import ChromeDriverManager
    
    # Инициализируем webdriver
    
    options = Options()
    options.add_argument('--disable-infobars')
    options.add_argument('start-maximized')
    options.add_argument('--disable-extensions')
    driver = webdriver.Chrome(executable_path=ChromeDriverManager().install(), chrome_options=options)
    driver.delete_all_cookies()
    driver.get('https://telemost.yandex.ru/')
    
    
    # Реализуем функции с ожиданием по умолчанию
    
    def my_find(locator, timeout=1, retry=20) -> WebElement:
        for i in range(retry):
            try:
                return WebDriverWait(driver, timeout).until(EC.element_to_be_clickable(locator))
            except Exception:
                if i == retry - 1:
                    return driver.find_element(*locator)
    
    
    def my_click(locator, timeout=1, retry=20):
        for i in range(retry):
            try:
                element = my_find(locator, timeout=timeout)
                element.click()
                return
            except Exception:
                if i == retry - 1:
                    pass
    
    
    def my_send_keys(locator, keys, timeout=1, retry=20):
        elem = my_find(locator, timeout=timeout, retry=retry)
        elem.clear()
        elem.send_keys(keys)
    
    
    # Сам автотест
    
    login_button_locator = (By.XPATH, '//button[@data-test-id="login-button"]')
    my_click(login_button_locator)
    
    login_input_locator = (By.ID, 'passp-field-login')
    my_send_keys(login_input_locator, 'ЛОГИН')
    
    continue_button_locator = (By.ID, 'passp:sign-in')
    my_click(continue_button_locator)
    
    password_input_locator = (By.ID, 'passp-field-passwd')
    my_send_keys(password_input_locator, 'ПАРОЛЬ')
    
    continue_button_locator = (By.ID, 'passp:sign-in')
    my_click(continue_button_locator)
    
    planning_button_locator = (By.XPATH, '//button[@data-test-id="button"][2]')
    my_click(planning_button_locator)
    
    iframe_locator = (By.TAG_NAME, 'iframe')
    iframe = my_find(iframe_locator)
    
    # Входим в контекст Iframe
    driver.switch_to.frame(iframe)
    
    input_name_locator = (By.XPATH, '//div[contains(@class, "qa-NameField")]//input')
    my_send_keys(input_name_locator, 'нашел')
    
    # Выходим из контекста Iframe на основную страницу
    driver.switch_to.default_content()
    
    time.sleep(10)
  • Как определить элемент TextInputbox с помощью selenium?

    И ещё, я копировал себе ваш локатор, а теперь вижу, что он не правильный, там лишняя скобка.
    //button[@data-test-id="button"])[2] а нужно //button[@data-test-id="button"][2]
  • Как определить элемент TextInputbox с помощью selenium?

    kelwin27, значит в момент выполнения кода, элемента с таким локатором нет.
    Когда вы смотрите локатор в браузере вы делаете какие-то действия, которые не делаете в скрипте.
  • Как определить элемент TextInputbox с помощью selenium?

    kelwin27, а что именно вы пытаетесь сделать?
    В коде выше вы
    1. Нажимаете на кнопку
    2. Обновляете страницу (я не знаю вашу задачу, но выглядит странно)
    3. Ищите форму для ввода
    4. Вводите текст в форму ввода

    Я только предполагаю, что вы хотели сделать что-то такое
    time.sleep(10)
    button = driver.find_element_by_xpath('//button[@data-test-id="button"])[2]')
    print('нашли кнопку')
    button.click()
    print('кликнули по кнопке')
    time.sleep(10)
    input = driver.find_element_by_xpath('//div[contains(@class, "qa-NameField")]//input')
    print('нашли поле ввода')
    input.send_keys('нашел')
    print('отправили текст в поле ввода')


    Потом уже, когда у вас простой вариант скрипта будет работать, нужно избавляться от sleep, будет что-то похожее на такой код (не запускал, но надеюсь без опечаток)
    # Реализуем функции с ожиданием по умолчанию
    
    def my_find(locator, timeout=1, retry=20) -> WebElement:
        for i in range(retry):
            try:
                return WebDriverWait(driver, timeout).until(EC.element_to_be_clickable(locator))
            except Exception:
                if i == retry - 1:
                    return driver.find_element(*locator)
    
    def my_click(locator, timeout=1, retry=20):
        for i in range(retry):
            try:
                element = my_find(locator, timeout=timeout)
                element.click()
                return
            except Exception:
                if i == retry - 1:
                    pass
    
    def my_send_keys(locator, keys, timeout=1, retry=20):
        elem = my_find(locator, timeout=timeout, retry=retry)
        elem.clear()
        elem.send_keys(keys)
    
    #Перепишем скрипт с этими функциями
    
    button_locator = (By.XPATH, '//button[@data-test-id="button"])[2]')
    my_click(button_locator)
    
    input_locator = (By.XPATH, '//div[contains(@class, "qa-NameField")]//input')
    my_send_keys(input_locator, 'нашел')


    Получившийся скрипт можно и дальше улучшать, для этого смотрите на паттерн Page Object.
  • Как определить элемент TextInputbox с помощью selenium?

    kelwin27, советую сначала проверить локатор в браузере через Dev Tools, если элемент правильно находится в браузере (что очень вероятно), то проблема не в локаторе.
    Если в Dev Tools локатор правильно работает, а при запуске теста возникает ошибка, то можете попробовать на время заменить задержку через Expected Conditions на задержку через банальный time.sleep, это может помочь вам разобраться, что происходит в тесте.