Python+Webdriver assert после клика по элементу (ожидание загрузки страницы)

python
webdriver
page-object
Теги: #<Tag:0x00007fedd95d2068> #<Tag:0x00007fedd95bbc28> #<Tag:0x00007fedd95b9658>

(ex3me0) #1

Собственно начну с кода:

class SomePage(BasePage):
    def add_new_user(username, password):
        driver.find_element_by_id('username_field').send_keys(username)
        driver.find_element_by_id('password_field').send_keys(password)
        driver.find_element_by_id('submit_button').click()

Тест:

...
some_page.add_new_user('user1', 'password1')
self.assertIn('Added success!', self.driver.page_source)

Проблема заключается в том, что сразу после метода add_new_user вызывается assert, а тест валится из-за того, что страница не загрузилась до конца.
Как решается, чем лечится? Можно конечно сделать костыль типа time.sleep, или поиск тега footer, но не хочется)

З.Ы. смотрел тут - вызвало у меня приступ тоски о_О


(Keiga) #2

Т.е. использовать implicitly_wait или explicit wait можно не предлагать?


(ex3me0) #3

Имплисит - ожидает загрузку элемента
Эксплисит - явно ожидает загрузку элемента

Я не ищу ничего после выполнения метода, а пытаюсь получить сорц страницы, на это действие имплисит и эксплисит не распространяются видимо (т.к. с time.sleep тест проходит успешно)


(ex3me0) #4

*Вдруг это важно: драйвер инициализируется и убивается вот так

class BaseTestCase(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome(executable_path='path/to/chromedriver')
        self.driver.implicitly_wait(10)

    def tearDown(self):
    self.driver.quit()

Не знаю на что и грешить, но вот при линейном (record&play) написании тестов - проблема описанная в 1м посте не возникает, а с пейдж-обджектом вечно какой-то гемор))) хоть и прекрасно понимаю, что дело не в нем


(rmerkushin) #5

А чем не нравится метод с WebDriverWait или событием по JavaScript?


(5am) #6

текст "Added success!" скорее всего лежит на каком нибудь div'е или т.п. почему бы не проверять наличие элемента ?