質問

Selenium (v2.37.2) を使用して自動 Web テスターを開発しています。cxfreeze (tkinter gui もあります) で構築されたテストを実行するまで、プログラムは正しく動作します。

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)

Cx_freeze を使用してビルドすると、このエラーが発生しますError traceback

メソッド redirectToBlank(...) は最初に initDriver(..) を呼び出します。それでは、.xpi ファイルを library.zip ファイルにパックする方法 - setup.py のどのオプションを使用する必要がありますか?そして、私もこれをする必要がありますか?

そして 2 つ目の奇妙な点は、アイコンをクリックして .exe ファイルを実行すると、他のブラウザは正常に動作するのですが、コマンド ラインから実行すると、Chrome や IE でもエラーが発生します。(トレースバックが完了していないのが残念です)

Chrome traceback

すべてのパスは、実行されたファイルからの相対パスです (どこから実行したかに関係なく)。

この問題を解決するためのアイデアをありがとうございます。

(メソッド redirectToBlank(...) は最初に initDriver(..) を呼び出します)

役に立ちましたか?

解決

最初の問題が解決されましたこれは selenium - FirefoxProfile - クラスの問題で、通常のファイルとして webdriver.xpi をロードしようとしますが、selenium はすべてのライブラリを zip ファイルにパックするため、selenium はそれを見つけることができません。セットアップ ファイルで cx_freeze を強制的に実行して webdriver.xpi を zip 内の適切なディレクトリに追加しても、役に立ちません。

たとえば次のようにFirefoxProfile(firefox_profileモジュール内)クラスを編集する必要があります

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 >

問題 2

OSError: win error 6: the handle is invalid この問題は cxfreeze や Selenium によって引き起こされたものではありません。最終的な exe ファイルを git bash から実行します。そこに問題があります。何らかの理由で git bash はプログラムの標準入力を開けず、それが失敗の原因です。標準のWindowsコマンドラインで実行すると、すべて問題ありません。または、次のようにgit bashから実行しても問題ありません。 program.exe < empty_file

他のヒント

私がしたことはSeleniumフォームパッケージリストを削除しました。 そしてそれをincludefilesに入れて、それは機能します。

これと同じように:

includefiles = [(seleniumPackage,'')]

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top