标题
App 企业微信实战(一)
课程价值
- 了解 Appium 框架介绍
- 了解 Appium 环境
- 掌握 Appium Inspector 工具
- 掌握 Appium 的元素定位技巧,编写自动化测试用例。
大纲
- Appium 框架介绍
- Appium 环境
- Appium Inspector 工具介绍
- 企业微信实战1 - 企业微信添加联系人
时长
90分钟
PPT
https://pdf.ceshiren.com/lg3/Appium安装与录制
脚本编写
应用
环境搭建
- Android 环境配置:Appium 环境搭建( windows 版本 | Mac版本)
- iOS 环境配置:IOS自动化配置
- 下载地址:https://github.com/appium/appium-desktop/releases
- 内部下载地址:http://download.testing-studio.com/
appium server
两种安装方式:
- appium desktop
- appium 命令行版本
- 安装 Nodejs,推荐 LTS 稳定版本
- 安装 Appium
- 官方文档的安装方式(基本安装不上):
- npm install -g appium
- 淘宝cnpm (最稳定的方法)
- npm install -g cnpm --registry=https://registry.npm.taobao.org
- cnpm install -g appium
- 官方文档的安装方式(基本安装不上):
获取 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
- 1、通过logcat 日志获取
- 启动应用
- 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 定位
- xpath w3c
- xpath表达式常用用法:
- not 、contains、ends_with、starts_with
- and 、or
代码参考
#!/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
作业
编写删除联系人用例