Перейти к содержимому

Фотография

Python + selenium проверить есть ли элемент на странице

python selenium

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 16

#1 KangarooJack

KangarooJack

    Новый участник

  • Members
  • Pip
  • 17 сообщений

Отправлено 24 февраля 2016 - 14:32

Здравствуйте, а есть ли возможность проверить наличие элемента в связке python + selenium ? Пробовал сделать через assert

Скрытый текст
  но естественно ничего не заработало в интернете вообще информации о python + selenium практически 0. Нашел что есть команда типа assertElementPresent в либе seleniumwrapper но как ей пользоваться нигде не написано. Что то мне подсказывает python + selenium ущербная комбинация. Подскажите пожалуйста как можно все таки с помощью этого убожества проверить наличие элемента (кнопки, списка, поля ввода) на странице.


  • 0

#2 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 24 февраля 2016 - 14:40

Ну можно как-то так:
 

from selenium.common.exceptions import NoSuchElementException        
def check_exists_by_xpath(xpath):
    try:
        webdriver.find_element_by_xpath(xpath)
    except NoSuchElementException:
        return False
    return True

  • 1

#3 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 24 февраля 2016 - 14:45

в интернете вообще информации о python + selenium практически 0

Коллеги, а "умение гуглить" еще не стало основным требованием к начинающим тестировщикам?
  • 0

#4 KangarooJack

KangarooJack

    Новый участник

  • Members
  • Pip
  • 17 сообщений

Отправлено 24 февраля 2016 - 15:16

Freiman,  а подскажи пожалуйста еще как сделать так что бы функция выбивала ошибку так же как и  allert.
  • 0

#5 KangarooJack

KangarooJack

    Новый участник

  • Members
  • Pip
  • 17 сообщений

Отправлено 24 февраля 2016 - 15:38

Сделал так вроде работает, спасибо.

from selenium.common.exceptions import NoSuchElementException
def check_exists_by_xpath(self):
try:
webdriver.find_element_by_xpath(self)
except NoSuchElementException:
return self.assertTrue(False)
return True


  • 0

#6 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 24 февраля 2016 - 15:57

Сделал так вроде работает, спасибо.

from selenium.common.exceptions import NoSuchElementException
def check_exists_by_xpath(self):
try:
webdriver.find_element_by_xpath(self)
except NoSuchElementException:
return self.assertTrue(False)
return True

Ну хорошо, что работает !))

from selenium.common.exceptions import NoSuchElementException        
def check_exists_by_xpath(xpath):
    try:
        webdriver.find_element_by_xpath(xpath)
    except NoSuchElementException:
        return False
    return True

self.assertTrue(check_exists_by_xpath(xpath))


  • 1

#7 KangarooJack

KangarooJack

    Новый участник

  • Members
  • Pip
  • 17 сообщений

Отправлено 24 февраля 2016 - 16:00

Lzk ваш метод эстетичнее))
  • 0

#8 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 04 марта 2016 - 09:29

А ещё можно без перехвата исключений, вот так:

def check_exists_by_xpath(xpath):
    return len(webdriver.find_elements_by_xpath(xpath)) > 0

  • 1
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#9 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 04 марта 2016 - 09:58

А ещё можно без перехвата исключений, вот так:

def check_exists_by_xpath(xpath):
    return len(webdriver.find_elements_by_xpath(xpath)) > 0

Да, красивый метод.
Правда, читаемость, на мой взгляд, чуть хуже?
  • 0

#10 BadMF

BadMF

    Специалист

  • Members
  • PipPipPipPipPip
  • 809 сообщений
  • ФИО:Dmitry Petrov

Отправлено 09 марта 2016 - 16:11

 

А ещё можно без перехвата исключений, вот так:
 

def check_exists_by_xpath(xpath):
    return len(webdriver.find_elements_by_xpath(xpath)) > 0
Да, красивый метод.
Правда, читаемость, на мой взгляд, чуть хуже?

 

Дело привычки. По началу немного напрягает когда основная работа осуществляется внутри return, но потом жить без этих мини методов не можешь =)

Эстетически код выглядит гораздо лучше и писать меньше.


  • 0

#11 Deon

Deon

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Дмитрий

Отправлено 26 декабря 2016 - 12:31

 

А ещё можно без перехвата исключений, вот так:

def check_exists_by_xpath(xpath):
    return len(webdriver.find_elements_by_xpath(xpath)) > 0

 

а подскажите в вашем методе возвращает значение если только больше 0 но мне бы надо чтобы возвращало и когда его нет и когда есть ниже код почему то не работает

def check_exists_by_class(unread):
    if len(driver.find_element_by_class_name('unread')) == 0:
        return 'Нет новых писем'
    else:
        return driver.find_element_by_class_name('unread').text

  • 0

#12 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 26 декабря 2016 - 12:40

 

 

А ещё можно без перехвата исключений, вот так:

def check_exists_by_xpath(xpath):
    return len(webdriver.find_elements_by_xpath(xpath)) > 0

 

а подскажите в вашем методе возвращает значение если только больше 0 но мне бы надо чтобы возвращало и когда его нет и когда есть ниже код почему то не работает

 

ты немного другую функцию используешь ) в функции Алексея ищутся все элементы с определенным xpath(findElements) и потом считается размер массива

 

Но ты можешь использовать и ее, только в else тебе нужно будет запилить цикл, что бы подтянуть текст всех элементов


  • 0

#13 Deon

Deon

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Дмитрий

Отправлено 26 декабря 2016 - 13:01

 

 

 

А ещё можно без перехвата исключений, вот так:

def check_exists_by_xpath(xpath):
    return len(webdriver.find_elements_by_xpath(xpath)) > 0

 

а подскажите в вашем методе возвращает значение если только больше 0 но мне бы надо чтобы возвращало и когда его нет и когда есть ниже код почему то не работает

 

ты немного другую функцию используешь ) в функции Алексея ищутся все элементы с определенным xpath(findElements) и потом считается размер массива

 

Но ты можешь использовать и ее, только в else тебе нужно будет запилить цикл, что бы подтянуть текст всех элементов

 

у меня она не срабатывает с самого начала тк driver.find_element_by_class_name('unread') изначально не существует и выдается ошибка 


  • 0

#14 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 26 декабря 2016 - 13:28

def check_exists_by_name(name):
    return len(webdriver.find_elements_by_name(name)) > 0
check_exists_by_name('unread')

так используешь ?


  • 0

#15 Deon

Deon

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Дмитрий

Отправлено 27 декабря 2016 - 16:21

def check_exists_by_name(name):
    return len(webdriver.find_elements_by_name(name)) > 0
check_exists_by_name('unread')

так используешь ?

 

def check_exists_by_class(unread):
    if len(driver.find_element_by_class_name('unread')) == 0:
        return 'Нет новых писем'
    else:
        return driver.find_element_by_class_name('unread').text

вот так

или так

def unread():
    if len(driver.find_element_by_class_name('unread')) == 0:
        return 'Нет новых писем'
    else:
        return driver.find_element_by_class_name('unread').text

print(unread())

  • 0

#16 baxatob

baxatob

    Опытный участник

  • Members
  • PipPipPipPip
  • 258 сообщений
  • ФИО:Юрий
  • Город:Riga

Отправлено 28 декабря 2016 - 07:50

if len(driver.find_element_by_class_name('unread')) == 0:

driver.find_element_by_class_name() - возвращает либо элемент (если находит), либо бросает ошибку. Поэтому так делать, как вы, неправильно. 

 

У Алексея используется другая функция - driver.find_elements_by_name() 

Обратите внимание - find_elementво множественном числе. Она будет искать ВСЕ элементы, отвечающие заданному критерию и возвращать СПИСОК. Только в этом случае можно применять функцию len(), которая считает длину списка.


  • 0

#17 Deon

Deon

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Дмитрий

Отправлено 28 декабря 2016 - 07:56

if len(driver.find_element_by_class_name('unread')) == 0:

driver.find_element_by_class_name() - возвращает либо элемент (если находит), либо бросает ошибку. Поэтому так делать, как вы, неправильно. 

 

У Алексея используется другая функция - driver.find_elements_by_name() 

Обратите внимание - find_elementво множественном числе. Она будет искать ВСЕ элементы, отвечающие заданному критерию и возвращать СПИСОК. Только в этом случае можно применять функцию len(), которая считает длину списка.

 

тогда может тут подскажешь? http://software-test...schenij-python/


  • 0



Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных