Программа, использующая селен, завершается с ошибкой после сборки с помощью cx_freeze

StackOverflow https://stackoverflow.com//questions/20021018

Вопрос

Я разрабатываю автоматический веб-тестер, используя Selenium (v2.37.2).Программа работает правильно, пока я не запускаю тест, созданный с помощью cxfreeze (есть также графический интерфейс tkinter).

есть функция инициализации

def initDriver(self):

    if self.browser == FIREFOX:
        profile = webdriver.FirefoxProfile(profile_directory=self.profile);
        self._driver = webdriver.Firefox(firefox_profile=profile)

    elif self.browser == CHROME:            
        self._driver = webdriver.Chrome(self.executable, chrome_options=profile)

    elif self.browser == IEXPLORER:
        self._driver = webdriver.Ie(self.executable)

Теперь, когда я собираю его с помощью Cx_freeze, я получаю эту ошибкуError traceback

метод redirectToBlank(...) вызывает initDriver(..) в первую очередь. Итак, как мне упаковать файл .xpi в файл Library.zip - какой параметр в setup.py мне нужно использовать?И нужно ли мне это вообще?

И вторая странность: другие браузеры работают нормально, когда я запускаю файл .exe, щелкая по его значку, но когда я запускаю его из командной строки, я получаю ошибки даже для Chrome и IE.(Извините, что обратная трассировка не завершена)

Chrome traceback

Все пути относительны от исполняемого файла (независимо от того, откуда вы его запускаете),

Спасибо за любые идеи по решению этой проблемы.

(метод redirectToBlank(...) первым делом вызывает initDriver(..))

Это было полезно?

Решение

Первый вопрос решен Это проблема с Selenium - FirefoxProfile - классом, который пытается загрузить WebDriver.xpi в качестве обычного файла, но Selenium Pack все библиотеки в ZIP-файл, поэтому Selenium не может найти его. Даже принудительный CX_Freeze в файле установки добавить WebDriver.xpi в нужный каталог в ZIP не поможет.

Необходимо редактировать класс модуля FirefoxProfile (в модуле Firefox_Profile), например, как это

def _install_extension(self, addon, unpack=True):
    """
        Installs addon from a filepath, url
        or directory of addons in the profile.
        - path: url, path to .xpi, or directory of addons
        - unpack: whether to unpack unless specified otherwise in the install.rdf
    """
    if addon == WEBDRIVER_EXT:
        # altered lines
        import sdi.env
        WEBDRIVER_SUBSTITUTE = "path/to/unpacked/webdrive.xpi"
        addon = os.path.join(os.path.dirname(__file__),  WEBDRIVER_SUBSTITUTE)

        # Original lines:
        # addon = os.path.join(os.path.dirname(__file__),  WEBDRIVER_EXT)

    < the rest of the method >
.

<Сильная> проблема 2

Эта проблема OSError: win error 6: the handle is invalid не была вызвана либо CxFreeze или Selenium.Я запускаю последний файл EXE от Git Bash.Есть проблема.По какой-то причине Git Bash не открывает stdin для программы, и именно поэтому не удается.Когда я бегу в стандартную командную строку Windows, все в порядке или если я бегу в Git Bash, как program.exe < empty_file

Другие советы

я удалил список пакетов формы селена.и положи его внутрь includefiles, тогда это работает.

так :

includefiles = [(seleniumPackage,'')]

...
options = {'build_exe': {'includes':includes,
                             'excludes':excludes,
                             'optimize':2,
                             'packages':packages,
                             'include_files':includefiles,
...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top