Frage

Ich entwickle einen automatischen Webtester mit Selenium (v2.37.2).Das Programm funktioniert ordnungsgemäß, bis ich den mit cxfreeze erstellten Test ausführe (es gibt auch eine Tkinter-GUI).

Es gibt die Init-Funktion

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)

Wenn ich es jetzt mit Cx_freeze erstelle, erhalte ich diese FehlermeldungError traceback

Die Methode „redirectToBlank(...)“ ruft initDriver(..) als Erstes auf. Wie packe ich also die .xpi-Datei in die Datei „library.zip“ – welche Option in setup.py muss ich verwenden?Und muss ich das überhaupt tun?

Und das zweite Merkwürdige ist, dass die anderen Browser einwandfrei funktionieren, wenn ich die .exe-Datei durch Klicken auf das entsprechende Symbol ausführe, aber wenn ich sie über die Befehlszeile ausführe, erhalte ich selbst für Chrome und IE Fehlermeldungen.(Es tut uns leid, dass der Traceback nicht vollständig ist)

Chrome traceback

Alle Pfade sind relativ zur ausgeführten Datei (unabhängig davon, von wo aus Sie sie ausführen).

Vielen Dank für alle Ideen zur Lösung dieses Problems.

(Methode „redirectToBlank(...)“ ruft initDriver(..) als erstes auf)

War es hilfreich?

Lösung

Erstes Problem gelöstEs liegt ein Problem mit der Selenium-FirefoxProfile-Klasse vor, die versucht, webdriver.xpi als normale Datei zu laden, aber Selenium packt alle Bibliotheken in eine ZIP-Datei, sodass Selenium sie nicht finden kann.Selbst wenn man cx_freeze in der Setup-Datei dazu zwingt, webdriver.xpi zu einem richtigen Verzeichnis in zip hinzuzufügen, hilft das nicht.

Es ist notwendig, die Klasse FirefoxProfile (im Modul firefox_profile) beispielsweise wie folgt zu bearbeiten

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 >

Ausgabe 2

OSError: win error 6: the handle is invalid Das Problem wurde weder durch cxfreeze noch durch Selenium verursacht.Ich führe die endgültige Exe-Datei von Git Bash aus.Da ist das Problem.Aus irgendeinem Grund öffnet Git Bash stdin nicht für das Programm und deshalb schlägt es fehl.Wenn ich es in der Standard-Windows-Befehlszeile ausführe, ist alles in Ordnung, oder wenn ich es von Git Bash aus ausführe program.exe < empty_file

Andere Tipps

Was ich getan habe, war, die Liste der Selenium-Formularpakete zu entfernen.und lege es hinein includefiles, dann funktioniert es.

so was :

includefiles = [(seleniumPackage,'')]

...
options = {'build_exe': {'includes':includes,
                             'excludes':excludes,
                             'optimize':2,
                             'packages':packages,
                             'include_files':includefiles,
...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top