Программа, использующая селен, завершается с ошибкой после сборки с помощью cx_freeze
-
21-12-2019 - |
Вопрос
Я разрабатываю автоматический веб-тестер, используя 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, я получаю эту ошибку
метод redirectToBlank(...) вызывает initDriver(..) в первую очередь. Итак, как мне упаковать файл .xpi в файл Library.zip - какой параметр в setup.py мне нужно использовать?И нужно ли мне это вообще?
И вторая странность: другие браузеры работают нормально, когда я запускаю файл .exe, щелкая по его значку, но когда я запускаю его из командной строки, я получаю ошибки даже для Chrome и IE.(Извините, что обратная трассировка не завершена)
Все пути относительны от исполняемого файла (независимо от того, откуда вы его запускаете),
Спасибо за любые идеи по решению этой проблемы.
(метод redirectToBlank(...) первым делом вызывает initDriver(..))
Решение
Необходимо редактировать класс модуля 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,
...