元素定位方法与隐式等待

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()

  

 
 
 
 

猜你喜欢

转载自www.cnblogs.com/zhaikunkun/p/12700342.html