首页 > 编程语言 >Selenium4+Python3系列(九) - 上传文件及滚动条操作

Selenium4+Python3系列(九) - 上传文件及滚动条操作

时间:2022-12-05 12:07:20浏览次数:54  
标签:webdriver selenium driver 滚动条 Selenium4 import 上传 Python3

一、上传文件操作

上传文件是每个做自动化测试同学都会遇到,而且可以说是面试必考的问题,标准控件我们一般用​​send_keys()​​​就能完成上传,
但是我们的测试网站的上传控件一般为自己封装的,用传统的上传已经不好用了, 也就是说用​​​selenium​​​的​​APi​​​已经无法完成上传操作了。
那么下面,针对控件进行分类进行演示:

1、标准控件

标准控件很简单,直接用​​send_keys​​就能搞定,示例代码如下:

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.maximize_window()
# 打开上传网站
driver.get("http://localhost:8080/upload.html")
# 触发文件上传的操作
upload = driver.find_element(By.ID, "upload")
time.sleep(2)
# 1、输入文件路径
filepath = f"e:\\demo.pdf"
upload.send_keys(filepath)

2、非标准控件

针对非标准控件,我们就要借用第三方手段来辅助完成上传文件的操作,比如键盘事件、​​Autolt​​​、​​win32gui​​​(与​​Autolt​​​很像),这里以​​win32gui​​为例来演示。

示例代码如下:

import time
import win32con
import win32gui
from pathlib import Path
from selenium import webdriver
from selenium.webdriver import Keys, ActionChains
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.maximize_window()
# 打开上传网站
driver.get("http://localhost:8080/upload.html")
paths = Path.cwd().parent
# 触发文件上传的操作
upload = driver.find_element(By.ID, "upload")
actions = ActionChains(driver)
actions.click(upload).perform()
time.sleep(2)
# 一级顶层窗口
dialog = win32gui.FindWindow("#32770", "打开")
# 二级窗口
comboBoxEx32 = win32gui.FindWindowEx(dialog, 0, "ComboBoxEx32", None)
# 三级窗口
comboBox = win32gui.FindWindowEx(comboBoxEx32, 0, "ComboBox", None)
# 四级窗口 -- 文件路径输入区域
edit = win32gui.FindWindowEx(comboBox, 0, "Edit", None)
# 二级窗口 -- 打开按钮
button = win32gui.FindWindowEx(dialog, 0, "Button", None)
# 1、输入文件路径
filepath = f"e:\\demo.pdf"
win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, filepath)
# 2、点击打开按钮
win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)

二、滚动条操作

在写脚本时,总会遇到一种情况,就是当滚动拉倒最下面了,表单或者下拉框、按钮这些元素未在当前页面展示,而​​webdriver​​​提供的方法都是操作当前页面可见的元素,这时我们使用​​JavaScript​​操作浏览器的滚动条,滚动后使页面元素可见,就可完成后面的元素操作了。

1、核心思路

就是使用​​js​​​去控制浏览器滚动条的位置,在使用​​selenium​​​调用​​JavaScript​​​操作​​js​​完成。

下面举例几种常用滚动条的​​js​​代码示例如下:

//拖动滚动条至底部
document.documentElement.scrollTop=10000
window.scrollTo(0,document.body.scrollHeight)

//拖动滚动条至顶部
document.documentElement.scrollTop=0
arguments[0].scrollIntoView(false);

//左右方向的滚动条可以使用window.scrollTo(左边距,上边距)方法
window.scrollTo(200,1000)

2、实际案例

以博客园我的文章列表页为例,来演示滚动条操作,具体代码如下:

from time import sleep

from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.g

# 获取第一篇文章列表元素
element = driver.find_element(By.CSS_SELECTOR,".forFlow [role='article']:nth-of-type(1) .vertical-middle")
sleep(2)
# 将页面滚动条拖到底部
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
# 将滚动条滚动至第三篇文章列表位置
driver.execute_script("arguments[0].scrollIntoView(true)", element)
sleep(2)
# 将滚动条滚动到顶部
driver.execute_script("arguments[0].scrollIntoView(false)", element)
sleep(2)
# 将滚动条滚动到指定位置
driver.execute_script("window.scrollTo(200,1000)")

以上为个人总结的一些关于滚动条操作的常用方法,更多关于​​js​​去控制滚动条的方法,有兴趣的同学可以自行尝试。

优秀不够,你是否无可替代

软件测试交流QQ群:721256703,期待你的加入!!





标签:webdriver,selenium,driver,滚动条,Selenium4,import,上传,Python3
From: https://blog.51cto.com/u_15009374/5911824

相关文章

  • ubuntu16下升级python3的版本
    ubuntu16下升级python3的版本,这里是升级到3.8。1.首先添加安装源,在命令行输入如下命令:$sudoadd-apt-repositoryppa:jonathonf/python-3.82.更新apt$sudoaptupdate......
  • Centos7.x安装Python3(优化方法)
    安装相应的编译工具建议在root下操作,会方便很多,一定要安装,否则编译安装会报错。yum-ygroupinstall"Developmenttools"yum-yinstallzlib-develbzip2-developens......
  • Centos7.x将Python2升级到Python3
    查看Python版本python-V更新yum源yumupdate安装依赖yuminstallyum-utilsyum-builddeppython3下载pythonwgethttps://www.python.org/ftp/python/3.8.5/Py......
  • python字符串常用方法介绍,基于python3.10
     python字符串常用方法-目录:1、strip()、lstrip()、rstrip()2、removeprefix()、removesuffix()3、replace()4、split()、rsplit()5、join()6、upper()、lower()、capita......
  • 优雅简单玩转python3异步并发
    在python3之后,随着async/await引入,异步调用以全新而便捷的方式让人眼前一亮。首先,尽量用async/await定义协程这里以使用aiohttp请求网络,async函数中,不要使用blockingio......
  • python3的re正则的简单使用
    importre#match----------------------------------------------------print(re.match(r'www','www.runoob.com').span())#(0,3)print(re.match('com','www.ru......
  • python3遇到的error
    SyntaxError:(unicodeerror)‘unicodeescape’codeccan’tdecodebytesinposition原始代码forxinos.listdir('C:\Users\Administrator\Desktop\files'):......
  • Python笔记-Python2和Python3兼容
    Python2与Python3在很数据类型、语法上面都有很大区别。为保证编写的脚本在Python2和Python3下兼容,需要在代码中做版本判断。示例代码如下:importsyspversion=int(s......
  • securecrt9使用Python3
     很长一段时间,securecrt支持python,但版本为python2,而且自带的python解释器模块有缺失,关键是不支持三方库,使用上不方便。securecrt9.0开始支持Python3,不像python2.7......
  • python3使用matplotlib和seaborn生成带有扰动点的箱型图
    importcsvimportseabornassnsimportmatplotlib.pyplotasplt#解决中文不显示和负号不显示问题rc={'font.family':'MicrosoftYaHei','axes.unicode_......