目錄
- android/ios基礎知識
- dom結構解讀
- id今魔、 aid增热、 xpath定位方法
- uiautomatorviewer定位工具使用
Android基礎知識
Android是通過容器的布局屬性來管理子控件的位置關系,布局過程就是把界面上的所有的控件根據(jù)他們的間距的大小滔驾,擺放在正確的位置
-
Android七大布局
- LinearLayout(線性布局)柜与,包括水平結構和豎直結構,開發(fā)過程中使用最多
- RelativeLayout(相對布局)嵌灰,首先定位第一個布局,然后根據(jù)第一個布局來定位第二個布局的間距和大小
- FrameLayout(幀布局)颅悉,一般用在布局的最底層沽瞭,從(0,0)點開始的布局結構,開發(fā)過程中用的也很多
- AbsoluteLayout(絕對布局)剩瓶,根據(jù)絕對坐標進行布局驹溃,一般不適用
- TableLayout(表格布局),將頁面的表格延曙、文字放在表格里面進行布局
- GridLayout(網(wǎng)格布局)豌鹤,與表格布局類似
- ConstraintLayout(約束布局)
-
Android四大組件
- activity:與用戶交互的可視化界面,Android的每一個頁面
- service:實現(xiàn)程序后臺運行的解決方案
- content provider:內(nèi)容提供者枝缔,提供程序所需要的數(shù)據(jù)
- broadcast receiver:廣播接收器布疙,監(jiān)聽外部事件的到來(比如來電)蚊惯,以一個頁面或消息通知的形式發(fā)出
-
常用的控件:
- TextView(文本控件)
- EditText(可編輯文本控件)
- Button(按鈕)
- ImageButton(圖片按鈕)
- ToggleButton(開關按鈕)
- ImageView(圖片控件)
- CheckBox(復選框控件)
- RadioButton(單選框控件)
-
布局
-
布局是一種可用于放置很多控件的容器,它可以按照一定的規(guī)律調(diào)整內(nèi)部控件的位置灵临,從而編寫出精美的界面截型。當然,布局的內(nèi)部除了放置控件外儒溉,也可以放置布局宦焦,通過多層布局的嵌套,我們就能夠完成一些比較復雜的界面顿涣。
image.png
-
ios基礎知識
- iOS介紹
- 由蘋果公司為iPhone開發(fā)的操作系統(tǒng)波闹,主要給iPhone、iTouchi涛碑、Pad使用
- 原名為iPhoneOS精堕、2010年WWDC大會改名為iOS
- 目前iOS最新版本是iOS14
- 布局
- iOS 去掉了布局的概念、直接用變量之間的相對關系完成位置的計算
- 開發(fā)環(huán)境
- 系統(tǒng):MacOS x
- 開發(fā)工具:Xcode
- 開發(fā)語言:ObjectC
- 安裝文件:.ipa文件/ .app文件
- 注意:
- 使用Appium測試iOS應用需要使用MacOS操作系統(tǒng)
元素定位
- 元素定位锌唾,實際上就是定位控件
- 要想一個腳本同時支持android / iOS兩個系統(tǒng)锄码,就得保證元素屬性(id、aid晌涕、xpath等)一致
控件基礎知識
-
dom: Document Object Model文檔對象模型
- dom應用:最早應用于html和ljs的交互滋捶。用于表示界面的控件層級,界面的結構化描述余黎,常見的格式為html重窟、xml。核心元素為節(jié)點和屬性
- xpath: xml路徑語言惧财,用于xml中的節(jié)點定位
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的區(qū)別
- dom屬性和節(jié)點結構類似
-
名字和屬性的命名不同(比如: 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
實戰(zhàn)代碼
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"
"""當要輸入中文時需要以下兩個參數(shù)"""
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()
# 輸入搜索內(nèi)容
self.driver.find_element_by_id("com.xueqiu.android:id/search_input_text").send_keys("阿里巴巴")
# 定位到第一個搜索結果
self.driver.find_element_by_xpath("http://*[@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
下一節(jié):App控件交互,包括點擊徐许、輸入施蜜、獲取屬性。