python - 单元测试启动后 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 停止响应(不响应):
这段代码如何使用多处理?
解决方案
您需要创建一个线程来在那里运行测试。但这是必要的.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()
推荐阅读
- firebase - 如何在 Flutter Firebase 应用程序中捕获 DatabaseError
- django - Django QuerySet:将查询结果格式化为自定义字典
- mysql - MYSQL,需要所有日期和第一个日期的列表
- amazon-web-services - 我可以使用哪些 AWS 服务和工作流程从 API 提取和分析 JSON 日常使用数据?
- java - lombok 常量需要 mvn install
- pandas - 熊猫读取文件避免不需要的分隔符
- numpy - 如何插入一个 5 维数组?
- javascript - React Native 同时按下两个按钮
- r - 在 R 中重新编码分类变量并重塑数据框
- javascript - 传递状态或道具以将值传递给反应中的子组件