Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

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

python
selenium
webdriver
testng
Теги: #<Tag:0x00007f7b64b5dbc8> #<Tag:0x00007f7b64b5d880> #<Tag:0x00007f7b64b5d6a0> #<Tag:0x00007f7b64b5d510>

(Максим Рублёв) #1

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

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))

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


(Sergey Pirogov) #2

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


(Максим Рублёв) #3

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


(Sergey Pirogov) #4

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


(Roma Marinsky) #5

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


(Максим Рублёв) #6

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

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


(Roma Marinsky) #7

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


(Максим Рублёв) #8

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

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


(Максим Рублёв) #9

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

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


(Roma Marinsky) #10

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


(Максим Рублёв) #11

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


(Максим Рублёв) #12

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


(Максим Рублёв) #13

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

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

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


(Roma Marinsky) #14

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

[src*='formBuider/getTaskFrom']
[src*='formBuilder/getTaskForm']

(Roma Marinsky) #15

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


(Максим Рублёв) #16

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


(Максим Рублёв) #17

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


(Roma Marinsky) #18

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