创建Pyinstaller程序包后,无法通过调用Chrome驱动程序来运行Python Unittest Selenium脚本

时间:2019-07-24 16:03:11

标签: python selenium google-chrome pyinstaller

我正在创建一个独立的程序包以在Windows上运行,因此我的客户端不需要安装任何IDE或Python或Selenium等。

我的自动化测试脚本是使用以下内容开发的: Python 3.x单元测试框架 硒(Chrome驱动程序) Openpyxl读取/写入Excel文件

此外,脚本正在使用settings.ini文件中的某些路径。

此外,我的脚本位于以下不同的Python目录/软件包中:

主文件夹

------------测试用例(Python软件包)
--------------------------- test_main_driver.py
------------页面对象(Python软件包)
--------------------------- ** home.py
--------------------------- ** dashboard.py
------------实用工具(Python软件包)
--------------------------- ** string_util.py

test_main_driver.py调用chrome驱动程序并导入其他软件包,还具有测试类,设置和测试方法 **包含代码

我正在使用Pyinstaller使用spec文件创建独立的软件包,但是每当我在创建软件包后执行exe文件时,就会显示空cmd并关闭它。

要调试该问题,我尝试了简单的自动化脚本,而没有使用unittest框架(甚至没有定义类或方法)。解决路径问题并创建exe后,它工作正常。在相同的脚本中,我使用了openpyxl,但这也不起作用。

在我看来,主要问题是“ Python的unittest框架”。之后,第二个问题是更正我在主测试驱动程序文件中使用的软件包的路径。但是,下面是创建exe后我用来解决与unittest相关问题的代码。

在使用Pyinstaller制作程序包后,使用以下代码(没有类/方法/程序包/单元测试)调用Chrome:

current_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile(inspect.currentframe()))[0]))
chromedriver = os.path.join(current_folder, "..\\..\\chromedriver.exe")
driver = webdriver.Chrome(executable_path=chromedriver)
driver.get('http://stackoverflow.com')

在使用Pyinstaller制作软件包后,不使用以下代码(带有类/方法/单元测试)来调用Chrome:

class MyTestCase(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
    current_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile(inspect.currentframe()))[0]))
        chromedriver = os.path.join(current_folder, "..\\..\\chromedriver.exe")
        print(chromedriver)
        time.sleep(5)
        cls.driver = webdriver.Chrome(executable_path=chromedriver)

    def test_method(self):
        self.driver.get('http://stackoverflow.com')

规范文件:

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['start.py'],
             pathex=['.....\\TestCases'],
             binaries=[(".....\\chromedriver.exe", ".")],
             datas=[(".....\\TTestData", ".")],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          exclude_binaries=True,
          name='start',
          debug=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
           [('chromedriver.exe', 'chromedriver.exe', 'DATA')],
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               name='start')

0 个答案:

没有答案