未找到元素块在Selenium中执行

时间:2012-11-23 22:51:21

标签: python unit-testing selenium

在我的测试中,我尝试使用 find_element_by_xpath 验证某些文本是否存在(在操作之后)。如果我使用正确的表达式和我的测试通过,例程会立即正确结束。 但是,如果我尝试错误的文本(意味着测试将失败),它将永远挂起,我必须杀死该脚本,否则它不会结束。

这是我的测试(表达式您输入的Thx用户,客户端或密码不正确在系统中不存在,无论用户做什么):

# -*- 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()   

为什么会这样做,我该如何预防呢?

编辑:我能够找到问题:我在Ubuntu中运行我的Firefox,而我目前的Firefox版本(17.0)不受selenium的支持。通过集线器在IE8中运行相同的测试工作正常。

1 个答案:

答案 0 :(得分:0)

问题出在你的xpath表达式中。不要将文本直接与所有可用文本进行比较。因此,当文本不匹配时,它会与DOM中的所有可用文本进行比较。

通过Xpath指定元素/标签,显示错误消息,然后检查该元素的text属性。

inputs = driver.find_elements(By.XPATH, "//input")

这段代码获取网页上的所有输入元素。

这有助于加快测试速度。我希望这有助于......一切顺利: - )