从 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()

未完待续。。。

相关推荐
蓝瑟4 小时前
React 项目实现拖拽排序功能,如何在众多库中选对 “它”
前端·javascript·react.js
Rhys..4 小时前
Cucumber自学导航
javascript·python·bdd·cucumber
kobe_OKOK_4 小时前
Django ORM 无法通过 `ForeignKey` 自动关联,而是需要 **根据父模型中的某个字段(比如 ID)去查询子模型**。
后端·python·django
蜀中廖化4 小时前
python VSCode中报错 E501:line too long (81 > 79 characters)
开发语言·vscode·python
MoRanzhi12034 小时前
15. Pandas 综合实战案例(零售数据分析)
数据结构·python·数据挖掘·数据分析·pandas·matplotlib·零售
万少5 小时前
开发者注意了 DevEco Studio 6 Release 开放了,但是我劝你慎重升级6应用
前端
小刘不知道叫啥5 小时前
React 源码揭秘 | 合成事件
前端·javascript·react.js
量化交易曾小健(金融号)5 小时前
Python美股量化交易填坑记录——3.盈透(Interactive Brokers)证券API接口
开发语言·python
我命由我123455 小时前
Photoshop - Photoshop 工具栏(10)透视裁剪工具
经验分享·笔记·学习·ui·职场和发展·职场发展·photoshop