【发布时间】:2021-01-03 02:49:44
【问题描述】:
我有一个 Python tkinter 脚本,我想在它上面运行一些功能测试。该脚本包括tkinter.filedialog.askopenfilename() 和tkinter.filedialog.asksaveasfilename(),所以我想要上传/下载文件的测试的一部分。我尝试使用pyautogui 来尝试自动单击鼠标并发送键来尝试自动执行这些操作,但是这样做没有用(屏幕上没有任何可见的变化,也没有加载文件)。
尝试使用 pyautogui 进行功能测试
class TestOrganizeAttendance(unittest.TestCase):
def setUp(self):
self.organizer = AttendanceOrganizer()
...
def test_attendance_organizer_window_operation(self):
...
#User clicks button and their computer's files appear
self.organizer.upload_file_button.invoke()
self.assertIn(
"explorer.exe", [p.name() for p in psutil.process_iter()])
#User selects a file to be uploaded
filepath = os.path.abspath(
os.path.join('.', 'tests', 'sample_attendance.csv'))
pyautogui.PAUSE = 2.5
pyautogui.hotkey('alt', 'd')
pyautogui.typewrite(filepath)
pyautogui.hotkey('enter')
....
脚本
class AttendanceOrganizer:
def __init__(self):
self.upload_file_button = tkinter.Button(
self.root, text="Upload File", command=self.upload_file)
self.download_file_button = tkinter.Button(
self.root, text="Download File", command=self.download_file)
...
def upload_file(self):
self.details_var.set(
value="Select a file to upload")
filetypes = [('Comma Separated Values', '.csv')]
filepath = tkinter.filedialog.askopenfilename(
parent=self.root, filetypes=filetypes)
if not (filepath and os.path.splitext(filepath)[-1] == '.csv'):
return
self.upload_var.set(value=filepath)
self.details_var.set(
value=f"File Uploaded\t{self.details_var.get()}")
with open(filepath, encoding='utf-16') as file:
self.values = list(csv.reader(file, delimiter='\t'))
del self.values[0]
self.organize_data_button.config(state='normal')
def download_file(self):
filetypes = [('Comma Separated Values', '.csv')]
filepath = tkinter.filedialog.asksaveasfilename(
parent=self.root, filetypes=filetypes)
with open(f"{filepath}.csv", 'w', newline='') as file:
fieldnames = ["Last", "First", "Joined", "Left"]
writer = csv.DictWriter(
file, fieldnames=fieldnames, delimiter='\t')
writer.writeheader()
for item in self.data:
writer.writerow(self.data[item])
...
【问题讨论】:
-
如果您只显示测试代码而不显示您尝试测试的程序,我不知道如何帮助您。更好地使用
askopenfilename和您的测试创建最小的工作代码,以便我们可以简单地复制并运行它 - 查看问题和文本想法。
标签: python python-3.x tkinter python-unittest functional-testing