Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

'assert' vs. 'verify' in Selenium

The checks Selenium performs usually come in two flavours: assertFoo and verifyFoo. I understand that assertFoo fails the whole testcase whereas verifyFoo just notes the failure of that check and lets the testcase carry on.

So with verifyFoo I can get test results for multiple conditions even if one of them fails. On the other hand, one failing check for me is enough to know, that my edits broke the code and I have to correct them anyway.

In which concrete situations do you prefer one of the two ways of checking over the other? What are your experiences that motivate your view?

like image 907
jammon Avatar asked Apr 21 '11 12:04

jammon


People also ask

What is the difference between Assert and verify command?

Assert: If the assert condition is true then the program control will execute the next test step but if the condition is false, the execution will stop and further test step will not be executed. whereas, Verify: There won't be any halt in the test execution even though the verify condition is true or false.

Which is better Assert or verify?

In the case of the “Assert” command, as soon as the validation fails the execution of that particular test method is stopped. Following that the test method is marked as failed. Whereas, in the case of “Verify”, the test method continues execution even after the failure of an assertion statement.

What is the difference between Assert and soft Assert?

Unlike hard asserts; soft asserts do not throw any exception on the failure of the assert and continue to the next step even after encountering an assert. Soft assert collects all the asserts encountered when running the @Test methods.

Can you verify in test using selenium?

Mastering XPath and CSS Selector for SeleniumWe can verify the color of a webelement in Selenium webdriver using the getCssValue method and then pass color as a parameter to it. This returnsthe color in rgba() format.


4 Answers

I would use an assert() as an entry point (a "gateway") into the test. Only if the assertion passes, will the verify() checks be executed. For instance, if I'm checking the contents of a window resulting from a series of actions, I would assert() the presence of the window, and then verify() the contents.

An example I use often - checking the estimates in a jqgrid: assert() the presence of the grid, and verify() the estimates.

like image 106
rs79 Avatar answered Sep 25 '22 00:09

rs79


I've come across a few problems which were overcome by using

assert*()

instead of

verify*()

For example, in form validations if you want to check a form element, the use of

verifyTrue(...);
will just pass the test even if the string is not present in the form.

If you replace assert with verify, then it works as expected.

I strongly recommend to go with using assert*().

like image 25
Harsha H P Avatar answered Sep 25 '22 00:09

Harsha H P


If you are running Selenium tests on a production system and want to make sure you are logged-in as a test user e.g., instead of your personal account, it is a good idea to first assert that the right user is logged in before triggering any actions that would have unintended effects, if used by accident.

like image 30
Heiko Haller Avatar answered Sep 25 '22 00:09

Heiko Haller


Usually you should stick to one assertion per test case, and in this case the difference boils down to any tear-down code which must be run. But you should probably put this in an @After method anyway.

I've had quite a few problems with the verify*() methods in SeleneseTestBase (e.g. they use System.out.println(), and com.thoughtworks.selenium.SeleneseTestBase.assertEquals(Object, Object) just doesn't do what you expect) so I've stopped using them.

like image 32
artbristol Avatar answered Sep 26 '22 00:09

artbristol