【问题标题】:Element not found blocks execution in Selenium在 Selenium 中找不到元素会阻止执行
【发布时间】:2012-11-23 22:51:20
【问题描述】:

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

【问题讨论】:

    标签: python unit-testing selenium


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-14
      • 2017-10-15
      • 2021-03-20
      • 2021-08-27
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      相关资源
      最近更新 更多