فشل البرنامج الذي يستخدم السيلينيوم بعد البناء باستخدام cx_freeze

StackOverflow https://stackoverflow.com//questions/20021018

سؤال

أقوم بتطوير اختبار ويب تلقائي باستخدام السيلينيوم (الإصدار 2.37.2).يعمل البرنامج بشكل صحيح حتى أقوم بإجراء الاختبار الذي تم إنشاؤه باستخدام cxfreeze (يوجد أيضًا tkinter gui).

هناك وظيفة الحرف الأول

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؟وهل يجب عليّ أن أفعل ذلك؟

والشيء الغريب الثاني هو أن المتصفحات الأخرى تعمل بشكل جيد، فعندما أقوم بتشغيل ملف exe بالضغط على أيقونته، ولكن عندما أقوم بتشغيله من سطر الأوامر، تظهر لي أخطاء حتى بالنسبة لـ chrome وIE.(نأسف لعدم اكتمال التتبع)

Chrome traceback

جميع المسارات نسبية من الملف الذي تم تنفيذه (بغض النظر عن مكان تشغيله)،

شكرا لك على أي أفكار لحل هذه المشكلة.

(الطريقة redirectToBlank(...) تستدعي initDriver(..) كأول شيء)

هل كانت مفيدة؟

المحلول

تم حل المشكلة الأولىإنها مشكلة مع فئة السيلينيوم - FirefoxProfile - التي تحاول تحميل webdriver.xpi كملف عادي، لكن السيلينيوم يحزم جميع المكتبات في ملف مضغوط، لذلك لا يستطيع السيلينيوم العثور عليه.حتى إجبار cx_freeze في ملف الإعداد على إضافة webdriver.xpi إلى الدليل المناسب في ملف مضغوط لن يساعد.

من الضروري تعديل فئة 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 أو السيلينيوم.أقوم بتشغيل ملف exe النهائي من git bash.هناك المشكلة.لسبب ما، لا يفتح git bash stdin للبرنامج ولهذا السبب يفشل.عندما أقوم بتشغيله في سطر أوامر Windows القياسي، يكون كل شيء على ما يرام أو إذا قمت بتشغيله من git bash مثل program.exe < empty_file

نصائح أخرى

ما فعلته هو إزالة قائمة حزم نماذج السيلينيوم.ووضعها في الداخل includefiles, ، ثم يعمل.

مثله :

includefiles = [(seleniumPackage,'')]

...
options = {'build_exe': {'includes':includes,
                             'excludes':excludes,
                             'optimize':2,
                             'packages':packages,
                             'include_files':includefiles,
...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top