Использование assert для отлова ошибок при работе с элементами страницы

python
selenium
Теги: #<Tag:0x00007f3d4493c1e0> #<Tag:0x00007f3d44947c70>

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

Здравствуйте есть такая проблема пытаюсь отлавливать ошибку через assert, которая должна возникать в том случае, если элемент не найден или по каким либо другим причинам недоступен.

Пытаюсь реализовать так

   assert(wait = WebDriverWait(driver, 30).until(
    EC.presence_of_element_located((By.XPATH, //*[@id='content']/*//a[.='Получить услугу'])))), "no element"

Так срабатывает, но как раз не так как нужно, а когда находит элемент и на этом месте прерывает программу.
Подскажите пожалуйста как реализовать обратный случай, если этот элемент не найден падать и выдавать ошибку?


(Ильдар Бекмансуров) #2

Может подойдёт через try - except? Типа:

try:
    wait...
except NoSuchElementException:
    print ("element not found!")

(Oleksii Ihnatiuk) #3

Поставить в начале знак !
Если полностью оставить вашу реализацию, то:

assert(!(wait = WebDriverWait(driver, 30).until(
EC.presence_of_element_located((By.XPATH, //*[@id='content']/*//a[.='Получить услугу'])))), "no element"))


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

Через try и except делал слишком много кода лишнего получается, хотел через assert научиться работать.


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

Вроде всё так красиво и просто, но увы не работает такая реализация(


(Максим Рублёв) #6
    try:
        form_xpath = '//span[@class="link__text ng-binding"]'
        wait_file_xpath(driver, form_xpath)
        wait_and_click_xpath(driver, '//span[@class="link__text ng-binding"]')
    except Exception:
        print('Заявление с таким номером не найдено в СИР')

(Oleksii Ihnatiuk) #7

Вам не нужно выдумывать, что-то свое. Достаточно почитать доки про Ассерты. Можете полистать Ассерты разных библиотек: JUnit, Java Hamcrest, AssertJ, Truth. Выбирайте на ваш вкус и цвет. :slight_smile:


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

Спасибо большое. в java немного не то.