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

Web控件进阶交互

Web控件进阶交互

         测试时常需要模拟键盘或鼠标操作,可以用Python的ActionChains来模拟。ActionChains是Selenium提供的一个子类,用于生成和执行复杂的用户交互操作,允许将一系列操作链接在一起,然后一次性执行。

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys# 初始化WebDriver和ActionChains
driver = webdriver.Chrome()
actions = ActionChains(driver)# 打开一个网页
driver.get("https://www.example.com")
  • 移动到元素并点击
element = driver.find_element(By.ID, "example_id")
actions.move_to_element(element).click().perform()
  • 右键点击
actions.context_click(element).perform()
  • 双击
actions.double_click(element).perform()
  • 拖放
source = driver.find_element(By.ID, "source_id")
target = driver.find_element(By.ID, "target_id")
actions.drag_and_drop(source, target).perform()
  • 拖放到指定位置
actions.click_and_hold(source).move_to_element(target).release().perform()
  •  键盘输入
actions.send_keys("Hello World!").perform()
  • 组合键操作
actions.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform()

 网页frame于多窗口处理

        测试时要定位Web内的一个元素时,若定位不到这个元素,就需要考虑是不是浏览器内嵌了一个frame窗口,或者要找的元素在新打开的窗口。为了解决这个问题就需要进行frame切换或者窗口切换操作。

        frame类似于在原有主HTML的基础上又嵌套了一个HTML,嵌套的HTML是独立的,不影响主HTML。执行Web测试打开一个页面时,光标的定位是在主页面中,如果主页面是由多个frame组成的,那么光标无法直接定位到具体的元素,需要切换到对应的frame中。

iframe解析

from selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
driver.get("https://www/example.com")

通过iframe索引切换

可以通过iframe在页面中的索引来切换。索引从0开始

driver.switch_to.frame(0)

通过 iframe的名称或ID切换

如果iframe有name或id属性,可以通过这些属性来切换

driver.switch_to.frame("iframe_name")

通过iframe的WebElement切换

先找到iframe元素,然后通过该元素切换

iframe_element = driver.find_element(By.TAG_NAME, "iframe")
driver.switch_to.frame(iframe_element)

嵌套iframe的切换

如果iframe内部还有iframe,需要先切换到外层iframe,然后再切换到内层的iframe

outer_iframe = driver.find_element(By.ID, "outer_iframe_id")
driver.switch_to.frame(outer_iframe)
inner_iframe = driver.find_element(By.ID, "inner_iframe_id")
driver.switch_to.frame(inner_iframe)# 切换到外层iframe
driver.switch_to.parent_frame()

 切换回主文档

无论当前再哪个iframe中,都可以直接切换到主文档

driver.switch_to.default_content()

多窗口处理 

        元素有属性,浏览器的窗口也有属性,浏览器窗口的属性用句柄(handle)来识别。当用浏览器打开一个窗口时,就需要用句柄来操作这个窗口。

获取句柄
# 获取当前窗口的句柄
cnt_handle = driver.current_window_handle
# 获取所有窗口的句柄
all_handles = driver.window_handles
 句柄切换
driver.switch_to.window(target_handle)

Selenium对多浏览器处理

        自动化测试过程中,往往需要对不同的浏览器做兼容性测试,可以通过对测试用例的修改实现对不同浏览器的自动化兼容性测试。实现对不同浏览器的自动化兼容性测试,需要先将各个浏览器的驱动在PC端配置好。

 参数化多浏览器测试

from selenium import webdriver
from selenium.webdriver.common.by import By
import timedef test_with_browser(browser_name):if browser_name == "chrome":driver = webdriver.Chrome()elif browser_name == "firefox":driver = webdriver.Firefox()elif browser_name == "edge":driver = webdriver.Edge()elif browser_name == "safari":driver = webdriver.Safari()else:raise ValueError(f"Unsupported browser: {browser_name}")driver.get("https://www.baidu.com")print(f"{browser_name.capitalize()} - Title: {driver.title}")driver.quit()if __name__ == "__main__":for browser in ["chrome", "firefox", "edge", "safari"]:test_with_browser(browser)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 链路聚合概述
  • AutoMQ 生态集成 Redpanda Console
  • 【代码随想录|第十一章 图论part01 | 797.所有可能的路径 】
  • 基于深度学习的水果识别系统
  • Django获取request请求中的参数
  • S参数入门
  • Jenkins教程-20-常用插件-Parameterized Trigger
  • 口袋算法的示例
  • 【HarmonyOS学习】定位相关知识(Locationkit)
  • 不坑盒子有什么用?
  • 互动广告新体验:Flat Ads 助力全球开发者高效变现
  • Go网络编程-HTTP程序设计_2
  • 新时代多目标优化【数学建模】领域的极致探索——数学规划模型
  • ​数据结构之初始二叉树(3)
  • C语言 ——— 打印水仙花数
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • android 一些 utils
  • Docker下部署自己的LNMP工作环境
  • HTML5新特性总结
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JS字符串转数字方法总结
  • leetcode讲解--894. All Possible Full Binary Trees
  • python3 使用 asyncio 代替线程
  • Quartz初级教程
  • React-Native - 收藏集 - 掘金
  • vue总结
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 构建二叉树进行数值数组的去重及优化
  • 开发基于以太坊智能合约的DApp
  • 聊一聊前端的监控
  • 前端技术周刊 2019-02-11 Serverless
  • 设计模式(12)迭代器模式(讲解+应用)
  • 王永庆:技术创新改变教育未来
  • 用jQuery怎么做到前后端分离
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 从如何停掉 Promise 链说起
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • #pragma once
  • #微信小程序(布局、渲染层基础知识)
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (145)光线追踪距离场柔和阴影
  • (70min)字节暑假实习二面(已挂)
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (zt)最盛行的警世狂言(爆笑)
  • (待修改)PyG安装步骤
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (七)Knockout 创建自定义绑定
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (十)c52学习之旅-定时器实验
  • (贪心 + 双指针) LeetCode 455. 分发饼干