Domanda

Sto sviluppando un tester Web automatico utilizzando il selenio (V2.37.2). Il programma funziona correttamente fino a quando non eseguirò il test integrato con CXFreeze (c'è anche Tkinter GUI).

C'è la funzione 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)
.

Ora quando lo costruisco usando cx_freeze ottengo questo errore Error Traceback

Metodo rediirectoblank (...) Chiamate InitDriver (..) Come prima cosa, come faccio parte il file .xpi al file biblioteca.zip - quale opzione in setup.py devo usare? E ho anche a questo?

E la seconda cosa strana è che gli altri browser funzionano bene, quando eseguo il file .exe in facendo clic sulla sua icona, ma quando lo eseguo dalla riga di comando, ottengo errori anche per Chrome e Ie. (Mi dispiace che la traceback non sia completa)

Chrome Traceback

Tutti i percorsi sono relativi dal file eseguito (indipendentemente da dove si esegue),

Grazie per qualsiasi idea per risolvere questo problema.

(metodo redirecttoblank (...) chiama l'initdriver (..) come la prima cosa)

È stato utile?

Soluzione

Primo problema risolto È un problema con Selenium - Firefoxprofile - classe, che tenta di caricare WebDriver.XPI come file normale, ma Selenium pack tutte le librerie a un file zip, quindi il selenio non riesce a trovarlo. Anche forzare CX_Freeze nel file di installazione per aggiungere WebDriver.xpi a una directory corretta in zip non aiuterà.

È necessario modificare firefoxprofile (in classe Firefox_Profile) Classe ad esempio come questa

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 >
.

Edizione 2

Il problema OSError: win error 6: the handle is invalid non è stato causato da cxfreeze o selenio.Gestisco il file EXE finale da Git Bash.C'è il problema.Per qualche motivo Git Bash non apri Stdin per il programma ed è per questo che fallisce.Quando lo eseguo nella riga di comando di Windows standard, tutto è OK o se lo eseguo da Git Bash come program.exe < empty_file

Altri suggerimenti

Quello che ho fatto è stato rimuovere la lista dei pacchetti del modulo Selenio. e mettilo all'interno di includefiles, allora funziona.

In questo modo:

includefiles = [(seleniumPackage,'')]

...
options = {'build_exe': {'includes':includes,
                             'excludes':excludes,
                             'optimize':2,
                             'packages':packages,
                             'include_files':includefiles,
...
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top