1

在我的测试中,我尝试使用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 中运行相同的测试可以正常工作。

4

1 回答 1

0

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

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

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

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

这将有助于加快您的测试。我希望这会有所帮助......一切顺利:-)

于 2012-11-24T09:41:39.643 回答