Python 3 ведет себя webdriver - ООП прохождения драйвера - PullRequest
0 голосов
/ 25 мая 2018

Итак, я пытался сделать свой проект более ООП, но мне очень трудно заставить драйвер передавать между файлами python.

TestAutomation/
    Features/
        somefeature.feature
    Objects/
        main_misc.py
    Steps/
        actionwords.py
        steps.py
    Tools/
        AutoTools.py
    environment.py

environment.py

class DriverSetup:
    def get_driver():
        ...
        return webdriver.Firefox(executable_path=path)

def before_all(context):
        driver = DriverSetup.get_driver()
        context.actionwords = Actionwords()
        base_url = ''
        driver.get(base_url)
        AutoTools.Navigation.wait_for_page_to_load(driver)

AutoTools.py

class Navigation:
    def __init__(self,driver):
        self.driver = driver

    @staticmethod
    def wait_for_page_to_load(self):
        old_page = self.driver.find_element_by_tag_name('html')

Я дал достаточно только там, где он получает ошибку, он попадет на шаг.В Debug Self есть curent_url с правильным URL-адресом на месте, даже есть дескриптор окна. Когда я вхожу, он возвращается к environment.py для запуска исключения ловушки - объект 'WebDriver' не имеет атрибута 'driver'

1 Ответ

0 голосов
/ 29 мая 2018

Причина, по которой вы получаете эту ошибку, заключается в том, что вы обращаетесь к атрибуту driver self при вызове метода wait_for_page_to_load(self).То есть, когда вы передаете в веб-драйв Firefox методу, self ссылается на веб-драйвер Firefox, поэтому он пытается получить доступ к атрибуту driver веб-драйвера Firefox, что неверно.

Чтовам нужно создать экземпляр объекта Navigation, чтобы self ссылался на указанный объект, а self.driver ссылался на драйвер Firefox, который вы передаете. Из вашего кода я ожидал что-то вроде этого:

def before_all(context):
    # These 4 lines are independent of the Navigation class
    driver = DriverSetup.get_driver()
    context.actionwords = Actionwords()
    base_url = ''
    driver.get(base_url)

    # These 2 lines are dependent on the Navigation class
    # On the right, the Navigation object is instantiated
    # On the left, the object is initialized to the navigation_driver variable
    navigation_driver = AutoTools.Navigation(driver)

    # After, you can call your method since the object's self.driver
    # was instantiated in the previous line and properly refers to the Firefox webdriver
    navigation_driver.wait_for_page_to_load()
...