要实现拖拽印章的动作,我引入ActionChains类模拟鼠标拖动,但却发现没有效果
#通过指定坐标来拖动,没有效果 drag_and_drop_by_offset().perform()
#通过source和target指定两个位置拖动,没有效果 drag_and_drop().perform() #然后还试了分步拖动,还是没效果
click_and_hold().perform() move_to_element().perform() release().perform()

元素是可以定位到的,但是试了Selenium ActionChains所有拖动的方法,就是没有拖动的效果,网上搜索资料,有这么几种答案:

* Selenium 的Action有不支持HTML5的拖拽的问题,可以通过js写个拖动方法,然后调用。
* 物理模式模拟鼠标操作。
* 引入pyautogui包,实现web前端带轨迹拖拽功能,解决ActionChains拖拽失效问题。
<>物理模式模拟鼠标操作
import win32api, win32con #导入这两个包 # 移动到某点坐标 win32api.SetCursorPos((782, 355))
time.sleep(0.5) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 782, 355)
time.sleep(0.5) win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, 300, 0) time.
sleep(1) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0)
#这种物理模式并没有效果,而且我觉得这样方法怪怪的,并没有定位元素,只是单纯的物理模拟,感觉有点背离自动化测试,而且不稳定
<>使用pyautogui包,实现拖拽

印章的那个div盒子有个draggable=“true”,是可拖动的,但是Selenium自带的ActionChains的拖动方法都没有效果,自带的方法是一瞬间从点A到点B,也有可能是因为印章拖动的时候产生的是新元素,而导致自带拖动方法没有效果,有一些前段的交互,必须有鼠标轨迹才能成功的实现拖拽功能。
import pyautogui # 定位起始元素 source = driver.find_element_by_xpath('') #
让鼠标移动到起点元素上 pyautogui.moveTo(source .location['x']+20, source .location['y']+125
) # 定位要拖拽到的位置元素 target= driver.find_element_by_xpath('') # 实现拖拽功能 pyautogui.
dragTo(target.location['x']+20, target.location['y']+155, duration=1)
折腾了一天,搜罗了很多方法才知道引入这个包会如此简单就解决拖动的问题,一直在纠结为啥自带的拖动方法没有效果/(ㄒoㄒ)/~~

UI自动化之路,有些坑只有踩了才知道,公司的自动化测试才刚起步吧,目前的测试工作还能应付的来,但我不想仅仅做一些的功能业务测试,自己挤时间学习,也没有大佬带飞,遇到不会的问题只能自己搜资料,也许只需要一分钟解决的问题,却得花一天的功夫去定位出错点,然后找解决方法。不过无论对工作还是对自己职业发展,都有好处。加油!扛起自动化的大旗!O(∩_∩)O

技术
©2019-2020 Toolsou All rights reserved,
Vue.js入门(五)---在vue中使用echarts词云Pandas统计分析基础_数据处理(DataFrame常用操作)element UI dialog点击dialog区域外会关闭dialog应届毕业生看过来!Java面试经典77问,看完离工作就不远了关于蓝桥杯大赛,你应该了解的那些事!mysql 分区-key分区(五)海康威视-嵌入式软件笔试题PHP Redis 监听过期的 key 事件C语言循环语句笔记详解以及练习-折半查找算法、猜数字游戏JVM概述