Pergunta

Estou desenvolvendo um testador web automático usando Selenium (v2.37.2).O programa funciona corretamente até eu executar o teste construído com cxfreeze (também existe o tkinter gui).

existe a função init

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)

Agora, quando eu construo usando Cx_freeze, recebo este erroError traceback

o método redirectToBlank(...) chama initDriver(..) como a primeira coisa. Então, como empacoto o arquivo .xpi no arquivo library.zip - qual opção em setup.py devo usar?E eu ainda tenho que fazer isso?

E a segunda coisa estranha é que os outros navegadores funcionam bem, quando executo o arquivo .exe clicando em seu ícone, mas quando executo na linha de comando, recebo erros até mesmo para Chrome e IE.(Lamentamos que o rastreamento não esteja completo)

Chrome traceback

Todos os caminhos são relativos ao arquivo executado (não importa de onde você o executa),

Obrigado por qualquer idéia para resolver este problema.

(o método redirectToBlank(...) chama initDriver(..) como a primeira coisa)

Foi útil?

Solução

Primeiro problema resolvidoÉ um problema com a classe Selenium - FirefoxProfile -, que tenta carregar webdriver.xpi como um arquivo normal, mas o Selenium empacota todas as bibliotecas em um arquivo zip, então o Selenium não consegue encontrá-lo.Mesmo forçar cx_freeze no arquivo de configuração para adicionar webdriver.xpi a um diretório adequado no zip não ajudará.

É necessário editar a classe FirefoxProfile (no módulo firefox_profile) por exemplo assim

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 >

Edição 2

OSError: win error 6: the handle is invalid o problema não foi causado por cxfreeze ou selenium.Eu executo o arquivo exe final do git bash.Aí está o problema.Por alguma razão, o git bash não abre o stdin para o programa e é por isso que ele falha.Quando eu executo na linha de comando padrão do Windows, está tudo bem ou se eu executar no git bash como program.exe < empty_file

Outras dicas

o que fiz foi remover a lista de pacotes do formulário Selenium.e coloque-o dentro includefiles, então funciona.

assim :

includefiles = [(seleniumPackage,'')]

...
options = {'build_exe': {'includes':includes,
                             'excludes':excludes,
                             'optimize':2,
                             'packages':packages,
                             'include_files':includefiles,
...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top