自学内容网 自学内容网

【测开】利用界面化操作存储步骤数据,为 Selenium 自动化测试提效赋能(一)

开篇简介

本篇分享我设计的sqlite数据步骤表结构、以及让selenium4执行的方法;

不当之处请多多指教。

如下是qt界面,执行用例的时候,完成selenium的定位元素、鼠标事件等。

准备

1、selenium知识

selenium是可以模拟人工执行浏览器的库。

selenium4的helloworld.py,python的selenium4库已经不需要单独安装本地驱动了。

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service

# 使用 WebDriverManager 获取 ChromeDriver 的路径
driver_path = ChromeDriverManager().install()
# 使用 Service 类来传递 ChromeDriver 路径
service = Service(driver_path)


driver = webdriver.Chrome(service=service)
# 步骤1: 打开一个网页
driver.get('https://www.baidu.com/')
# 步骤2: 输入搜索词并点击搜索按钮
search_box = driver.find_element('id', 'kw')
search_box.send_keys('自动化测试')
# 步骤3: 点击提交
search_button = driver.find_element('id', 'su')
search_button.click()


# 等待几秒钟以便查看效果(可选)
import time
time.sleep(5)

# 关闭浏览器
driver.quit()

 selenium有很多操作、可以参考selenium整理

2. pyqt5以及QThread多线程

如下是简单的pyqt5中多线程QThread启用、以及pyqtSignal的使用

  • QThred的子类中,run方法,使用子类对象调用start()方法,就可以创建一个多线程来执行run犯法。
  • 定义一个信号,在对应的地方发射信号,最后append到文本框

 

import sys, time
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QVBoxLayout, QWidget,QPushButton
from PyQt5.QtCore import pyqtSignal, QObject, QThread

class SeleniumSignal(QObject):
    # 定义一个信号,用于传递字符串信息
    message = pyqtSignal(str)

class SeleniumExecutor(QThread):
    def __init__(self, signal):
        super().__init__()
        self.steps = None
        self.signal = signal
        self.excutor_person = 1

    def run(self):
        if self.steps:  # 确保有步骤需要执行
            self.excute()

    def excute(self):
        self.signal.message.emit(f"{self.excutor_person}开始执行....")
        for step in self.steps:
            action_name = step['action_name']
            self.signal.message.emit(f"{self.excutor_person}正在执行步骤: {action_name}")
            time.sleep(1)  # 模拟每个步骤之间的延迟
            # 这里可以加入实际的步骤执行逻辑
            self.signal.message.emit(f"{self.excutor_person}步骤 {action_name} 执行完成")
            time.sleep(1)  # 模拟每个步骤之间的延迟
        self.signal.message.emit(f"{self.excutor_person}所有步骤执行完成")
        self.excutor_person = 1 + self.excutor_person


    def set_steps(self,steps):
        self.steps = steps



class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Selenium Executor')
        self.resize(800,600)

        btn = QPushButton("执行")
        btn.clicked.connect(self.run_selenium)

        self.text_edit = QTextEdit(self)
        self.text_edit.setReadOnly(True)
        layout = QVBoxLayout()
        layout.addWidget(btn)
        layout.addWidget(self.text_edit)
        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

        # 创建信号对象
        self.signal = SeleniumSignal()
        self.signal.message.connect(self.update_text)
        self.signal.message.connect(lambda xx:print(xx))


        # 提前实例化SeleniumExecutor对象
        self.executor = SeleniumExecutor( self.signal)
        # # 初始化,多线程创建dirver
        self.executor.start()



    def update_text(self, message):
        self.text_edit.append(message)

    def run_selenium(self):
        # 1. 打开百度-搜索-点击
        steps = [{'id': 7, 'case_id': 2, 'step_number': 1, 'step_description': None, 'action_type_major': 'browser_operation', 'action_type_minor': 'open_windows', 'action_name': '打开窗口', 'value': 'https://www.baidu.com/', 'locator_type': None, 'locator_value': None, 'show_wait_time': None, 'iswait_find': 1, 'keyword_value': None, 'locator_type2': None, 'locator_value2': None},
                 {'id': 9, 'case_id': 2, 'step_number': 3, 'step_description': None, 'action_type_major': 'keyboard_operation', 'action_type_minor': 'text_input', 'action_name': '内容输入', 'value': 'ui自动化测试', 'locator_type': '0', 'locator_value': 'kw', 'show_wait_time': None, 'iswait_find': 1, 'keyword_value': None, 'locator_type2': None, 'locator_value2': None},
                 {'id': 10, 'case_id': 2, 'step_number': 4, 'step_description': None, 'action_type_major': 'mouse_operation', 'action_type_minor': 'mouse_click', 'action_name': '左键点击', 'value': None, 'locator_type': '0', 'locator_value': 'su', 'show_wait_time': None, 'iswait_find': 1, 'keyword_value': None, 'locator_type2': None, 'locator_value2': None},
                 {'id': 8, 'case_id': 2, 'step_number': 6, 'step_description': None, 'action_type_major': 'wait_operation', 'action_type_minor': 'force_wait', 'action_name': &

原文地址:https://blog.csdn.net/Ataoker/article/details/145255635

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!