当前位置: 首页 > news >正文

三、UI自动化测试03--操作方法API

目录

  • 一、元素操作⽅法
  • 二、浏览器操作⽅法
    • 1. Part1: 设置最⼤化/⼤⼩/位置
    • 扩展: Web/APP 项⽬⻚⾯布局坐标系示意
    • 2. Part2: 后退/前进/刷新
    • 3. Part3: 关闭/退出/获取⻚⾯标题和 URL 地址
  • 三、获取元素信息⽅法
    • 1. Part1: 获取⼤⼩/⽂本/属性值
    • 2. Part2: 判断元素是否可⻅/可⽤/可选中
  • 四、鼠标操作
    • 1. 右键单击[了解]
    • 2. 左键双击[了解]
    • 3. 拖拽操作[了解]
    • 4. 悬停操作[重点]
  • 五、键盘操作
    • 1. 案例实现
  • 六、元素等待
    • 1. 隐式等待
      • 案例实现
    • 2. 显式等待
      • 案例实现
    • 3. 隐式等待和显示等待的对⽐

一、元素操作⽅法

  • 需求:打开注册A⻚⾯,完成以下操作
  • 1).通过脚本执⾏输⼊⽤户名:admin;密码:123456;电话号码:18611111111;电⼦邮件:123@qq.com
  • 2).间隔3秒,修改电话号码为:18600000000
# 1. 导⼊模块
from time import sleepfrom selenium import webdriver# 2. 实例化浏览器对象
driver = webdriver.Chrome()
# 3. 打开⻚⾯
driver.get('file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html')# 需求:打开注册A⻚⾯,完成以下操作
# 1).通过脚本执⾏输⼊⽤户名:admin;密码:123456;电话号码:18611111111;电⼦邮件:123@qq.com
driver.find_element_by_id('userA').send_keys('admin')
driver.find_element_by_id('passwordA').send_keys('123456')
tel = driver.find_element_by_id('telA')
tel.send_keys('18611111111')
driver.find_element_by_name('emailA').send_keys('123@qq.com')# 2).间隔3秒,修改电话号码为:18600000000
# 注意: 在使⽤操作中, ⼀般对于输⼊框元素, 都要先执⾏清空, 再执⾏输⼊, 避免操作错误
# 清空操作: 元素对象.clear()
sleep(3)
tel.clear()
tel.send_keys('18600000000')# 3).间隔3秒,点击‘注册’按钮
sleep(3)
driver.find_element_by_css_selector('button').click()# 4).间隔3秒,关闭浏览器
# 5).元素定位⽅法不限# 4. 展示效果
sleep(3)
# 5. 退出浏览器
driver.quit()

二、浏览器操作⽅法

1. Part1: 设置最⼤化/⼤⼩/位置

from time import sleepfrom selenium import webdriver# 2. 实例化浏览器对象
driver = webdriver.Chrome()
# 3. 打开⻚⾯
driver.get('file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html')# 1. maximize_window() [重点]最⼤化浏览器窗⼝ --> 模拟浏览器最⼤化按# 说明: 如果能够在打开⻚⾯时, 全屏显示⻚⾯, 就能尽最⼤可能加载更多的⻚⾯元素, 提⾼可定位性
driver.maximize_window()# 2. set_window_size(width, height) [了解]设置浏览器窗⼝⼤⼩ --> 设置浏览器宽、⾼(像素点)
# 场景: 查看⻚⾯是否可以⾃适应(Web 和 APP 端切换)时使⽤
driver.set_window_size(300, 300)# 3. set_window_position(x, y) [了解]设置浏览器窗⼝位置 --> 设置浏
览器位置
driver.set_window_position(300, 300)# 4. 展示效果
sleep(3)
# 5. 退出浏览器
driver.quit()

扩展: Web/APP 项⽬⻚⾯布局坐标系示意

在这里插入图片描述

2. Part2: 后退/前进/刷新

# 1. 导⼊模块
from time import sleepfrom selenium import webdriver# 2. 实例化浏览器对象
driver = webdriver.Chrome()
# 3. 打开⻚⾯
driver.get('http://www.baidu.com')# 定位搜索框输⼊内容
driver.find_element_by_id('kw').send_keys('⿊⻢⻢')
# 点击搜索按钮
driver.find_element_by_id('su').click()
sleep(2)# 后退: 浏览器对象.back()
driver.back()
sleep(2)# 前进: 浏览器对象.forward()
driver.forward()
sleep(2)# 刷新[重点]: refresh()
# 说明: 刷新动作是重新向服务器发起当前⻚⾯的请求!
driver.refresh()# 4. 展示效果
sleep(3)
# 5. 退出浏览器
driver.quit()

3. Part3: 关闭/退出/获取⻚⾯标题和 URL 地址

# 1. 导⼊模块
from time import sleep
from selenium import webdriver# 2. 实例化浏览器对象
driver = webdriver.Chrome()
# 3. 打开⻚⾯
driver.get('file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html')# 点击新开新浪⽹⻚
driver.find_element_by_partial_link_text('访问').click()
sleep(2)# 7. close() 关闭当前窗⼝ --> 模拟点击浏览器关闭按钮
# 8. quit() 关闭浏览器驱动对象 --> 关闭所有程序启动的窗⼝
# 9. title 获取⻚⾯title
# 10. current_url 获取当前⻚⾯URL# 场景: 浏览器的标题和 URL 地址属性, 可以⽤来做断⾔使⽤
print('关闭前⻚⾯标题:', driver.title)
print('关闭前⻚⾯地址:', driver.current_url)# 说明: 在没有实现浏览器⻚⾯切换操作前, close() ⽅法关闭的是原始⻚⾯!
# 场景: 关闭单个⻚⾯时使⽤
driver.close()# 4. 展示效果
sleep(3)
# 5. 退出浏览器
# 说明: 关闭所有⻚⾯
driver.quit()

三、获取元素信息⽅法

1. Part1: 获取⼤⼩/⽂本/属性值

# 1. 导⼊模块
from time import sleepfrom selenium import webdriver# 2. 实例化浏览器对象
driver = webdriver.Chrome()
# 3. 打开⻚⾯
driver.get('file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html')# 1. size 返回元素⼤⼩
# 场景: ⽤于判断⻚⾯元素布局尺⼨是否合理时使⽤
username = driver.find_element_by_id('userA')
print('⽬标元素的尺⼨为:', username.size)# 2. text 获取元素的⽂本
# 场景: ⽤于切换⻚⾯后, 对⻚⾯内容特定元素的⽂本信息的获取(⽤作断⾔使)
btn = driver.find_element_by_tag_name('button')
print('⽬标元素的⽂本为:', btn.text)# 3. get_attribute("xxx") 获取属性值,传递的参数为元素的属性名
# 场景: 有些情况下, 需要获取⽬标元素的特定属性值作为判断依据或数据
# 语法: 元素对象.get_attribute("属性名")
link = driver.find_element_by_link_text('浪')
print('⽬标元素的地址为:', link.get_attribute('href'))# 4. 展示效果
sleep(3)
# 5. 退出浏览器
driver.quit()

2. Part2: 判断元素是否可⻅/可⽤/可选中

# 1. 导⼊模块
from time import sleepfrom selenium import webdriver# 2. 实例化浏览器对象
driver = webdriver.Chrome()
# 3. 打开⻚⾯
driver.get('file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html')# 4. is_displayed() 判断元素是否可⻅
# 说明: 该⽅法多⽤于对元素在⻚⾯内显示效果的判断时使⽤(元素不显示不意味着⼀定⽆法定位)
span = driver.find_element_by_name('sp1')
print('⽬标元素是否显示:', span.is_displayed())# 5. is_enabled() 判断元素是否可⽤
# 说明: 该⽅法多⽤于判断⽬标元素是否可以进⾏交互时使⽤
can_btn = driver.find_element_by_id('cancelA')
print('⽬标元素是否可⽤:', can_btn.is_enabled())# 6. is_selected() 判断元素是否选中,⽤来检查复选框或单选按钮是否被选# 场景: 如购物⻋⻚⾯, 不全选商品, 不让结算
check = driver.find_element_by_id('lyA')
print('⽬标元素是否被选中:', check.is_selected())# 扩展: 判断条件
if check.is_selected(): # 选中的判断pass
if not check.is_selected(): # 未选中的判断pass# 4. 展示效果
sleep(3)
# 5. 退出浏览器
driver.quit()

四、鼠标操作

1. 右键单击[了解]

# 1. 导⼊模块
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains# 2. 实例化浏览器对象
driver = webdriver.Chrome()
# 3. 打开⻚⾯
driver.get('file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html')# 需求:打开注册⻚⾯A,在⽤户名⽂本框上点击⿏标右键
# 0> 定位⽬标元素
username = driver.find_element_by_id('userA')
# 1> 实例化⿏标对象(关联浏览器对象)
action = ActionChains(driver)
# 2> 调⽤⿏标⽅法
# 说明: ⿏标右键只能展示右键菜单内容, ⽽菜单中的元素⽆法操作!
action.context_click(username)
# 3> 执⾏⽅法: 该⽅法必须调⽤, 否则上述代码⽆效!!!!!!
action.perform()# 4. 展示效果
sleep(3)
# 5. 退出浏览器
driver.quit()

2. 左键双击[了解]

from time import sleepfrom selenium import webdriver
from selenium.webdriver import ActionChains# 2. 实例化浏览器对象
driver = webdriver.Chrome()
# 3. 打开⻚⾯
driver.get('file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html')# 需求:打开注册⻚⾯A,输⼊⽤户名admin,暂停3秒钟后,双击⿏标左键,选中admin
username = driver.find_element_by_id('userA')
username.send_keys('admin')
sleep(3)# 说明: 使⽤键盘快捷键 Ctrl + A, 也能实现全选
# 1> 实例化⿏标对象(关联浏览器对象)
action = ActionChains(driver)
# 2> 调⽤⿏标动作(传⼊⽬标元素)
action.double_click(username)
# 3> 执⾏⽅法
action.perform()# 4. 展示效果
sleep(3)
# 5. 退出浏览器
driver.quit()

3. 拖拽操作[了解]

from time import sleepfrom selenium import webdriver
from selenium.webdriver import ActionChains# 2. 实例化浏览器对象
driver = webdriver.Chrome()
# 3. 打开⻚⾯
driver.get('file:///Users/comesoon/Desktop/page/drag.html')# 需求:打开‘drag.html’⻚⾯,把红⾊⽅框拖拽到蓝⾊⽅框上
red = driver.find_element_by_id('div1')
blue = driver.find_element_by_id('div2')# 1> 实例化⿏标对象(关联浏览器对象)
action = ActionChains(driver)
# 2> 调⽤⽅法(传⼊⽬标元素)
action.drag_and_drop(red, blue)
# 3> 执⾏⽅法
action.perform()# 4. 展示效果
sleep(3)
# 5. 退出浏览器
driver.quit()

4. 悬停操作[重点]

from time import sleepfrom selenium import webdriver
from selenium.webdriver import ActionChains# 2. 实例化浏览器对象
driver = webdriver.Chrome()
# 3. 打开⻚⾯
driver.get('file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html')# 定位⽬标元素
btn = driver.find_element_by_tag_name('button')# 实例化⿏标对象
action = ActionChains(driver)
# 调⽤⿏标⽅法
# 说明: 该⽅法在实际应⽤中, 处理悬停⿏标才会出现的菜单时使⽤
# 注意: 该⽅法执⾏时, 不要动⿏标!!!!!!
action.move_to_element(btn)
# 执⾏⽅法
action.perform()# 另⼀种⿏标操作的写法:(在其他编程语⾔中称为链式编程)
# ActionChains(driver).move_to_element(btn).perform()# 4. 展示效果
sleep(3)
# 5. 退出浏览器
driver.quit()

五、键盘操作

1. 案例实现

# 1. 导⼊模块
from time import sleepfrom selenium import webdriver
from selenium.webdriver.common.keys import Keys# 2. 实例化浏览器对象
driver = webdriver.Chrome()
# 3. 打开⻚⾯
driver.get('file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html')# 需求:打开注册A⻚⾯,完成以下操作
# 1). 输⼊⽤户名:admin1,暂停2秒,删除1
username = driver.find_element_by_id('userA')
username.send_keys('admin1')
sleep(2)
# 删除: BACK_SPACE 等价于 BACKSPACE
username.send_keys(Keys.BACK_SPACE)# 2). 全选⽤户名:admin,暂停2秒
# 说明: macOS 系统需要使⽤ Command + a
username.send_keys(Keys.CONTROL, 'a') # Windows 系统
# username.send_keys(Keys.COMMAND, 'a') # macOS 系统
sleep(2)# 3). 复制⽤户名:admin,暂停2秒
username.send_keys(Keys.CONTROL, 'c') # Windows 系统
# username.send_keys(Keys.COMMAND, 'c') # macOS 系统
sleep(2)# 4). 粘贴到密码框
# 说明: 之所以能够复制完内容后, 在任意位置处可以进⾏粘贴, 是通过系统的剪切板实现的
password = driver.find_element_by_id('passwordA')
password.send_keys(Keys.CONTROL, 'v') # Windows 系统
# password.send_keys(Keys.COMMAND, 'v') # macOS 系统# 4. 展示效果
sleep(3)
# 5. 退出浏览器
driver.quit()

六、元素等待

1. 隐式等待

说明:
定位元素时,如果能定位到元素则直接返回该元素,不触发等待;
如果不能定位到该元素,则间隔⼀段时间[不可控制]后再去定位元素;
如果在达到最⼤时⻓时还没有找到指定元素,则抛出元素不存在的异常 NoSuchElementException 。

  • 注意:
    1. 隐式等待是全局有效, 只需要设置⼀次即可
    1. 当隐式等待被激活时, 虽然⽬标元素已经出现了,
  • 但是还是会由于当前⻚⾯内的其他元素的未加载完成, ⽽继续等待, 进⽽增加代码的执⾏时⻓

案例实现

# 1. 导⼊模块
from time import sleepfrom selenium import webdriver# 2. 实例化浏览器对象
driver = webdriver.Chrome()
# 3. 打开⻚⾯
driver.get('file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%
8CA%E7%AD%89%E5%BE%85.html')# 设置隐式等待
driver.implicitly_wait(10)# 定位元素并输⼊
driver.find_element_by_id('userA').send_keys('admin')# 4. 展示效果
sleep(3)
# 5. 退出浏览器
driver.quit()

2. 显式等待

说明:
定位指定元素时,如果能定位到元素则直接返回该元素,不触发等待;
如果不能定位到该元素,则间隔⼀段时间[可以控制]后再去定位元素;
如果在达到最⼤时⻓时还没有找到指定元素,则抛出超时异常 TimeoutException

案例实现

  • 需求:打开注册A⻚⾯,完成以下操作

  • 1).使⽤显式等待定位⽤户名输⼊框,如果元素存在,就输⼊admin

  • driver.find_element_by_id(‘userA’).send_keys(‘admin’)

  • 设置显式等待: 按住 Ctrl, ⿏标左键点击类名, 拷⻉示例代码, 根据实际需求修改对应参数即可

# 1. 导⼊模块
from time import sleepfrom selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait# 2. 实例化浏览器对象
driver = webdriver.Chrome()
# 3. 打开⻚⾯
driver.get('file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA%E7%AD%89%E5%BE%85.html')"""
driver: 浏览器对象
timeout: 超时时⻓
poll_frequency: 定位⽅法执⾏间隔时⻓(默认 0.5 秒)
"""
element = WebDriverWait(driver, 10, 1).until(lambda x: 
x.find_element_by_id('userA'))
# 说明: 元素操作⽅法没有代码提示, 需要⼿写
element.send_keys('admin')# 4. 展示效果
sleep(3)
# 5. 退出浏览器
driver.quit()

3. 隐式等待和显示等待的对⽐

对⽐元素个数调⽤⽅式异常类型
隐式等待全局浏览器对象调⽤NoSuchElementException
显式等待单个实例化对象调⽅法TimeoutException
扩展: 强制等待(sleep)全局⽅法NoSuchElementException

相关文章:

  • 快速上手 MetaGPT
  • 云计算赋能质检LIMS的价值 质检LIMS系统在云计算企业的创新应用
  • 【计算机网络】网络基础概念
  • 网络安全厂商F5荣登2025 CRN AI 100榜单,释放AI潜力
  • 云计算市场的重新分类研究
  • 衡量矩阵数值稳定性的关键指标:矩阵的条件数
  • 鸿蒙系统应用开发全栈指南
  • openstack迁移虚机rbd报错,删除异常rbd
  • 机器人快速启动
  • Greenbone(绿骨)开源GVM容器docker部署和汉化介绍
  • 【2025 最新前沿 MCP 教程 06】构建你的第一个 MCP 服务器:分步指南(源码讲解)
  • 今日头条安卓版新闻推荐精准度与广告影响测评
  • vue中将html2canvas转成的图片传递给后台 Python Flask 服务
  • qt.qpa.plugin: Could not find the Qt platform plugin “cocoa“ in “ “
  • adb push 报错:CreateProcess failure, error 123
  • LeetCode[150]逆波兰表达式求值
  • Spring MVC深度解析:从原理到实战
  • MySQL最新安装、连接、卸载教程(Windows下)
  • 汽车网络安全 -- 理解暴露面、攻击面和攻击向量
  • ppt流程图怎么?ppt流程图模板大全
  • 视觉周刊|2025上海车展的科技范
  • 四川落马厅官周海琦受审,1000余人接受警示教育
  • 新任海南琼海市委副书记陈明已主持市政府党组全面工作
  • 释新闻|SEVIS是什么?在美留学生遭身份中止意味什么?
  • 一季度规模以上工业企业利润由降转增,国家统计局解读
  • 钟声:美以芬太尼为借口滥施关税,纯属“内病外治”