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

Добрый день!

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

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’

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

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

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

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

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

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

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

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

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

3 лайка

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

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