1.测试用例的重要部分
1)导入依赖
from appium import webdriver
2)capabilities设置
3)初始化driver:
python webdriver.remote
4)隐式等待,增强用例的稳定性
5)元素定位与操作 find+action
6)断言assert
2.desirecapability介绍
git地址如下:
查看文档中的参数简单介绍如下:
android only就是只对android端app生效的配置
browserName:设置浏览器名字
newCommandTimeout:默认等待时间60s
uuid:测试多台设备的时候使用,把每一个设备设置成不同的
orientation:设置横竖屏展示
autoWebview:是否自动的去识别webview
fullreset与noreset完全相反
dontStopAppOnReset:每次运行期间都要启动app,这个参数可以让我们在app运行期间不对app进行关闭操作
skipDeviceInitialization:通过跳过参数的初始化,能够提升我们的运行速度,调试和运行期间,server端会往客户端安装一些应用或者是一些简单的设置,这些设置都会影响到运行的性能,通过跳过参数的初始化
ios only
bundleId:ios的唯一识别包名
noreset并不是复用原页面,而是比如启动页面的额时候有弹窗,关闭弹窗,可以使用该设置,重新启动的时候就不会弹出弹窗了,一定要注意⚠️
3.appium元素定位
如何进行定位呢,我们可以只设置"platformName": "android", "deviceName": "emulator-5554(adb devices命令中的设备名)”,用appium来运行模拟期或者手机,然后打开模拟器中的雪球app,刷新appium中的页面,就可以看到appium中的页面也会相应的打开雪app
定位工具
1) uiautomatorviewer:通过 which uiautomatorviewer查找是否安装了uiautomatorviewer
推荐使用,SDK路径下的工具
2)Appium inspector工具
使用方式
ZBMAC-C02N43Mfc:~ zhaitiantian$ uiautomatorviewer
获取页面时,(同样将模拟器中的页面映射到uiautomatorviewer上面)
对于手机来说它的坐标点由两个点来确定,一个左上角,一个右下角;对于手机来说左上角是它的(0,0)点,右下角是它的最大坐标点;对于元素也是一样的
因此第一个点代表了左上角,第二个点代表右下角
uiautomatorviewer不用像appium一样去设置,只需要点击获取页面元素就可以,如果有多台设备的时候,会弹出页面让用户选择哪个设备
其中左上角第二个按钮和第三个按钮的区别是: 第3个按钮层级更简单化了,是对整个dom的xml文件的压缩,它把一些没有必要的压缩下来了,如果页面很复杂的话会提升绘制页面的效率,它能把所有的元素都展示出来,只是层级更简单化了
4.隐士等待
5.如下以雪球app为例进行简单的用例代码编写如下:
from appium import webdriver from selenium.webdriver.support import expected_conditions from selenium.webdriver.support.wait import WebDriverWait desired_caps = {} desired_caps['platformName'] = 'Android' desired_caps['platformVersion'] = '6.0' desired_caps['deviceName'] = 'emulator-5554' desired_caps['appPackage'] = 'com.xueqiu.android' desired_caps['appActivity'] = 'com.xueqiu.android.common.MainActivity' desired_caps['noReset'] = 'true' desired_caps['dontStopAppOnReset'] = 'true' # 执行一条测试用例的时候可能不太明显,但是当执行上百条测试用例时,会对整体的自动化测试效率的提升 desired_caps['skipDeviceInitialization'] = 'true' driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) driver.implicitly_wait(10) # 通过id来定位 driver.find_element_by_id('com.xueqiu.android:id/tv_search').click() driver.find_element_by_id('com.xueqiu.android:id/search_input_text').send_keys('京东') # 为什么要引用两次back呢,因为手动输入搜索框内容后,点击返回,要点击两次才可以返回首页 driver.back() driver.back() driver.quit()