51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1978|回复: 3
打印 上一主题 下一主题

Selenium模拟JQuery滑动解锁

[复制链接]
  • TA的每日心情
    奋斗
    2021-8-16 14:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2018-3-12 16:42:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    滑动解锁一直做UI自动化的难点之一,我补一篇滑动解锁的例子,希望能给初做Web UI自动化测试
    的同学一些思路。



    首先先看个例子。

    https://www.helloweba.com/demo/2017/unlock/





    当我手动点击滑块时,改变的只是样式:

    1、slide-to-unlock-handle 表示滑块,滑块的左边距在变大(因为它在向右移动嘛!)

    2、Slide-tounlock-progress 表示滑过之后的背景黄色,黄色的宽度在增加,因为滑动经过的地方
    都变黄了。



    除些之外,没其它任何变化了,所以我们利用鼠标的拖动貌似不行!因为鼠标的拖动是将一个元
    素移动到另一个元素上。这样:
    1. 定位元素的原位置
    2. element = driver.find_element_by_id("xx")
    3. # 定位元素要移动到的目标位置
    4. target = driver.find_element_by_id("xx")

    5. ActionChains(driver).drag_and_drop(element, target).perform()
    复制代码
    但在我手动演示的过程中,元素的位置并没有发生变化。



    ---------------华丽分割-------------------------------------

    接下来看我是怎么实现的。
    1. from selenium import webdriver
    2. from selenium.webdriver.common.action_chains import ActionChains
    3. from selenium.common.exceptions import UnexpectedAlertPresentException
    4. from time import sleep

    5. driver = webdriver.Chrome()
    6. driver.get("https://www.helloweba.com/demo/2017/unlock/")


    7. dragger = driver.find_elements_by_class_name("slide-to-unlock-handle")[0]

    8. action = ActionChains(driver)

    9. action.click_and_hold(dragger).perform()  #鼠标左键按下不放

    10. for index in range(200):
    11.     try:
    12.         action.move_by_offset(2, 0).perform() #平行移动鼠标
    13.     except UnexpectedAlertPresentException:
    14.         break
    15.     action.reset_actions()
    16.     sleep(0.1)  #等待停顿时间


    17. # 打印警告框提示
    18. success_text = driver.switch_to.alert.text
    19. print(success_text)

    20. sleep(5)

    21. driver.quit()
    复制代码
    driver.find_elements_by_class_name("slide-to-unlock-handle")[0]

    首先,我要操作的页面上有好几个滑块,我先通过通过class属性找到所有的里面的第一个。



    click_and_hold()

    通过click_and_hold()方法对滑块按下鼠标左键。



    move_by_offset()

    接下来就是通过for循环动滑块的位置,move_by_offset()方法第一个参数是X轴,第二个参数是
    Y轴,单位为像素。因为是平行移动,所以Y设置为0。 X每次移动两2个像素。

    当解锁成功后会抛UnexpectedAlertPresentException异常,捕捉后跳出循环。

    每次循环休眠0.1秒,时间间隔越小,移动越顺滑哟!



    核心的几步介绍完了,接下来就是获取警告框上面的提示信息并打印,然后关闭浏览器。



    打印结果为:

    successfully unlock!



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏2
    回复

    使用道具 举报

  • TA的每日心情
    开心
    17 小时前
  • 签到天数: 2030 天

    连续签到: 2 天

    [LV.Master]测试大本营

    2#
    发表于 2018-3-13 09:36:03 | 只看该作者
    学习啦,学习啦
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-17 23:36 , Processed in 0.063638 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表