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

三、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
http://www.xdnf.cn/news/2476.html

相关文章:

  • RPCRT4!NdrConformantStructUnmarshall函数分析的一个例子处理第二部分DomainSid
  • 【Nginx】负载均衡配置详解
  • 互联网大厂Java求职面试:从Java核心到微服务的深度探索
  • 【Android】硬件合成器 HWC
  • 4月27日日记
  • 基于spssau分析工具spss的简介
  • LeetCode 2444、1906、2682 题解(枚举右,维护左,前缀和)
  • 4.27算法题
  • AI-Browser适用于 ChatGPT、Gemini、Claude、DeepSeek、Grok的客户端开源应用程序,集成了 Monaco 编辑器。
  • adb push 报错:CreateProcess failure, error 123
  • 成功案例|探秘奶牛氧化应激,组学测序如何洞察微生物的 “一举一动”?
  • OpenFeign服务接口调用
  • 使用Three.js搭建自己的3Dweb模型(从0到1无废话版本)
  • [特殊字符] SQL注入攻击的常见写法及危害
  • Zookeeper断开连接时分布式锁释放问题的解决方案
  • 基于深度学习的智能交通流量监控与预测系统设计与实现
  • vue3 vite打包后动态修改打包后的请求路径,无需打多个包给后端
  • 从基础到实战的量化交易全流程学习:1.3 数学与统计学基础——概率与统计基础 | 数字特征
  • 常用第三方库:shared_preferences数据持久化
  • 基于大模型的急性化脓性阑尾炎全程诊疗预测与方案研究
  • 【音视频】视频解码实战
  • RAG(Retrieval-Augmented Generation,检索增强生成)
  • CSDN编辑文章时如何自动生成目录
  • 生成式人工智能认证(GAI认证)含金量怎么样?
  • 雪铁龙C5车机系统恢复
  • Java使用微信云服务HTTP API操作微信云开发数据库
  • Redis 缓存并发问题深度解析:击穿、雪崩与穿透防治指南
  • Java + Seleium4.X + TestNG自动化技术
  • 第三方软件检测报告:热门办公软件评估及功能表现如何?
  • Linux用户管理