首页 > 解决方案 > 单元测试启动后 GUI 没有响应

问题描述

我已经编写了一些使用 Selenium 的单元测试并为它创建了一个 Tkinter GUI。

script.py是:

from selenium import webdriver
import unittest

class LaunchChrome(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome(r"C:\Users\USERNAME\PycharmProjects\First\Drivers\chromedriver.exe")
        cls.driver.maximize_window()
        cls.driver.get('https://facebook.com')

if __name__ == '__main__':
    unittest.main()

interface.py 是:

from tkinter import Button
from tkinter.ttk import *
import unittest
from ex import LaunchChrome

class HomeApplication:

    def init_page(self):

        self.buStart = Button(self, text="Start", width=60)
        self.buStart.grid(row=4, column=0, columnspan=3)
        self.buStart.config(command=self.start_app)
    def run(self):
        Launch_Chrome = unittest.TestLoader().loadTestsFromTestCase(LaunchChrome)
        test_suite = unittest.TestSuite([Launch_Chrome])
        unittest.TextTestRunner(verbosity=2).run(test_suite)
    def start_app(self):
        print("run")
        self.run()

打开 GUI 并单击“开始”按钮后,单元测试工作正常,但 GUI 停止响应(不响应):

(没反应)

这段代码如何使用多处理?

标签: pythonpython-3.xuser-interfacetkinter

解决方案


您需要创建一个线程来在那里运行测试。但这是必要的.start()。将interface.py文件替换为:

import tkinter as tk
import tkinter.ttk as ttk
import unittest
from threading import Thread

from ex import LaunchChrome


class HomeApplication(tk.Tk):
    def __init__(self):
        super().__init__()

        ttk.Button(self, text="Start", width=60, command=self.start_app)\
                     .grid(row=4, column=0, columnspan=3)

    def run_tests(self):
        test_suite = unittest.TestSuite([unittest.TestLoader()\
                                         .loadTestsFromTestCase(LaunchChrome)])
        unittest.TextTestRunner(verbosity=2).run(test_suite)

    def start_app(self):
        Thread(target=self.run_tests, daemon=True).start()

if __name__ == "__main__":
    HomeApplication().mainloop()

推荐阅读