【拉勾三期课程贴】 App 企业微信实战(一)

标题

App 企业微信实战(一)

课程价值

  • 了解 Appium 框架介绍
  • 了解 Appium 环境
  • 掌握 Appium Inspector 工具
  • 掌握 Appium 的元素定位技巧,编写自动化测试用例。

大纲

  • Appium 框架介绍
  • Appium 环境
  • Appium Inspector 工具介绍
  • 企业微信实战1 - 企业微信添加联系人

时长

90分钟

PPT

https://pdf.ceshiren.com/lg3/Appium安装与录制

脚本编写

应用

环境搭建

appium server

两种安装方式:

  • appium desktop
  • appium 命令行版本
  • 安装 Nodejs,推荐 LTS 稳定版本
  • 安装 Appium
    • 官方文档的安装方式(基本安装不上):
      • npm install -g appium
    • 淘宝cnpm (最稳定的方法)

获取 app 的信息

  • app入口,两种方式获取
    • 1、通过logcat 日志获取
      • mac/Linux: adb logcat |grep -i ActivityManager
      • windows: adb logcat |findstr /i ActivityManager
    • 2、通过aapt获取
      • aapt dump badging wework.apk | grep launchable-activity
  • 启动应用
    • adb shell am start -W -n / -S

应用下载与安装

  • 下载方式:
    1、应用中心
    2、公司提供
    3、应用宝等第三方应用商店

  • 安装方式:
    1、直接拖拽到手机
    2、adb install 或者 adb install -r(覆盖安装)

appium inspector

  • 配置:

企业微信一定要加noReset=true,否则会把登录信息清掉。需要重新登录。

{
  "platformName": "android",
  "deviceName": "emulator-5554",
  "appPackage": "com.tencent.wework",
  "appActivity": ".launch.LaunchSplashActivity",
  "noReset": "true"
}

元素定位

Xpath 定位

代码参考


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# This sample code uses the Appium python client
# pip install Appium-Python-Client
# Then you can paste this into a file and simply run with Python
# pip install appium-python-client 里面提供的api
from time import sleep

from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy


class TestDemo:
    def setup(self):
        caps = {}
        caps["platformName"] = "android"
        caps["deviceName"] = "hogwarts"
        caps["appPackage"] = "com.tencent.wework"
        caps["appActivity"] = ".launch.LaunchSplashActivity"
        caps["noReset"] = "true"

        self.driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
        # 隐式等待
        self.driver.implicitly_wait(5)

    def teardown(self):
        self.driver.quit()

    def test_sendmess(self):
        el1 = self.driver.find_element_by_id("com.tencent.wework:id/gq_")
        el1.click()
        el2 = self.driver.find_element_by_id("com.tencent.wework:id/ffq")
        el2.send_keys("西西")
        el3 = self.driver.find_element_by_xpath(
            "/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.FrameLayout/android.widget.ListView/android.widget.RelativeLayout[2]/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.view.ViewGroup/android.widget.TextView")
        el3.click()
        el4 = self.driver.find_element_by_id("com.tencent.wework:id/dtv")
        el4.send_keys("helloappium")
        el5 = self.driver.find_element_by_id("com.tencent.wework:id/dtr")
        el5.click()

    def test_addcontact(self):
        '''
        企业微信:添加联系人测试用例
        前提条件
            已登录状态( noReset=True)
        打卡用例:
            1、打开【企业微信】应用
            2、进入【通讯录】
            3、点击【添加成员】
            4、在添加成员页面点击【手动输入添加】
            5、输入【姓名】【性别】【手机号】
            6、点击【保存】
            7、验证保存成功
        '''
        name = "霍格沃兹02"
        gender = '男'
        phonenum = "13900000002"

        self.driver.find_element(MobileBy.XPATH, "//*[@text='通讯录']").click()
        self.driver.find_element(MobileBy.XPATH, "//*[@text='添加成员']").click()
        self.driver.find_element(MobileBy.XPATH, "//*[@text='手动输入添加']").click()
        self.driver.find_element(MobileBy.XPATH, '//*[contains(@text, "姓名")]/../android.widget.EditText').send_keys(name)
        self.driver.find_element(MobileBy.XPATH, "//*[@text='男']").click()
        if gender == '男':
            self.driver.find_element(MobileBy.XPATH, "//*[@text='男']").click()
        else:
            self.driver.find_element(MobileBy.XPATH, "//*[@text='女']").click()

        self.driver.find_element(MobileBy.ID, "com.tencent.wework:id/emh").send_keys(phonenum)
        self.driver.find_element(MobileBy.ID, "com.tencent.wework:id/gq7").click()
        # sleep(2)
        # toast 弹框,打印当前页面的布局结构 ,xml 结构
        # print(self.driver.page_source)
        toasttext = self.driver.find_element(MobileBy.XPATH, "//*[@class='android.widget.Toast']").text
        assert '添加成功' == toasttext

作业

编写删除联系人用例

课后反馈

https://github.com/JuliaZxr/hogwarts_lg3_Yuki.git

写的不错。
这种用例最好多加一些注释,否则别人维护的话不清楚每一步是在做什么操作。

https://github.com/creamk87/test_develop

APP自动化测试作业1:
https://github.com/Hurt12138/Hurt.git

https://github.com/realtalk1007/hogwarts/tree/master/appium_weixin

1 个赞

https://github.com/endeavor-hxs/test_prac/tree/master/test_appium

https://github.com/niujiama/LilyGithub.git
说明:

  1. 在删除用户前,先调用了之前的添加用户方法
  2. 判断用户是否删除时,是通过读取通讯录页面中的“共X人,Y人未加入”,X前后的数据变化。用这个数据的问题,在于效率比较低,因为删除后要等6、7秒后才能看到值的变化,所以手动增加了sleep(8)。
    如果老师有更好的方法,求指导!

作业完成的不错。
有个问题,你这里的删除按钮能点到么?

作业做的不错。
待优化:
1、最好不要在一条测试用例里面去调用另一条用例。如果一定存在依赖,可以适当的加上顺序控制,或者依赖关系控制
2、删除可以在右上角的搜索栏里去搜索,如果 不存在 这个联系了,就说明删除成功了。
3、还有强制等待方式不建议使用这么长时间 ,有可能在不同设备上这个时长也是不一样的,跟手机响应速度,网络速度都有关系 ,最好使用隐式等待实现这个功能。

作业完成的思路不错,定位应用的也不错。

等改进:
1、最后删除成功需要加入验证点,否则 用例是不够完整的。

完成思路非常不错。元素应用的也比较灵活。

待改进:
1、teardown() 方法里面加入 driver 销毁操作
2、如果有 id 可以直接用 find_element_by_id ,用find_element_by_xpath 速度要慢一些。

可以的,我也奇怪

https://github.com/Vena-ww/MyPythonTest/tree/master/Python_test1/appium_test

appium作业 删除联系人并验证
https://github.com/Galaxyfanfan/HogwartsAppiumCode/tree/master/WeChatAppium

https://github.com/jijiangyongyou/win_happy/tree/master/xuexi_appium

https://github.com/a18280102190/Test_two.git

https://github.com/qblslion/qccatni/tree/master/python_practice/python_commit_7_app1

https://github.com/z1069867141/hogwarts_lg

  • 企业微信app删除联系人
    支持循环删除同一姓名,最后使用搜索功能断言是否删除成功(bug:部门和用户还没法区分)

https://github.com/LiJiaLin29/hogwarts