从 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()
未完待续。。。