• selenium模拟鼠标操作详解


    前言

    我们在做 Web 自动化的时候,有时候页面的元素不需要我们点击,值需要把鼠标移动上去就能展示各种信息。

    这个时候我们可以通过操作鼠标来实现,接下来我们来讲一下使用 selenium 做 Web 自动化的时候如何来操作鼠标。

    鼠标操作,我们可以使用 selenium 的 ActionChains 类来实现,我们先来认识一下这个类。

    同时,在这我准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看,或者直接关注VX公众号:互联网杂货铺,免费领取

    软件测试视频教程观看处:

    2023完整版阿里大牛7天软件测试零基础速成内部教程,从基础到项目实战学完即入职。

    1、ActionChains 类常用方法

    • click_and_hold(on_element=None) :点击鼠标左键,不松开
    • context_click(on_element=None):点击鼠标右键
    • double_click(on_element=None):双击鼠标左键
    • drag_and_drop(source, target):拖拽到某个元素然后松开
    • move_by_offset(xoffset, yoffset):鼠标从当前位置移动到某个坐标
    • move_to_element(to_element) :鼠标移动到某个元素
    • release(on_element=None):在元素上释放按住的鼠标按钮
    • pause(seconds):暂停操作(秒)

    2、ActionChains 类所有方法

    • perform(self)–执行鼠标操作方法
    • reset_actions()–清楚操作子令
    • click(on_element=None)–点击鼠标左键
    • click_and_hold(on_element=None):点击鼠标左键,不松开
    • context_click(on_element=None):点击鼠标右键
    • double_click(on_element=None):双击鼠标左键
    • drag_and_drop(source, target):拖拽到某个元素然后松开
    • drag_and_drop_by_offset(source, xoffset, yoffset) :拖拽到某个坐标然后松开
    • key_down(value, element=None):按下某个键盘上的
    • key_up(value, element=None) :松开某个
    • move_by_offset(xoffset, yoffset):鼠标从当前位置移动到某个坐标
    • move_to_element(to_element) :鼠标移动到某个元素
    • move_to_element_with_offset(to_element, xoffset, yoffset):移动到距某个元素(左上角坐标)多少距离的位置
    • pause(seconds):暂停操作(秒)
    • release(on_element=None):在元素上释放按住的鼠标按钮
    • send_keys(*keys_to_send):发送某个键到当前焦点的元素
    • send_keys_to_element(element, *keys_to_send) :发送某个键到指定元素

    3、ActionChains 使用步骤

    1. 实例化:actions = ActionChains(driver)
    2. 调用鼠标操作方法:actions.move_to_element(menu)
    3. 执行鼠标操作方法:actions.perform()

    4、实战

    代码做的事情:

    1. 打开测试网页:https://www.runoob.com/try/try.php?filename=tryjs_events_mouseover
    2. 切换 iframe
    3. 定位到绑定鼠标事件的 div
    4. 将鼠标移动到 div 上触发事件(可以观察到 div 上字会发生变化)
    1. import time
    2. from selenium import webdriver
    3. from selenium.webdriver import ActionChains
    4. driver = webdriver.Chrome(r"D:\chromeDriver\71\chromedriver71.exe")
    5. driver.implicitly_wait(5)
    6. driver.get(url="https://www.runoob.com/try/try.php?filename=tryjs_events_mouseover")
    7. driver.maximize_window()
    8. #切换iframe
    9. driver.switch_to.frame(driver.find_element_by_xpath('//iframe[@id="iframeResult"]'))
    10. #元素定位
    11. ele = driver.find_element_by_xpath('//div[@οnmοuseοver="mOver(this)"]')
    12. #移动鼠标到元素上触发事件
    13. actions = ActionChains(driver)
    14. actions.move_to_element(ele)
    15. actions.perform()
    16. time.sleep(5)
    17. driver.quit()

    5、总结

    ActionChains 类中其他方法使用方式都一样,大家有空可以试一下

    ActionChains 类中有很多方法,但是常用的并不多,上面已经列出,掌握常用方法即可

    特别注意:ActionChains 的执行原理,当你调用 ActionChains 的方法时,不会立即执行,而是会将所有的操作按顺序存放在一个队列里,当你调用 perform()方法时,队列中的时间会依次执行。

    ActionChains 类中的方法可以使用链式调用,大家思考思考自己拓展吧(其实很简单)。

    PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近500个G。如需要软件测试学习资料,关注公众号(互联网杂货铺),后台回复1,整理不易,给个关注点个赞吧,谢谢各位大佬!

    这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

  • 相关阅读:
    远程实时监控管理:5G物联网技术助力配电站管理
    app 更新 对aso是否有影响
    scp传输数据文件
    超越GPT-4V,苹果多模态大模型上新,神经形态计算加速MLLM(二)
    智能指针作为模板参数并校验是否子类
    深度剖析Java的volatile实现原理,再也不怕面试官问了
    form组件 输入才校验,不输入不校验
    如何在 Protocol Buffers (Proto) 文件中弃用一个字段
    使用全局配置处理字段名和属性名不一致的情况
    身份证实名核验,身份证实名认证,身份证二要素实名认证,身份证实名校验,身份证一致性实名认证
  • 原文地址:https://blog.csdn.net/huace3740/article/details/134293503