如何使用Python Unittest定义测试方法

时间:2018-09-28 20:20:50

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

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编写此测试,第一个功能还可以,但是类中的第二个功能未在测试中执行。我该如何组织呢?

2 个答案:

答案 0 :(得分:0)

您写道,第一个函数正常,我假设它必须是您所引用的setUp()函数(前提是您在代码中正确缩进了代码)。

正如安德森(Andersson)所说,您的unittest方法必须以“ test_”而不是“ teste_”开头。提供“ test_”是告诉unittest该方法应进行测试的方式。

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

下次,请向我们提供更详尽的错误说明。您是如何致电进行单元测试的? 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"

答案 1 :(得分:0)

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

  • test_method的缩进不同。
  • 始终使用driver.close()方法中的driver.quit()而不是tearDown(){}来关闭并破坏 WebDriver Web Client 实例。
  • 如果您使用的是 unittest 模块,则必须调用 __main__
  • 这是您自己的代码,其中进行了必要的细微修改,这些代码将执行 first方法 teste_login_avaliador() second方法 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")
    

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