AttributeError: у объекта «GoogleSearch» нет атрибута «драйвер» при выполнении тестов через Python unittest - PullRequest
0 голосов
/ 24 января 2019

Я использую этот пост http://www.autotest.org.ua/first-autotest-with-selenium-webdriver-and-python/ и сделал проект в PyCharm

This is a photo

Кодовые испытания:

from selenium import webdriver
import unittest
from selenium.webdriver.common.keys import Keys


class GoogleSearch(unittest.TestCase):
    def setUpp(self):
        self.driver = webdriver.Chrome(executable_path="C:\Python37-32\geckodriver-v0.23.0-win64\geckodriver.exe")
        self.driver.get('https://www.google.by')
        self.driver.maximize_window()
        self.driver.implicitly_wait(10)

    def test_01(self):
        driver = self.driver
        input_field = driver.find_element_by_class_name('class="gLFyf gsfi"')
        input_field.send_keys('python')
        input_field.send_keys(Keys.ENTER)

Ошибка:

FAILED (errors=1)

Error
Traceback (most recent call last):
  File "C:\Python37-32\lib\unittest\case.py", line 59, in testPartExecutor
    yield
  File "C:\Python37-32\lib\unittest\case.py", line 615, in run
    testMethod()
  File "D:\QA\untitled\test.py", line 13, in test_01
    driver = self.driver
AttributeError: 'GoogleSearch' object has no attribute 'driver'


Process finished with exit code 1

Я не понимаю, как это исправить ...

1 Ответ

0 голосов
/ 24 января 2019

Это сообщение об ошибке ...

AttributeError: 'GoogleSearch' object has no attribute 'driver'

... означает, что unittest имеет ошибку инициализации.

Я не вижу такой ошибкив вашем кодовом блоке как таковом, но есть проблема в методе setUp().Несколько слов:

  • def setUp(self):: setUp() является частью инициализации, и этот метод будет вызываться перед каждой тестовой функцией, которую вы собираетесь написать в этомтестовый класс.У вас есть ошибка setUp(self) как setUpp(self).
  • Если вы используете webdriver.Chrome(), вам нужно пройти абсолютный путь хроматического драйвера но вы предоставили geckodriver .
  • Пока вы передаете ключ executable_path, введите Значение через одинарные кавычки вместе с необработаннымr switch.
  • def tearDown(self):: Метод tearDown() вызывается после каждого метода тестирования.Это метод для выполнения всех действий по очистке.
  • if __name__ == '__main__':: эта строка задает для переменной __name__ значение "__main__".Если этот файл импортируется из другого модуля, то __name__ будет установлено на имя другого модуля.
  • Подробное обсуждение вы найдете в Что делать, если name == « main »: do?
  • С учетом вышеупомянутых пунктов ваш эффективный блок кода будет:

    import unittest
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    class GoogleSearch(unittest.TestCase):
    
        def setUp(self):
            self.driver = webdriver.Chrome(executable_path=r'C:\path\to\chromedriver.exe')
            self.driver.get('https://www.google.by')
            self.driver.maximize_window()
            self.driver.implicitly_wait(10)
    
        def test_01(self):
            driver = self.driver
            input_field = driver.find_element_by_class_name('class="gLFyf gsfi"')
            input_field.send_keys('python')
            input_field.send_keys(Keys.ENTER)
    
        def tearDown(self):
            self.driver.quit()
    
    if __name__ == "__main__":
        unittest.main()
    
  • Соответствующее обсуждение можно найти в Python + WebDriver - при запуске unittest браузер не запускаетсямодуль

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...