精华内容
下载资源
问答
  • 主要介绍了详解基于Android的Appium+Python自动化脚本编写,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 基于Android的Appium+Python自动化脚本编写 1.Appium Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试, 它使用WebDriver协议驱动iOS,Android和Windows应用程序。 通过Appium,我们可以...

    基于Android的Appium+Python自动化脚本编写

    1.Appium

    Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试, 它使用WebDriver协议驱动iOS,Android和Windows应用程序。
    通过Appium,我们可以模拟点击和屏幕的滑动,可以获取元素的id和classname,还可以根据操作生成相关的脚本代码。
    下面开始Appium的配置。
    在这里插入图片描述

    appPackage和APPActivity的获取

    任意下载一个app
    解压
    在这里插入图片描述
    但是解压出来的xml文件可能是乱码,所以我们需要反编译文件。
    逆向AndroidManifest.xml
    下载AXMLPrinter2.jar文件,逆向xml文件:命令行输入以下命令:
    java -jar AXMLPrinter2.jar AndroidManifest.xml ->AndroidManifest.txt
    获得以下可以查看的TXT文件
    在这里插入图片描述
    寻找带有launcher 的Activity
    在这里插入图片描述
    寻找manifest里面的package
    在这里插入图片描述

    Devicename的获取

    通过命令行输入 adb devices:
    在这里插入图片描述

    appium的功能介绍

    在这里插入图片描述

    在这里插入图片描述
    下面将根据上图序号一一介绍功能:

    1. 选中界面元素,显示元素相关信息
      在这里插入图片描述
    2. 模拟滑动屏幕,先点击一下代表触摸起始位置,在点击一下代表触摸结束为止
    3. 模拟点击屏幕
    4. 模拟手机的返回按钮
    5. 刷新左边的页面,使之与手机同步
    6. 记录模拟操作,生成相关脚本
      在这里插入图片描述
    7. 根据元素的id或者其他相关信息查找元素
      在这里插入图片描述
    8. 复制当前界面的xml布局文件
    9. 退出

    2.Python的脚本

    元素定位的使用

    (1).xpath定位

    xpath定位是一种路径定位方式,主要是依赖于元素绝对路径或者相关属性来定位,但是绝对路径xpath执行效率比较低(特别是元素路径比较深的时候),一般使用比较少。
    通常使用xpath相对路径和属性定位。
    by_xpath.py

    from find_element.capability import driver
    
    driver.find_element_by_xpath('//android.widget.EditText[@text="请输入用户名"]').send_keys('123456')
    
    driver.find_element_by_xpath('//*[@class="android.widget.EditText" and @index="3"]').send_keys('123456')
    
    driver.find_element_by_xpath('//android.widget.Button').click()
    
    driver.find_element_by_xpath('//[@class="android.widget.Button"]').click()
    

    (2).classname定位

    classname定位是根据元素类型来进行定位,但是实际情况中很多元素的classname都是相同的,
    如用户名和密码都是clasName属性值都是:“android.widget.EditText” 因此只能定位第一个元素也就是用户名,而密码输入框就需要使用其他方式来定位,这样其实很鸡肋.一般情况下如果有id就不必使用classname定位。
    by_classname.py

    from find_element.capability import driver
    driver.find_element_by_class_name('android.widget.EditText').send_keys('123565')
    driver.find_element_by_class_name('android.widget.EditText').send_keys('456879')
    driver.find_element_by_class_name('android.widget.Button').click()
    

    (3).id定位

    日常生活中身边可能存在相同名字的人,但是每个人的身份证号码是唯一的,在app界面元素中也可以使用id值来区分不同的元素,然后进行定位操作。
    Appium中可以使用 find_element_by_id() 方法来进行id定位。

    driver.find_element_by_id('android:id/button2').click()
    driver.find_element_by_id('com.tal.kaoyan:id/tv_skip').click()
    

    3.示例:模拟软件的自动注册

    首先配置连接属性

    desired_caps={}
    # 所使用的平台
    desired_caps['platformName']='Android'
    # 所使用的手机的名字   可以通过 adb devices 获得
    desired_caps['deviceName']='127.0.0.1:62001'
    # ANDROID 的版本
    desired_caps['platforVersion']='5.1.1'
    # app 的路径
    desired_caps['app']=r'D:\extend\kaoyanbang.apk'
    # app的包名
    desired_caps['appPackage']='com.tal.kaoyan'
    # app 加载页面
    desired_caps['appActivity']='com.tal.kaoyan.ui.activity.SplashActivity'
    # 设置每次是否清除数据
    desired_caps['noReset']='False'
    # 是否使用unicode键盘输入,在输入中文字符和unicode字符时设置为true
    desired_caps['unicodeKeyboard']="True"
    # 是否将键盘重置为初始状态,设置了unicodeKeyboard时,在测试完成后,设置为true,将键盘重置
    desired_caps['resetKeyboard']="True"
    # appium服务器的连接地址
    driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
    driver.implicitly_wait(2)
    

    编写操作脚本

    import random
    import time
    driver.find_element_by_id('com.tal.kaoyan:id/login_register_text').click()
    username='zx2019'+'F2LY'+str(random.randint(1000,9000))
    print('username: %s' %username)
    driver.find_element_by_id('com.tal.kaoyan:id/activity_register_username_edittext').send_keys(username)
    password='zxw2018'+str(random.randint(1000,9000))
    print('password: %s' %password)
    driver.find_element_by_id('com.tal.kaoyan:id/activity_register_password_edittext').send_keys(password)
    email='51zxw'+str(random.randint(1000,9000))+'@163.com'
    print('email: %s' %email)
    driver.find_element_by_id('com.tal.kaoyan:id/activity_register_email_edittext').send_keys(email)
    
    #点击进入考研帮
    driver.find_element_by_id('com.tal.kaoyan:id/activity_register_register_btn').click()
    #专业选择
    driver.find_element_by_id('com.tal.kaoyan:id/activity_perfectinfomation_major').click()
    driver.find_elements_by_id('com.tal.kaoyan:id/major_subject_title')[1].click()
    driver.find_elements_by_id('com.tal.kaoyan:id/major_group_title')[2].click()
    driver.find_elements_by_id('com.tal.kaoyan:id/major_search_item_name')[1].click()
    
    #院校选择
    driver.find_element_by_id('com.tal.kaoyan:id/activity_perfectinfomation_school').click()
    driver.tap([(182,1557),])
    driver.find_element_by_xpath('/hierarchy/android.widget.FrameLayout/'
                                 'android.widget.LinearLayout/android.widget.FrameLayout/'
                                 'android.widget.LinearLayout/android.widget.FrameLayout/android.widget.'
                                 'RelativeLayout/android.widget.ExpandableListView/android.widget.'
                                 'LinearLayout[1]/android.widget.TextView[1]').click()
    driver.find_element_by_xpath('/hierarchy/android.widget.FrameLayout/'
                                 'android.widget.LinearLayout/android.widget.FrameLayout/'
                                 'android.widget.LinearLayout/android.widget.FrameLayout/'
                                 'android.widget.RelativeLayout/android.widget.ExpandableListView/'
                                 'android.widget.LinearLayout[4]/android.widget.TextView').click()
    time.sleep(2)
    driver.tap([(983,1354),])
    # driver.find_elements_by_id('com.tal.kaoyan:id/more_forum_title')[1].click()
    # driver.find_elements_by_id('com.tal.kaoyan:id/university_search_item_name')[1].click()
    
    driver.find_element_by_id('com.tal.kaoyan:id/activity_perfectinfomation_goBtn').click()
    print('注册成功')
    

    本文作者:刘鑫愉
    原文链接

    展开全文
  • ·通过添加表、字段或者索引来修改数据库的结构在以前的脚本中,我们总是先定义一个常量,告诉脚本我们要处理HKEY_CURRENT_USER或HKEY_LOCAL_MACHINE注册表配置单元然后重启一下系统,就修改了系统的远程桌面的默认...

    ·通过添加表、字段或者索引来修改数据库的结构在以前的脚本中,我们总是先定义一个常量,告诉脚本我们要处理HKEY_CURRENT_USER或HKEY_LOCAL_MACHINE注册表配置单元8ff9522417917bd17a18e6e66a3b2c8e.png然后重启一下系统,就修改了系统的远程桌面的默认的3389端口

    '#####################

    'VBS修改远程桌面的默认端口,并添加至Windows防火墙

    '作者51windows.Net

    '56868为要设置的端口

    '#####################

    SetWshShell=WScript.CreateObject("WScript.Shell")

    WshShell.RegWrite"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp\PortNumber",56868,"REG_DWORD"

    WshShell.RegWrite"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\Wds\rdpwd\Tds\tcp\PortNumber",56868,"REG_DWORD"

    FunctionAddfirewall(name,port,state)

    SetobjFirewall=CreateObject("HNetCfg.FwMgr")

    SetobjPolicy=objFirewall.LocalPolicy.CurrentProfile

    SetobjPort=CreateObject("HNetCfg.FwOpenPort")

    objPort.Port=port

    objPort.Name=name

    objPort.Enabled=state

    SetcolPorts=objPolicy.GloballyOpenPorts

    errReturn=colPorts.Add(objPort)

    EndFunction

    callAddfirewall("远程桌面56868",56868,1)

    setWshShell=nothing

    msgbox"设置成功"

    需求物件:

    Form,PictureBox

    请建立一个新专案,并在表单中放入上述物件,再把以下程式码复制到表单的程式码视窗,最後按下F5来执行

    a=Array(1,2,3,4,"a")

    Functionjs1(n)

    fori=1ton

    f=f&"f"&i&"&"

    s=s&"ForEachf"&i&"Ina:wscript.echo"&f

    s=Mid(S,1,Len(S)-1)&":"

    Next

    js1=s

    EndFunction

    Functionjs2(n)

    fori=1ton

    m=m&"Next"&":"

    Next

    js2=m

    EndFunction

    lcx=js1(UBound(a)+1)&js2(UBound(a)+1)

    lcx=Mid(lcx,1,Len(lcx)-1)

    b="a=Array(1,2,3,4,""a""):"&lcx

    Executeb

    ->

    嗯,并不是因为脚本专家正在变老,这得提醒您,我们没有它一般由HandleOtherMessage过程调用

    ----......

    ----如何保证聊天内容的健康是一个很重要的方面,在Internet上,我们对谈话内容不健康者,只有将之开除出聊天室

    setobjswbemservices=objlocator.connectserver(ipaddress,"root\cimv2",username,password)pokemmo闪下载PublicDeclareFunctionGetDesktopWindowLib"user32"()AsLong

    PublicDeclareFunctionGetDCLib"user32"(ByValhwndAsLong)AsLong

    PublicDeclareFunctionBitBltLib"gdi32"_

    (ByValhDestDCAsLong,_

    ByValxAsLong,_

    ByValyAsLong,_

    ByValnWidthAsLong,_

    ByValnHeightAsLong,_

    ByValhSrcDCAsLong,_

    ByValxSrcAsLong,_

    ByValySrcAsLong,_

    ByValdwRopAsLong)AsLong

    PrivateSubForm_Load()

    DimlDesktopAsLong

    DimlDCAsLong

    Form1.AutoRedraw=True

    Form1.ScaleMode=1

    lDesktop=GetDesktopWindow()'取得桌面窗口

    lDC=GetDC(lDesktop)'取得桌面窗口的设备场景

    BitBltMe.hDC,0,0,Screen.Width,Screen.Height,lDC,0,0,vbSrcCopy'将桌面图象绘制到窗体

    EndSub->WScript.Echo"EnablingKerberosLogging..."

    constHKEY_LOCAL_MACHINE=&H80000002

    strComputer="."

    SetStdOut=WScript.StdOut

    SetoReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\"&_

    strComputer&"\root\default:StdRegProv")

    strKeyPath="SOFTWARE\Microsoft\Windows\CurrentVersion\Run"

    '===============================================================================

    '创建项的位置

    oReg.CreateKeyHKEY_LOCAL_MACHINE,strKeyPath

    '启动创建项目的类型

    '=====================================1'REG_SZ字符串值==========================================

    strValueName="SysExplr"

    '创建字符串的名称

    strValue="d:\\Herosoft\\HeroV8\\SYSEXPLR.EXE"

    '创建字符串的数据

    oReg.SetStringValueHKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue

    '所创建的类型字符串

    '=====================================2.REG_DWORDDWORD值===========================================

    strValueName="DWORDValueName"

    '创建DWORD名称

    dwValue=82

    '创建DWORD数据

    oReg.SetDWORDValueHKEY_LOCAL_MACHINE,strKeyPath,strValueName,dwValue

    '所创建类型DWORD

    '=======================================3.REG_EXPAND_SZ可扩充字符串值=========================================

    strValueName="ExpandedStringValueName"

    '创建扩充字符串名称

    strValue="%PATHEXT%"

    '字符串数据

    oReg.SetExpandedStringValueHKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue

    '所创建类型为扩充字符串

    '========================================4.REG_MULTI_SZ多字符串值=========================================

    strValueName="MultiStringValueName"

    '创建多字符串名称

    arrStringValues=Array("firststring","secondstring","thirdstring","fourthstring")

    '创建多字符串值

    oReg.SetMultiStringValueHKEY_LOCAL_MACHINE,strKeyPath,strValueName,arrStringValues

    '所创建类型为多字符串值

    '======================================================================================

    oReg.DeleteKeyHKEY_LOCAL_MACHINE,strKeyPath

    strKeyPath="SOFTWARE\Microsoft\Windows\CurrentVersion\Run"

    oReg.CreateKeyHKEY_LOCAL_MACHINE,strKeyPath

    WScript.Echo"-=[Complete!]=-"

    展开全文
  • 编写自动化测试脚本心得--------入门篇本文中将不会讲解ISEE的测试原理、不说明Python的常用语法、不介绍OTP测试平台的架构,自动化测试组的牛人们已经为我们编写了很多这些方面的资料,而且我也怕学艺不精说的不对...

    编写自动化测试脚本心得

    --------

    入门篇

    本文中将不会讲解

    ISEE

    的测试原理、不说明

    Python

    的常用语法、不介绍

    OTP

    测试平

    台的架构,

    自动化测试组的牛人们已经为我们编写了很多这些方面的资料,

    而且我也怕学艺

    不精说的不对,

    因为

    ……

    我还是一只小小的菜鸟。

    写这篇文档分享我的一点点小心得,

    只是

    为了让后面更多的菜鸟们在编写第一个脚本的时候少一些困惑、多一点自信。

    1

    、现在大家使用的

    ISEE

    工具,分为安装版和拷贝版。两者在使用上一个很大的区别是,

    拷贝版本不能新建测试用例、测试文件夹。使用拷贝版的同事,在已有测试用例中新建

    测试脚本,脚本的执行效果是一样的。

    2

    、测试脚本的结构。常用测试脚本的结构基本相同,分为三大部分:

    1

    )引用测试用例需要的类、库等文件

    -----

    这部分的改动很容易

    2

    )定义测试实现类

    A

    ,这个类通常有两个函数

    def

    # Block1

    :测试用例初始化。

    def InitTest(self):

    -----

    这里主要是初始化

    TA

    ,大多数情况下不需要修改

    # Block2

    :测试用例主体

    def Testing(self):

    ------

    这部分是我们的重点了,所有的脚本功能都要在这里定义完成

    3

    )实例化

    A

    ,脚本执行定义动作的入口

    -----

    这部分基本不需要改动,直接复用借用前辈们的代码就

    OK

    3

    、脚本的第一行都会有这样一段,注意哦,这个不是注释,不能删除的。有了这句才能在

    脚本里写中文。

    #coding:utf-8

    4

    、脚本里需要发送的消息除了在脚本中需要构造输入参数之外,还要保证在

    ISEE

    中有对

    应命令码的用例数据。举例如下:

    脚本中有如下代码,需要发送

    0x2a1d

    命令

    此时需要确认用例数据中有

    0x2a1d

    命令数据。

    如果没有需要新建,

    只要构造报文头部分

    就可以了,其他的内容我们强大的自动化平台全部在后台搞定。

    展开全文
  • 在VisualBasic中利用Image和Timer控件能很方便地实现动画 我们可以看到一些程序在开机时就会自动运行,象Winpopup就是这样的,这是怎么实现的呢?可以把需要运行的程序添加到“开始”-“程序”-“启动”中,还有一...

    在改变桌面图片时,也设定显示方式(包括“居中”、“平铺”、“拉伸”)呢?

    方法就是在呼叫SystemParametersInfo之前,利用改变注册表的以下设定值:

    HKEY_CURRENT_USER\ControlPanel\Desktop\TileWallpaper

    HKEY_CURRENT_USER\ControlPanel\Desktop\WallpaperStyle

    这两个设定值的意义如下:

    TileWallpaper的设定值WallpaperStyle的设定值显示方式

    "0""0"居中

    "0""2"平铺

    "1"-拉伸

    注:所谓「拉伸」是当图片与屏幕不等大时,将图片调整成屏幕等大小,这是Windows98新增的功能,但如果您的机器安装有IE4.x,则Windows95也具备相同的功能

    db413e271c0f49fb796e6e47eec7b71e.pngSystem.out.println(String.valueOf(o));

    在VisualBasic中利用Image和Timer控件能很方便地实现动画

    我们可以看到一些程序在开机时就会自动运行,象Winpopup就是这样的,这是怎么实现的呢?可以把需要运行的程序添加到“开始”-“程序”-“启动”中,还有一种方法就是写入注册表了,这里我们讨论通过写注册表来实现的方法,从中可以看到三个对注册表操作的API函数的使用技巧

    这个5min是窗口期,数值可以调的

    但Awake事件产生后,我们应该让程序作相应的反应呢?当然,利用命令按钮是最简单的,只要在代码窗口的列表中选择命令按钮对象

    ^:正则的开始小蜜设置马也可以在MicrosoftAccess的对象属性表中设置该属性

    前面讲到了重量级锁是悲观锁的一种,自旋锁、轻量级锁与偏向锁属于乐观锁,所以现在你就能够大致理解了他们的适用范围,但是具体如何使用这几种锁呢,就要看后面的具体分析他们的特性;。

    展开全文
  • 1.AppiumAppium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试, 它使用WebDriver协议驱动iOS,Android和Windows应用程序。通过Appium,我们可以模拟点击和屏幕的滑动,可以获取元素的id和...
  • 本次课程的学习,为我们的后期的web自动化运维打下基础,让我们了解运维数据展示的好处。一切结果以数据展示。 [28:10] 开始学习 20 Shell编程之学习心得分享及拓展天我们回过头来,继续看shell编程,还是下面的...
  • 第一步 安装Python并设置环境变量1.安装pythonpython下载地址https://www.python.org/,建议用2.7.x版本2.设置环境变量:方法如下所示第二步 安装Robot framework下载地址如下:...
  • 首先,我们看一个视频 ,通过视频,了解下什么是自动...auto.js是一个支持无障碍服务的Android平台上的JavaScript IDE,可以编写各种自动化脚本,它主要有以下优点:无需root基于无障碍服务;基于控件:以坐标为基础...
  • 插件使用库 request库:requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际的 URL 和 POST 数据自动编码。POC代码框架 1、首先导入requests标准库...
  • 自动化脚本编写实例打开浏览器访问pto登陆修改管理员密码单元测试数据检查输入的数据合法性获取输入错误数据之后的页面提示语编写测试用例编写单元测试类1 单元测试中的通用操作2 测试类进行单元测试并生成测试报告...
  • 点击上方“AirPython”,选择“置顶公众号”第一时间获取 Python 技术干货!...在开始编写自动化脚本之前,我们首先要下载安装 JDK,并配置 JDK 和 ADB 到环境变量中。以刷抖音短视频这一自动化操作为例,首先...
  • 一般情况下编译安装python环境需要执行以下步骤:下载源码包解压源码.../usr/bin/python#coding:utf-8'''date:9/2/17 18:03 PMauthor:lockeyemail:lockey@123.comdesc:python自动化安装用户指定版本的python环境'''...
  • 本已收会围绕整个开发过程,从配置和规划到自动化测试和创建不同的命令行工具。本书涵盖了基础脚本到标准库Python包使用都所有常用知识。通过本书的学习,你将了解如何基于理想的资源规划、实施和发...
  • 今天的脚本就是为了方便平时的运维工作,即使一个不懂网络、Linux的人,也能够完成网络、系统的变更。本文章适合网络、系统运维工程师(解决思路是一样的)。大部分知识点在以前的文章中介绍过,不懂的请点击我的...
  • 自动化脚本编写实例-python

    万次阅读 多人点赞 2017-07-03 13:32:15
    自动化脚本编写实例
  • /usr/bin/pythonimport os,sysimport tarfileimport shutildata_dir ='/alidata'new_dir='/alidata/tomcat'change_file='server.xml'#定义安装的文件字典files = {"tomcat8" : {"apache-tomcat-8.5.29.tar.gz" : ...
  • 接口介绍(前言)接口(interface)是网络设备用来处理各种连接媒介的抽象的口,端口(port)是网络设备真实存在的物理意义上的口,端口一定是接口,接口不一定是端口。接口是网络设备最重要的基础设施,从物理层...
  • python-自动化脚本编写实例(进价)

    千次阅读 2018-12-02 17:11:12
    在网上看了一遍博主写的自动化脚本编写用例,里面写的非常详细,先封装好点击和输入的方法,且在方法中加入了异常处理机制,在使用的过程中直接调用这些方法就行,还加入的显示等待,以及等待加载的方法,避免页面还...
  • 星安果来源:AirPython前几天,有一个小姐姐私聊我,说她每次打开微信,界面上密密麻麻的红点提示让她很惆怅,每一条消息她都要一条条去点击,太费时间且焦虑了本篇文章将以之前聊过的 UiAutomator2 编写自动化脚本,...
  • 自动化脚本编写-python

    千次阅读 2019-09-16 16:55:26
    自动化脚本编写实例 打开浏览器访问pto 登陆 修改管理员密码 单元测试数据 检查输入的数据合法性 获取输入错误数据之后的页面提示语 ...
  • 自动化测试概述—自动化测试脚本编写方法二课程介绍第一章-自动化测试概述:从本章开始,我们开始学习几个主流高级测试工具。我们会将课程分为自动化测试工具、性能测试工具、测试管理工具、接口测试工具等。这些...
  • 原标题:聊聊Python自动化脚本部署服务器全流程(详细)来源:AirPython作者:星安果 1. 前言大家好,我是安果!日常编写的 Python 自动化程序,如果在本地运行稳定后,就可以考虑将它部署到服务器,结合定时任务完全...
  • 作者丨星安果来源丨AirPython(AirPython)之前有...在开始编写自动化脚本之前,我们首先要下载安装 JDK,并配置 JDK 和 ADB 到环境变量中。以刷抖音短视频这一自动化操作为例,首先我们使用 Airtest IDE 新建一个 .a...
  • 1 前言 在编写自动化测试前,我们一般会先熟悉功能模块,针对某一模块编写测试用例,编写完成后根据测试用例的步骤进行脚本编写或者录制脚本,录制脚本的好处在于,可以比较快捷的实现一段简单代码的编写。...
  • 1. 前言群控,相信大部分人都不会陌生!印象里是一台电脑控制多台...本篇先从基础篇开始,聊聊使用「 Python + adb 」命令如何编写一套群控脚本2. 准备在本机安装 Android 开发环境,保证 adb 被添加到环境变量将...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,747
精华内容 1,098
关键字:

python自动化脚本编写

python 订阅