51Testing软件测试论坛

标题: 求助一个自动化手势密码的设置方案appium+Python的 [打印本页]

作者: 1559564918    时间: 2016-9-8 20:02
标题: 求助一个自动化手势密码的设置方案appium+Python的
当前的问题是:手势密码不是单个按钮的连接,我试着用TouchAction(self.driver).press(x,y).move_to(x,y)的方式尝试了,就是不行,具体代码如下:
TouchAction(self.driver).press(x=269,y=463).move_to(x=269,y=463).wait(ms=800).move_to(x=269,y=463).wait(800).move_to(x=269,y=763).wait(800).move_to(x=417,y=763).release().perform()

不知道为什么老提示没有获取到坐标?
但是,我自己调试的时候,用TouchAction(self.driver).press(x ,y)去调用上面的move_to(269,763)单个坐标,这个逐个试了一下,都可以看到显示了起始点是正确的,急

运行提示信息是:
Traceback (most recent call last):
  File "F:\testApp\dianrong\test_login.py", line 35, in test1_login
    TouchAction(self.driver).press(x=269,y=463).move_to(x=269,y=463).wait(ms=8000).move_to(x=269,y=612).wait(8000).move_to(x=269,y=763).wait(1000).move_to(x=417,y=763).release().perform()
  File "D:\python\lib\site-packages\appium\webdriver\common\touch_action.py", line 94, in perform
    self._driver.execute(Command.TOUCH_ACTION, params)
  File "D:\python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute
    self.error_handler.check_response(response)
  File "D:\python\lib\site-packages\appium\webdriver\errorhandler.py", line 29, in check_response
    raise wde
WebDriverException: Message: The coordinates provided to an interactions operation are invalid.


作者: 梦想家    时间: 2016-9-9 10:49
额好复杂   找个专业的群去问一下吧 解决的快些 完事记得分享
作者: 1559564918    时间: 2016-9-10 14:55
标题: 实际代码执行的效果如下
本帖最后由 1559564918 于 2016-9-10 15:26 编辑

TouchAction(self.driver).press(x=125,y=468).move_to(x=0,y=90).wait(ms=800).move_to(x=0,y=180).wait(800).move_to(x=90,y=0).release().perform()
当然可以根据self.driver.find_elment_by_id("手势密码元素").size
获取到元素的坐标大小,再根据坐标去算出每个点之间的距离,就比较自动画一点,我这里的坐标是,手动算出来的,所以直接填写具体的数值,这样对不同屏幕大小的手机可能不兼容。后期代码优化的时候,再优化。。。


文采不好,有哪里说的不对的话,或不理解的话,可以指正!!!

作者: 1559564918    时间: 2016-9-10 15:17
调式了半天,终于明白怎么回事了。
之前是我对move_to(x , y)的理解错误,刚开始我以为move_to(x , y)偏移量是以手机屏幕为准的坐标。实际上move_to(x,y ) 移动偏移量是根据按下手机屏幕的位置为准,也就是press(x, y)的位置,在没有release()之前都会根据press()的坐标上移动,以下以我修改后的代码为例:
TouchAction(self.driver).press(x=125,y=468).move_to(x=0,y=90).wait(ms=800).move_to(x=0,y=180).wait(800).move_to(x=90,y=0).release().perform()
sleep(5)
初始坐标位置为:press(x=125,y=468),第一个move_to(x=0 ,y=90),表示在(x=125,y=468)这个位置上向下移动90分辨率,也就是连接第二个点。而第二个move_to(x=0,y=180),意思也差不多,因为,这个时候我还没有release()也就是没有松开手,所以第三个点还是以(x=125,y=468)为起点,所以再向下画的时候,在原来的y轴上在加90分辨率就是move_to(x=0,y=180)。而第四个点是横向移动的,也就是x轴的移动,所以第四个点是move_to(x=90,y=0),表示向x轴移动90分辨率
作者: sa6r1na    时间: 2017-4-8 11:53
1559564918 发表于 2016-9-10 15:17
调式了半天,终于明白怎么回事了。
之前是我对move_to(x , y)的理解错误,刚开始我以为move_to(x , y)偏移 ...

太感谢啦!!!被网上各种教程坑了好久,move_to是增量的方法,网上好多都是moveto指定的点,真不知道他们是怎么跑通的。真的太感谢啦!!!
作者: sa6r1na    时间: 2017-4-8 11:53
1559564918 发表于 2016-9-10 15:17
调式了半天,终于明白怎么回事了。
之前是我对move_to(x , y)的理解错误,刚开始我以为move_to(x , y)偏移 ...

太感谢啦!!!被网上各种教程坑了好久,move_to是增量的方法,网上好多都是moveto指定的点,真不知道他们是怎么跑通的。真的太感谢啦!!!




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2