t.me/atinfo_chat Telegram группа по автоматизации тестирования

Работа с фреймом,состояшим из нескольких страниц selenium python 3

Теги: #<Tag:0x00007f748b62e948> #<Tag:0x00007f748b62e538> #<Tag:0x00007f748b62e3a8> #<Tag:0x00007f748b62e290>

Здравствуйте у меня возникла проблема. Есть список заявлений на сайте при
#вход в заявление

def wait_file_xpath(driver, xpath):
try:
wait = WebDriverWait(driver, 30).until(
EC.presence_of_element_located((By.XPATH, xpath)))
return wait
except TimeoutException:
print("Не дождались появления панели на форме " + xpath)

def wait_and_click_xpath(driver, xpath):
wait_xpath_unified(driver, ‘element_to_be_clickable’, xpath).click()
=================main=============================
do_xpath = ‘//span[@class=“link__text ng-binding”]’
wait_file_xpath(driver, do_xpath)
wait_and_click_xpath(driver, ‘//span[@class=“link__text ng-binding”]’)
#####Переключение во фрейм страницы 2
wait = WebDriverWait(driver, 30)
wait.until(EC.frame_to_be_available_and_switch_to_it(0))

#Всё нормально идёт, как только дохожу до страницы 2


#Не могу работать с элементами этой страницы.

Пытаюсь реализовать заполнение коментария, нажатие далее и переключение на страницу 3, я как понял у меня 1 и тот же фрейм, но он постоянно перегружается при нажатии далее.

Комментарий по заявлению

for i in driver.find_elements_by_css_selector(’#comment’):
try:
i.send_keys(‘Комментарий по заявлению’)
except Exception:
print(‘Поле не найдено’)

Далее 2

#####так не находит
driver.find_element_by_xpath(’//input[@name=“outcome”]’)
#####или так, если работать с elements то ничего не происходит и ошибку тоже не даёт
for i in range(20):
try:
but=driver.find_element_by_xpath(’//input[@name=“outcome”]’)
except Exception:
print(‘кнопка не найдена!’)
else:
but.click()

Переключение во фрейм страницы 3

wait = WebDriverWait(driver, 30)
wait.until(EC.frame_to_be_available_and_switch_to_it(0))

Подскажите пожалуйста, что я делаю не так и как можно это реализовать?

табе нужно найти локатор этого фрейма, переключиться в него, а потом уже искать элементы

Я бы с превеликим удовольствием.Не подскажете как реализовать? По @src=’…’ Не подходит, так как он постоянно разный у заявления.

береш в хром тулс на него кликаешь
потом райт маус копи элемент селектор

С помощью css: [src*=‘formBuider/getTaskFrom’]
И как ты выполняешь переключение в этот фрейм?

Здравствуй Рома! Переключение делаю по порядковому номеру фрейма.
Сейчас попробую твой вариант.

wait = WebDriverWait(driver, 30)
wait.until(EC.frame_to_be_available_and_switch_to_it(0))

Проверь сразу этот локатор

Попробовал таким образом

iframe = driver.find_element_by_css_selector("[src*=‘formBuider/getTaskFrom’]")
driver.switch_to_frame(iframe)
#Нет такого элемента

Попробовал таким образом

iframe = driver.find_element_by_css_selector("[src*=‘formBuider/getTaskFrom’]")
driver.switch_to_frame(iframe)
#Нет такого элемента

так попробуй
iframe = driver.find_element_by_css_selector("[src*=‘formBuilder/getTaskForm’]")
driver.switch_to_frame(iframe)

Может я конечно совсем не вменяемый, но чем отличается мой метод от твоего?

Рома, а с элементами страницы не подскажешь как правильно общаться в моём случае?

Всё понял как с этим работать. Сначала при входе на форму переключаемся на фрейм

wait = WebDriverWait(driver, 30)
wait.until(EC.frame_to_be_available_and_switch_to_it(0))

Потом работаем как с обычной страницей, при переходе на следущую страницу не нужно опять переключатся в какой-либо фрейм. Остался один при переходе с предпоследней страницы на последнюю возникает такая неприятность.

Отличается локатором

[src*='formBuider/getTaskFrom']
[src*='formBuilder/getTaskForm']
1 Симпатия

Похоже на баг продукта)

Точно) Очепятка вышла!) Спасибо большое за разъеснение Рома)

Да действительно баг, если не подгружать файл, а сразу переходить на следующую страницу всё хорошо!)

Отмечай как ответ, что помогло)