zoukankan      html  css  js  c++  java
  • 基于python的Appium自动化测试的坑

    真的感谢@虫师 这位来自互联网的老师,让我这个原本对代码胆怯且迷惑的人开始学习自动化测试。

    一开始搜索自动化测试的时候,虫师的博客园教程都是在百度的前几位的,我就跟着虫师博客园里面的教程学习。后来学seleinum听说他出书了《python+selenium》的这本我买了也学习了,是这本书带着我这个代码小白入门的,其实很多事情不愿意开始就一直不会开始,一旦开始了,可能也没有当初想的那么难。最近想学习下appium的时候发现他还有一个专门针对测试的网页http://www.testclass.net/,现在这么有用且条理清晰没有广告的网站真的很难得。

    有关appium几乎所有的内容都是跟着testclass网站上的教程走下来的,不过踩到了几个坑,这里就记录一下这几个坑。

     

    一、Could not extract PIDs from ps output.

    配置好所有的环境后,运行脚本,提示下面的错误:

    selenium.common.exceptions.WebDriverException: Message: A new session could not be created. (Original error: Could not extract PIDs from ps output. PIDS: [], Procs: ["bad pid 'uiautomator'"])

    修改 Appium ode_modulesappium ode_modulesappium-adblibadb.js 文件

    添加这行:

      this.shell("ps '" + name + "'", function (err, stdout) {

        ...

        var procs = [];

        var outlines = stdout.split(" ");

        outlines.shift()   //添加这行

    参考文档:http://blog.csdn.net/zxz_tsgx/article/details/53204258

     

    二、获取应用的包名packageName 和 ActivibyName

    配置desired_caps 信息时需要获得appPackage和appActivity

    desired_caps = {}
    desired_caps['platformName'] = 'Android'
    desired_caps['platformVersion'] = '7.0'
    desired_caps['deviceName'] = 'c1b8cb07'
    desired_caps["appPackage"] = 'com.lianchuan.cashloan'
    desired_caps['appActivity'] = 'com.lianchuan.cashloan.activity.other.SplashActivity'

    如果关于apk的信息未知,可以通过使用logcat方法:

    清除logcat内容,使用命令adb logcat -c

    启动logcat,使用命令adb logcat ActivityManager:I *:s

    启动要查看的程序

    括号中分别为PackageName和ActivityName

    参考文档:http://blog.csdn.net/jlminghui/article/details/40622103

    三、有关开启android模拟器

     

    创建模拟器时提示 No System images installed for this target,需要到SDK Manager中安装“ARM EABI v7a System Image”组件。

    模拟器打开是很慢的,需要很多耐心,且模拟其中的一些操作和真机还有所不同,下面是模拟器按键和键盘按键的对应。

    参考文档:http://www.cnblogs.com/fnng/p/4560298.html

     
    四、android webdriver appium中的Xpath定位

    appium中的定位主要用到的工具是SDK 自带的uiautomatoviewer.bat,这个文件存放在SDK 目录的tools文件夹中。

    UI automator Viewer工具可以查看录制下来的页面的属性。

    参考文档:https://testerhome.com/topics/7129

    五、appium中滑动屏幕的方法

    appium中的swipe方法的使用为:swipe(int startx, int starty, int endx, int endy, int duration)

    start_x:开始滑动的x坐标。 * start_y:开始滑动的y坐标。 * end_x:结束滑动的x坐标。 * end_y:结束滑动的y坐标。 * duration:持续时间

    但是不同大小的手机屏幕,元素所在的位置是不确定的,所以可以用占屏幕的位置比例来定位滑动的位置。

    获取屏幕的宽  width = driver.get_window_size()['width']  

    获取屏幕高  height = driver.get_window_size()['height']

    获得屏幕的宽高之后,上滑操作可以理解为,手指从屏幕的3/4高度出移动到1/4高度处。

    driver.swipe(1/2*width, 3/4*height, 1/2*with, 1/7*height, 200)  

    参考文档:http://blog.csdn.net/u011541946/article/details/77986018

    六、在有些手机上每次运行都要提示安装Appium Settings 和 Unlock的问题

    不同的手机设置这个情况也未必都会出现,如果出现这个问题,可以在手机已经安装好这两个之后,操作Appium ode_modulesappiumlibdevicesandroid目录下的android.js文件

    //this.pushSettingsApp.bind(this),

    //this.pushUnlock.bind(this),

    //this.unlock.bind(this),

    将上面三行注释再重启appium。

    参考文档:https://www.cnblogs.com/dreamyu/p/8027050.html

     

    七、Appium中send_keys无法输入中文 和 Appium中键盘输入不能使用的问题

    Appium已支持中文输入,但是需要用appium自带输入法(没有UI 界面)

    在初始化设置中增加一下两行代码:

    desired_caps["unicodeKeyboard"] = "True"

    desired_caps["resetKeyboard"] = "True"

    参考文档:https://testerhome.com/topics/1903

    Appium中键盘输入无法使用问题,需要用adb方法先调用一个输入法,在cmd中输入 

    adb shell ime list -s      查看所有可用输入法

    adb shell ime set com.sohu.inputmethod.sogou/.SogouIME    调用搜狗输入法

    将对adb的调用写入python代码:

    import os

    command = 'adb shell ime list -s'

    os.system(command)

    以上代码就可以在python中使用adb命令。

    参考文档:https://www.jianshu.com/p/28937a73316e

    (有些输入法依旧不能使用键盘press_keycode功能,测试搜狗输入法可以使用;但是有的输入法不能直接用send_keys上传文字,测试搜狗输入法不能直接上传文字,这时候,又需要用上面那个方法调出appium自带的输入法输入中文后,再换成搜狗,然后再点击键盘……复杂了我的appium!)

  • 相关阅读:
    RabbitMq windows 安装
    JQuery.Ajax()的data参数传递方式
    [转载]ASP.NET中TextBox控件设立ReadOnly="true"后台取不到值
    vue-cli 3.0脚手架搭建项目
    二、操作符
    一、JavaScript基础
    html苹方字体
    js十大排序算法收藏
    iframe高度自适应的6个方法
    CSS3:不可思议的border属性
  • 原文地址:https://www.cnblogs.com/lsjdddddd/p/8029038.html
Copyright © 2011-2022 走看看