IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Selenium+Python 下载文件与上传文件 -> 正文阅读

[开发测试]Selenium+Python 下载文件与上传文件

目录

本文记录了我做的使用Selenium编写的自动化测试脚本,功能是从网页下载文件,并将下载的文件上传至另一页面。同时记录了一些编写过程中遇到的问题及解决方法

下载文件功能

谷歌浏览器下载设置

进入设置页面->高级,勾选下载内容的【下载前询问每个文件的保存位置】为勾选,以确保后面能够更改下载文件的名称以及保存地址。

切换iframe框架

在定位导出按钮时出现webdriver在处理定位元素报错,提示没有这样的元素的问题。查询后发现页面使用了frame技术。网页划分成多个子页面。webdriver默认查找的元素都是Top window这层。导出元素内嵌在了frame内部,需要先使用switch to语句,切换到frame内部,然后去操作元素,操作完了之后,需要switch out到default区域,也就是Top window。
在这里插入图片描述
上图红框位置标签后的内容均在iframe框架中,通过标签的name属性,定位此标签,代码如下

// An highlighted block
driver.switch_to.frame("671a7d8e-d2a0-43fd-8b23-0901a7b8f687")

定位元素进行操作后,需要回到Top window

// An highlighted block
driver.switch_to.default_content()

鼠标悬浮元素定位

使用悬停实现鼠标放置在导出元素上,弹出选项

鼠标悬停 move_to_element()

// An highlighted block
mouse = driver.find_element_by_xpath('//*[@class="bi-show bi-abs"]/div[2]/div/div[2]/div')
# a = driver.find_elements_by_xpath('//body/*[@id="wrapper"]/div[2]/div/div[2]/div')
time.sleep(1)
ActionChains(driver).move_to_element(mouse).perform()
try:
    driver.find_element_by_xpath("//*[@id='wrapper']/div[2]/div/div[2]/div[2]/div/div/div/div[2]").click()
    print("导出成功")
except:
    time.sleep(1)

鼠标悬浮后出现的元素定位

需要定位鼠标悬停才显示的元素,如果直接点击获取元素地址,鼠标移开后选项就会消失从而无法定位。首先使鼠标悬停并出现需要定位的选项,然后在谷歌浏览器F12,选择Sourses点击下图红框按钮,进入Debugger paused模式。此时再进行元素定位,选项不会消失。
在这里插入图片描述

上传文件

切换句柄

当弹出新的页面,需要获取新的页面元素,需要首先切换页面到新的网页窗口
1.获取所有句柄

// An highlighted block
currentWin = driver.window_handles
print(f"获取到当前所有的handle:{currentWin}")

2.切换至新的页面

// An highlighted block
driver.switch_to.window(currentWin[-1])
handle = driver.current_window_handle
print(f"获取到当前的handle:{handle}")//确认已切换至新的页面

利用AutoIt进行桌面元素定位

1.AutoIt下载安装使用
官方网站:https://www.autoitscript.com/site/autoit/
使用参考链接文章:https://www.cnblogs.com/generalli2019/p/11451211.html
编辑器代码如下

WinActivate("打开");

;ControlFocus("title","text",controlID) Edit1=Edit instance 1
ControlFocus("打开", "","Edit1")

; Wait 10 seconds for the Upload window to appear
  WinWait("打开","[CLASS:#32770]",10)

; Set the File name text on the Edit field
  ControlSetText("打开", "", "Edit1", "D:\Users\00762856\Downloads\审核不通过.pdf")

  Sleep(2000)

; Click on the Open button
  ControlClick("打开", "","Button1");

自动化代码增加如下语句

import os
os.system(r'D:\work\uitest2\test_zhifu2\autoit\test.exe')

2.传参参数化(未实现)
将编辑器代码中的文件地址 “D:\Users\00762856\Downloads\审核不通过.pdf”,修改成一个参数$CmdLine[1]
在代码中增加

file_path = "D:\Users\00762856\Downloads\审核不通过.pdf"
os.system(r'D:\work\uitest2\test_zhifu2\autoit\test.exe' % file_path)  # 你自己本地的地址

3.批量上传(未实现)
方法一:先把要上传的图片放到一个list下,然后for循环

# 把需要上传的图片放到一个list下
all_png = ["D:\\1.png", "D:\\2.png", "D:\\3.png", "D:\\4.png"]
# 循环点击上传图片
for i in all_png:
    # 1点开编辑器图片 
    # 2点开文件上传按钮
    # 执行autoit上传文件
    os.system("C:\Users\Gloria\Desktop\cmdjpg.exe %s" % i)  # 你自己本地的.exe路径
    time.sleep(3)

方法二:把要上传的图片编号,如:0.png , 1.png, 2.png这种(从0开始编号),放到同一目录下,然后for循环

# 循环点击上传图片
for i in range(4):
    # 1点开编辑器图片

    # 2点开文件上传按钮

    # 文件名
    file_name = "D:\\%s.png" % i  # 参数化路径名称

    # 执行autoit上传文件
    os.system("C:\Users\Gloria\Desktop\cmdjpg.exe %s" % file_name)  # 你自己本地的.exe路径
    time.sleep(3)

整体代码

// An highlighted block
driver = webdriver.Chrome()
driver.get('http://10.39.168.111/webroot/decision')
time.sleep(2)
driver.maximize_window()
time.sleep(1)
driver.find_element_by_xpath("//*[@id='wrapper']/div[1]/div/div[2]/div/div/div[1]/div[1]/div[1]/div[1]/div[2]/input").clear()
driver.find_element_by_xpath("//*[@id='wrapper']/div[1]/div/div[2]/div/div/div[1]/div[1]/div[1]/div[1]/div[2]/input").send_keys("00744521")
driver.find_element_by_xpath("//*[@id='wrapper']/div[1]/div/div[2]/div/div/div[1]/div[2]/div[1]/div[1]/div[2]/input").clear()
driver.find_element_by_xpath("//*[@id='wrapper']/div[1]/div/div[2]/div/div/div[1]/div[2]/div[1]/div[1]/div[2]/input").send_keys("fwD.342p9IerwK")
driver.find_element_by_xpath("//*[@id='wrapper']/div[1]/div/div[2]/div/div/div[1]/div[4]/div").click()
time.sleep(3)
driver.find_element_by_xpath("//*[@id='wrapper']/div[1]/div[1]/div[2]/div/div[2]/div[2]/div[1]/div[5]/div/div/div[1]/div/div/div/div/div/div/div[4]").click()
driver.find_element_by_xpath("//*[@id='wrapper']/div[1
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 13:25:12  更:2022-02-16 13:27:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 2:44:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码