Не могу понять почему выдается 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')