python集成selenium做自动化测试

from selenium import webdriver
from selenium.webdriver import EdgeService

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException
import time
import os
import shutil
from openpyxl.drawing.image import Image
from openpyxl import Workbook
# Selenium WebDriver 驱动程序的放置位置与浏览器类型和操作系统有关。常用浏览器的驱动程序和对应的位置如下:

# Chrome:下载地址为 https://sites.google.com/a/chromium.org/chromedriver/downloads,对于 Windows 系统,通常将驱动程序放在 C:\Program Files (x86)\Google\Chrome\Application 目录下;对于 Linux 或 macOS 系统,可以将驱动程序放在 /usr/local/bin/ 目录下。
# Firefox:下载地址为 https://github.com/mozilla/geckodriver/releases,将驱动程序放在系统 PATH 路径下即可。
# Safari:Safari WebDriver 已经集成在 macOS 系统中,无需下载和安装外部驱动程序。
# Edge:下载地址为 https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/,将驱动程序放在系统 PATH 路径下即可。
# Opera:下载地址为 https://github.com/operasoftware/operachromiumdriver/releases,对于 Windows 系统,通常将驱动程序放在 C:\Program Files\Opera\ 目录下;对于 Linux 或 macOS 系统,可以将驱动程序放在 /usr/local/bin/ 目录下。
# 如果你不将驱动程序放在系统 PATH 路径下,可以在代码中指定驱动程序的路径,并且通过 options 参数来配置浏览器选项。具体示例如下:

# python
# from selenium import webdriver
# from selenium.webdriver.chrome.options import Options

# # 指定 Chrome WebDriver 的路径
# chrome_options = Options()
# chrome_options.add_argument('--disable-extensions')
# chrome_options.add_argument('--disable-gpu')
# chrome_options.add_argument('--headless') # 无界面模式
# chrome_options.add_argument('--no-sandbox')
# chrome_options.add_argument('--disable-dev-shm-usage') 

# driver = webdriver.Chrome('/path/to/chromedriver', options=chrome_options) 
 
# edge downLoad: https://developer.microsoft.com/zh-cn/microsoft-edge/tools/webdriver/
# chrome downLoad:https://sites.google.com/a/chromium.org/chromedriver/downloads

   
class BrowserAutomator:
    def __init__(self, browser='chrome'):
        if browser == 'chrome':
            # 创建一个谷歌浏览器对象
            option = webdriver.ChromeOptions()
            option.add_argument('--disable-infobars')
            # 处理SSL证书错误问题
            option.add_argument('--ignore-certificate-errors')
            option.add_argument('--ignore-ssl-errors')
            # 忽略无用的日志
            option.add_experimental_option(
                "excludeSwitches", ['enable-automation', 'enable-logging'])
            #  driver = webdriver.Chrome(executable_path='/path/to/chromedriver')
            self.driver = webdriver.Chrome(options=option)
        elif browser == 'edge':
            options = webdriver.EdgeOptions()
            # 禁用自动打开最近打开的网页
            options.use_chromium = True
            options.add_argument(
                "disable-features=msLocalSave;msSavePassword;promptForDownload")
            # 屏蔽inforbar
            options.add_experimental_option('useAutomationExtension', False)
            options.add_experimental_option(
                'excludeSwitches', ['enable-automation', 'enable-logging'])
            options.add_argument("--disable-gpu")
            # 使用Selenium的--headless选项可以将浏览器设置为无头模式,即在后台运行而不显示界面。
            # options.add_argument("--headless")
            # options.add_argument("--disable-dev-shm-usage")
            # options.add_argument("--no-sandbox")
            # options.add_argument("--disable-browser-side-navigation")
            # options.add_argument("--disable-new-profile-management")
            """
            以上代码中,EdgeOptions类的add_argument()方法用于设置浏览器选项。
            通过添加多个参数,可以屏蔽个人的profile信息。
            例如,"--disable-extensions"参数用于禁用浏览器扩展程序,
            "--disable-infobars"参数用于禁用信息栏,
            "--disable-plugins-discovery"参数用于禁用插件探测,
            "--disable-save-password-bubble"参数用于禁用保存密码弹窗,
            "--disable-translate"参数用于禁用翻译功能,
            "--disable-popup-blocking"参数用于禁用弹窗拦截,
            "--disable-session-crashed-bubble"参数用于禁用会话崩溃弹窗,
            "--disable-notifications"参数用于禁用通知。这些参数的组合可以根据具体需求进行调整。
            """
            # options.add_argument("--disable-extensions")
            # options.add_argument("--disable-infobars")
            # options.add_argument("--disable-plugins-discovery")
            # options.add_argument("--disable-save-password-bubble")
            # options.add_argument("--disable-translate")
            # options.add_argument("--disable-popup-blocking")
            # options.add_argument("--disable-session-crashed-bubble")
            # options.add_argument("--disable-notifications")
            # 创建一个EdgeService对象,指定msedgedriver.exe的路径
            service = EdgeService('C:\\python\\driver\\msedgedriver.exe')
            self.driver = webdriver.Edge(service=service, options=options)
            # self.driver = webdriver.Edge(options=options)
        else:
            raise ValueError('Invalid browser specified')
        self.driver.maximize_window()
 
        
    def go_to_url(self, url):
        self.driver.get(url)
 
    def find_element(self, by, value, timeout=10):
        """
        查找单个元素
        :param by: 元素定位信息,如 By.ID
        :param value: 元素定位信息,如 'element_id'
        :param timeout: 超时时间,默认为10秒
        :return: WebElement对象或None
        """
        try:
            element = WebDriverWait(self.driver, timeout).until(
                EC.presence_of_element_located((by, value))
            )
            return element
        except (TimeoutException, NoSuchElementException):
            return None
 
    def find_elements(self, by, value, timeout=10):
        """
        查找多个元素
        :param by: 元素定位信息,如 By.CLASS_NAME
        :param value: 元素定位信息,如 'element_class'
        :param timeout: 超时时间,默认为10秒
        :return: WebElement对象列表或空列表
        """
        try:
            elements = WebDriverWait(self.driver, timeout).until(
                EC.presence_of_all_elements_located((by, value))
            )
            return elements
        except (TimeoutException, NoSuchElementException):
            return []
 
    def click_element(self, element):
        element.click()
 
    def send_keys_to_element(self, element, keys):
        element.send_keys(keys)
 
    def close(self):
        self.driver.quit()
 
    def switch_to_next_tab(self):
        self.driver.find_element_by_tag_name(
            'body').send_keys(Keys.CONTROL + Keys.TAB)
 
    def switch_to_previous_tab(self):
        self.driver.find_element_by_tag_name('body').send_keys(
            Keys.CONTROL + Keys.SHIFT + Keys.TAB)
 
    def switch_to_tab(self, index):
        self.driver.switch_to.window(self.driver.window_handles[index])
        
    def screen_to_file(self, pic_dir, name):
        print(pic_dir)
        time.sleep(1)
        pname = os.path.join(pic_dir + "/" + name+ ".png")
        self.driver.get_screenshot_as_file(pname)

    def execute_script(self, script, *args):
        return self.driver.execute_script(script, *args)

def insert_pic_to_execel(excel_file, folder_path, height):
        workbook = Workbook()
        sheet = workbook.active
        image_files = [file for file in os.listdir(folder_path) if file.endswith((".jpg", ".jpeg", ".png"))]
        if not image_files:
            print("没有找到图片文件!")
            return
        
        row = 1
        column = "A"
        for file in image_files:
            image_path = os.path.join(folder_path, file)
            print(image_path)
            img = Image(image_path)
            sheet.add_image(img, f"{column}{row}")
            row = row + height
        workbook.save(os.path.join(folder_path, excel_file))
        print("Excel file saved.")
        
def chromeTest():
 
    # 创建一个BrowserAutomator实例,指定使用Chrome浏览器
    automator = BrowserAutomator('chrome')
 

    pic_dir=os.path.join(os.path.dirname(__file__), "images")
    if os.path.exists(pic_dir):  # 检查文件夹是否存在
        shutil.rmtree(pic_dir)
    os.mkdir(pic_dir)
    
    # 打开网页
    automator.go_to_url('https://www.baidu.com')
    automator.screen_to_file(pic_dir, "1")
 
    # 查找元素
    search_box = automator.find_element(By.ID, 'kw')
 
    # 在搜索框中输入文本
    automator.send_keys_to_element(search_box, 'python')
    automator.screen_to_file(pic_dir, "2")
    
    btn_box = automator.find_element(By.ID, 'su')
    automator.click_element(btn_box)
    automator.screen_to_file(pic_dir, "3")

    insert_pic_to_execel("aa.xlsx", pic_dir, 58)    
    
    time.sleep(10)
 
    # 关闭浏览器
    automator.close()
 

chromeTest()

python可以自动切换chrome,edge浏览器,包括了一些自动化测试的常用方法, 包括查找元素之类的。一个python自动化测试的基础类

chromeDriver的下载链接

https://sites.google.com/a/chromium.org/chromedriver/downloads

 EdgeDriver的下载链接

Microsoft Edge WebDriver - Microsoft Edge Developer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值