Element not found blocks execution in Selenium
- by Mariano
In my test, I try to verify if certain text exists (after an action) using find_element_by_xpath. If I use the right expression and my test pass, the routine ends correctly in no time. 
However if I try a wrong text (meaning that the test will fail) it hangs forever and I have to kill the script otherwise it does not end.
Here is my test (the expression Thx user, client or password you entered is incorrect does not exist in the system, no matter what the user does):
# -*- coding: utf-8 -*-                                                         
import gettext                                                                  
import unittest                                                                 
from selenium import webdriver                                                  
class TestWrongLogin(unittest.TestCase):                                        
    def setUp(self):                                                            
        self.driver = webdriver.Firefox()                                       
        self.driver.get("http://10.23.1.104:8888/")                             
        # let's check the language                                              
        try:                                                                    
            self.lang = self.driver.execute_script("return navigator.language;")
            self.lang = self.lang("-")[0]                                       
        except:                                                                 
            self.lang = "en"                                                    
        language = gettext.translation('app', '/app/locale', [self.lang],          
                                       fallback=True)                           
        language.install()                                                      
        self._ = gettext.gettext                                                
    def tearDown(self):                                                         
        self.driver.quit()                                                      
    def test_wrong_client(self):                                                
        # test wrong client                                                     
        inputElement = self.driver.find_element_by_name("login")                
        inputElement.send_keys("root")                                          
        inputElement = self.driver.find_element_by_name("client")               
        inputElement.send_keys("Unleash")                                        
        inputElement = self.driver.find_element_by_name("password")             
        inputElement.send_keys("qwerty")                          
        self.driver.find_element_by_name("form.submitted").click()              
        # wait for the db answer                                                
        self.driver.implicitly_wait(10)                                         
        ret = self.driver.find_element_by_xpath(                                
            "//*[contains(.,'{0}')]".\                                          
            format(self._(u"Thx user, client or password you entered is incorrect")))
        self.assertTrue(isinstance(ret, webdriver.remote.webelement.WebElement))
if __name__ == '__main__':                                                      
unittest.main()   
Why does it do that and how can I prevent it?