• selenium做UI自动化时,模拟鼠标各种操作的ActionChains的用法


    1、selenium做自动化的时候,需要模拟鼠标进行单击、双击、右键、拖拽等操作,selenium提供了ActionChains类来进行处理。

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

    from selenium.webdriver.common.action_chains import ActionChains
    from selenium import webdriver
    driver=webdriver.Chrome()
    driver.get('http://....')
    source=driver.find_element_by_id('id1')
    target=driver.find_element_by_id('id2')
    ActionChains(driver).drag_and_drop(source, target).perform()  #拼图操作:从起点移动到终点
     

    3、ActionChains方法列表

    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) ——移动到距某个元素(左上角坐标)多少距离的位置

    perform() ——执行链中的所有动作

    release(on_element=None) ——在某个元素位置松开鼠标左键

    send_keys(*keys_to_send) ——发送某个键到当前焦点的元素

    send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素

    3、举例

    3.1、点击:单击、双击、右击

    e1=driver.find_element_by_css_selector('#onC')  #单击元素

    e2=driver.find_element_by_css_selector('#dbonC')  #双击元素

    e3=driver.find_element_by_css_selector('#menuOnC')  #右击元素ActionChains(driver).click(e1).double_click(e2).context_click(e3).perform()  #先单击、再双击、再右击

    3.2、移动:系统中鼠标移动到某个元素上,或悬浮到e1元素后才会出现e2元素并点击e2元素

    e1=driver.find_element_by_css_selector('#a')

    e2=driver.find_element_by_css_selector('#dis1')

    driver.execute_script('window.scrollTo(0,0);')  #这一行可以不加,是因为我的元素需要显示在页面最上方

    ActionChains(driver).move_to_element(e1).click(e2).perform()  #移动到e1元素上后,e2元素的点击按钮才会出现,进行了一次点击操作

    如果只移动到e1元素:ActionChains(driver).move_to_element(e1).perform()

    ActionChains(driver).move_to_element_with_offset(e1, 100, -50).perform() # 移动到距离e1元素坐标(100,-50)的点

    3.3、拖拽:目前项目中遇到了拼图操作、连线操作

    e1=driver.find_element_by_css_selector('#a')

    e2=driver.find_element_by_css_selector('#b')

    ActionChains(driver).drag_and_drop(e1,e2).perform()   #1、从e1处拖拽到e2处,目前在拼图操作有用到(知道目的元素)

    ActionChains(driver).drag_and_drop_by_offset(e1,'180','120').perform()  #2、和1相同,从e1处拖拽到坐标(180,120)的地方(不知道目的元素)

    ActionChains(driver).click_and_hold(e1).release(e2).perform()    #3、从e1处按住不放,拖到e2处松手,目前用在连线操作ActionChains(driver).click_and_hold(e1).move_to_element(e2).release().perform()    #4、和3相同ActionChains(driver).click_and_hold(e1).move_by_offset('180','120').release().perform()    #5、和3、4相同,从e1移动到坐标(180,120)

    之前看到过一个博客,关于登录的时候需要用到滑块登录:

    ActionChains(driver).drag_and_drop_by_offset(e1,int(random.random()*180)+50,0).perform() #别人博客上看到的滑块登录,目前还没有使用过

    3.4、按键的用法:目前还没有使用到,后续补充

  • 相关阅读:
    elasticsearch安装教程
    mysql设置账号密码及授权
    mongodb设置账号密码授权案例
    新安装的centos 6.5,不能上网,外网ping不通,内网可以ping通解决方法
    docker-compose安装教程
    解决github图片不显示问题
    网站宽带计算方式
    thinkphp 如何实现url的rewrite
    nginx Https配置
    Ext.Net导入Excel
  • 原文地址:https://www.cnblogs.com/mihoutao/p/11851130.html
Copyright © 2020-2023  润新知