zoukankan      html  css  js  c++  java
  • Appium自动化测试

    3.     Appium安装配置

    3.1.  限制

    如果你在windows上安装appium,你没法使用预编译专用于OS X的.app文件,你也将不能测试IOS apps,因为appium依赖OS X专用的库来支持IOS测试。这意味着你只能通过在mac上来运行IOS的app测试。这点限制挺大。

    3.2.  傻瓜式安装node.js

    3.2.1. 查看是否安装成功

     

    nodejs安装完毕后,需要配置环境变量

    在PATH中添加:D:Program Files odejs;

    3.3.  傻瓜式安装Appium

     

    3.3.1. 成功界面

     

    3.4.  配置appium环境变量

    C:Program Files (x86)Appium ode_modules.bin

     

     

     

    3.5.  打开控制台,查看appium环境

    3.5.1. appium-doctor

     

    3.6.  配置Android— 环境变量

    F:adt-bundle-windows-x86_64_20140101sdk

     

     

     

    3.7.  Python中配置appium环境(联网)

    进入:D:pythonScripts

    打开控制台:

    pip  install  Appium-Python-client

     

    3.8.  总结:

    1) android sdk安装完毕后,需要配置环境变量

    新建ANDROID_HOME   

    在PATH中添加:%ANDROID_HOME%:.....

    2)  nodejs安装完毕后,需要配置环境变量

    在PATH中添加:D:Program Files odejs;

    3) appium安装完毕后,需要配置环境变量

    D:Program Files (x86)Appium ode_modules.bin;

    4) 配置好后,启动cmd,

    输入node -v,查看node安装版本

    输入appium-doctor检查appium的安装环境是否成功,

    5) 安装Python,配置环境变量,

    4.   第一个脚本示例

    4.1.  首先通过eclpse启动android模拟器

     

    4.2. 启动Appium

     

    4.3.  点击左上角有“机器人”的按钮: 
    选择你的android版本

     

     

    4.4. 点击右上角的“三角”按钮启动Appium。

     

    4.5.  通过Python编写自动化测试脚本。

    desired_caps是一个字典,用于在appium server 与手机端建立会话关系时,手机端需要告诉服务端设备相关的一些参数,根据这些参数服务端可以做出相应的处理。

     

    #coding:utf-8

    from appium import webdriver

    #desired_caps是一个字典,负责启动服务端时的参数设置,启动session的时候是必须提供的。
    # Desired Capabilities本质上是key value的对象,它告诉appium server这样一些事情,比如:
    # 本次测试是启动浏览器还是启动移动设备?
    # 是启动andorid还是启动ios?
    # 启动android时,app的package是什么?
    # 启动android时,app的activity是什么

    desired_caps = {}

    #你要测试的手机操作系统

    desired_caps['platformName'] = 'Android'

    #手机操作系统的版本

    desired_caps['platformVersion'] = '4.2'

    #使用的手机类型或模拟器类型

    desired_caps['deviceName'] = 'Android'

     #deviceName你的模拟器名字,就是在下载AVD的时候,你填写的,忘了的回头去找,或者在模拟器顶部会显示

     #所运行的app包名

    desired_caps['appPackage'] = 'com.android.calculator2'

    #app运行的事件

    desired_caps['appActivity'] = '.Calculator'

    #启动打开app

    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

    #根据元素定位,执行点击操作

    driver.find_element_by_name("6").click()

    driver.find_element_by_name("5").click()

    driver.find_element_by_name("9").click()

    driver.find_element_by_name("1").click()

    driver.find_element_by_name("5").click()

    driver.find_element_by_name("+").click()

    driver.find_element_by_name("6").click()

    driver.find_element_by_name("=").click()

    driver.quit()

    报错

     

    解决方案

     

     

    会话已存在错误--解决方案,关掉appium,重启

     

    4.6.  画出来的这三个,是需要在脚本中正确填写的

     

    4.7.  执行效果

     

    5.     Appium界面内容解析

    5.1.  整体介绍

    主页面顶部从左到右依次是:

    1、AndroidSettings:android相关的设置

    2、 GeneralSettings:全局设置,设置appium相关的内容

    3、 DeveloperSettings:开发者设置,一般不用需要关心

    4、About:appium相关信息,不需要关心

    5、Inspector:查找元素用的,windows无法使用,MAC可以使用,windows可以不用关心。

    6、LaunchAppium:启动appium按钮

    7、右下角清除日志按钮。

     

    5.2.  Android Settings

    此页面分为Application、Launch Device、Capabilities、Advanced四部分,先看图之后分析分别有什么作用

     

    5.2.1. 1、Application

    本模块设置被测试app信息,如安装包路径、包名、activity等

     

    ApplicationPath:选择要测试的apk,选择他后与全局设置中的Pre-LaunchApplication配合,启动appium时会先把apk安装到手机(或模拟器)再启动app。

     

    Package:根据apk生成的app包名,之前提到过的,我们这个包的身份证,我们需要通过这个去找到包,不然我们安装后我们通过什么去辨别这些包呢?

    Waitfor Package:等待包名。

     

    LaunchActivity:启动的activity,我们可以把手机当做一个浏览器,而Activity就是其中的一个个网页,我们启动app时需要去运行的activity,这里我们填写首次启动页面的activity。我们选择第一启动的activity与aapt命令生成的launchable-activity:name一致

    备注:这里需要注意一个问题在我们每次通过Choose选择apk后,appium会自动把这个包进行重新签名,那么在package以及activity里面会自动把包名和activity的名称列进去,但是这里会出现一个问题,每次选择apk后列表中会有一个缓存的原因,即使你更改了apk,但是package还是没有变,这样启动的时候就一直报错,遇见这样的情况不要着急,重新启动两次就好。

     

    Waitfor Activity:和上面的差不多,意思是等待某个Activity打开,用的时间不是很多,做了解。

     

    UseBrowser:测试浏览器选择这项,与前五项互逆。及选择了他前五个就不可以选择。

     

    FullReset:将所有设置复位。即将手机(模拟器)恢复到启动到appium前的状态

     

    NoReset:不需要重置手机(模拟器)中的app

     

    剩下的几项不重要。可以不需要知道作用。

    6.2.2. Launch Device

    本模块是模拟器设置,针对的是SDK创建的模拟器,不是genymotion等其他模拟器。

     

    LaunchAVD:要启动的模拟器名称。

     

    DeviceReady Timeout:等待模拟器启动时间。

     

    Arguments:启动模拟器时需要的参数。

    6.2.3.Capabilities

    运行测试的相关信息。

     

    PlatformName:测试平台,可以选择Android、FireFox OS、MAC版的还可以选择IOS。

     

    utomationName:测试引擎的名称,我们使用的是appium,所以你第一眼就能看见Appium,但是他还有一个Selendroid。可能看到这里会有一些疑惑,为什么appium要选择两套系统呢?其实这个应该追溯到android的版本问题,android自己的工具在4.2版本以前是一个,但是后面进行了更新,可能也正是因为这个原因appium也才采用了两套,所以当你测试的app安装的机器时在4.2或之前的版本时那么这里的引擎你就必须选择Selendroid,

     

    PlatformVersion:被测试手机(模拟器)版本。

     

    DeviceName:设备名称,手机连接电脑后打开cmd输入adb devices可获取。

     

    Language:被测试手机(模拟器)使用语言。

     

    Locale:被测试手机(模拟器)所属区域。

    5.2.2.  Advanced

    此模块不需要关心,这个标签只是在你想同一台电脑同时控制多台手机的时候才能使用,需要更改Bootstrap Port的端口号,记住这一点就好。

    5.3.  General Setting

     

    全局设置,分为Server和Logging两个,分别是对appium服务和输出日志的设置

    5.3.1. 1、Server

    此模块测试appium server信息

    ServerAddress:如果测试机与开发机是同一台机器默认即可,否则写appium所在服务器IP

    port:默认4723,可修改。

    CheckFor Updates:启动appium时是否检测更新

    Pre-LaunchApplication:与Android Settings中的Application模块的ApplicationPath配合,启动appium后会直接启动安装的app。

    OverridingExisting Session:覆盖之前的session。

    UseRomote Server:使用远程appium Server。

    SeleniumGrid Configuration File:配置Selenium Grid文件。并发和分布式时用到。

    5.3.2. 2、Logging

    日志设置

    ShowTimestamps:appium界面输出日志时带时间戳

    Logto File:默认状态是没有任何数据,但是在做自动化时建议选择,因为选择之后appium在运行时产生的日志都会保留到你设置的问题件,这个对后期的bug定位有相当大的帮助。切记!

    5.4.  元素侦测:

    这个按钮的功能和firebug的定位工具功能类似,但是他还有一个功能,他会检测你的各个系统配置是否正确,如果前面各项参数不正确时,使用该功能会报错。如果你不正常连接手机也不行。还是建议用sdk工具里面自带的uiautomatorviewer。

    5.5.  启动服务

    所有参数配置好后你需要做的就是启动appium服务,只有启动之后你才能够做自动化。

    5.6.  清除日志(右下角):

    在写脚本、调试过程中会产生很多的日志,但是你可能想看的只是中间某个时间段的,那么你在这个时候可以将页面的日志清除。

    6.     Appium查看界面元素的工具

    6.1.  通过android sdk的uiautomaterviewer获取元素内容

    uiautomaterviewer所在目录:..sdk oolsin

     

    uiautomatorviewer.bat是一个用来来扫描和分析Android应用程序的UI组件的GUI工具。具体使用方法可参考。打开uiautomatorviewer以后,可以看到uiautomatorviewer已经将模拟器的图形展示在上面了。

     

    6.2.  右侧xml节点详解

    节点名  解释

    index  父目录下的第几个元素,以0开头

    text   显示在界面上的内容

    resource-id   该元素的id(开发不规范时,此id有可能会不存在或多个相同)

    class  元素的类型

    package    apk的包名

    content-desc  描述信息

    checkable  元素特征:是否可选择

    checked    元素特征:当前是否已选中

    chlickable 元素特征:是否可点击

    enabled    元素特征

    focusable  元素特征

    focused    元素特征

    scrollable 元素特征

    long-clickable    元素特征

    password   元素特征

    selected   元素特征

    bounds 边界,左上角和右下角的坐标(从屏幕最左侧和最上侧开始)

     

    6.3.  使用过程常见问题

    打不开uiautomaterviewer

    解决方法:以文本方式打开此文件,更改文件结尾处的Dcom.android.uiautomator.bindir="$progdir"为Dcom.android.uiautomator.bindir="sdk下tools文件夹的路径"

     

    7.     获取appPackage和appActivity

    appPackage和appActivity 进行appium自动化测试非常重要的两个参数,我们所测试的APP不同,这两个参数肯定也是不一样的。那如何快速的获取这APP的这两个参数呢 

    7.1.  方法一:通过cmd指令来获取

    1. adb shell

    2. dumpsys activity | grep mFocusedActivity

     

    3、adb shell dumpsys activity activities >E:1.txt

     

     

    7.2.  方法二:使用Appium来获取

    进入设置页,选择APK 路径,下面就会显示包名和Activity名称

     

    8.     Appium常用定位方法讲解

    对象定位是自动化测试中很关键的一步,也可以说是最关键的一步,毕竟你对象都没定位那么你想操作也不行,下面我们来看我们常用的一些定位方式。

    8.1.   ID定位(取resource-id的值):

    无论是在web自动化还是app自动化中id都是唯一的,可能有的小伙伴看到这里会有疑问,因为有的资料说是通过name定位是唯一的,为什么你这里是id呢,其实这个在之前是不冲突的,但是如果你用的是appium较新版本是不行的,在新版本中name定位被去掉了,所以在以后的定位中不会有name定位了,通常情况下我们也更喜欢用id进行定位。这里可能刚学的小伙伴会有疑问,

    有的时候你的应用为什么没有id,或者说在这个手机上有但是另外的手机上没有。1、开发没有添加。2、android版本是4.4以下的。

    如果我们需要对“7”这个数字进行点击操作,

    driver.find_element_by_id("com.android.calculator2:id/digit7").click()

    8.2.  通过name定位元素(一般text属性认为是name)

     

    driver.find_element_by_name("5").click()

    8.3.     className定位(取class的内容)

    在实际工作中className定位用得相对而言会比较少。当你经常去看class时你会发现很多的className是一样的,你没有办法对其进行唯一定位,下面我们看下面两张图片

     

     

    我们可以仔细看一下这两张图片中手机号、密码两个输入框中的className都是一样的,如果在这种情况下你使用

    driver.find_element_by_class_name("android.widget.EditText").send_keys("111111")

      

    这种方式去定位,你会发现你永远定位不了密码栏,这是为什么呢?因为在设计的时候如果你查找的元素在页面有多个,系统会自动给你选择第一个,所以你永远操作不了后面的

    8.4.  text定位(需要使用uiautomator的定位方式,使用text的内容)

    driver.find_elements_by_android_uiautomator("new UiSelector().text('7')")

    使用这里需要注意一下,如果通过text定位的结果是个list,不能直接click。所以如果要点击需要取数组的值,比如下面是点击找到的第一个元素

    driver.find_elements_by_android_uiautomator("new UiSelector().text('7')")[0].click()

    8.5.     xpath定位

    xpath定位在web自动化中是最常见的,而且也是最有效的,使用xpath定位避免了找不到元素导致报错的问题,但是在app中使用xpath定位是一件很low的事情。只要遇见使用xpath定位元素他的反应就会比较慢,自动化的目的是为了提高效率,但是使用xpath后会降低效率,所以这里说很 low

     

     

    在上面两张图片中我们能够清除的看见他们的id、className都是一样的,这样的情况下不用层级定位方式我们只能够采用xpath来进行定位,首先根据前面web的学习大家可以思考一下该怎么定位。我们直接看代码

    driver.find_element_by_xpath("//android.widget.TextView[@text='JavaScript']").click()

      

    在xpath里面我们的语法是这样“//android.widget.TextView[@text='JavaScript']”,这个和我们之前web的xpath一样,意思是查找所有节点中节点为android.widget.TextView (这里使用的是className,也可以使用id,系统会依次去找)并且他的text属性值为JavaScript,这样是否更容易理解呢?下来多练习。这样的定位方式不推荐,效率很慢。

     

     

    8.6.  css_selector定位(webview)--加载网页--css

    只适用于webview的html页面,继承自webdriver,与pc版本的UI测试一致

    driver.find_element_by_css_selector()

    8.7.  link_text定位(webview)

    只适用于webview容器中的html页面,继承自webdriver,与pc版本的UI测试一致

    driver.find_element_by_link_text()

    8.8.  源代码

    #coding:utf-8

    from appium import webdriver

    #desired_caps是一个字典

    desired_caps = {}

    #你要测试的手机操作系统

    desired_caps['platformName'] = 'Android'

    #手机操作系统的版本

    desired_caps['platformVersion'] = '7.0'

    #使用的手机类型或模拟器类型

    desired_caps['deviceName'] = 'XPUDU17113015063'

     #deviceName你的模拟器名字,就是在下载AVD的时候,你填写的,忘了的回头去找,或者在模拟器顶部会显示

     #所运行的app包名

    desired_caps['appPackage'] = 'com.example.login'

    #app运行的事件

    desired_caps['appActivity'] = '.MainActivity'

    #启动打开app

    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

    #根据元素定位,执行点击操作

    # user= driver.find_element_by_name("请输入用户名")

    # user = driver.find_element_by_id("com.example.login:id/et_username")

    driver.find_element_by_class_name("android.widget.EditText").send_keys("jilidaxue")

    # driver.find_element_by_id("com.example.login:id/et_password").send_keys("66889558")

    # user.send_keys("liangyibo")

    driver.find_element_by_xpath("//android.widget.EditText[@text='请输入密码']").send_keys("233254545")

    # pwd = driver.find_element_by_name("请输入密码")

    # pwd.send_keys("123456")

    # # driver.find_element_by_xpath("//android.widget.FrameLayout[1]//android.widget.LinearLayout[3]").click()

    driver.find_element_by_xpath("//android.widget.Button[@text='登录']").click()

    driver.quit()

    9.     Appium操作界面元素

    9.1.  安装上两个apk,供测试使用

     

     

    9.2.  Click(点击事件操作)

    1. 定位元素
    2. 点击元素

     driver.find_element_by_id("com.wuba.zhuanzhuan:id/ae8").click()

    方法二:(了解)

    除了定位到元素的点击外,也可以通过tab实现坐标的点击 

    通过触摸时间控制点击tap()

    tap([左上角坐标,右下角坐标],持续时间)

    通过定位工具获取坐标值([540,243][1080,363])

    03-查看界面元素的工具

    使用tap()方法点击元素

    driver.tap([(918,413),(1026,521)], 100) # 持续时间100是指100毫秒

    9.3.  Clear(清空输入框内容)

    1. 定位输入框元素
    2. 清空输入框的内容

    driver.find_element_by_id("com.wuba.zhuanzhuan:id/ij").clear()

    9.4.  send_keys(输入框内输入内容 )

    1.定位输入框元素

    2.输入(发送)内容

    driver.find_element_by_id("com.wuba.zhuanzhuan:id/ij").send_keys("test content")

    9.5.  Text(获得元素的text内容 )

    1.定位元素

    2.获取元素内容

    driver.find_elements_by_class_name("android.widget.EditText")[0].text;

    9.6.  编写脚本代码

    #coding:utf-8

    from appium import webdriver

    #desired_caps是一个字典

    desired_caps = {}

    #你要测试的手机操作系统

    desired_caps['platformName'] = 'Android'

    #手机操作系统的版本

    desired_caps['platformVersion'] = '7.0'

    #使用的手机类型或模拟器类型

    desired_caps['deviceName'] = 'XPUDU17113015063'

     #deviceName你的模拟器名字,就是在下载AVD的时候,你填写的,忘了的回头去找,或者在模拟器顶部会显示

     #所运行的app包名

    desired_caps['appPackage'] = 'com.example.login'

    #app运行的事件

    desired_caps['appActivity'] = '.MainActivity'

    #启动打开app

    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

    #根据元素定位,执行点击操作

    #1、通过name定位元素

    # user= driver.find_element_by_name("请输入用户名")

    #2、通过id定位元素

    user = driver.find_element_by_id("com.example.login:id/et_username")

    #3、通过class_name定位元素,对元素进行清空,再发送内容为:jilidaxue

    # user = driver.find_element_by_class_name("android.widget.EditText").clear().send_keys("jilidaxue")

    #4、通过id定位元素,发送内容为66889558

    # driver.find_element_by_id("com.example.login:id/et_password").send_keys("66889558")

    user.send_keys("liangyibo")

    #5、打印获取的text属性值,文本内容

    print(user.text)

    #6、通过Xpath定位元素,输入密码

    driver.find_element_by_xpath("//android.widget.EditText[@text='请输入密码']").send_keys("233254545")

    #7、通过Xpath定位登录元素,进行点击操作

    driver.find_element_by_xpath("//android.widget.Button[@text='登录']").click()

    #8、退出操作

    driver.quit()

    10.  Appium操作界面之触摸操作(了解)

    10.1.    规范中的可用事件有:
    * 短按 (press) 
    * 释放 (release) 
    * 移动到 (moveTo) 
    * 点击 (tap) 
    * 等待 (wait) 
    * 长按 (longPress) 
    * 取消 (cancel) 
    * 执行 (perform)

    10.2.    单点触摸TouchAction(driver)

    通过TouchAction对象,添加tap、move_to等操作,然后perform()执行,可以实现解锁屏幕等功能

    action=TouchAction(driver)

    action.press(x=220,y=700).move_to(x=840,y=700).move_to(x=220, y=1530).move_to(x=840, y=1530).release().perform()

    10.3.    多点触控MultiAction()

    通过MultiAction().add()添加多个TouchAction操作,最后调用perform()一起执行这些操作

    举例

    action0 = TouchAction().tap(el)

    action1 = TouchAction().tap(el)

    MultiAction().add(action0).add(action1).perform()

    10.4.    滑动driver.swipe(x1, y1,x2,y2,duration)

    命令解释:从坐标(x1,x2)滑动到坐标(x2,y2),duration非必填项,滑动时间(滑动时中间要加等待时间,不加等待时间容易出错,而且加等待时间的长短也要掌握好,一般在200-1000毫秒之间应该差不多,自己调试几次感觉一下哪个时间比较稳,每个程序可能会有所差异)

    滑动的坐标不能超过屏幕的宽高

    可以通过【driver.get_window_size()】命令获得窗口高和宽{'width': 1080, 'height': 1788}

    # 获得机器屏幕大小x,y

    def getSize(driver):

        x = driver.get_window_size()['width']

        y = driver.get_window_size()['height']

        return (x, y)

    # 屏幕向上滑动

    def swipeUp(driver, t=500):

        l = getSize(driver)

        x1 = int(l[0] * 0.5)  # x坐标

        y1 = int(l[1] * 0.75)  # 起始y坐标

        y2 = int(l[1] * 0.25)  # 终点y坐标

        driver.swipe(x1, y1, x1, y2, t)

    # 屏幕向下滑动

    def swipeDown(driver,t=500):

        l = getSize(driver)

        x1 = int(l[0] * 0.5)  # x坐标

        y1 = int(l[1] * 0.25)  # 起始y坐标

        y2 = int(l[1] * 0.75)  # 终点y坐标

        driver.swipe(x1, y1, x1, y2, t)

    # 屏幕向左滑动

    def swipLeft(driver,t=500):

        l = getSize(driver)

        x1 = int(l[0] * 0.75)

        y1 = int(l[1] * 0.5)

        x2 = int(l[0] * 0.05)

        driver.swipe(x1, y1, x2, y1, t)

    # 屏幕向右滑动

    def swipRight(driver,t=500):

        l = getSize(driver)

        x1 = int(l[0] * 0.05)

        y1 = int(l[1] * 0.5)

        x2 = int(l[0] * 0.75)

        driver.swipe(x1, y1, x2, y1, t)

    10.5.    长按示例

    # [0,219][1080,363] ----获取某个按钮的位置,执行长按操作
    touch=TouchAction(driver)
    touch.long_press(x=100,y=250).perform();

    10.6.    滑屏示例

    10.6.1.    安装涂鸦app

     

    10.6.2.    打开界面,使用如下指令,查看activity和package

     

    10.6.3.    编写python脚本代码

    #coding:utf-8
    from appium import webdriver
    #desired_caps是一个字典
    from appium.webdriver.common.touch_action import TouchAction
     
    desired_caps = {}
    #你要测试的手机操作系统
    desired_caps['platformName'] = 'Android'
    #手机操作系统的版本
    desired_caps['platformVersion'] = '7.0'
    #使用的手机类型或模拟器类型
    desired_caps['deviceName'] = 'XPUDU17113015063'
     #deviceName你的模拟器名字,就是在下载AVD的时候,你填写的,忘了的回头去找,或者在模拟器顶部会显示
     #所运行的app包名
    desired_caps['appPackage'] = 'com.example.graffiti'
    #app运行的事件
    desired_caps['appActivity'] = '.MainActivity'
    #启动打开app
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
    #根据元素定位,执行点击操作
    action=TouchAction(driver)
    action.press(x=120,y=200).move_to(x=100, y=180).release().perform()
    driver.quit()

    11.  系统按键事件(了解)

    press_keycode(AndroidKeyCode)#发送按键事件

    例如:点击home键,home键的KeyCode是3

     

    12.  driver的一些比较重要操作

    12.1.    reset()

    #重置app#这时候driver会重置,相当于卸载重装应用。所以本地缓存会失效

    driver.reset()

    12.2.    start_activity(包名,activity名)

    例如:

    #启动app的某一个activity

    driver.start_activity("com.wuba.zhuanzhuan","./presentation.view.activity.LaunchActivity")

    启动一个activity,这个activity必须是AndroidManifest.xml中有intent-filter的activity,对于其他的activity需要程序跳转过去

    12.3.    scroll(起始元素,结束元素)

    driver.scroll(origin_el,destination_el)

    12.4.    获得当前页面的所有元素

    driver.page_source

    这可以用来判断元素是否存在,例如(assert “发布成功” in driver.page_source)

    12.5.    补充一些driver启动时可能用到的项(了解)

    其实这些在上一篇启动里都有介绍,但是有些可能大家没注意到的点再列一下。这些点也是我在测试中实际遇到的点

    autoLaunch :Appium是否要自动启动或安装app,默认true 
    desired_caps[‘autoLaunch’] = ‘false’ 
    有的时候我不想让appium每次都启动app,想自己去启动activity,那这个项这时就可以起作用了

    noReset:在会话前是否重置app状态。默认是false 
    desired_caps[‘noReset’] = ‘true’

    newCommandTimeout:设置未接收到新命令的超时时间,默认60s 
    如果60s内没有接收到新命令,appium会自动断开连接,如果我需要很长时间做driver之外的操作,可能延长接收新命令的超时时间 
    desired_caps[“newCommandTimeout”]=1800

    13.  自动化测试简单案例-登录

     

    13.1.    打开UI Automator Viewer

     

     

    13.2.    代码实现

    driver.find_element_by_id("com.example.login:id/et_username").send_keys("hello");
    driver.find_element_by_id("com.example.login:id/et_password").send_keys("123");
    driver.find_elements_by_class_name("android.widget.Button")[1].click()

    14.  自动化测试案例2-转转

    14.1.    下载转转,并打开,在初始界面查看包和activity

     

    14.2.    使用UI Automator Viewer查看转转按钮

    14.3.    点击跳过

    #强制等待3秒钟
    time.sleep(3)
    #跳过按钮
    #driver.find_element_by_id("com.wuba.zhuanzhuan:id/arw").click()

     

    14.4.    点击分类

     

    driver.implicitly_wait(10)
    #分类按钮
    driver.find_element_by_id("com.wuba.zhuanzhuan:id/b1v").click()

     

    driver.implicitly_wait(10)
    #搜索按钮
    driver.find_element_by_id("com.wuba.zhuanzhuan:id/b1p").click()

     

    driver.implicitly_wait(10)
    #搜索框中输入搜索内容
    driver.find_element_by_id("com.wuba.zhuanzhuan:id/mg").send_keys(u"电动车")
    time.sleep(10)
    #点击搜索

     

    driver.find_element_by_id("com.wuba.zhuanzhuan:id/mi").click()
    driver.quit()

    15.  启信宝案例

    #coding:utf-8
    from appium import webdriver
    #desired_caps是一个字典
    desired_caps = {}
    #你要测试的手机操作系统
    desired_caps['platformName'] = 'Android'
    #手机操作系统的版本
    desired_caps['platformVersion'] = '7.0'
    #使用的手机类型或模拟器类型
    desired_caps['deviceName'] = 'XPUDU17113015063'
     
    #deviceName你的模拟器名字,就是在下载AVD的时候,你填写的,忘了的回头去找,或者在模拟器顶部会显示
     #所运行的app包名
    desired_caps['appPackage'] = 'com.bertadata.qxb'
    #app运行的事件
    desired_caps['appActivity'] = '.activity.SplashActivity'
    #启动打开app
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
    #根据元素定位,执行点击操作
    driver.implicitly_wait(10)
    serh = driver.find_element_by_id("com.bertadata.qxb:id/tv_home_search_desc")
    serh.click()
    driver.find_element_by_id("com.bertadata.qxb:id/et_search_content").send_keys("优思安科技")

    driver.quit()
  • 相关阅读:
    【郑轻邀请赛 G】密室逃脱
    【郑轻邀请赛 C】DOBRI
    【郑轻邀请赛 F】 Tmk吃汤饭
    【郑轻邀请赛 I】这里是天堂!
    【郑轻邀请赛 B】base64解密
    【郑轻邀请赛 A】tmk射气球
    【郑轻邀请赛 H】 维克兹的进制转换
    解决adb command not found以及sdk环境配置
    adb shell 命令详解,android, adb logcat
    Unexpected exception 'Cannot run program ... error=2, No such file or directory' ... adb'
  • 原文地址:https://www.cnblogs.com/spbyyy/p/14180422.html
Copyright © 2011-2022 走看看