Pregunta

Estoy desarrollando un probador web automático usando Selenium (v2.37.2). El programa funciona correctamente hasta que ejecute la prueba construida con CxFreeze (también hay Tkinter GUI).

Hay la función 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)

ahora cuando lo construyo usando cx_freeze obtengo este error error rastrack

Método redirecttoBlank (...) Llama a initdriver (..) como el primer tema de cómo empaco el archivo .xpi en el archivo biblioteca.zip - ¿Qué opción en SetUP.PY tengo que usar? ¿Y incluso tengo a esto?

y la segunda cosa extraña es que los otros navegadores funcionan bien, cuando ejecuto el archivo .exe en clic en su icono, pero cuando lo ejecuto desde la línea de comandos, obtengo errores incluso para Chrome e IE. (Perdón en que el rastreo no está completo)

cromo rastrack

Todas las rutas son relativas del archivo ejecutado (sin importar desde donde lo ejecuta),

Gracias por cualquier idea para resolver este problema.

(Método redirecttoBlank (...) llama a initdriver (..) como lo primero)

¿Fue útil?

Solución

Primer problema resuelto Es un problema con el selenio - FirefoxProfile - Clase, que intenta cargar WebDriver.xpi como un archivo normal, pero Selenium pack todas las bibliotecas a un archivo zip, por lo que el selenio no puede encontrarlo. Incluso forzar CX_Freeze en el archivo de configuración para agregar WebDriver.xpi a un directorio adecuado en Zip no lo ayudará.

Es necesario editar la clase FirefoxProfile (en el módulo Firefox_Profile), por ejemplo, como este

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 >

edición 2

El problema de

OSError: win error 6: the handle is invalid no fue causado por CxFreeze o Selenium.Corro el archivo EXE final de Git Bash.Ahí está el problema.Por alguna razón, Git Bash no abre stdin para el programa y es por eso que falla.Cuando lo ejecuto en la línea de comandos estándar de Windows, todo está bien o si lo ejecuto desde Git Bash como program.exe < empty_file

Otros consejos

Lo que hice fue eliminar la lista de paquetes de formulario de selenio. y póngalo dentro de includefiles, luego funciona.

Me gusta esto:

includefiles = [(seleniumPackage,'')]

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top