appium+python实现手机自动化测试相关知识点及问题

不定期更新、汇总。

一、环境与工具相关

1.环境搭建

需要同时安装python、pycharm、JDK、SDK、node以及appium这几个软件。

每安装一个软件都需要进行校验,确保安装无误。

 

 最后,完成整体环境的验证

 2.真机测试

  1. 手机通过数据线连接电脑
  2. 打开USB调试
  3. 打开调试授权
  4. 安装手机驱动程序

 需要注意真机与模拟器的deviceName和platformVersion都是不同的,需要具体查看。

  1. adb devices 找设备号
  2. 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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值