﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
30974	Selenium asserts should be wait statements	Johannes Maron	Johannes Maron	"I just took a deep dive into our selenium tests, because ... well... they are ""not deterministic sometimes"" ;)

I realized that we use a lot of assertions in our tests, where I believe we should be using wait statements. Mainly because selenium tests are asynchronous and don't really when an assertion is true. It seems more reasonable to be, to simply say, what we expect and give it a reasonable amount of time before we fail.

So instead of:

{{{
self.assertEqual(
    self.selenium.switch_to.active_element,
    self.selenium.find_element_by_id('id_name')
)
}}}

We do:

{{{
self.wait_until(
    lambda selenium:
        selenium.switch_to.active_element == selenium.find_element_by_id('id_name')
)
}}}

I know this is not a foreign concept if you have been doing a lot of Selenium testing. Still, there are many cases where we do it ""wrong"" and the test suite fails ""sometimes"".

I believe the main difference is that in one case you raise an `AssertionError` in the other a `TimeoutError`. However, we could cast those to have the tests fail not error."	Bug	closed	Testing framework	dev	Normal	duplicate			Accepted	1	0	0	0	0	0
