【问题标题】:How to define test methods using Python Unittest如何使用 Python Unittest 定义测试方法
【发布时间】:2018-09-28 20:20:50
【问题描述】:
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

class CorrecaoEfetivaNota(unittest.TestCase):
  def setUp(self):
  self.driver = webdriver.Chrome('/Users/r13/dev/chromedriver')

def teste_login_avaliador(self):
    driver = self.driver
    driver.get("")
    cpf = driver.find_element_by_xpath('//input[@placeholder="CPF"]')
    cpf.send_keys("")
    password = driver.find_element_by_xpath('//input[@placeholder="SENHA"]')
    password.send_keys("")
    login = driver.find_element_by_tag_name('button')
    login.click()
    driver.implicitly_wait(3)

def teste_buscar_mais_um(self):
    driver = self.driver
    buscar = driver.find_element_by_xpath("//section[1]/div/div/section[2]/div/div/div[1]/div/div[2]/button")
    buscar.click()

def tearDown(self):
    self.driver.close()

我正在尝试用 Python 编写这个测试,第一个函数没问题,但类中的第二个函数没有在测试中执行。我该如何组织这个?

【问题讨论】:

  • 用正确的缩进更新你的问题
  • 也可以试试test_login_avaliador方法名而不是teste_login_avaliador(和test_buscar_mais_um而不是teste_buscar_mais_um

标签: python selenium selenium-webdriver webdriver python-unittest


【解决方案1】:

在使用 Python 和 Seleniumunittest 模块时,您必须考虑以下几个事实:

  • classtest_method 的缩进不同。
  • 总是在tearDown(){} 方法中调用driver.quit() 而不是driver.close(),以优雅地关闭和销毁WebDriverWeb Client 实例。
  • 如果您使用 unittest 模块,您必须致电 __main__
  • 这是您自己的代码,经过必要的小修改,将执行 第一种方法 teste_login_avaliador() 以及 第二种方法 类中的strong>teste_buscar_mais_um() CorrecaoEfetivaNota()

    import unittest
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    class CorrecaoEfetivaNota(unittest.TestCase):
    
        def setUp(self):
            self.driver = webdriver.Chrome(executable_path=r'C:\WebDrivers\chromedriver.exe')
    
        def teste_login_avaliador(self):
            driver = self.driver
            driver.get("http://d3dyod5mwyu6xk.cloudfront.net/")
            cpf = driver.find_element_by_xpath('//input[@placeholder="CPF"]')
            cpf.send_keys("27922797885")
            password = driver.find_element_by_xpath('//input[@placeholder="SENHA"]')
            password.send_keys("enccejaregular")
            login = driver.find_element_by_tag_name('button')
            login.click()
            driver.implicitly_wait(3)
    
        def teste_buscar_mais_um(self):
            driver = self.driver
            buscar = driver.find_element_by_xpath("//section[1]/div/div/section[2]/div/div/div[1]/div/div[2]/button")
            buscar.click()
    
        def tearDown(self):
            self.driver.quit()
    
    if __name__ == "__main__":
        unittest.main()
    
  • 注意:虽然两个 test_methods 都被调用,但您仍将面临以下异常:

    selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//section[1]/div/div/section[2]/div/div/div[1]/div/div[2]/button"}
    
  • 在线:

    buscar = driver.find_element_by_xpath("//section[1]/div/div/section[2]/div/div/div[1]/div/div[2]/button")
    

    按照您的用例的实际测试步骤,可以轻松解决此异常,如果需要,您可以提出新问题/票。

【讨论】:

    【解决方案2】:

    您写道,第一个函数没问题,我假设它一定是您所指的 setUp() 函数(前提是您在代码中正确缩进)。

    作为 Andersson cmets,您的单元测试方法需要以“test_”而不是“teste_”开头。提供“test_”是你告诉unittest这个方法应该被测试的方式。

    在您的unittest 中,您可能还想测试诸如self.assertEqual(1,1) 之类的内容,否则无论如何您的测试都会通过。

    下次请向我们提供更全面的错误描述。你是如何调用 unittest 的? python给你什么错误?你期待什么结果?等等。它可以更快地解决您的问题。

    我鼓励你先做一个简单的测试并确保它运行:

    import unittest
    
    class TestingUnittest(unittest.TestCase):
      def setUp(self):
        print("SetUp called")
    
      def tearDown(self):
        print("tearDown called")
    
      def test_Method(self):
        print("Testing 1==1")
        self.assertEqual(1,1)
    

    从你的终端调用这个:

    >>>python -m unittest "name-of-test.py"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-02
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      相关资源
      最近更新 更多