发布新日志

  • Appium测试react-native前端技术实现的移动应用

    2017-07-29 20:40:34

      当听到前端是用react-native技术实现的andriod应用时,原以为这个是类似于H5实现的webview样式,可以通过chrome的inspect查看代码。后来,让开发代开了webview的debug开关,开关打开之后,应用页面无法加载出来,看到的是空白页面。
    后经对react-native技术的了解,发现其实这还是原生应用,因此无需打开webview的debug开关,也无需使用chrome的inspect,指需要使用uiautomator.bat工具即可定位元素。
      下面简单介绍下react-native技术,react-native技术Facebook也在用,它是能够在javascript和React的基础上获得完全一致的开发体验,构建世界一流的原生APP,可见其还是原生APP.它有着卓越的开发效率,学习一次,编写任何平台。听这挺不错。不过这种技术,通常元素没有id和name属性,这对于做自动化测试的打击面还是非常大的。
        我们在用Appium进行自动化脚本编写时,也的确发现元素大部分没有id和name属性,这种情况下只能通过xpath进行定位元素,同时为了保证脚本的稳定性和降低脚本的维护成本,我要求xpath全部写相对路径,绝对不写绝对路径。但是一个一个写xpath也是费时费力的事情,因此我们在tool中放了一个插件,可以自动生成元素的xpath,而且大部分是相对路径,还是非常不错的! 
      
     
  • adb命令汇总-持续更新中

    2017-07-26 13:26:27

    首先,需要对adb进行解释。
    什么是adb呢?Adb是Android debug bridge(Android调试桥)的缩写。adb是一个C/S架构的命令行工具,3部分构成:
    (1)、adb client端(运行在电脑上)
          tips:电脑上最好不要安装手机助手等软件,这样会占用adb的默认端口:5037
    (2)、adb server端(运行在电脑上)
          用于管理client和Andriod的adb后台进程
    (3)、adb后台进程(运行在手机上)
          主要是以下命令查看后台进程:adb shell ps|grep adbd
    其次, adb命令的分类:包括adb类、adb shell类和linux类。
    下面分别介绍
    ----------------------------------------------------------
     (1)、adb类:命令格式  adb [-e|-d|-s<设备序列号>....] <子命令>
           可通过 adb help或者adb命令查看
            例如:C:\Users\USER>adb
                 Android Debug Bridge version 1.0.31

                  -a                            - directs adb to listen on all interfaces for a connection
                  -d                            - directs command to the only connected USB device
                                     returns an error if more than one USB device is present.
                  -e                            - directs command to the only running emulator.
                                     returns an error if more than one emulator is running.
                  -s <specific device>          - directs command to the device or emulator with the given
                                     serial number or qualifier. Overrides ANDROID_SERIAL
                                     environment variable.
        adb类常用命令包括:
          1、adb devices  获取设备的id
          2、adb get-state  获取设备的状态,结果包括device(正常)、offline(异常)、unkwon(无设备)
          3、adb kill-server(结束adb服务)、adb start-server(启动adb服务),通常组合使用
          4、adb logcat  查看andriod系统日志,可以通过>重定向到制定的路径下面
          5、adb bugreport ,输出内容非常多、可以打印dumpsys\dumpstate\logcat信息,建议也重定向导出
          6、adb install (-r) application.apk 安装(覆盖)应用
          7、adb uninstall application.apk 卸载应用
          8、adb pull sdcard/demo.doc D:/将sdcard中的demo.doc文件复制到D盘
          9、adb push D:/demo.doc sdcard/将d盘下面的demo.doc复制到sdcard中
          10、adb reboot 重启机器
          11、adb connect远程连接Andriod设备(通过wifi进行连接,需要在同一局域网内,通常需要root权限)
              adb connect ip
    ------------------------------------------------------------
      (2)adb shell命令,待续
  • Monkey工具学习总结-原理篇

    2017-07-25 13:34:55

    Monkey工具的原理
          Monkey的启动文件在Android文件下面的/System/bin/monkey中。其主要的核心功能为调用monkey.jar文件,mankey.jar文件由多个类文件构成,其入口函数为com.andriod.commands.monkey.Monkey类。其代码构成包括:主控、监控、事件源和事件几个部分代码。源码获取地址:https://github.com/android/platform_development/tree/master/cmds/monkey
        其代码主要功能总结为:
        (1)、初始化事件源,创建事件队列;
         (2)、通过getNextEvent()方法循环获取事件。
          (3)、通过injectEvent方法调用WindowManager的方法讲事件注入系统中。
       
        
  • Monkey工具学习总结-使用篇

    2017-07-24 16:55:04

    1、Monkey定义:
      Monkey是google提供的一个命令行工具,可运行在模拟器或实际设备中,它向系统发送伪随机的用户事件,模拟用户的按键输入、触屏输入、手势输入等。从而对正在运行的应用程序进行压力测试,目的是看设备多长时间会出现异常,并观察系统的稳定性和容错性能。
    2、Monkey环境搭建
      Monkey是由adb命令来启动的,古只需要配置好adb环境即可。
      (1)、安装Andriod SDK和JDK
      (2)、将SDK下面的tools和platform-tools配置到环境变量中path中;
       (3)、cmd命令行输入adb,如果可以显示help信息,则配置成功。
    3、Monkey命令参数
      monkey [option] <count>---option可选,count必选
      
      option参数分类:
      (1)、基本配置参数,包括 --help,-v-v-v(二级)
      (2)、事件类型和频率参数
             -s<seed> 例如:adb shell monkey -s1111-v10
             --throttle <毫秒数> 事件之间插入固定延迟
             --pct-touch<百分比> 调整触摸事件的百分比
             --pct-motion<百分比> 调整动作事件的百分比
             --pct-pinchzoom<百分比>调整二指缩放事件的百分比
             --pct-trackball<百分比>调整轨迹事件的百分比
             --pct-rotation<百分比>调整屏幕旋转事件的百分比
             --pct-nav<百分比>调整基本导航事件的百分比
             --pct-majornav<百分比>调整主要导航事件<百分比>
             --pct-syskeys<百分比>调整系统按键事件的百分比
             --pct-appswitch<百分比>调整启动Activity的百分比
             --pct-flip<百分比>调整键盘事件的百分比
             --pct-anyevent<百分比>调整其他类型事件的百分比
      (3)、约束限制类参数
            -p<包名>
            -c<类别名>
      (4)、调试类参数
            --dbg-no-events
            --hprof  生成内存快照
            --ignore-crashes 崩溃发送事件
            --ignore-timeouts 忽略超时
            --ignore-security-exceptions 忽略安全异常
            --kill-process-after-error
            --monitor-native-crashes
            --wait-dbg
      (5)、官方隐藏类参数
            --pkg-blacklist-file<黑名单文件>
            --pkg-whitelist-file<白名单文件>
            -f<脚本文件>
    4、Monkey事件
      1、触摸事件
         :Sending Touch (Action_DOWN)
         :Sending Touch (Action_UP)
      2、手势事件
         :sending Touch (Action_DOWN)
         :Sending Touch (Action_MOVE)
         :Sending Touch (Action_UP)
      3、二指缩放事件
      4、轨迹事件
      5、屏幕旋转事件
      6、基本导航事件
      7、主要导航事件
      8、系统按键事件
      9、启动Activity事件
      10、键盘事件
      11、其他类型事件
    4、Monkey启动
       adb shell monkey [opition] <count>
    5、Monkey停止
       adb shell ps|grep monkey
       adb shell kill pid
    6、Monkey测试方法
       (1)、常规的稳定性测试
        (2)、自定义的脚本稳定性测试
         (3)、结合辅助命令、获取更多的信息
    7、Monkey日志分析
      日志分析非常重要,可以定位问题和解决问题。
      首先需要知道如何保存日志:
      (1)、Monkey日志保存的3个方法:
           adb shell monkey [option] <count> >e:\monkeyLog.txt
           将日志保存到monkeyLog.txt文件中
      (2)、adb shell monkey [option] <count> /mnt/sdcard/monkeyLog.txt
           将日志保存到手机sdcard中
      (3)、Monkey [option] <count> 1>/sdcard/monkeyLog.txt 2>/sdcrad/errorLog.txt
            分别保存日志和错误日志,错误日志记录崩溃或应用程序无响应错误日志。
        其次,如何解析日志?,需要先明确日志的构成:测试命令信息、伪随机事件流信息、异常信息、Monkey执行结果信息。
       (1)、测试命令信息
            例如 :Monkey: seed=1501203071005 count=10,
                 // Event percentages:
                 //   11: 13.0%
        (2)、伪随机事件,主要包括上面提到的11大事件
            例如::Switch:
                  :Sending Touch (ACTION_DOWN): 0:(954.0,1300.0)

                  :Sending Touch (ACTION_UP): 0:(962.5436,1295.4299)

                  :Sending Trackball (ACTION_MOVE): 0:(-2.0,2.0)
         (3)、异常信息
                Crash:....
         (4)、执行结果信息,如果有失败则显示失败原因。
          Events injected: 10

          :Sending rotation degree=0, persist=false

           :Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0

            ## Network stats: elapsed time=8211ms (0ms mobile, 0ms wifi, 8211ms not connected)

           // Monkey finished
        再者,可以把自己关心的日志信息,用bat脚本提取出来并收集到一个日志中。
       






     

     
  • Appium python自动化测试环境搭建记录

    2017-07-20 11:07:06

    Python windows下安装步骤:

    首先:

    安装JDK和JRE并加入环境变量:
    JDK环境变量配置:
    1.系统变量→新建 JAVA_HOME 变量 C:\Java\jdk1.7.0_67 (假设JDK安装至此位置)
    2.path后增加:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
    3.系统变量→新建 CLASSPATH 变量 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
    4.检验是否配置成功 运行cmd 输入 java -version

    第一步:
    去官网:https://www.python.org/,下载并安装 python 的开发环境包,选择需要安装路径进行安装,笔者下载的是目前最新的
    python3.5.2版本,安装目录为:C:\Python35,注意,安装过程中请勾选“加入环境变量”

    第二步:
    添加 python 的环境变量,桌面“我的电脑”
    右键菜单-->属性-->高级-->环境变量-->系统变量中的 Path 为:
    变量名:PATH
    变量值:;C:\Python35;C:\Python35\Scripts;

    第三步:
    安装easysetup & pip,现在3.5.X版本不需要单独安装 easysetup & pip了,PIP是类似于linux的rpm的安装命令,会自
    动去官网搜索可用的安装包,如果国内网络太慢,则请在安装时指定国内代理域名,安装时增加代理域名参数即可:
    pip install -i --trusted-host http://pypi.douban.com/simple/ XXXX(要安装的包名称)

    第四步:
    安装 selenium,如果是电脑处于联网状态的话,可以直接在 DOS环境下输入
    命令安装:
    pip install selenium
    如果没联网,可以通过下载安装:
    selenium 下载地址: https://pypi.python.org/pypi/selenium
    下载 selenium 2.33.0 (目前的最新版本) ,并解压把整个目录放到 C:\Python35\Lib\site-packages
    目录下。

    第五步:
    安装Pycurl :pip install pycurl

    python setup.py install --record pathXX.txt 记录安装后文件的路径 
    cat pathXX.txt | xargs rm -rf 删除这些文件

    python setup.py install --record pathChardet.txt
    python setup.py install --record pathRequests.txt
    python setup.py install --record pathSimplejson.txt
    python setup.py install --record pathXlrd.txt
    python setup.py install --record pathXlutils.txt
    python setup.py install --record pathXlwt.txt

    第六步:
    安装如下包:
    xlrd(读取Excel) : pip install xlrd (以下包安装命令以此类推)
    xlwt
    ParamUnittest
    configparser
    Appium-Python-Client
    chardet
    requests
    uiautomator
    urllib3
    xlutils

    支持Oracle数据库连接安装包请移步至同级文档:“APP自动化测试相关安装包”下载安装。

  • Robot framework自动化测试环境以及web\app\客户端\数据库\接口自动化环境搭建

    2017-07-20 09:44:15

    1安装python相关

    1.1安装python2.X版本不要安装3.X版本)

    python-2.7.9.msi(一切的基础,切记安装的路径不要有中文不要有空格,http://www.python.org/download/releases/2.7.9/),默认的安装python时,会自动安装setuptoolspip,如果没有安装则参考步骤1.31.4进行安装。

     

    验证方法:

    1、按照1.2配置完环境变量之后在cmd下面输入pip –version,如果显示

    pip 8.1.2 from c:\python27\lib\site-packages (python 2.7),则说明pip安装成功。

    2、或者在C:\Python27\Lib\site-packages下面查看是否有pip setuptools文件夹,如果有则说明已经安装。

     

    1.2环境变量配置

    1.首先需要在系统中注册python环境变量:假设python的安装路径为c:\python27,则修改我的电脑->属性->高级->环境变量->系统变量中的PATH: c:\python27(在原有PATH里添加python.exe所在目录)
     
    2.此时,还是只能通过"python *.py"运行python脚本,若希望直接运行*.py,只需再修改另一个环境变量PATHEXT: .PY;.PYM
     
    3. PATH里添加c:\python27\Scripts
    如下图所示:
     

    1.3安装setuptools

    setuptools (用于后续的一些测试库的安装支持,https://pypi.python.org/pypi/setuptools/
    下载zip或者gz的压缩包,解压
    假设setuptools解压后的目录在D:\ setuptools-14.3\setuptools-14.3setup在该目录)
     
    打开cmd命令行
    cd D:\setuptools-14.3\setuptools-14.3
    python setup.py install
    后续其他python也可使用此方法下载后安装。
     
    ps:若在安装过程中遇到:
    ctype = ctype.encode(default_encoding) # omit in 3.x!
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in range(128)
    解决方法:将mimetypes.py替换Lib目录下面的这个文件,然后删除对应的pyc文件
     

    1.4安装pip

    pip-install pip安装方式,适合网络通畅的童鞋,https://github.com/pypa/pip/releases

    setuptools的安装方法

     

    安装完成后,其他库可用pip安装方式安装:

    Example:打开cmd

    Pip install 库名

    2安装robot framework

    2.1安装wxpython(安装版本2.8.12.1

    wxPython2.8-win32-unicode-2.8.12.1-py27.exewxPythonRIDE需要他的支持,http://sourceforge.net/projects/wxpython/files/wxPython/2.8.12.1/ 

     

    2.2安装robot framework

    robotframework-2.8.7

    http://code.google.com/p/robotframework/downloads/list

     

    或者命令:pip install robotframework-ride,这种安装的好处是会自动找到依赖的文件进行一块安装。

     

    验证方法:1 cmd下面输入ride.py如果启用了,就说明安装成功。

     

    2.3安装ride(目前可用版本应该到1.50了)

    robotframework-ride-1.3.0.win32.exerobotFrameworkIDE,目前最新1.3.0http://code.google.com/p/robotframework-ride/downloads/list,如有中文乱码问题请参考:http://blog.csdn.net/tulituqi/article/details/7931069

    ------------------------------------------------------------ 

    3 web ui自动化相关(Selenium2Librabry

    pip install robotframework-selenium2library

     

    3.1安装decorator

    decorator-3.4.0S2L库的依赖库。https://pypi.python.org/pypi/decorator/3.4.0

     

    3.2安装docutils

    docutils-0.11S2L库的依赖库。https://pypi.python.org/pypi/docutils/0.11

     

    3.3安装selenium

    selenium-2.35.0(是selenium的原生python库,要到python官网下载https://pypi.python.org/pypi/selenium/2.35.0,而IEDriver.exe要到GOOGLE下载http://code.google.com/p/selenium/

     

    3.4安装selenium2library

    robotframework-selenium2library selenium2测试库,基于webdriver驱动,最新release1.5.0,下载:https://github.com/rtomac/robotframework-selenium2library/releases,如有问题请参考:http://blog.csdn.net/tulituqi/article/details/7604967 

     

    -----------------------------------------------------------------------------------------------------------------

    查看(1032) 评论(0) 收藏 分享 管理

  • Robot framework自动化框架内置库(BuildIn)关键字大全

    2017-07-20 09:38:06

    BuiltIn

    版本:2.6.3

    范围:global

    命名参数:支持

    介绍

    BuiltInRobot Framework标准库,提供了常用关键字。它自动导入,从而始终可用。 提供的关键字有用于验证的(e.g. Should Be Equal, Should Contain),转换的(e.g. Convert To Integer),其他(e.g. Log, Sleep, Run Keyword If, Set Global Variable)

    所有关键字如下:

    Call Method  ·  Catenate  ·  Comment  ·  Convert To Binary  ·  Convert To Boolean  ·  Convert To Hex  ·  Convert To Integer  ·  Convert To Number  ·  Convert To Octal  ·  Convert To String  ·  Create List  ·  Evaluate  ·  Exit For Loop  ·  Fail  ·  Fatal Error  ·  Get Count  ·  Get Length  ·  Get Library Instance  ·  Get Time  ·  Get Variable Value  ·  Get Variables  ·  Import Library  ·  Import Resource  ·  Import Variables  ·  Keyword Should Exist  ·  Length Should Be  ·  Log  ·  Log Many  ·  Log Variables  ·  No Operation  ·  Regexp Escape  ·  Remove Tags  ·  Repeat Keyword  ·  Replace Variables  ·  Run Keyword  ·  Run Keyword And Continue On Failure  ·  Run Keyword And Expect Error  ·  Run Keyword And Ignore Error  ·  Run Keyword If  ·  Run Keyword If All Critical Tests Passed  ·  Run Keyword If All Tests Passed  ·  Run Keyword If Any Critical Tests Failed  ·  Run Keyword If Any Tests Failed  ·  Run Keyword If Test Failed  ·  Run Keyword If Test Passed  ·  Run Keyword If Timeout Occurred  ·  Run Keyword Unless  ·  Run Keywords  ·  Set Global Variable  ·  Set Library Search Order  ·  Set Log Level  ·  Set Suite Variable  ·  Set Tags  ·  Set Test Message  ·  Set Test Variable  ·  Set Variable  ·  Set Variable If  ·  Should Be Empty  ·  Should Be Equal  ·  Should Be Equal As Integers  ·  Should Be Equal As Numbers  ·  Should Be Equal As Strings  ·  Should Be True  ·  Should Contain  ·  Should Contain X Times  ·  Should End With  ·  Should Match  ·  Should Match Regexp  ·  Should Not Be Empty  ·  Should Not Be Equal  ·  Should Not Be Equal As Integers  ·  Should Not Be Equal As Numbers  ·  Should Not Be Equal As Strings  ·  Should Not Be True  ·  Should Not Contain  ·  Should Not End With  ·  Should Not Match  ·  Should Not Match Regexp  ·  Should Not Start With  ·  Should Start With  ·  Sleep  ·  Variable Should Exist  ·  Variable Should Not Exist  ·  Wait Until Keyword Succeeds

    关键字介绍

    关键字

    参数

    文档

    Call Method

    object, method_name, *args

    使用参数args调用对象object的方法method_name

    方法可能返回值可以赋值给一个变​​量。

    当找不到方法或者方法产生异常时,Keyword会失败。

     

    例子:

    Call Method

    ${hashtable}

    put

    myname

    myvalue

    ${isempty} =

    Call Method

    ${hashtable}

    isEmpty

    Should Not Be True

    ${isempty}

    ${value} =

    Call Method

    ${hashtable}

    get

    myname

    Should Be Equal

    ${value}

    myvalue

    Catenate

    Catenate

    连接给定参数,返回字符串。

    默认用空格连接参数项目,如果第一个参数为'SEPARATOR=<sep>',则使用”sep”来连接.

     

    例子:

    ${str1} =

    Catenate

    Hello

    world

    ${str2} =

    Catenate

    SEPARATOR=---

    Hello

    world

    ${str3} =

    Catenate

    SEPARATOR=

    Hello

    world

    实际结果:

    =>

    - ${str1} = 'Hello world'

    - ${str2} = 'Hello---world'

    - ${str3} = 'Helloworld'

    Comment

    *messages

    在日志文件中以关键字参数形式显示指定信息。

    Comment对参数不进行任何处理,仅仅是显示在日志中,用于显示简单信息。

    如果要显示变量值,可以使用Log Log Many关键字。

    Convert To Binary

    item, base=None, prefix=None, length=None

    转换参数为二进制字符串。

    如果添加了base参数,则先内部使用Convert To Integer转换为整数,然后再转换为二进制数字,以字符串的形式显示,比如1011“

    返回值可以包含可选的前缀和最小长度(不包含前缀和负号等)。如果返回值比要求的长度短,则使用0填充。

     

    例子:

    ${result} =

    Convert To Binary

    10

    # Result is 1010

    ${result} =

    Convert To Binary

    F

    base=16

    prefix=0b

    # Result is 0b1111

    ${result} =

    Convert To Binary

    -2

    prefix=B

    length=4

    # Result is -B0010

    Convert To Boolean

    item

    转换参数为布尔值truefalse

    如果参数是字符串'True'(不区分大小写)就返回真,为'False'就返回假;其他情况调用Python'bool'的方法来判断。请参阅http://docs.python.org/lib/truth.html

    Convert To Hex

    item, base=None, prefix=None, length=None, lowercase=False

    转换参数为十六进制字符串。

    如果添加了base参数,则先内部使用Convert To Integer转换为整数,然后再转换为十六进制数字,以字符串的形式显示,比如'FF0A'

    返回值可以包含可选的前缀和最小长度(不包含前缀和负号等)。如果返回值比要求的长度短,则使用0填充。

    默认返回大写字符串,lowercase参数会转换值为小写(不包含前缀)。

     

    例子:

    ${result} =

    Convert To Hex

    255

    # Result is FF

    ${result} =

    Convert To Hex

    -10

    prefix=0x

    length=2

    # Result is -0x0A

    ${result} =

    Convert To Hex

    255

    prefix=X

    lowercase=yes

    # Result is Xff

    Convert To Integer

    item, base=None

    转换参数为整数。

    如果参数是字符串,则默认转为十进制整数。使用其他进制可以用base指定或者添加前缀,比如0b表示2进制,0o

  • Robot framework app自动化测试常见问题总结

    2017-07-18 14:22:45

    1、抓取ACTIVITY的简便方法

    首先连接手机  打开待测的APP  然后在PC上打开CMD  输入adb shell dumpsys activity |find "mFocusedActivity"
       可以直接定位到activity

    2、如何保证APP和WEB都可以使用(app的谷歌浏览器需要INSPECT,WEB需要运行脚本)
    使用55版本的Chrome,

    关于谷歌  inspect的空白页问题 已解决
    在HOST文件中加入映射
    61.91.161.217    chrome-devtools-frontend.appspot.com
    61.91.161.217    chrometophone.appspot.com
    谷歌浏览器 55版本   安卓手机 6.0.1已可以使用
    3、个别手机每次跑自动化时需要安装unlock 和 appium setting 如何禁用?

    禁掉Appium中安装Unlock, Setting, Android Input Manager
    方法很简单,按照如下方法修改2个文件:
    第一个文件:android-helpers.js
    位置: /Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/appium-android-driver/lib
    改动点:

    4、如果没有Andriod手机,如何开展自动化测试?

         解决:安装“天天模拟器”,安装本地apk应用即可测试,方便快捷,如果遇到需要测试toast提示信息的,模拟器支持有点问题,建议让开发统一改成一种提示信息类型;

    5、如何保证模拟器测试通过就代表在真机上测试通过?

     解决:1、跟开发确认是否认同模拟器和真机一致,识别出模拟器和真机不同的功能点,专门用真机执行;2、在模拟器调通代码后,在真机上跑一遍,看是否有问题,如果没有问题则说明模拟器可以代表真机,后续则可以在模拟器上进行版本回归测试;

    6、用模拟器的好处是什么?

     解决:可以选择不同的Andriod版本,模拟不同的机型进行测试,不需要真机,最重要的就是不需要花钱;

    7、编写脚本时,如何保证脚本的稳定性和健壮性,减少后续的维护成本?

    解决:locator用相对路径而坚决不用绝对路径,谨记!

    8、Press keycode方法,对应的code值有那些?

        参考:https://testerhome.com/topics/799

    9、(Andriod)在编写测试用例时,需要经常进行调试脚本运行情况,但每次执行都需要重新安装登录,非常繁琐和耗时

        解决方法:在执行一次安装登录操作后,停止Appium程序,点击Android Settings ,选中“No Reset”,重新启动Appium。再次执行用例时就不会重新安装登录了。

    10、(Andriod)执行脚本,跑完几次之后,总是遇到“ WebDriverException: Message: A new session could not be created. ”,怎么解决?

        答:Appium is probably shut down or something like there is already a session。so you have to start it again start it from the terminal or command prompt using the command appium.

              you can use command appium-doctor  for detail reason.

    11、输入信息时,总会弹出手机自带键盘

    解决方法:将手机默认键盘选择为appium android input manager for unicode

    12、划屏无反应

    解决方法:driver.swipe(windht*6/7,heigh/2,widht/7,height/2,2);

    第一步,了解手机分辨率,例如:1080*1980

    第二步,将1080设置成X轴,1980设置为Y轴,计算出预计想滑动尺寸

    13、文本输入框不允许输入中文,如何解决?

    答:需要修改一下AppiumLibrary 的这个文件:

    F:\Python27\Lib\site-packages\AppiumLibrary\keywords_applicationmanagement.py

    这里写图片描述

    加入两行代码就可以了。

    desired_caps["unicodeKeyboard"] = "True"

      desired_caps["resetKeyboard"] = "True"

    这个时候跑case 的时候,appium 会把测试手机的输入法设置成Appium 的输入法。这个输入法不能弹出键盘,如果需要正常输入,就需要切换回系统的输入法。或者你自己安装的输入法。 


    14、输入密码之后,密码键盘没有隐藏,遮挡下面的按键,导致无法点击下面的按钮,如何解决?

          答:输入密码之后,在点击按钮之前,增加go back关键字----我封装的“页面回退”关键字。

    15、appium自动化测试中如何获取toast消息?

         答: 1、需要安装Appium 1.6.3版本;(首先安装node.js V6.11.0版本,之后通过命令行:npm install -g appium@1.6.3进行安装)

                 2、脚本设计中使用desired_caps['automationName']='uiautomator2';

                 3、封装关键字Find_Toast,里面的代码内容如下:

                       message='密码输入不一致,请重新输入'

                      message1='//*[@text=\'{}\']'.format(message)

                      element=WebDriverWait(driver,10,poll_frequency=0.5).until(expected_conditions.presence_of_element_located((By.XPATH,message1)))

    16、在WebView模式下,capture screenshot关键字不可用,如何解决?

         答: 如果要截图,先切回到Native模式,在进行截图。

    17、在WebView模式下,swipe关键字不可用,如何解决?

       答: 如果要滑动,先切回到Native模式,滑动完之后在切换到webview模式。

  • Robot framework web自动化测试环境搭建常见问题和解决方法

    2017-07-18 14:16:47

    Q1:RF安装完成之后,导入Selenium2Library后使用open browser关键字无法启动浏览器,或者浏览器启动之后无法输入URL地址。

     答:这类问题通常是由于driver跟浏览器版本不兼容引起的,需要升级driver版本同时需要降低浏览器版本。目前IEDriverServer最新版本是3.0,chromedriver版本是2.19;
    火狐浏览器43.0.1版本是没有问题的,chrome浏览器47.0版本是没有问题的;

    Q2:RF使用火狐浏览器启动时报'geckodriver' executable needs to be in PATH错误,如何解决?
    答:这个是因为selenium版本为3.0的原因,需要将Selenium的版本降低为3.0以下版本。解决方法:首先用命令pip show selenium看下selenium版本,如果是3.0以上版本则删除C:\Python27\Lib\site-packages目录下面的selenium和selenium-3....文件夹,然后在cmd下面执行pip install selenium==2.53.6,安装完重启下RF即可解决。

    Q3:安装AutoIT之后导入AutoItLibrary库为红色,无法导入成功?
    答:首先,需要看下安装的版本,64bit操作系统,需要用AutoItLibrary-1.1_x64这个文件;同时需要安装AutoIt-V3应用;
    其次,安装AutoItLibrary时,需要以管理员身份安装,以管理员身份运行cmd,cd到AutoItLibrary-1.1_x64目录下面,运行python setup.py install命令进行安装;通常到这步重启RF之后,AutoItLibrary即可导入成功。如果还没有成功,继续下面的步骤。
    再次,利用cmd进入AutoItX3.dll文件所在路径,运行系统注销和系统注册命令:
    c:\Python27\Lib\site-packages\AutoItLibrary\lib>regsvr32 /u AutoItX3.dll
    c:\Python27\Lib\site-packages\AutoItLibrary\lib>regsvr32 /s AutoItX3.dll

    Q4:AutoItLibrary库都有哪些关键字?如何使用?
    答:可以查看这个网页:http://www.cnblogs.com/tinghai8/p/5839050.html

    Q5:安装DatabaseLibrary之后,库导入后为红色,无法导入成功?报"ImportError:DLL load failed....."
    答:检查按装步骤
    1、 安装cx_Oracle(64位);
    2、 将oracle instant client-11-64位的文件路径放到环境变量中,并将oracle instant client文件下面的oci.dll、oraocci11.dll、oraociei11.dll复制到site-package下面;
    3、 Pip install robotframework-databaselibrary;

    Q6:RF使用IE执行应用时报“IEdriverserver not in PATH”错误
    答:python27下面没有IEDriverServer.exe文件

    Q7:RF安装之后pip版本较低,用pip安装其他库时报错。
    答:先用 python -m pip install --upgrade pip命名进行在线升级,之后在用pip安装其他库。

    Q8:setup和teardown中使用带参数的关键字如何处理,例如open browser关键字。
    答:关键字和参数中间用|分割即可,例如open browser | http://www.baidu.com |gc放到setup中。

  • Robot framework web自动化测试遇到的常见问题和解决方法汇总

    2017-07-18 14:09:21

    Q1:执行脚本时报“Element can not be clickable on point(25,100)”?
    答:这个原因是元素被遮挡,无法看到,需要滚动滑动条使元素可见,即可操作。对于页面主体部分滑动可以使用javascript命令:javascript.:window.scrollBy(250,1300);对于左导航栏部分滑动可以使用javascript命令:jquery=$(".滑动条class").offset( {top:-400,left:0})

    Q2:excel数据文件编辑后保存报共享冲突是什么原因?
    答:是由于RF真正允许脚本占用了excel进程导致,手工杀死pythonw.exe进程即可解决;

    Q3:执行脚本时报“local variable 'cellValue' referenced before assignment”,怎么解决?
    答:这个是因为excelLibrary关键字缺少了参数引起的,目前比较多的是“获取表单单个值”关键字缺少了&{ii}参数。还有就是用例中参数传的单元格值不正确,例如本来B2有值,传的是B3单元格(空);

    Q4:脚本执行未通过,经排查locator(id,name,xpath)都没有问题,但执行时就是无法操作上对象?
    答:原因一:页面中是否存在iframe;如果有iframe需要先用Select Frame关键字,如果切换了页面,页面iframe不同时,需要unselect frame然后在选择新的iframe. 注意:unselect frame是跳出所有的iframe.
    原因二:用locatord在页面上定位到了多个相同的对象,导致无法对期望的对象进行操作;例如id=bankName存在多个对象,需要明确操作的是那个对象,则用(//*[@id="bankName"])[x],x表示第下x+1个元素。
    原因三:网络或者浏览器的原因,页面加载速度慢,页面还没有加载完,就执行操作导致无法操作成功,此时需要增加一个wait until page contain (element)等相关关键字或者wait until element is visible,保证元素加载完在操作。
    备注:不要用sleep关键字,因为sleep关键字不能智能判断页面时间,脚本失败率非常高。

    Q4:脚本执行后报“element is not clickable”?
    答:这说明元素是不可以点击的元素,例如div元素,则需要用其他操作。

    Q5:脚本执行后报“element is not visible”?
    答:这个是因为元素被隐藏了、不可见。元素display属性为none。可以通过javascript先将元素设置为可见:document.getElementById("id").style.display="block"

    Q6:执行查询语句在数据库中查询的结果含有中文时,显示的为乱码。
    答:这个是因为数据库默认编码方式不是utf-8,需要进行代码转换,可以导入TestLibrary库,使用decode关键字进行解决。

    Q7:测试用例是否可以设置多个Tag值?
    答:可以

    Q8:运行时, Run页面中only run tests with these tage或者skip tests with these tags下面是否可以输入多个tag?
    答:可以,中间用“;”分割

    Q9:执行脚本时,用get Text关键字获取元素值不是期望的值。例如 get text |xpath=/html/body/div,明明是“ABC”,获取的却是“BCD”
    答:需要查看页面是否是新打开的窗口,还是在原来的窗口,如果是新打开的窗口,需要用 select window | URL选择到新的窗口中。

    Q10:对于密码输入框通过安全控件实现的,脚本无法输入密码,即使可以输入密码,系统判断为没有输入,如何解决?

    答:这种问题技术解决有难度,最简单的方法是让开发把密码安全控件去掉,改成普通的密码输入框;

    Q11:对于登录时或者脚本执行过程中,需要输入动态验证码的怎么操作?

    答:动态验证码的需要使用图像技术解决,技术上是可以解决的,但是成本太高,最简单的方法是让开发将验证码改成通用验证码,例如000000.

    Q12:有时通过inputtext或者select的方式无法给控件负值成功,如何通过javascript给控件负值?

    答:执行这条javascript:window.document.getEltementById('Startime').value='2016-11-12'

    Q13:问题:如何处理数据库中长度不够?                         

    答: 对于数据库的取值,一些FLOAT类型的数据,小数点后2位如果都为0,取出来可能只有小数点后1位,可以对取出的数据进行处理,先验证是否缺失,如果缺失补一位再return,如果不缺失则正常return

    Q14:左导航栏下面的菜单遮挡,看不到需要滑动一下,怎么处理?             

    答:可以使用FOCUS定位元素再选取,对于一些个别的情况可能无法适用。

    Q15:怎么验证查询结果按照时间倒序排列?                                      

    答:可以使用sql语句倒序排列,跟页面的结果进行比对

    Q16:脚本执行时报如下错误UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-78: ordinal not in range(128),或者中文字符显示为???,如何解决?

    答:首先需要判断这个错误是python的引起的还是数据库操作过程中报出的,如果是python引起的,解决办法如下:

        python27默认编码格式为ascii

     1、查看python默认编码格式
     import sys
     print sys.getdefaultencoding()
     2、修改默认编码格式为utf-8且只在本次生效

            import sys

     reload(sys)
     sys.setdefaultencoding('utf-8')

       3、永久生效

             在python27下面的site-package文件下面创建sitecustomize.py文件,将 步骤2中的内容拷贝进去,保存即可。

    如果是数据库操作过程报的错,则解决办法如下: 

        1、将instantclient_11_2-64文件放到C盘下面;

        2、然后配置如下环境变量:

    1.   ORACLE_HOME = C:\instantclient_11_2
    2. TNS_ADMIN = C:\instantclient_11_2
    3. NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK

         4.Path变量,在后面添加 C:\instantclient_11_2

     

    Q17:元素含有readonly属性,导致元素不可操作,如果要操作该如何处理?

         答:用js,$("aa").removeAttr("readOnly");document.getElementById(id).removeAttribute("readonly");

    Q18:类似OBM,checkbox开关和radio无法勾选,执行脚本时报对象is not visible,如何解决?

            通过JS,脚本为:Execute javascript $("input[id='nosingleLimit_kuaijie']").click()

    Q19:左道航栏如果被遮挡,无法点击菜单,如何处理?

           通过JS:$("span:contains(通道管理)").mouseover();$("a:contains(机构管理)").click();

    Q20:上传文件部分脚本执行时,过程中不报错,但用之前的方法上传上的文件不能回显(个别电脑,销售系统进件流程)

    解决办法:将上传文件 部分的脚本用另一种方式实现

    Wait For Active Window 打开
    Control Set Text 打开 \ Edit1 ${file}
    sleep 2
    Control Click \ \ Button1
    sleep 2s

    Q21:Robot framework如何对AJAX应用进行自动化实现?

           1、首先进入到iframe中; 2、获取输入窗体<body>元素;3、按Tab; 4、输入内容,具体实现步骤:

             Select Frame. id=ueditor_0 
             Press Key |xpath=/html/body | \\9 
              Input Text | xpath=/html/body |${客服真推消息内容1}

Open Toolbar