从 0 到 1 搭建 Python 语言 Web UI自动化测试学习系列 9--基础知识 5--常用函数 3

测试学习记录,仅供参考!

常用函数

掌握下拉菜单、单选、警告框、进度条拖动定位技巧,模拟鼠标、键盘等一系列操作(右击、拖拽、滚动)

十二、页面截图

1、调用浏览器对象 driver ,然后直接 点 .save_screenshot() 这个截图方法,里面跟的是 截图文件保存路径,因为目前只有项目根目录,所以这里不需要写其他路径,直接写一个保存文件名即可;

复制代码
# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
# 导入用来做鼠标一系列操作的类 ActionChains
from selenium.webdriver.common.action_chains import ActionChains
# 引入模拟键盘一系列操作类 Keys
from selenium.webdriver.common.keys import Keys

# 实例化浏览器
driver = webdriver.Edge()

# 网址
# my_url = 'https://www.leafground.com/radio.xhtml;jsessionid=node018d7x5sspx43amapyllc2ulcm3312672.node0'
my_url = 'https://www.leafground.com/input.xhtml'

# 打开网页
driver.get(my_url)

# 窗口最大化
driver.maximize_window()

# 单选按钮的处理
# driver.find_element(By.XPATH, '//*[@id="j_idt87:console1"]/tbody/tr/td[4]/label').click()

# 滚动条拖动的处理
# 1、首先定位到进度条的滑块元素--返回出去给 slider --因为后续还要使用这个滑块元素进行操作
slider = driver.find_element(By.ID, 'j_idt106:j_idt120')
# 2、获取到滑块元素的大小(宽度)
# 返回的元素 slider 调用 size 方法--返回的 slider.size 是一个字典--再获取字典的宽度 slider.size['width'] 赋值给 slider_width
slider_width = slider.size['width']
# 3、计算要拖动的偏移量(例如:要拖动到一半的位置,五分之一等等)--使用上面获取到滑块的大小的五分之一 --再把结果给返回出去给offset(返回偏移量)
offset = slider_width / 5
# 4、使用 ActionChains 类 进行拖动--调用selenium里面一个类去做相应的一个拖动处理--引入 ActionChains 类
# 首先调用这个 ActionChains 类,然后类里面需要把 浏览器驱动实例(把driver对象) 给传进来后再返回出去给 action --(因为还需要用到它)
action = ActionChains(driver)
# click_and_hold:点击并保持住滑块元素,准备拖动;
# move_by_offset:通过指定的偏移量来移动滑块;
# release:释放鼠标,完成拖动操作;
# perform:执行以上定义的动作链;
action.click_and_hold(slider).move_by_offset(offset, 0).release().perform()

# 文本框实现自增或者自减操作
number_input = driver.find_element(By.ID, 'j_idt106:j_idt118_input')
# 清空输入框
number_input.clear()
# 手动输入新的值
number_input.send_keys('10')
# 使用文本框上的向上箭头模拟值自增
number_input.send_keys(Keys.ARROW_UP)
sleep(2)
# 使用文本框上的向下箭头模拟值自减
number_input.send_keys(Keys.ARROW_DOWN)

# 文本框弹出日期选择的处理
# 1、定位到文本框
date_input = driver.find_element(By.ID, 'j_idt106:j_idt116')
# 2、触发文本框的点击事件,弹出日期选择框
date_input.click()
# 3、定位到弹出的日期选择框里面的元素
date_element = driver.find_element(By.XPATH, '//*[@id="j_idt106:j_idt116_panel"]/div/div[2]/table/tbody/tr[5]/td[4]/a')
date_element.click()

# 页面截图
driver.save_screenshot('scr.png')

# 等待3秒
sleep(3)

# 关闭实例化浏览器
driver.quit()

十三、模拟键盘和鼠标的一系列操作

2、在项目根目录下新建一个名称为 action_keys.py 的 Python 文件;

3、以多行文本输入框为例;引入键盘和鼠标类组合;

复制代码
# 导入用来做鼠标一系列操作的类 ActionChains
from selenium.webdriver.common.action_chains import ActionChains
# 引入模拟键盘一系列操作类 Keys
from selenium.webdriver.common.keys import Keys
模拟键盘按键

4、在 action_keys.py 文件中填写内容;这里以 Keys.ENTER 回车键为例,其他可自行拓展;

复制代码
# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
# 导入用来做鼠标一系列操作的类 ActionChains
from selenium.webdriver.common.action_chains import ActionChains
# 引入模拟键盘一系列操作类 Keys
from selenium.webdriver.common.keys import Keys

# 实例化浏览器
driver = webdriver.Edge()

# 网址
my_url = 'https://www.leafground.com/input.xhtml'

# 打开网页
driver.get(my_url)

# 窗口最大化
driver.maximize_window()

# 定位到多行文本框
lines_element = driver.find_element(By.ID, 'j_idt88:j_idt101')
lines_element.send_keys('多行文本框第一行')
# 模拟键盘回车键
ActionChains(driver).send_keys(Keys.ENTER).perform()
lines_element.send_keys('第二行文字')

# 等待3秒
sleep(3)

# 关闭实例化浏览器
driver.quit()

5、运行查看结果;

模拟鼠标的相关操作

点击(单击)、右键点击、双击、鼠标悬停、鼠标拖拽、鼠标滚动等;

6、点击操作可以定位到元素后直接跟上单击操作;

右键点击、双击、悬停等是先定位到元素,再把定位到的元素给返回出去,模拟鼠标键盘使用 ActionChains 类,然后把浏览器对象给传进来 ActionChains(driver),调用相应的方法(右击context_click、双击double_click、悬停move_to_element),方法里面填写刚刚返回出去找到的元素,最后调用提交以上动作的动作链perform();

鼠标滚动不需要定位元素,直接调用类 ActionChains,把浏览器对象给传进来 ActionChains(driver),调用方法

move_by_offset(100, 500),里面填写滚动的偏移量,最后使用perform()完成动作链;若此方法不可行则使用JavaScript来执行向下滚动到页面底部,直接 driver 调用执行函数 driver.execute_script(),执行这个脚本,里面跟上JavaScript代码 window.scrollTo() ,里面第一个参数是 0,第二个参数是 document.body.scrollHeight(前端的JavaScript代码)driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')

复制代码
# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
# 导入用来做鼠标一系列操作的类 ActionChains
from selenium.webdriver.common.action_chains import ActionChains
# 引入模拟键盘一系列操作类 Keys
from selenium.webdriver.common.keys import Keys

# 实例化浏览器
driver = webdriver.Edge()

# 网址
my_url = 'https://www.leafground.com/input.xhtml'

# 打开网页
driver.get(my_url)

# 窗口最大化
driver.maximize_window()

# 定位到多行文本框
lines_element = driver.find_element(By.ID, 'j_idt88:j_idt101')
lines_element.send_keys('多行文本框第一行')

# 模拟键盘回车键
ActionChains(driver).send_keys(Keys.ENTER).perform()
lines_element.send_keys('第二行文字')

# 模拟鼠标的操作
# 1、点击(左键单击)-- click
driver.find_element(By.ID, 'j_idt88:j_idt101').click()

# 2、右键点击(右3键单击)-- context_click
ele = driver.find_element(By.ID, 'j_idt88:j_idt101')
ActionChains(driver).context_click(ele).perform()

# 3、双击(左键快速两次点击)-- double_click
double_ele = driver.find_element(By.ID, 'j_idt88:j_idt91')
ActionChains(driver).double_click(double_ele).perform()

# 4、鼠标悬停 -- move_to_element
move_element = driver.find_element(By.XPATH, '//*[@id="menuform:j_idt40"]/a/i[1]')
ActionChains(driver).move_to_element(move_element).perform()

# 5、拖拽操作 -- drag_and_drop
# 假如有 source和target 元素
# source = driver.find_element(By.ID, 'source')
# target = driver.find_element(By.ID, 'target')
# 把 source 元素 拖拽至 target 元素
# ActionChains(driver).drag_and_drop(source, target).perform()

# 6、鼠标滚动
# 向下滚动
# ActionChains(driver).move_by_offset(100, 500).perform()
# 使用JavaScript来执行向下滚动到页面底部
driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')

# 等待3秒
sleep(3)

# 关闭实例化浏览器
driver.quit()
鼠标滚动--向下滚动

7、在项目根目录下新建一个名称为 action_keys01.py 的 Python 文件;

8、以测试网站 https://www.leafground.com/select.xhtml 页面中的 下拉菜单多选项为例,打开下拉选择框,要选择最后一个,刚开始打开下拉框时是选不到最后一个选项的,需要滚动向下才能看到最后一个选项;

9、下拉菜单有多个选项,模拟鼠标滚动到最底部那个,并点击选择;

a、 首先需要定位到 下拉选择框,并把定位结果给赋值出去,因为需要用到;

b、 定位到下拉框后要点击一下才能打开下拉选择框列表;

c、 模拟鼠标滚轮向下滚动;此时需要写一个循环,让它多滚动几次,以确保可以滚动到最底部最后一个选项;

for 循环一个下划线 _ (代表一个占位符,只需要循环,不需要用到循环值),循环 xx 次,循环体里面写鼠标操作;若 xx 循环次数仍无法滚动到下拉选择框列表最后一项,则继续加大循环次数直到能够定位到最下面一个;

复制代码
# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

# 实例化浏览器
driver = webdriver.Edge()

# 网址
my_url = 'https://www.leafground.com/select.xhtml'

# 打开网页
driver.get(my_url)

# 窗口最大化
driver.maximize_window()

# 鼠标滚动
# 向下滚动--下拉菜单有多个选项,模拟鼠标滚动到最底部那个,并点击选择
dropdown = driver.find_element(By.ID, 'j_idt87:lang_label')
dropdown.click()
# 模拟鼠标滚轮向下滚动
for _ in range(8):
    ActionChains(driver).send_keys(Keys.ARROW_DOWN).perform()

# 等待3秒
sleep(3)

# 关闭实例化浏览器
driver.quit()

未完待续。。。

相关推荐
李鸿耀4 小时前
Flex 布局下文字省略不生效?原因其实很简单
前端
皮蛋瘦肉粥_1215 小时前
pink老师html5+css3day06
前端·css3·html5
B站计算机毕业设计之家6 小时前
智慧交通项目:Python+PySide6 车辆检测系统 YOLOv8+OpenCV 自定义视频 自定义检测区域 (源码+文档)✅
大数据·python·opencv·yolo·智慧交通·交通·车流量
java1234_小锋7 小时前
TensorFlow2 Python深度学习 - 深度学习概述
python·深度学习·tensorflow·tensorflow2·python深度学习
迈火8 小时前
PuLID_ComfyUI:ComfyUI中的图像生成强化插件
开发语言·人工智能·python·深度学习·计算机视觉·stable diffusion·语音识别
华仔啊10 小时前
前端必看!12个JS神级简写技巧,代码效率直接飙升80%,告别加班!
前端·javascript
excel10 小时前
dep.ts 逐行解读
前端·javascript·vue.js
爱上妖精的尾巴10 小时前
5-20 WPS JS宏 every与some数组的[与或]迭代(数组的逻辑判断)
开发语言·前端·javascript·wps·js宏·jsa
excel10 小时前
Vue3 响应式核心源码全解析:Dep、Link 与 track/trigger 完整执行机制详解
前端