Не могу понять почему выдается AttributeError: 'list' object has no attribute 'send_keys'

import allure
from selenium.webdriver.chrome.webdriver import WebDriver
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.webelement import WebElement
from selenium.webdriver.support.wait import WebDriverWait
from typing import List

# import driver


def test_1(driver):
    # driver = WebDriver(executable_path='C://Users//vroma//Desktop//automation//chromedriver_win32//chromedriver.exe')
    driver.get('https://ya.ru')
    search_input = driver.find_element_by_xpath('//input[@id="text"]')
    search_button = driver.find_element_by_xpath('//div[@class="search2__button"]//button[@type="submit"]')
    search_input.send_keys('uk.zhk.online')
    search_button.click()

    def check_results_count(driver):
        inner_search_results = driver.find_elements_by_xpath('//li[@class="serp-item"]')
        return len(inner_search_results) >= 10

    with allure.step('количество результатов поиска'):
        WebDriverWait(driver, 1, 0.5).until(check_results_count, 'количество результатов поиска')

    with allure.step('переходим по ссылке результата'):
        search_results = driver.find_elements_by_xpath('//li[@class="serp-item"]')
        link = search_results[0].find_element_by_xpath('.//h2/a')
        link.click()


def test_2(driver):
    # driver = WebDriver(executable_path='C://Users//vroma//Desktop//automation//chromedriver_win32//chromedriver.exe')
    # driver.get('https://ya.ru')
    search_input = driver.find_elements_by_css_selector('.form-group:nth-child(2) > .form-control')
    # (By.CSS_SELECTOR, ".form-group:nth-child(2) > .form-control")
    search_input.send_keys('+7 (911) 111-11-11')  # .send_keys(Keys.Enter)
    search_button = driver.find_elements_by_css_selector('.main-block')
    search_button.click()
    search_input = driver.find_element_by_css_selector('.form-group:nth-child(1) > .form-control')
    search_input.send_keys('qazwsx123')
    search_input.send_keys_by_css_selector('.btn-signin')


driver = WebDriver(executable_path='C://Users//vroma//Desktop//automation//chromedriver_win32//chromedriver.exe')
test_1(driver)
test_2(driver)

Ответы (1 шт):

Автор решения: CrazyElf

Вариант 1: объявить driver во второй функции точно так же, как и в первой функции:

def test_2():
    driver = WebDriver(executable_path='C://Users//vroma//Desktop//automation//chromedriver_win32//chromedriver.exe')
    driver.get('https://ya.ru')
    ...

Вариант 2: создать driver где-то снаружи функций, передавать его в функции как параметр и там им пользоваться:

def test_1(driver):
    driver.get('https://ya.ru')
    ...

def test_2(driver):
    driver.get('https://ya.ru')
    ...

driver = WebDriver(executable_path='C://Users//vroma//Desktop//automation//chromedriver_win32//chromedriver.exe')
test_1(driver)
test_2(driver)

Что касается нового вопроса:

search_input = driver.find_elements_by_css_selector(...)

выдаёт список элементов, а у списка нет такой функции, которую вы от него пытаетесь вызвать:

search_input.send_keys('+7 (911) 111-11-11')

Если вы точно знаете, что вам нужен первый из найденных элементов, можете сделать так:

search_input[0].send_keys('+7 (911) 111-11-11')
→ Ссылка