• 目前使用了一种替代方案实现了缩放,结合 MultiAction 和 TouchAction。

    滑动原理图解

    x = driver.get_window_size()['width']
    y = driver.get_window_size()['height']
    
    
    
    # 放大
    def zoom():
        action1 = TouchAction(driver)
        action2 = TouchAction(driver)
        zoom_action = MultiAction(driver)
    
        action1.press(x=x*0.4, y=y*0.4).move_to(x=x*0.1, y=y*0.1).wait(500).release()
        action2.press(x=x*0.6, y=y*0.6).move_to(x=x*0.8, y=y*0.8).wait(500).release()
    
        print('start zoom...')
        zoom_action.add(action1, action2)
        zoom_action.perform()
    
    
    
    # 缩小
    def pinch():
        action1=TouchAction(driver)
        action2=TouchAction(driver)
        pinch_action=MultiAction(driver)
    
        action1.press(x=x*0.1, y=y*0.1).move_to(x=x*0.4, y=y*0.4).wait(500).release()
        action2.press(x=x*0.8, y=y*0.8).move_to(x=x*0.6, y=y*0.6).wait(500).release()
    
        print("start pinch...")
        pinch_action.add(action1, action2)
        pinch_action.perform()
    
  • 补充一下测试环境:

    测试环境

    • 夜神模拟器 Android 5.1.1
    • 百度地图 Android app V10.6.5
    • Win 10 64bit
    • Appium 1.7.2
  • 你用的是什么模拟器啊,建议你重启下 Appium 服务和模拟器看看。

  • 使用 appium-doctor 先做个全面体检吧:
    1.安装 appium-doctor: npm install appium-doctor -g
    2.在控制台输入命令:appium-doctor 看到如下提示说明整体环境配置成功。

    C:\Users\Shuqing>appium-doctor
    info AppiumDoctor Appium Doctor v.1.4.3
    info AppiumDoctor ### Diagnostic starting ###
    info AppiumDoctor   The Node.js binary was found at: D:\program files\nodejs\node.exe
    info AppiumDoctor   Node version is 6.11.3
    info AppiumDoctor   ANDROID_HOME is set to: E:\Andriod_sdk
    info AppiumDoctor   JAVA_HOME is set to: C:\Program Files\Java\jdk1.8.0_05
    info AppiumDoctor   adb exists at: E:\Andriod_sdk\platform-tools\adb.exe
    info AppiumDoctor   android exists at: E:\Andriod_sdk\tools\android.bat
    info AppiumDoctor   emulator exists at: E:\Andriod_sdk\tools\emulator.exe
    info AppiumDoctor   Bin directory of %JAVA_HOME% is set
    info AppiumDoctor ### Diagnostic completed, no fix needed. ###
    info AppiumDoctor
    info AppiumDoctor Everything looks good, bye!
    info AppiumDoctor
    
    
  • 这个是由于你的 toast 内容为中文,由于字符编解码问题导致不能识别,需要在代码顶部写注释如下即可

    # coding=utf-8
    
  • 站在测试角度我觉得选自己最能上手的语言完成就好,就拿我之前公司产品来说底层是 C,C++ ,应用层是 C# 来开发的。我不能能花大量时间把 C++,C# 语言学习精通(而且光 C++ 这门语言门槛就不低了)。

  • 首先将各个功能模块进行独立封装,比如封装登录操作 def login():, 退出操作:def logout():
    。伪代码如下:

    
    def login():
    def logout():
    
    

    然后你接下来要设计的测试用例是先登录再退出,就可以再封装一个方法比如 def test_loginout_action() 在这个方法先调用登录,再调用退出。

    def test_loginout_action()
        def login():
        def logout():
    
  • 外包现在确实不值得去了,最主要还是扎扎实实提高自身实力。

  • 暂时停更 at 2018年02月28日

    身体是革命的本钱。

  • 繁体字,台湾同胞吗?

  • 好的,知道了。谢谢!

  • 基于楼上的答案,这里封装为一个方法如下:

    def kill_appiumServer(self,port):
    
           #查找对应端口的pid
           cmd_find='netstat -aon | findstr %s' %port
           print(cmd_find)
    
           result = os.popen(cmd_find)
           text = result.read()
           pid=text[-5:-1]
    
           #执行被占用端口的pid
           cmd_kill='taskkill -f -pid %s' %pid
           print(cmd_kill)
           os.popen(cmd_kill)
    
  • appium desktop 都是封装好的,无法使用命令来启动。另外想问一下,你那边关闭 appium 服务是怎么实现的?是用 taskkill /f 直接全部关闭 node.exe 进程还是其他方式呢?

  • 将 stdout=stdout=subprocess.PIPE 改为:stdout=open('E:/logs.log','a') 就可以了。😅

  • 聊聊用过的智能硬件 at 2018年01月15日

    是我们公司的一个智能家居事业部的指纹锁,3000 多一把。具体就不说品牌名称了(怕被 HR 看到请去喝茶。。)老板朋友出于情义买了一把,结果出了这个闹剧,客户电话还打不通。老板把相关负责人骂了一顿,太打脸了。

  • 聊聊用过的智能硬件 at 2018年01月15日

    指纹锁

    还有看似高大上的指纹锁,结果客户买了晚上按指纹进不了家门,求客户心理阴影面积。。。😅

  • Appium Server

    Appium Server 就是 Appium 的服务端——一个 web 接口服务,使用 Node.js 实现。引用官网解释说明。

    Appium is a server written in Node.js. It can be built and installed from source or installed directly from NPM:

    $ npm install -g appium
    $ appium
    

    Appium Desktop

    Appium Desktop 是一款适用于 Mac,Windows 和 Linux 的开源应用程序,它以美观而灵活的用户界面为您提供 Appium 自动化服务器的强大功能。 它是几个 Appium 相关工具的组合:

    1. Appium Server 的图形界面。 您可以设置选项,启动/停止服务器,查看日志等...您也不需要使用 Node / NPM 来安装 Appium,因为 Node 运行时与 Appium Desktop 捆绑在一起。

    1. 您可以使用 Inspector 查看应用程序的元素,获取有关它们的基本信息,并与它们进行基本的交互。 这是学习 Appium 的一种方式,或者作为学习应用程序的一种方式,因此您可以为其编写测试。
    注意

    Appium Desktop 与 Appium 不同。 Appium Desktop 是 Appium 的图形前端,带有其他工具。 Appium Desktop 以其自己的节奏发布,并拥有自己的版本控制系统。
    就像国内很多定制的 Android 系统有自己版本号,但是都是基于一个 Android 系统版本封装的。版本号不一定与 Andriod 原生系统版本号一致。如:魅族的 flyme6.0 系统的内核是 Android 5.1

    Appium GUI

    Appium GUI 是 Appium desktop 的前身。
    这个也是把 Appium server 封装成了一个图形界面,降低使用门槛,如同最初的操作系统 Dos 都是敲命令,后面都是图形界面操作系统,如 Windows 系统。很多初学者对下面这个界面应该不陌生吧,这个就是 Windows 版本的 Appium GUI 界面。测试人员可以手动启动,配置相关 server 服务,如果不用这个启动的话,需要命令启动服务。因为大部分教程都是基于这个 GUI 来讲解的,所以很多人一说 Appium 就认为是这个。

    该产品的 Windows 版本在 2015 年的AppiumForWindows_1_4_16_1.zip之后就停止更新了。目前版本可以使用,但是封装的不是最新的 Appium 版本,而是 1.4.16 版本。如果要使用最新的桌面版需要使用Appium Desktop

    历史版本下载

    项目 github 地址

    Appium Clients

    因为 Appium 是一个 C/S 结构,有了服务端的肯定还有客户端,Appium Clients 就是客户端,它会给服务端 Appium Server 发送请求会话来执行自动化任务。就像我们浏览器访问网页,浏览器是客户端,通过操作发送请求服务器来获取数据。
    Appium 客户端可以使用不同的语言来实现,如 Python,java 等。具体详见下表:

    Language/Framework Github Repo and Installation Instructions
    Ruby https://github.com/appium/ruby_lib
    Python https://github.com/appium/python-client
    Java https://github.com/appium/java-client
    JavaScript (Node.js) https://github.com/admc/wd
    Objective C https://github.com/appium/selenium-objective-c
    PHP https://github.com/appium/php-client
    C# (.NET) https://github.com/appium/appium-dotnet-driver
    RobotFramework https://github.com/jollychang/robotframework-appiumlibrary
  • 离我们软件产业基地这边很近啊,你们那是海景办公室,我们这边除了百度大厦和腾讯大厦都看不到海了。。😂 😂

  • 好像就在那个航天大厦那边吧。

  • 先使用 driver.switch_to_alert() 跳转到弹窗,然后定位弹窗上面的元素进行点击操作。

  • 嗯,断言在用例里面还有一个好处就是生成的 html 报告对应的测试结果 Pass,Fail 会比较直观的展示,而放在 page 层就比较笼统,只有脚本运行出错才会显示对应报错信息。

  • ok,谢谢指点。😀

  • 嗯,这个得根据项目实际情况来处理。

  • 业务流程比较简单放 case 里面其实还是可以的,但是业务流程场景比较复杂的话放 case 有点不太方便。