Найти - Пользователи
Полная версия: AttributeError в Линуксе
Начало » Python для новичков » AttributeError в Линуксе
1
Yury_2014
Добрый день. Возник такой вопрос:
Почему авто-тесты написанные на Selenium хорошо проходят в Виндоус, но сразу же падают в Линуксе с общей ошибкой AttributeError: ‘str’ object has no attribute ‘get’ (даже браузер не открывают).
sander
падают потому что ‘str’ object has no attribute ‘get’
нужен пример кода и трейс ошибки, иначе никак
Yury_2014
Трейс ошибки

self = <page.searchPage.Search instance at 0x7fcb185073f8>, driver = None
originCity = None, destinationCity = None, departureDate = None, backDate = None
notOneWay = None, directOnly = None, plusMinus3 = None
    def __init__(self,
                 driver=None,
                 originCity=None,
                 destinationCity=None,
                 departureDate=None,
                 backDate=None,
                 notOneWay=None,
                 directOnly=None,
                 plusMinus3=None):
        self.page_url = url()
        self.site_version = SV.site_version()
        self.driver = Driver.get()
>       self.driver.get(self.page_url)
E       AttributeError: 'str' object has no attribute 'get'

Код нужно постить в тегах

[code][/code]


Yury_2014
Код Драйвера,который находится в файле отличном от теста
class Driver(object):
    _instance = None
    _profile = None
    _operating_system = None
    @classmethod
    def get(cls):
        if not getattr(cls, '_instance'):
            cls._instance = "ff"
            if cls._instance == "ff":
                cls._instance = webdriver.Firefox(proxy=proxy)
        return cls._instance
    @classmethod
    def close(cls):
        if getattr(cls, '_instance'):
            cls.get().close()
            cls._instance = None

Код нужно постить в тегах

[code][/code]
Yury_2014
Прошу прощения,что сразу не приложил
FishHook
self.driver = Driver.get()
...
def get(cls):
    ...
    cls._instance = "ff"
    return cls._instance

Очевидно, что self.driver == “ff”
'str' object has no attribute “get” - разве это не логично?
Yury_2014
но ниже по коду
cls._instance = webdriver.Firefox(proxy=proxy)

FishHook
Вот чтобы не гадать, возьми и выведи в консоль, что же у тебя там на самом деле с помощью оператора print.

self.driver = Driver.get()
print self.driver, type(self.driver)
Yury_2014
Разобрался.Спасибо за наводку. Проблема была в том,что выбор браузера делался путем считывания строки из конфиг файла. Для удаления перевода строки в виндоус я использовал line.replace(“\n”, “”) . А в линуксе нужен был line.replace(“\r\n”, “”)
doza_and
Yury_2014
А в линуксе нужен был line.replace(“\r\n”, “”)
Обычно эта проблема решается открытием файла не в бинарном режиме а в текстовом
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB