Question

Je développe un testeur Web automatique utilisant Selenium (v2.37.2).Le programme fonctionne correctement jusqu'à ce que j'exécute le test construit avec cxfreeze (il existe également l'interface graphique tkinter).

il y a la fonction 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)

Maintenant, quand je le construis en utilisant Cx_freeze, j'obtiens cette erreurError traceback

La méthode redirectToBlank(...) appelle initDriver(..) comme première chose. Alors, comment compresser le fichier .xpi dans le fichier library.zip - quelle option dans setup.py dois-je utiliser ?Et est-ce que je dois vraiment faire ça ?

Et la deuxième chose étrange est que les autres navigateurs fonctionnent correctement lorsque j'exécute le fichier .exe en cliquant sur son icône, mais lorsque je l'exécute depuis la ligne de commande, j'obtiens des erreurs même pour Chrome et IE.(Désolé que le traçage ne soit pas complet)

Chrome traceback

Tous les chemins sont relatifs à partir du fichier exécuté (peu importe d'où vous l'exécutez),

Merci pour toutes les idées pour résoudre ce problème.

(la méthode redirectToBlank(...) appelle initDriver(..) comme première chose)

Était-ce utile?

La solution

Premier problème résoluC'est un problème avec la classe Selenium - FirefoxProfile -, qui essaie de charger webdriver.xpi en tant que fichier normal, mais Selenium regroupe toutes les bibliothèques dans un fichier zip, donc Selenium ne peut pas le trouver.Même forcer cx_freeze dans le fichier d'installation à ajouter webdriver.xpi à un répertoire approprié dans zip n'aidera pas.

Il faut éditer la classe FirefoxProfile (dans le module firefox_profile) par exemple comme ceci

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 >

Numéro 2

OSError: win error 6: the handle is invalid le problème n'était causé ni par cxfreeze ni par sélénium.J'exécute le fichier exe final depuis git bash.Voilà le problème.Pour une raison quelconque, git bash n'ouvre pas stdin pour le programme et c'est pourquoi il échoue.Quand je l'exécute en ligne de commande Windows standard, tout va bien ou si je l'exécute depuis git bash comme program.exe < empty_file

Autres conseils

ce que j'ai fait, c'est supprimer la liste des packages de formulaire sélénium.et mets-le à l'intérieur includefiles, alors ça marche.

comme ça :

includefiles = [(seleniumPackage,'')]

...
options = {'build_exe': {'includes':includes,
                             'excludes':excludes,
                             'optimize':2,
                             'packages':packages,
                             'include_files':includefiles,
...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top