Menu:企业微信移动app测试实战(1)
adb devices #查看连接的手机设备
adb shell #进到手机系统
adb logcat #能够抓取到崩溃日志
adb shell dumpsys window|grep mCurrent #获取当前页面的包名和activity name
adb logcat |grep -i displayed #获取 app入口 packagename 和activityname #启动应用前经过的欢迎页、广告才进入首页
# -i 表示忽略大小写
adb logcat |grep -i 'activitymanager' #也可以获取 app入口的包名和页面名,有的时候使用上面的命令拿不到启动页面的名称,可以使用这个命令,此命令windows上 通过git bash来运行
aapt dump badging mobike.apk | grep launchable-activity #分析 apk包 获取包名和启动页名
adb install path/to/apk文件 #安装apk文件
#appium caps配置 #等待idle 设置时间为0 ,默认是等待10s ,设定完成后完成提速
caps['settings[waitForIdleTimeout]'] = 0
#windows:
将上面的命令中 grep 换成 findstr
#通过命令行方式来验证获取的包名和启动页名称是否正确
启动应用:
#该命令行通过appium server获取得到
adb shell am start -W -n <package-name> <activity-name> -S #命令行方式启动应用,通过这种方式来验证包名和启动页名字是否正确
#adb shell am start -W -n com.tencent.wework/.launch.LaunchSplashActivity
企业微信实战1-企业微信自动打卡
打卡用例
前提条件:
已登录状态(noRest=True)
打卡用例:
1.打开【企业微信】应用
2.等待直到进入主页
3.点击下方导航栏中的【工作台】进入到工作台界面
4.在页面上查找【打卡】标签,点击打卡,进入到打卡页面
5.切换到【外出打卡】tap
6.点击【第X次外出】,验证外出打卡成功
实现滑动效果
1.touch_action , 根据手机屏幕宽度、高度 来滑动一定位置
2.移动端xml文件 滚动查找元素
移动端xml文件 滚动查找元素
# 滚动查找 "打卡" 元素
self.driver.find_element(
MobileBy.ANDROID_UIAUTOMATOR,'new UiScrollable'
'(new UiSelector().'
'scrollable(true).'
'instance(0)).'
'scrollIntoView('
'new UiSelector().'
'text("打卡").instance(0));').click()
"""
企业微信实战1-企业微信自动打卡
打卡用例
前提条件:
已登录状态(noRest=True)
打卡用例:
1.打开【企业微信】应用
2.等待直到进入主页
3.点击下方导航栏中的【工作台】进入到工作台界面
4.在页面上查找【打卡】标签,点击打卡,进入到打卡页面
5.切换到【外出打卡】tap
6.点击【第X次外出】,验证外出打卡成功
"""
#!/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
# appium-python-client 客户端脚本
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy
"""
改造1:pytest
"""
class TestWeChat:
def setup(self):
caps = {}
caps["platformName"] = "android"
caps["deviceName"] = "emulator-5554"
caps["appPackage"] = "com.tencent.wework"
caps["appActivity"] = ".launch.LaunchSplashActivity"
caps["noReset"] = "true"
caps["noReset"] = "true"
caps['skipServerInstallation'] = 'true' # 跳过 uiautomator2 server的安装
caps['skipDeviceInitialization'] = 'true' # 跳过设备初始化
# caps['dontStopAppOnReset'] = 'true' # 启动之前不停止app
caps['settings[waitForIdleTimeout]'] = 0
# 与server 建立连接,初始化一个driver 创建session,返回一个sessionid
self.driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
self.driver.implicitly_wait(10)
"""打卡功能
"""
def test_daka(self):
# 步骤1:点击工作台
# el1 = self.driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.view.ViewGroup/android.widget.RelativeLayout[3]/android.widget.TextView")
el1 = self.driver.find_element(MobileBy.XPATH,
"//*[@text='工作台']")
el1.click()
# 滚动查找 "打卡" 元素
self.driver.find_element(
MobileBy.ANDROID_UIAUTOMATOR,'new UiScrollable'
'(new UiSelector().'
'scrollable(true).'
'instance(0)).'
'scrollIntoView('
'new UiSelector().'
'text("打卡").instance(0));').click()
# el2 = 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[2]/android.widget.RelativeLayout/android.view.ViewGroup/android.support.v7.widget.RecyclerView/android.widget.RelativeLayout[10]/android.widget.LinearLayout/android.widget.TextView")
# el3 = self.driver.find_element_by_id("com.tencent.wework:id/gcx")
# 点击"外出打卡"
el3 = self.driver.find_element(MobileBy.ID, "com.tencent.wework:id/gcx")
el3.click()
# 点击第N次外出打卡
self.driver.find_element(MobileBy.XPATH,
"//*[contains(@text, '次外出')]").click()
# 验证打卡成功
result = self.driver.find_element(MobileBy.ID,
'com.tencent.wework:id/mk').text
assert '打卡成功' in result
def teardown(self):
# 消毁session
self.driver.quit()
是否在每个测试步骤都需要加上断言?
1、测试用例编写过程中的中间步骤,执行过程当中一般不需要加断言,除非中间操作过程当中要加入一些数据的验证,toast验证,等等。
2、最后的一行代码,要加入断言作为验证这条用例的真正结果。