目录
- android/ios基础知识
- dom结构解读
- id、 aid、 xpath定位方法
- uiautomatorviewer定位工具使用
Android基础知识
Android是通过容器的布局属性来管理子控件的位置关系,布局过程就是把界面上的所有的控件根据他们的间距的大小,摆放在正确的位置
-
Android七大布局
- LinearLayout(线性布局),包括水平结构和竖直结构,开发过程中使用最多
- RelativeLayout(相对布局),首先定位第一个布局,然后根据第一个布局来定位第二个布局的间距和大小
- FrameLayout(帧布局),一般用在布局的最底层,从(0,0)点开始的布局结构,开发过程中用的也很多
- AbsoluteLayout(绝对布局),根据绝对坐标进行布局,一般不适用
- TableLayout(表格布局),将页面的表格、文字放在表格里面进行布局
- GridLayout(网格布局),与表格布局类似
- ConstraintLayout(约束布局)
-
Android四大组件
- activity:与用户交互的可视化界面,Android的每一个页面
- service:实现程序后台运行的解决方案
- content provider:内容提供者,提供程序所需要的数据
- broadcast receiver:广播接收器,监听外部事件的到来(比如来电),以一个页面或消息通知的形式发出
-
常用的控件:
- TextView(文本控件)
- EditText(可编辑文本控件)
- Button(按钮)
- ImageButton(图片按钮)
- ToggleButton(开关按钮)
- ImageView(图片控件)
- CheckBox(复选框控件)
- RadioButton(单选框控件)
-
布局
-
布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,从而编写出精美的界面。当然,布局的内部除了放置控件外,也可以放置布局,通过多层布局的嵌套,我们就能够完成一些比较复杂的界面。
image.png
-
ios基础知识
- iOS介绍
- 由苹果公司为iPhone开发的操作系统,主要给iPhone、iTouchi、Pad使用
- 原名为iPhoneOS、2010年WWDC大会改名为iOS
- 目前iOS最新版本是iOS14
- 布局
- iOS 去掉了布局的概念、直接用变量之间的相对关系完成位置的计算
- 开发环境
- 系统:MacOS x
- 开发工具:Xcode
- 开发语言:ObjectC
- 安装文件:.ipa文件/ .app文件
- 注意:
- 使用Appium测试iOS应用需要使用MacOS操作系统
元素定位
- 元素定位,实际上就是定位控件
- 要想一个脚本同时支持android / iOS两个系统,就得保证元素属性(id、aid、xpath等)一致
控件基础知识
-
dom: Document Object Model文档对象模型
- dom应用:最早应用于html和ljs的交互。用于表示界面的控件层级,界面的结构化描述,常见的格式为html、xml。核心元素为节点和属性
- xpath: xml路径语言,用于xml中的节点定位
Android应用的层级结构与html不一样,是一个定制的xml
app source类似于dom,表示app的层级,代表了界面里面所有的控件树的结构
每个控件都有它的属性(resourceid、xpath、aid),没有css属性
app dom例子
- node
- attribute
- clickable
- content-desc:使用accessibility_id定位
- resource-id
- text
- bounds
- iOS与Android的区别
- dom属性和节点结构类似
-
名字和属性的命名不同(比如: android resourceid , ios name , android content-des,ios accessibility-id)
image.png
定位方法
- 测试步骤三要素;
- 定位、交互、断言
- 定位方式:
- id定位
-
driver.find_element_by_id(resource-id属性值) -
driver.find_element(MobileBy.ID,"resource:id")accessibility _id定位 -
driver.find_element_by_accessibility_id(content-desc属性值) driver.find_element(MobileBy.ACCESSIBILITY_ID," content_desc:属性")
-
- xpath定位
-
driver.find_element_by_xpath(xpath属性值)
-
- classname定位(不推荐)
- id定位
- https:/ / www.freeformatter.com/xpath-tester.html #ad-output格式化xml
实战代码
import pytest
from appium import webdriver
class TestLocator:
def setup(self):
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '6.0'
desired_caps['deviceName'] = '127.0.0.1:7555'
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"
"""当要输入中文时需要以下两个参数"""
desired_caps['unicodeKeyBoard']='true'
desired_caps['resetKeyBoard']='true'
self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
# 隐式等待
self.driver.implicitly_wait(5)
def teardown(self):
# self.driver.back()
self.driver.quit()
def test_search(self):
"""
1.打开雪球app
2.点击搜索输入框
3.向搜索输入框里面输入"阿里巴巴"
4。在搜索结果里面选择"阿里巴巴",然后进行点击
5.获取阿里巴巴的股价,并判断这只股价的价格 > 200
"""
# 点击搜索框
self.driver.find_element_by_id("com.xueqiu.android:id/home_search").click()
# 输入搜索内容
self.driver.find_element_by_id("com.xueqiu.android:id/search_input_text").send_keys("阿里巴巴")
# 定位到第一个搜索结果
self.driver.find_element_by_xpath("//*[@resource-id='com.xueqiu.android:id/name' and @text='阿里巴巴").click()
# 获取到阿里巴巴股票的价格
current_price = float(self.driver.find_element_by_id("com. xueqiu.android:id/current_price").text)
assert current_price > 200
if __name__ == '__main__':
pytest.main()
定位工具
- uiautomatorviewer工具(only android)
- 推荐使用
- sdk路径下的工具
-
Appium inspector工具
image.png
下一节:App控件交互,包括点击、输入、获取属性。


