精华内容
下载资源
问答
  • adb模拟点击手机 adb shell input 简单总结(转) ...# adb 模拟滑动手势(以步长200 从坐标350,1580 滑动到350,680) def adb_swipe(): os.system("adb shell input swipe 350 1580 350 680 200"..
    1. adb模拟点击手机
      adb shell input 简单总结(转)

    2. python 使用 adb 命令

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import os
    from time import sleep
    
    
    # adb 模拟滑动手势(以步长200 从坐标350,1580 滑动到350,680)
    def adb_swipe():
        os.system("adb shell input swipe 350 1580 350 680 200")
        sleep(1.0)
    # adb 模拟点击动作(点击坐标356,890)
    def adb_tap():
        os.system("adb shell input input tap 356 890")
        sleep(1.0)
    # adb 模拟键盘事件(点击"返回")
    def adb_keyevent():
        os.system("adb shell input input keyevent 4")
        sleep(1.0)
    
    
    if __name__ == "__main__":
        adb_tap()
        adb_swipe()
        adb_keyevent()
    
    1. 安卓手机查看坐标方法
      realme X50 5G 打开USB调式步骤
      打开开发者选项, 在开发者选项中找到并打开"指针位置";
      如下图,点击"指纹\面部与密码"时, 上方的X:899.0 Y:1372.0 即是点击处的坐标
      在这里插入图片描述

    4.自动滑动观看小视频

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import os
    from time import sleep
    
    # adb 模拟滑动手势(以步长200 从坐标350,1580 滑动到350,680)
    def adb_swipe():
        # 滑动10次, 两次之间间隔15秒
        for i in range(10):
            os.system("adb shell input swipe 350 1580 350 680 200")
            sleep(15.0)
    
    if __name__ == "__main__":
        adb_swipe()
    
    展开全文
  • js如何模拟手机滑动,点击

    千次阅读 2019-05-16 09:54:52
    可以用于爬虫,也可以用于自动化测试以及程序演示 插件演示地址 (从网上扒了一个canvas绘图的demo,引入touchRobot,通过程序绘图) 注意,请在手机模式查看所有演示地址,插件仅支持移动端 拿常见的滑动相关demo...

    此插件能干什么?github源码

    一句话概括:通过程序主动触发移动端滑动拖拽触碰等操作

    插件有什么用呢?

    可以用于爬虫,也可以用于自动化测试以及程序演示
    

    插件演示地址 (从网上扒了一个canvas绘图的demo,引入touchRobot,通过程序绘图)

    注意,请在手机模式查看所有演示地址,插件仅支持移动端

    拿常见的滑动相关demo举例,程序触发动端滑动

    jQuery-slide滑块验证码

    demo

    操作步骤

    step1
        将代码在控制台粘贴执行
    step2
        var robot = new touchRobot(document.querySelector('#btn'));
        robot.touchTo(0,0,400,0);
    

    swiper轮播

    demo

    操作步骤

    step1
        将代码在控制台粘贴执行
    step2
        var robot = new touchRobot(document.querySelector('.swiper-container'))
        robot.touchLeft()
    

    如何使用?

    插件支持脚本嵌入,也支持npm安装

    脚本嵌入

    !function(t){var e={};function o(i){if(e[i])return e[i].exports;var n=e[i]={i:i,l:!1,exports:{}};return t[i].call(n.exports,n,n.exports,o),n.l=!0,n.exports}o.m=t,o.c=e,o.d=function(t,e,i){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(o.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)o.d(i,n,function(e){return t[e]}.bind(null,n));return i},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,"a",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p="",o(o.s=0)}([function(t,e,o){var i;!function(n,h){"use strict";var r={sign:["118.7734375 88.3515625","122.46875 84.65234375","125.6484375 81.46875","128.23828125 79.421875","131.875 76.84375","135.1640625 74.83984375","137.7265625 73.42578125","139.2578125 72.765625","140.5625 72.5625","141.375 72.5625","141.95703125 72.5625","142.34375 72.71484375","142.8671875 73.23828125","143.4375 74.1875","143.83984375 75.4921875","144.05859375 77.1328125","144.27734375 78.7734375","144.27734375 80.078125","144.37109375 81.12109375","144.71875 81.81640625","145.1328125 82.23046875","145.828125 82.4921875","146.98828125 82.4921875","148.29296875 82.1875","151.20703125 81.2578125","154.640625 79.82421875","158.51171875 78.03515625","161.29296875 76.70703125","166.3515625 74.00390625","170.66015625 72","173.65625 70.6328125","176.34765625 69.734375","177.27734375 69.640625","177.3515625 69.640625","177.42578125 69.94921875","177.42578125 71.921875","177.42578125 75.19140625","177.29296875 78.23828125","177.29296875 82.18359375","177.29296875 86.12890625","177.29296875 88.6015625","177.29296875 91.2421875","177.29296875 93.21484375","177.38671875 94.2578125","177.38671875 94.83984375","177.4609375 94.9921875","177.53515625 94.9921875","177.765625 94.8359375","178.6015625 94.27734375","180.54296875 92.9375","183.4765625 90.9765625","186.06640625 88.79296875","189.76171875 85.86328125","193.71484375 82.0703125","196.54296875 78.94140625","200.29296875 75.65625","203.625 72.625","205.94140625 70.16796875","207.0703125 68.6953125","207.625 67.94921875","207.85546875 67.79296875","208.0078125 67.79296875","208.16015625 67.79296875","208.91796875 68.55078125","209.79296875 69.97265625","210.76171875 72.15625","211.59375 74.17578125","212.22265625 75.54296875","213.01171875 77.234375","214.02734375 78.8125","215.01171875 80.234375","215.6875 81.19921875","216.4921875 82.3046875","217.6484375 83.25","219.2265625 84.265625","222.140625 85.19140625","225.41015625 85.87109375","227.71484375 86.11328125","230.1875 86.11328125","231.9921875 85.66015625","234.5078125 84.52734375","238.3046875 83.2109375","246.12109375 80.08203125","255.6640625 76.6875","261.0625 74.66015625","264.859375 73.1953125","266.55078125 72.515625","267.1328125 72.265625","267.44140625 72.109375","267.59375 72.109375","267.59375 71.953125","267.74609375 72.10546875"],right:["111.421875 357.66796875","119.23046875 356.52734375","133.68359375 354.53515625","151.03125 352.40234375","167.1171875 351.3671875","187.62890625 349.63671875","204.53125 349.109375","230.375 348.15234375","253.5234375 347.546875","267.16015625 347.3046875","284.0625 347.3046875","294.84375 347.3046875","308.07421875 347.3046875","315.2890625 347.3046875","322.2109375 347.125","325.03125 347.125","327.00390625 347.125","328.1640625 347.125","329.20703125 347.125"],left:["265.984375 432.171875","259.65234375 431.46875","248.8671875 430.1484375","237.671875 428.80859375","216.62890625 426.765625","200.1328125 425.71875","175.3984375 424.15625","150.6640625 421.65234375","135.796875 419.890625","117.390625 417.6953125","107.828125 416.8671875","97.85546875 416.4453125","93.00390625 416.2890625","87.85546875 416.2890625","85.03125 416.2890625","82.38671875 416.2890625"],top:["236.35546875 477.328125","238.89453125 469.31640625","241.078125 462.578125","246.55859375 449.12109375","253.87109375 432.59765625","259.8515625 419.390625","270.80859375 397.1640625","284.19140625 373.3359375","299.01171875 348.41015625","311.41796875 330.68359375","329.78125 305.734375","344.3046875 284.89453125","353.30078125 272.04296875","363.17578125 257.62890625","371.234375 245.03515625","375.234375 238.1796875","379.40625 230.4296875","381.59375 226.05078125","382.359375 224.51953125","382.63671875 223.58984375","382.63671875 223.359375","382.63671875 223.28515625"],bottom:["114.1328125 389.38671875","115.85546875 395.25","117.515625 404.8125","119.15234375 417.23046875","120.03125 428.015625","120.5390625 443.2890625","120.5390625 459.78515625","121.0546875 475.875","121.0546875 487.88671875","121.0546875 501.52734375","120.33984375 514.3515625","119.95703125 522.1640625","119.19140625 529.9765625","118.70703125 535.125","118.578125 537.94921875","118.2109375 540.2578125","118.015625 541.421875","118.015625 542.0078125","118.015625 542.2421875","118.015625 542.3984375","117.9375 542.3984375","117.9375 542.4765625"]};function u(t,e,o,i,n,h,r){n=(o-t)/30,h=(i-e)/30;for(var u=[],c=0;c<30;c++){var s=t+n*c;"horizontal"==r&&(s+=n*c/2);var l=e+h*c;"vertical"==r&&(l+=h*c/2),u.push(s+" "+l)}return u}function c(t,e){return Math.floor(Math.random()*(e-t+1)+t)}function s(t){this.touchEle=t}s.prototype._getPos=function(t){var e=this.touchEle.getBoundingClientRect(),o=[];if("left"==t){var i=100,n=200,h=c(e.x+e.width/2,e.x+e.width),s=c(e.y+e.height/5,e.y+e.height-e.height/5),l=c(e.x,e.x+e.width/2),g=c(s-50,s+50);Math.abs(g-s)>i&&(g=s+c(-50,50)),Math.abs(l-h)<n&&(l=h-n),o=u(h,s,l,g,"horizontal")}else if("right"==t){i=100,n=100,h=c(e.x,e.x+e.width/2),s=c(e.y+e.height/5,e.y+e.height-e.height/5),l=c(e.x+e.width/2,e.x+e.width),g=c(s-50,s+50);Math.abs(g-s)>i&&(g=s+c(-50,50)),Math.abs(l-h)<n&&(l=h+n),o=u(h,s,l,g,"horizontal")}else if("top"==t){var a=100,p=100;h=c(e.x,e.x+e.width),s=c(e.y+e.height/2,e.y+e.height-e.height/5),l=c(e.x,e.x+e.width),g=c(e.y,e.y+e.height/2);Math.abs(l-h)>a&&(l=h+c(-50,50)),Math.abs(g-s)<p&&(g=s-p),o=u(h,s,l,g,"vertical")}else if("bottom"==t){a=100,p=100,h=c(e.x,e.x+e.width),s=c(e.y+e.height/5,e.y+e.height/2),l=c(e.x,e.x+e.width),g=c(e.y+e.height/2,e.y+e.height-e.height/5);Math.abs(l-h)>a&&(l=h+c(-50,50)),Math.abs(g-s)<p&&(g=s+p),o=u(h,s,l,g,"vertical")}else o=r[t]||[];return o},s.prototype._touchMoveTo=function(t,e,o){var i=t[e].split(" ")[0],n=t[e].split(" ")[1];this._triggerTouchEvent("touchmove",i,n);var h=this;e<t.length-1?setTimeout(function(){h._touchMoveTo(t,++e,o)},24+e):o&&o()},s.prototype._triggerTouchEvent=function(t,e,o){var i=this.touchEle.getBoundingClientRect(),n=(c(),e||c(i.left,i.left+i.width)),h=o||c(i.top,i.top+i.height),r=new Touch({identifier:Date.now(),target:this.touchEle,clientX:n,clientY:h,pageY:h,pageX:n,radiusX:2.5,radiusY:2.5,rotationAngle:10,force:.5}),u=document.createEvent("UIEvent");u.initEvent(t,!0,!0),u.touches=[r],u.targetTouches=[r],u.changedTouches=[r],this.touchEle.dispatchEvent(u)},s.prototype._mouseMoveTo=function(t,e,o){var i=t[e].split(" ")[0],n=t[e].split(" ")[1];this._triggerMouseEvent("touchmove",i,n);var h=this;e<t.length-1?setTimeout(function(){h._mouseMoveTo(t,++e,o)},20):o&&o()},s.prototype._triggerMouseEvent=function(t,e,o){var i=this.touchEle.getBoundingClientRect(),n=(c(),e||c(i.left,i.left+i.width)),h=o||c(i.top,i.top+i.height),r=new MouseEvent({view:window,bubbles:!0,cancelable:!0,clientX:n,clientY:h});this.touchEle.dispatchEvent(r)},s.prototype.mouse=function(t){var e=r[t]||[],o=e[0].split(" ")[0],i=e[0].split(" ")[1];this._triggerMouseEvent("mouseend",o,i),this._mouseMoveTo(e,0,function(){var t=e[e.length-1].split(" ")[0],o=e[e.length-1].split(" ")[1];this._triggerMouseEvent("mouseend",t,o)})},s.prototype._touch=function(t){var e=this._getPos(t)||[],o=e[0].split(" ")[0],i=e[0].split(" ")[1];this._triggerTouchEvent("touchstart",o,i);var n=this;this._touchMoveTo(e,0,function(){var t=e[e.length-1].split(" ")[0],o=e[e.length-1].split(" ")[1];n._triggerTouchEvent("touchend",t,o)})},s.prototype.touchLeft=function(){return this._touch("left")},s.prototype.touchTop=function(){return this._touch("top")},s.prototype.touchRight=function(){return this._touch("right")},s.prototype.touchBottom=function(){return this._touch("bottom")},s.prototype.touchTo=function(t,e,o,i){var n=u(t,e,o,i,"horizontal"),h=n[0].split(" ")[0],r=n[0].split(" ")[1];this._triggerTouchEvent("touchstart",h,r);var c=this;this._touchMoveTo(n,0,function(){var t=n[n.length-1].split(" ")[0],e=n[n.length-1].split(" ")[1];c._triggerTouchEvent("touchend",t,e)})},s.prototype.mouseTo=function(t,e,o,i){var n=u(t,e,o,i,"horizontal"),h=n[0].split(" ")[0],r=n[0].split(" ")[1];this._triggerMouseEvent("mouseend",h,r);var c=this;this._mouseMoveTo(n,0,function(){var t=n[n.length-1].split(" ")[0],e=n[n.length-1].split(" ")[1];c._triggerMouseEvent("mouseup",t,e)})},s.prototype.touchClick=function(){var t=this.touchEle.getBoundingClientRect(),e=t.x+c(t.width/3,t.width-t.width/3),o=t.y+c(t.height/3,t.height-t.height/3);this._triggerTouchEvent("touchstart",e,o);var i=this;setTimeout(function(){i._triggerTouchEvent("touchend",e,o),i.touchEle.click()},250)},s.prototype.mouseClick=function(){var t=this.touchEle.getBoundingClientRect(),e=t.x+c(t.width/3,t.width-t.width/3),o=t.y+c(t.height/3,t.height-t.height/3);this._triggerMouseEvent("mouseend",e,o);var i=this;setTimeout(function(){i._triggerMouseEvent("mouseup",e,o),i.touchEle.click()},250)},t.exports&&(t.exports=s),void 0===(i=function(){return s}.call(e,o,e,t))||(t.exports=i),n.touchRobot=s}(window,document)}]);
    

    将以上代码放入你的网页中即可

    npm方式安装

    npm install touch-robot

    在代码中引入插件

    import touchRobot from 'touch-robot'

    使用

    var robot = new touchRobot(dom);
    robot.touchLeft();
    
    

    插件API

    方法(method) 描述(description)
    touchLeft 左滑
    touchRight 右滑
    touchTop 上滑
    touchBottom 下滑
    touchTo 定点滑动,参数startX,startY,endX,endY
    touchClick 触碰点击
    touch 按照给定路径坐标滑动,参数[‘x1 y1’, ‘x2 y2’, ‘x3 y3’]

    上面介绍了使用方式和API,下面介绍一下实现方式

    先卖个关子,你知道有几种方式可以通过程序触发下面button的click事件吗?

    <button id="main">按钮</button>
    var btn = document.getElementById('main');
    btn.addEventListener('click', function(){
        alert('click me')
    }, false);
    btn.addEventListener('touchstart', function(){
        alert('touch me')
    }, false);
    

    估计多数想到的是这样触发

    document.getElementById('main').click()

    那你还知道其它方式触发button的click事件吗?

    what?

    var event = document.createEvent('Event');
    event.initEvent('click', true, true);
    btn.dispatchEvent(event);
    

    上面这种方式同样可以触发click

    touch事件怎么主动触发呢?

    touch事件比较复杂,不能像click那种直接触发,实现方式相对曲折一点

    var x = 100;
    var y = 200;
    var touch = new Touch({
        identifier: Date.now(),
        target: this.touchEle,
        clientX: x,
        clientY: y,
        pageY: y,
        pageX: x,
        radiusX: 2.5,
        radiusY: 2.5,
        rotationAngle: 10,
        force: 0.5
      });
    // 构建TouchEvent
    var touchEvent = new TouchEvent('touchstart', {
        cancelable: true,
        bubbles: true,
        touches: [touch],
        targetTouches: [touch],
        changedTouches: [touch]
    });
    
    btn.dispatchEvent(touchEvent);
    

    到这其实我的插件实现的几个核心的点已经介绍完毕了

    如果你感兴趣可以去我的github去看touchRobot源码,如对你有帮助也欢迎Star,如有问题也欢迎指出

    展开全文
  • python3实战–selenium自动化输入手机、selenium自动化百度搜索、拖拽阿里云滑动验证、模拟鼠标双击、模拟鼠标拖拽 参考:https://www.cnblogs.com/win0211/p/12107003.html ...# -*- coding: utf-8 -*- ...

    python3实战–selenium自动化输入手机、selenium自动化百度搜索、拖拽阿里云滑动验证、模拟鼠标双击、模拟鼠标拖拽
    参考:https://www.cnblogs.com/win0211/p/12107003.html
    https://blog.csdn.net/qq_33371343/article/details/78916751

    # -*- coding: utf-8 -*-
    """
    Created on Wed May 13 15:10:58 2020
    
    @author: fern.xu
    """
    import datetime
    import win32api
    import win32gui
    import win32con
    import ctypes
    import time
    import unittest
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver import ActionChains
    
    def open_browser():
        '''
        browser = webdriver.Chrome()
        #browser.get('https://m-fat.wldxxx.net/gsd/index.html?channel=op_prm_dxt_00140107')
        #browser.get('https://m-fat.wldxxx.net/gsd/index.html')
        #browser.get('https://promotion.aliyun.com/ntms/act/captchaIntroAndDemo.html?spm=5176.10695662.1386720.1.5b12fbadh3Ot0G&wh_ttid=pc')
        browser.get('http://172.27.110.239/download/1.html')
        #browser.find_element_by_name("mobile").send_keys("13333333333")#自动输入手机号码
        #browser.find_element_by_name("opt").click()
        browser.maximize_window()
        drag1 = browser.find_element_by_id('dragEle')#获取第一,二,三能拖拽的元素
        action_chains = ActionChains(browser)# 创建一个新的ActionChains,将webdriver实例对driver作为参数值传入,然后通过WenDriver实例执行用户动作
        #将页面上的第一个能被拖拽的元素拖拽到第二个元素位置
        #将页面上的第三个能拖拽的元素,向右下拖动10个像素,共拖动5次
        action_chains.drag_and_drop_by_offset(drag1, 208, 0).perform()
        time.sleep(5)#休眠3秒
        browser.quit()
        '''
        browser = webdriver.Chrome()
        browser.get('https://promotion.aliyun.com/ntms/act/captchaIntroAndDemo.html?spm=5176.10695662.1386720.1.5b12fbadh3Ot0G&wh_ttid=pc')
        drag1 = browser.find_element_by_id('nc_1_n1z')#获取第一,二,三能拖拽的元素
        action_chains = ActionChains(browser)
        action_chains.drag_and_drop_by_offset(drag1, 258, 0).perform()
        time.sleep(5)
        browser.quit()
        '''
        browser.get('https://www.baidu.com')#打开百度网页
        browser.find_element_by_id("kw").send_keys("selenium")# 输入需要查询的关键字
        browser.find_element_by_id("su").click()#点击“百度一下”进行搜索
        '''
    
    open_browser()#打开浏览器输入手机号码
    
    
    '''
    def mouse_click(x,y): #鼠标双击动作
        ctypes.windll.user32.SetCursorPos(x,y)
        ctypes.windll.user32.mouse_event(2,0,0,0,0)
        ctypes.windll.user32.mouse_event(4,0,0,0,0)
        #重复上面两条语句属于双击
        #ctypes.windll.user32.mouse_event(2,0,0,0,0)
        #ctypes.windll.user32.mouse_event(4,0,0,0,0)
     
    def mouse_doSth():
        print('获取短信验证码')
        mouse_click(936,635)#我的电脑的鼠标坐标位置
        time.sleep(3)
        
    mouse_doSth()#触发短信验证码
    
    def mouse_move():#鼠标按下不放,从一个坐标点直线拖动到另外一个坐标点
        ctypes.windll.user32.SetCursorPos(102, 327)#鼠标按下的坐标点
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 102, 327, 102, 327)
        time.sleep(2)z
        win32api.mouse_event(win32con.MOUSEEVENTF_ABSOLUTE + win32con.MOUSEEVENTF_MOVE, 102, 327, 360, 327)
        time.sleep(2)
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 360, 327, 360, 327)
        ctypes.windll.user32.SetCursorPos(360, 327)#鼠标停在最后弹起的坐标点
    
    mouse_move()
    '''
    
    展开全文
  • 我们在做自动化测试的时候,有些按钮是需要滑动几次屏幕后才会出现,此时,我们需要使用代码来模拟手指的滑动,也就是接下来要学的滑动和拖拽了。 1.1 swipe滑动事件 从一个坐标位置滑动到另一个坐标位置,只能是两...

    1. 滑动和拖拽
    我们在做自动化测试的时候,有些按钮是需要滑动几次屏幕后才会出现,此时,我们需要使用代码来模拟手指的滑动,也就是接下来要学的滑动和拖拽了。

    1.1 swipe滑动事件
    从一个坐标位置滑动到另一个坐标位置,只能是两个点之间的滑动。

    方法:

    driver.swipe(start_x, start_y, end_x, end_y, duration=None):参数分别是起点坐标的x,y和终点坐标的x,y,以及滑动时间,滑动事件的单位是ms。

    实例1:

    模拟手指从(100,2000),滑动到(100,1000)的位置。

    driver.swipe(100, 2000, 100, 1000)
    

    实例2:

    模拟手指从(100, 2000),滑动到(100, 100)的位置。

    driver.swipe(100, 2000, 100, 100)
    

    实例3:

    模拟手指从(100, 2000),滑动到(100, 100)的位置,持续5秒。

    driver.swipe(100, 2000, 100, 100, 5000)
    

    距离相同时,持续时间越长,惯性越小。

    持续时间相同时,手指滑动的距离越大,实际滑动的距离也就越大。

    1.2 scroll滚动事件
    从一个元素滑动到另一个元素,直到页面自动停止。

    方法:

    driver.scroll(origin_el, destination_el):参数分别是滑动开始的元素和滑动结束的元素。

    实例:

    从“存储”滑动到“更多”。

    save_button = driver.find_element_by_xpath("//*[@text='存储']")
    more_button = driver.find_element_by_xpath("//*[@text='更多']")
    driver.scroll(save_button, more_button)
    #不能设置持续时间,惯性很大。
    

    不能设置持续时间,惯性很大。

    1.3 drag_and_drop拖拽事件
    从一个元素滑动到另一个元素,第二个元素代替第一个元素原本屏幕上的位置。

    方法:

    driver.drag_and_drop(origin_el, destination_el):参数分别是滑动开始的元素和滑动结束的元素。

    将“存储”拖拽到“更多”。

    save_button = driver.find_element_by_xpath("//*[@text='存储']")
    more_button = driver.find_element_by_xpath("//*[@text='更多']")
    driver.drag_and_drop(save_button, more_button)
    #不能设置持续时间,没有惯性
    

    不能设置持续时间,没有惯性

    1.4 滑动和拖拽的选择
    滑动和拖拽无非就是考虑是否具有“惯性”,以及传递的参数是“元素”还是“坐标”。

    可以分为四种情况:

    有 “惯性” ,传入 “元素”:scroll。

    无 “惯性” ,传入 “元素”:drag_and_drop。

    有 “惯性” ,传入 “坐标”:swipe,并且设置较短的duration时间。

    无 “惯性” ,传入 “坐标”:swipe,并且设置较长的duration时间。

    1.5手指移动操作
    模拟手机的滑动操作(滑动解锁)
    方法:
    move_to(el=None, x=None, y=None)这里的x,y为前一个坐标的偏移量
    参数:
    1.el:定位的元素
    2.x:相对于前一个元素的x轴偏移量
    3.y:相对于前一个元素的y轴偏移量

    # 定位到存储
    el = driver.find_element_by_xpath("//*[contains(@text,'存储')]")
    # 定位到更多
    el1 = driver.find_element_by_xpath("//*[contains(@text,'更多')]")
    # 元素方式滑动
    TouchAction(driver).press(el).move_to(el1).release().perform()
    # 坐标的方式向上滑动
    # TouchAction(driver).press(x=240,y=1000).move_to(x=0,y=-400).release().perform() 
    # press().move_to() 实际使用的是TouchAction方法,需要给相对坐标.
    # TouchAction(driver).press(x=240,y=600).wait(100).move_to(x=240,y=100).release().perform()
    # press().wait().move_to()实际调用的是swip方法,会向下拉,感觉属于bug,可在log中查询swip,不建议这么用.
    

    业务场景2:
    1.进入设置
    2.向上滑动屏幕到可见"安全"选项
    3.进入到安全
    4.点击屏幕锁定方式
    5.点击图案
    6.绘制图案

    
     # 定位到WLAN
            el1 = driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")
            # 定位到存储
            el2 = driver.find_element_by_xpath("//*[contains(@text,'存储')]")
            # 存储上滑到WLAN
            driver.drag_and_drop(el2,el1)
            # 定位到用户
            el3 = driver.find_element_by_xpath("//*[contains(@text,'用户')]")
            # 注意 这次使用drag_and_drop方法,传入的"存储定位"仍使用其原始在屏幕上的位置,所以是由存储滑动到用户才可以上滑,否则需要重新"定位存储"
            # 存储上滑倒用户位置
            driver.drag_and_drop(el2,el3)
            # 点击安全按钮
            driver.find_element_by_xpath("//*[contains(@text,'安全')]").click()
            # 点击屏幕锁定方式按钮
            driver.find_element_by_xpath("//*[contains(@text,'屏幕锁定')]").click()
            # 点击图案按钮
            driver.find_element_by_xpath("//*[contains(@text,'图案')]").click()
            # 绘制图案四个坐标 1:(244,967) 2:(723,967) 3:(723,1442) 4:(244,1916)
            TouchAction(driver).press(x=244,y=967).wait(100).move_to(x=479,y=0).wait(100)\
                .move_to(x=0,y=475).wait(100).move_to(x=-479,y=474).release().perform()
    
    
    展开全文
  • 最近有一个测试需求,需要重复性的滑动手机、对手机进行触摸、点击操作等,所以就需要实现一个Android模拟人工操作的功能。一开始想写一个APK,但在实现过程中遇上了麻烦,好像需要系统应用权限等,笔者本身并不是做...
  • Android通过指令模拟touch滑动解锁

    千次阅读 2016-05-10 16:19:38
    这些设备的编号会因每个手机不同而不同,因此我们需要首先了解这个手机上都有哪些输入设备,然后通过脚本操作这些输入设备,实现一些想要的操作,进而通过循环实现自动化测试。 $ adb shell cat /proc/bus/input/...
  • 文章目录前言一、技术要点二、使用步骤1.安装Frida2.执行JS代码总结 前言 近代很多科技发明,都是基于“懒惰”。...一、通过Android的input命令模拟滑动屏幕 二、使用Frida注入抖音运行环境,通过JS调用Java执行inp
  • 测试的同学们在做app自动化测时,经常会用到查找元素、定位元素、发送数据、长按、点 击、上滑、下滑、左滑、右滑等操作。下面讲下用appium自带的swipe方法怎么实现上滑、 下滑、左滑、右滑。 前置条件:appium已...
  • 可以用于爬虫,也可以用于自动化测试以及程序演示 插件演示地址 (从网上扒了一个canvas绘图的demo,引入touchRobot,通过程序绘图) 注意,请在手机模式查看所有演示地址,插件仅支持移动端 拿常见的滑动相关demo...
  • 一款可以模拟手机点击和滑动的简单编写脚本和运行脚本工具,开发之初主要目的是用于手机自动化测试使用,主要编写脚本的命令都在右击菜单栏里。压缩包里有使用说明文档,请自行查看。第一次使用将自动修改环境变量,...
  • 模拟点击 adb shell input tap [x y] example:adb shell input tap 100 65 模拟输入文字 ...模拟屏幕滑动: adb shell input swipe x1 y1 x2 y2 #从(X1,Y1)直线滑动到(X2,Y2) 模拟手指在屏幕上长按: adb
  • 这篇文章是为了实现自动化测试,我主要是为了实现模拟键盘鼠标事件,实现PC控制手机,即PC发送指令控制手机执行相应的动作,例如界面的切换,屏幕的滑动等等。对于Socket编程和Service,我会在另外一篇文章里写明。...
  • 锁闭手机锁模式需要利用按键、距离感应或者双敲击解锁方式解锁,该功能模拟了系统侧滑键的功能,有震动反馈效果。静默锁不同于锁闭手机锁模式的地方时无振动反馈,该功能主要是对前两种模式的补充。以上三种模式可...
  • 手机抖音设置自动切换下一个视频

    万次阅读 2019-01-16 11:35:04
    1.软件安装 ...提取码:jcw4  2.新建或导入脚本文件 ...滑动脚本代码: "auto"; setInterval(function(){   /**  * 同时模拟三个手势:  * 从(300, 400)到(300, 1400)  * 从(600, 400)到(600, 1400) ...
  • [手机][自动化][测试]Monkey的使用

    千次阅读 2014-03-13 17:36:17
    摆一摆Android自动化测试一 [Monkey] Android 平台自动化测试通常使用三种方式来做:1....大意是:Monkey是一个程序,它可以运行在模拟器或者手机之上,发送一系列伪随机事件流给设备,以模拟用户的点击,滑动,等手势操
  • 使用方法下载AppwerMirror和手机一起搭配使用!官方地址:https://software.airmore.cn/apowermirror AppwerMirror可以控制手机的时候就可以打开软件即可 刷宝下载地址:点击【t.cn/EJOOVo4】下载【刷宝APP】看...
  • adb shell input可模拟操作手机 输入内容指令:adb shell input text "hello world" 系统按键指令:adb shell input keyevent 4 (返回操作) 点击指令[参数是:x坐标,y坐标]:adb shell input tap 100...
  • 自动阅读赚钱

    2020-06-22 22:26:30
    接口是AccessibilityService,此接口实现对象后可以模拟手机的手势,例如滑动,点击,使用monitor工具分析app应用结构,获取是需要的节点后,就可以利用这些元素,模拟手机点击,滑动,实现新闻自动化阅读。...
  • 上周写了段图片自动轮播的代码,感觉应用的局限性还是挺大,实习期间一直在捣鼓移动端网页的开发,这周试了试原生JS实现左右滑动的图片轮播,在网上找了很多滑动插件诸如swipe,hammer,Quo,JQM 用着都不太理想, ...
  • 简介 ...selenium是一款优秀的WEB自动化测试工具,所以现在采用selenium进行半自动化爬取数据,支持模拟登录淘宝和自动处理滑动验证码。 编写思路 由于现在大型网站对selenium工具进行检测,若检测到
  • 在adb文件目录下运行cmd,调用相应的adb指令即可对手机模拟操作3、在python或其他语言java中,也是通过调用cmd shell,运行相应的adb命令实现自动操作的。主要命令:以通过如下ADB命令实现PC对Android手机模拟输入...
  • 很实用的rpa软件,对个人免费,学习成本不...用户通过可视化的流程图设计,就可以完成控件点击,数据提取,浏览器模拟,文件保存,手机点击滑动,数据库操作等任务,让普通业务工作者也能做到快速的自动化开发及运营。
  • 这里写目录标题adb 获取手机点击坐标adb 模拟点击、滑动、输入、按键Linux shell 用for循环100次的方法 adb 获取手机点击坐标 3. adb shell 4. getevent 5. 点击手机,控制台输出 6. 以003 0035和003 0036 开头的两...
  • Appium移动自动化测试

    千人学习 2020-02-09 00:17:59
    解决方案、通过微信与QQ应用讲解Appium的知识点:元素定位方法、抓取工具、元素等待、字典整合、Appium如何模拟手机滑动、多点操作等;Appium的分层测试、Appium日志综合应用等 4.本课程是基于Python3语言讲解Appium...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 131
精华内容 52
关键字:

手机自动模拟滑动