Как определить методы тестирования с помощью Python Unittest - PullRequest
0 голосов
/ 28 сентября 2018
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 голосов
/ 29 сентября 2018

При работе с Python и unittest модулем с Selenium необходимо учитывать следующие факты:

  • Отступ для класса и test_method различны.
  • Вместо driver.close() всегда вызывайте driver.quit() в методе tearDown(){}, чтобы закрыть и уничтожить WebDriver и Веб-клиент экземпляры изящно.
  • Если вы используете модуль unittest , вам нужно вызвать __main__.
  • Вот ваш собственныйкод с необходимыми незначительными изменениями, которые будут выполнять первый метод teste_login_avaliador(), а также второй метод 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 Steps вашего сценария использования и при необходимости вы можете задать новый вопрос / билет.

0 голосов
/ 29 сентября 2018

Вы пишете, что первая функция в порядке, и я полагаю, что это должна быть функция setUp(), на которую вы ссылаетесь (при условии, что в вашем коде вы сделали правильный отступ).

Как комментирует Андерссон, ваши методы unittestдолжен начинаться с "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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...