技术分享 | web 控件的交互进阶

简介: 技术分享 | web 控件的交互进阶

当需要模拟键盘或者鼠标操作时,Python需要使用 ActionChains 来处理,Java需要 Actions 来处理。

常用模拟鼠标的行为,比如单击,双击,拖动等。当调用 ActionChains 或者 Actions 的方法时,会将所有操作按顺序存入队列,当调用 perform() 方法时,队列中的事件会依次执行。

引入依赖

  • Python 版本
# 引入依赖
from selenium.webdriver import ActionChains
  • Java版本
import org.openqa.selenium.interactions.Actions;

实战演示

点击相关操作

下面代码中,action是模拟键盘或者鼠标的实例对象,on_element 是需要传递一个元素进去,默认值为 None。

单击指定元素,如果不指定,会单击当前光标的位置

  • Python 版本
action.click(on_element=None)
  • Java版本
Actions action = new Actions(webDriver);
action.click(on_element=None);

长按某个元素

  • Python 版本
action.click_and_hold(on_element=None)
  • Java版本
Actions action = new Actions(webDriver);
action.clickAndHold(on_element=None);

执行右键操作

  • Python 版本
action.context_click(on_element=None)
  • Java版本
Actions action = new Actions(webDriver);
action.contextClick(on_element=None);

执行左键双击

  • Python 版本
action.double_click(on_element=None)
  • Java版本
Actions action = new Actions(webDriver);
action.doubleClick(on_element=None);

拖拽起始的元素到目标元素,即 source 到 target

  • Python 版本
action.drag_and_drop(source, target)
  • Java版本
Actions action = new Actions(webDriver);
action.dragAndDrop(WebElement source, WebElement target);

将目标拖动到指定的位置

  • Python 版本
# xoffset 和 yoffset 是相对于 source 左上角为原点的偏移量
action.drag_and_drop_by_offset(source, xoffset, yoffset)
  • Java版本
Actions action = new Actions(webDriver);
actions.dragAndDropBy(WebElement source, int xOffset, int yOffset);

按键

使用这个方法可以方便的实现某些组合键盘事件,比如按下 ctrl+c 键。

  • Python 版本
action.key_down(value, element=None)
  • Java版本
Actions action = new Actions(webDriver);
actions.keyDown(element, value);

松开某个键,可以配合上面的方法实现按下 ctrl+c 并且释放

  • Python 版本
ActionChains(driver).key_down(Keys.CONTROL)\
    .send_keys('c').key_up(Keys.CONTROL).perform()
  • Java版本
Actions action = new Actions(webDriver);
action.keyDown(Keys.CONTROL).sendKeys("c").keyUp(Keys.CONTROL).perform();

其他按键请参考:7.4 特殊字符 - selenium-python中文文档

github 参考地址:selenium/keys.py at 916168f403dded05f878fe189d68c0f9152335c9 · SeleniumHQ/selenium · GitHub

移动

指定光标移动到某一个位置,需要给出两个坐标位置

  • Python 版本
# xoffset 和 yoffset 是相对于网页左上角的偏移量
action.move_by_offset(xoffset, yoffset)
  • Java版本
Actions action = new Actions(webDriver);
action.moveByOffset(xOffset,yOffset);

将鼠标移动到指定元素的位置

  • Python 版本
action.move_to_element(to_element)
  • Java版本
Actions action = new Actions(webDriver);
action.moveToElement(to_element);

移动鼠标到相对于某个元素的偏移位置

  • Python 版本
# xoffset 和 yoffset 是相对于 to_element 左上角的偏移量
action.move_to_element_with_offset(to_element, xoffset, yoffset)
  • Java版本
Actions action = new Actions(webDriver);
action.moveToElement(to_element, xOffset, yOffset);

其它

执行 ActionChains 中的操作

前面介绍的方法会将所有操作按顺序存入队列,要执行这些操作,需要调用 perform() 方法。

  • Python 版本
action.move_to_element_with_offset(to_element, xoffset, yoffset).perform()
  • Java版本
Actions action = new Actions(webDriver);
action.moveToElement(to_element, int xOffset, int yOffset).perform();

释放按下的鼠标

  • Python 版本
action.release(on_element=None)
  • Java版本
Actions action = new Actions(webDriver);
action.release(on_element=None)

向焦点元素位置输入值

焦点元素:使用 tab 键,那些被选中的元素就是焦点元素。

  • Python 版本
action.send_keys(*keys_to_send)
  • Java版本
Actions action = new Actions(webDriver);
action.sendKeys(*keys_to_send)

向指定的元素输入数据

  • Python 版本
action.send_keys_to_element(element, *keys_to_send)
  • Java版本
Actions action = new Actions(webDriver);
action.sendKeys(element,keys_to_send);

更多技术文章

相关文章
|
10天前
|
开发框架 JSON 缓存
震撼发布!Python Web开发框架下的RESTful API设计全攻略,让数据交互更自由!
在数字化浪潮推动下,RESTful API成为Web开发中不可或缺的部分。本文详细介绍了在Python环境下如何设计并实现高效、可扩展的RESTful API,涵盖框架选择、资源定义、HTTP方法应用及响应格式设计等内容,并提供了基于Flask的示例代码。此外,还讨论了版本控制、文档化、安全性和性能优化等最佳实践,帮助开发者实现更流畅的数据交互体验。
31 1
|
2月前
|
前端开发 JavaScript Serverless
Python+Dash快速web应用开发:回调交互篇(上)
Python+Dash快速web应用开发:回调交互篇(上)
|
2月前
|
JSON JavaScript 前端开发
Python+Dash快速web应用开发:回调交互篇(下)
Python+Dash快速web应用开发:回调交互篇(下)
|
2月前
|
开发者 图形学 API
从零起步,深度揭秘:运用Unity引擎及网络编程技术,一步步搭建属于你的实时多人在线对战游戏平台——详尽指南与实战代码解析,带你轻松掌握网络化游戏开发的核心要领与最佳实践路径
【8月更文挑战第31天】构建实时多人对战平台是技术与创意的结合。本文使用成熟的Unity游戏开发引擎,从零开始指导读者搭建简单的实时对战平台。内容涵盖网络架构设计、Unity网络API应用及客户端与服务器通信。首先,创建新项目并选择适合多人游戏的模板,使用推荐的网络传输层。接着,定义基本玩法,如2D多人射击游戏,创建角色预制件并添加Rigidbody2D组件。然后,引入网络身份组件以同步对象状态。通过示例代码展示玩家控制逻辑,包括移动和发射子弹功能。最后,设置服务器端逻辑,处理客户端连接和断开。本文帮助读者掌握构建Unity多人对战平台的核心知识,为进一步开发打下基础。
68 0
|
2月前
|
开发者 Java Spring
JSF 牵手社交登录,如魔法风暴席卷 Web 世界,开启震撼便捷登录之旅!
【8月更文挑战第31天】在互联网时代,便捷登录成为用户的核心需求。社交登录凭借其便捷性、安全性和社交化的特点,在各类Web应用中广泛应用。JavaServer Faces(JSF),作为一款流行的Java Web框架,能够轻松集成社交登录功能,显著提升用户体验。本文详细介绍社交登录的优势,并提供两种JSF集成社交登录的常见方法:一是利用Spring Social等第三方库简化开发;二是自行实现社交登录流程。开发者可根据项目需求选择适合的方案。
32 0
|
2月前
|
开发者 前端开发 开发框架
JSF与移动应用,开启全新交互体验!让你的Web应用轻松征服移动设备,让用户爱不释手!
【8月更文挑战第31天】在现代Web应用开发中,移动设备的普及使得构建移动友好的应用变得至关重要。尽管JSF(JavaServer Faces)主要用于Web应用开发,但结合Bootstrap等前端框架,也能实现优秀的移动交互体验。本文探讨如何在JSF应用中实现移动友好性,并通过示例代码展示具体实现方法。使用Bootstrap的响应式布局和组件可以确保JSF页面在移动设备上自适应,并提供友好的表单输入和提交体验。尽管JSF存在组件库较小和学习成本较高等局限性,但合理利用其特性仍能显著提升用户体验。通过不断学习和实践,开发者可以更好地掌握JSF应用的移动友好性,为Web应用开发贡献力量。
39 0
|
2月前
|
开发者 C# UED
如何轻松将WinUI控件引入Web应用?Uno Platform实战攻略——从环境搭建到性能优化,一探究竟!
【8月更文挑战第31天】Uno Platform 通过支持 WebAssembly,将 WinUI 控件无缝带入 Web,为多平台开发提供了新途径。本文介绍如何在 Web 中使用 WinUI 控件,包括环境搭建、控件使用、性能优化、样式调整及测试调优,助力开发者打造高质量跨平台应用。
42 0
|
2月前
|
数据采集 前端开发 开发者
Angular表单控件详解:掌握模板驱动与响应式表单的精髓,让Web应用中的数据采集工作变得高效又简单,彻底告别繁琐的表单处理流程
【8月更文挑战第31天】表单是 Web 应用的关键组件,用于用户登录、注册及信息提交。Angular 作为成熟前端框架,提供了强大的表单处理功能,包括模板驱动与响应式表单。本文通过技术博客形式,详细介绍这两种表单控件,并提供示例代码,展示如何利用它们简化表单处理流程,提高开发效率。首先介绍简单的模板驱动表单,然后讲解基于 RxJS 的响应式表单,适用于复杂逻辑。通过本文,你将学会如何高效地使用 Angular 表单控件,提升应用的用户体验。
26 0
|
2月前
|
数据可视化 JavaScript
Python+Dash快速web应用开发:回调交互篇(中)
Python+Dash快速web应用开发:回调交互篇(中)
|
2月前
|
前端开发 JavaScript 开发者
掌握Web前端事件处理精髓:从事件冒泡到事件委托,轻松优化你的交互体验与代码性能!
【8月更文挑战第23天】在Web前端开发中,事件处理是实现用户交互的关键机制。其中,事件冒泡与事件委托是优化页面性能、简化代码的重要手段。事件冒泡是指事件从触发它的元素开始,沿着DOM树向上逐层传播至根节点的过程。通过阻止事件冒泡,可以控制事件的影响范围。而事件委托则是利用事件冒泡特性,在父元素上设置监听器来响应子元素的事件,这种方法减少了监听器的设置数量,特别适用于动态添加的子元素,提高了代码的可维护性和性能。掌握这两种技术,能帮助开发者构建更高效、更简洁的应用程序。
45 0
下一篇
无影云桌面