python UI自动化使用send_keys() + request上传文件

在我之前的工作场景中,需要将文件从某个网站下载下来,并在测试中上传到另一个平台进行升级测试 这个升级包非常大 不适合提前放到我们的测试项目中。这种情况就可以通过组合使用 requests 库下载文件的功能和 selenium 库进行文件上传的操作来实现。
下面是如何用 Python 自动化地实现这一过程的步骤和代码示例:
 

目录

步骤概述

代码示例

详细说明

注意事项


步骤概述

  1. requests 库下载升级包:从指定的网站下载文件到临时目录。
  2. selenium 上传文件到目标平台:模拟用户在平台上执行文件上传和点击确认操作。

代码示例

import os
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

def download_file(download_url, local_path):
    response = requests.get(download_url, stream=True)
    response.raise_for_status()  # 确保下载成功
    with open(local_path, 'wb') as file:
        for chunk in response.iter_content(chunk_size=8192):
            file.write(chunk)

# 下载文件到临时目录
download_url = 'http://example.com/upgrade-package.zip'  # 替换为实际的包下载URL
local_file_path = '/tmp/upgrade-package.zip'
download_file(download_url, local_file_path)

# 使用 Selenium 上传文件
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)

driver.get('http://platform.com/upload')  # 替换为实际的上传平台 URL

# 找到文件上传输入框,并上传文件
file_input = driver.find_element(By.ID, 'file-upload')  # 替换为实际表单上传元素的 ID
file_input.send_keys(local_file_path)

# 点击确认按钮进行升级
confirm_button = driver.find_element(By.ID, 'confirm-button')  # 替换为实际确认按钮的 ID
confirm_button.click()

# 验证升级是否成功
# 添加验证逻辑,如检查页面上的特定元素或信息

# 关闭浏览器
driver.quit()

# 删除本地文件
os.remove(local_file_path)

详细说明

  • 下载文件

    • 使用 requests.get() 从指定 URL 下载文件。
    • 使用流式下载确保处理大文件不会导致内存问题。
    • 将下载的文件暂时保存到临时目录。
  • 上传文件

    • 使用 selenium 自动打开平台并导航到文件上传页面。
    • 找到上传元素(通常是 ),通过 send_keys() 方法来模拟上传文件。
    • 找到确认按钮,并使用 click() 方法模拟点击进行升级。
  • 清理临时文件

    • 如果不需要持续保留下载的文件,可以在操作完成后删除它,以节省磁盘空间。

注意事项

  • 元素定位:确保 Selenium 中用于定位元素的方式(如 By.ID)与实际页面的 HTML 结构相符。
  • 网络连接:确保下载和上传过程中网络连接稳定,避免中断带来的错误。
  • 大文件处理:对较大的升级包,使用流式 获取下载响应(如 response.iter_content())能有效避免内存问题。

通过这些步骤和代码示例,可以实现一个有效的自动化文件下载和上传测试过程。这种方法能帮助确保每次升级测试都能准确无误地用最新的包进行平台上的升级测试

你可能感兴趣的:(python,ui,自动化)