Проблема условий при создании теста Selenium\Python

python
webdriver
Теги: #<Tag:0x00007f3d44f71470> #<Tag:0x00007f3d44f71290>

#1

Добрый день!

Столкнулся с проблемой написания условий при заполнении формы регистрации.

def test_reg_url(self):
    for line in file_1:
        self.driver = webdriver.Chrome()
        self.driver.get(line)
    #    self.driver.maximize_window()
        self.driver.implicitly_wait(10)
    #REGISTRATION STEPS
        reg = RegistrationForm(self.driver)
    # NAME
        try:
            if reg.name.is_displayed():
                reg.name.send_keys('test_name')
            else:
                print 'something'
        except NoSuchElementException:
            print 'something'
        try:
            if reg.name_1.is_displayed():
                reg.name_1.send_keys('test_name')
        except NoSuchElementException:
            print 'something'

дело в том, что мой тест валится на строчке if reg.name.is_displayed():
пишет: NoneType' object has no attribute 'is_displayed'

Как мне сделать так, чтобы тест дальше пошел по условию?
П.С. данного элемента нет на странице.


(Bolatbek) #2

А что возвращает RegistrationForm()?


#3

пока что ничего, я её не сабмичу.
Проблема в том, что мне надо написать (унифицировать) тест для разных сайтов, там практически одна и та же форма регистрации, только иногда список полей меняется, и поэтому мне надо написать условия, типа если поле отображается, то заполнить, если поля нет, то идти дальше.


(Bolatbek) #4

reg.name - это вебэлемент?
то проверяй, существует ли reg.name, а только потом - видимый он или нет.


#5

эм, а каким именно образом проверить существует он или нет, is element present ?


(Alexander) #6

Первый пример не подойдет?
http://selenium-python.readthedocs.io/waits.html

Само собой не полностью, а та часть где (ExpectedConditions) EC.presence_of_element


#7

что-то не получается.
у меня на первом сайте этого элемента нет и тест сразу завалился, а на втором есть этот элемент


(Bolatbek) #8

Проверять можно например так:
find_elements_by_xpath -> считаешь количество, если ==0, тогда элемента нет и идешь дальше
если >0, тогда проверяешь на видимость и пробуешь заполнить


#9

спасибо за подсказку, этот способ заработал


#10

а чому для цього не використовувати @pytest.mark.parametrize()
?