不定期更新、汇总。
一、环境与工具相关
1.环境搭建
需要同时安装python、pycharm、JDK、SDK、node以及appium这几个软件。
每安装一个软件都需要进行校验,确保安装无误。
最后,完成整体环境的验证
2.真机测试
- 手机通过数据线连接电脑
- 打开USB调试
- 打开调试授权
- 安装手机驱动程序
需要注意真机与模拟器的deviceName和platformVersion都是不同的,需要具体查看。
- adb devices 找设备号
- adb shell dumpsys activity activities | findstr mResume 获取报名和模块名
3.uiautomatorviewer报错
真机的安卓版本一般都比较高,使用uiautomatorviewer工具会有报错,需要替换几个文件
具体处理可见此链接
二、脚本编写相关
1.安装卸载APP
- 卸载APP:driver.remove_app(package包名)
- 安装APP:driverinstallapp(路径+安装包名)
2.在安装前先判断是否已安装,如果有执行一次卸载
is_app_installed
通过查找对应的包名
如果已经安装:true
def install(self):
if self.driver.is_app_installed("com.youdao.note"):
self.driver.remove_app("com.youdao.note")
self.driver.install_app("E:\youdaoyunbiji_84.apk")
3.三种等待方式:隐式等待、显示等待、强制等待
隐式等待:
implicitly_wait(10)
显示等待:
WebDriverWait(self.driver,10).until(lambda x:x.find_element_by_id("元素ID“))
强制等待:
time.sleep(5)
4.页面中有多个元素的处理方式
find_elements_by_class_name()[0]
5.元素的高级操作
通过调用TouchAcition进行调用,以perform结尾
例如调用long_press方法长按:
TouchAction(driver).long_press(el).perform().wait(3000)
6.判断一个元素是否存在
- 通过查找这个元素的长度实现,大于0即存在
num = self.driver.find_elements_by_id("hik.isee.smartbroadcast.app:id/ivRcVolume")
self.assertTrue(len(num)>0,"分区喊话测试失败")
查找这个元素是否存在
el =
driver.find_element_by_id("com.android.packageinstaller:id/permission_deny_button").is_enabled()
print(el)
if el:
print("安装成功")
return 1
else:
print("安装不成功")
return 0
7.手机的输入法如何切换
有些搜索框必须调用输入法的搜索(即回车)按钮,只用send_keys无法完成搜索,就需要用到切换输入法的方法。
1.通过os调用系统的adb命令实现切换
sougou=adb shell ime set com.sohu.inputmethod.sogou/.SogouIME
appium = 'adb shell ime set io.appium.settings/.UnicodeIME'
os.system(sougou)
2.完成输入后再切回appium输入法
os.system(appium)
#切换输入法输入
# 小米手机自带的搜狗输入法
sougou_xiaomi = 'adb shell ime set com.sohu.inputmethod.sogou.xiaomi/.SogouIME'
# 自己重新下载的搜狗输入法
sougou = 'adb shell ime set com.sohu.inputmethod.sogou/.SogouIME'
# appium默认输入法
appium = 'adb shell ime set io.appium.settings/.UnicodeIME'
#切换sougou输入法
os.system(sougou)
time.sleep(4)
self.driver.find_element_by_id("hik.isee.smartbroadcast.app:id/hui_searchbar_edittext").click() self.driver.find_element_by_id("hik.isee.smartbroadcast.app:id/hui_searchbar_edittext").send_keys("一次就好")
self.driver.press_keycode(66) # 66表示回车, 可百度Android keycode
time.sleep(2)
#切换回appium输入法
os.system(appium)
time.sleep(2)
8.启动appium时的设置
- caps['noReset'] = 'True'#以不重置方式启动
不设置这个默认以重置方式启动,数据啥的都没了,有一次用这个启动了一下微信。。。
- caps['newCommandTimeout'] = '10000'#appium连接超时时间
不设置这个,一段时间应用就自动关闭了
@classmethod
def setUpClass(self):
warnings.simplefilter("ignore",ResourceWarning)
caps={}
caps['platformName']='Android' #手机系统
caps['platformVersion']='12' #手机系统版本
caps['deviceName']="ca2bf77e" #手机的名字,不会进行校验,但是没有会报错
caps['automationName']='UiAutomator2'#自动化测试框架 (1.4以上的appium不用写)
caps['appPackage']='hik.isee.smartbroadcast.app'#app包名
caps['appActivity']='hik.isee.auth.ui.splash.SplashActivity t39449'#app的启动页面
caps['noReset'] = 'True'#以不重置方式启动
caps['newCommandTimeout'] = '10000'#appium连接超时时间
self.driver=WebDriver('http://127.0.0.1:4723/wd/hub',caps)
self.driver.implicitly_wait(5)