Question

I'm developing an automatic web tester using Selenium (v2.37.2). Program works properly until I run the test built with cxfreeze (there is also tkinter gui).

there is the init function

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)

Now when I build it using Cx_freeze I get this error Error traceback

method redirectToBlank(...) calls initDriver(..) as the first thingSo how I pack the .xpi file to the library.zip file - which option in setup.py I have to use? And do I even have to this?

And the second strange thing is, that the other browsers work fine, when I execute the .exe file in by clicking on its icon, but when I run it from command line, I get errors even for chrome and IE. (Sorry that the traceback isn't complete)

Chrome traceback

All paths are relative from the executed file (no matter from where you run it),

Thank you for any ideas to solve this problem.

(method redirectToBlank(...) calls initDriver(..) as the first thing)

Was it helpful?

Solution

First issue solved It's problem with selenium - FirefoxProfile - class, which tries to load webdriver.xpi as a normal file, but selenium pack all libraries to a zip file, so selenium can't find it. Even forcing cx_freeze in setup file to add webdriver.xpi to a proper directory in zip won't help.

It is necessary to edit FirefoxProfile (in firefox_profile module) class for example like this

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 >

Issue 2

OSError: win error 6: the handle is invalid problem wasn't caused by either cxfreeze or selenium. I run the final exe file from git bash. There's the problem. For some reason git bash doesn't open stdin for the program and that's why it fails. When I run it in standard windows command line, everything is ok or if i run it from git bash like program.exe < empty_file

OTHER TIPS

what i did was remove selenium form packages list. and put it inside includefiles, then it works.

like this :

includefiles = [(seleniumPackage,'')]

...
options = {'build_exe': {'includes':includes,
                             'excludes':excludes,
                             'optimize':2,
                             'packages':packages,
                             'include_files':includefiles,
...
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top