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

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

常用函数

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

测试网站:https://www.leafground.com/(国外服务器,根据网络波动打开可能稍慢)

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

复制代码
# 导包
from selenium import webdriver
from time import sleep

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

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

# 打开网页
driver.get(my_url)

# 窗口最大化
driver.maximize_window()

# 等待3秒
sleep(3)

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

八、单选按钮的处理

2、以测试网站 https://www.leafground.com/radio.xhtml;jsessionid=node018d7x5sspx43amapyllc2ulcm3312672.node0 页面中的 Edge 单选项为例,单选按钮的处理和输入框的处理几乎没有区别,若是要选择这个单选按钮,需要先定位到元素,再做一个 click() 点击操作即可;

3、直接复制其 XPath 路径定位;

4、优化 selenium_demo1.py 文件;

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

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

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

# 打开网页
driver.get(my_url)

# 窗口最大化
driver.maximize_window()

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

# 等待3秒
sleep(3)

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

5、运行查看结果是能够点击上;

九、滑动进度条拖动的处理

模拟用户手动去拖动进度条;

6、以测试网站 https://www.leafground.com/input.xhtml 页面中的 滑动条 为例;

7、若是操作进度条的话,需先定位到进度条这个滑块的元素;

8、优化 selenium_demo1.py 文件;

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

# 实例化浏览器
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()

# 等待3秒
sleep(3)

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

用它这个对象去执行一系列操作;

引用这个类的对象 action 去调用类里面的 click_and_hold() 方法,把获取的元素给传进来click_and_hold(slider),再调用里面的一个move_by_offset() 方法,把计算好的偏移量对象给传进来move_by_offset(offset, 0)在赋个0,再调用 release(),最后再调用 perform();

click_and_hold():点击并且保持滑块元素的准备操作;

move_by_offset() :通过指定的偏移量来移动滑块;

release():释放鼠标,然后完成了一个拖动的操作;

perform():执行以上一系列的动作链;

9、运行 selenium_demo1.py 文件查看结果是能够成功的;

十、文本框数值自增或者自减的处理

10、文本框实现自增或者自减操作,首先定位到元素;

第一种、手动输入

11、优化 selenium_demo1.py 文件,定位到元素后把它给赋值出去,因为后面还需要用到它;定位到元素后可以先写一下先进行清空操作,可以去清空这个输入框,调用 clear() 函数方法;

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

# 实例化浏览器
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')

# 等待3秒
sleep(3)

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

12、运行验证第一种手动输入的情况;

第二种、自增

13、优化 selenium_demo1.py 文件,需要导入模拟键盘操作类;

复制代码
# 导包
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)
# 等待3秒
sleep(3)

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

14、运行验证第二种自增的情况;

第三种、自减

15、优化 selenium_demo1.py 文件,验证第三种自减的情况;

复制代码
# 导包
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)
# 等待3秒
sleep(3)

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

十一、文本框弹出日期选择的处理

16、优化 selenium_demo1.py 文件;

复制代码
# 导包
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()

# 等待3秒
sleep(3)

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

未完待续。。。

相关推荐
用户693717500138418 小时前
Google 正在“收紧侧加载”:陌生 APK 安装或需等待 24 小时
android·前端
蓝帆傲亦18 小时前
Web 前端搜索文字高亮实现方法汇总
前端
用户693717500138418 小时前
Room 3.0:这次不是升级,是重来
android·前端·google
qq_4176950519 小时前
机器学习与人工智能
jvm·数据库·python
漫随流水19 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
yy我不解释20 小时前
关于comfyui的mmaudio音频生成插件时时间不一致问题(一)
python·ai作画·音视频·comfyui
踩着两条虫20 小时前
VTJ.PRO 核心架构全公开!从设计稿到代码,揭秘AI智能体如何“听懂人话”
前端·vue.js·ai编程
紫丁香21 小时前
AutoGen详解一
后端·python·flask
FreakStudio21 小时前
不用费劲编译ulab了!纯Mpy矩阵micronumpy库,单片机直接跑
python·嵌入式·边缘计算·电子diy
jzlhll12321 小时前
kotlin Flow first() last()总结
开发语言·前端·kotlin