四茉帅、App控件定位

目錄

  • 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定位(不推薦)
  • 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控件交互,包括點擊徐许、輸入施蜜、獲取屬性。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雌隅,一起剝皮案震驚了整個濱河市翻默,隨后出現(xiàn)的幾起案子缸沃,更是在濱河造成了極大的恐慌,老刑警劉巖冰蘑,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件和泌,死亡現(xiàn)場離奇詭異,居然都是意外死亡祠肥,警方通過查閱死者的電腦和手機武氓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仇箱,“玉大人县恕,你說我怎么就攤上這事〖燎牛” “怎么了忠烛?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長权逗。 經(jīng)常有香客問我美尸,道長,這世上最難降的妖魔是什么斟薇? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任师坎,我火速辦了婚禮,結果婚禮上堪滨,老公的妹妹穿的比我還像新娘胯陋。我一直安慰自己,他們只是感情好袱箱,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布遏乔。 她就那樣靜靜地躺著,像睡著了一般发笔。 火紅的嫁衣襯著肌膚如雪盟萨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天了讨,我揣著相機與錄音捻激,去河邊找鬼。 笑死量蕊,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的艇挨。 我是一名探鬼主播残炮,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缩滨!你這毒婦竟也來了势就?” 一聲冷哼從身側響起泉瞻,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎苞冯,沒想到半個月后袖牙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡舅锄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年鞭达,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皇忿。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡畴蹭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鳍烁,到底是詐尸還是另有隱情叨襟,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布幔荒,位于F島的核電站糊闽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏爹梁。R本人自食惡果不足惜右犹,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卫键。 院中可真熱鬧傀履,春花似錦、人聲如沸莉炉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽絮宁。三九已至梆暮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绍昂,已是汗流浹背啦粹。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留窘游,地道東北人唠椭。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像忍饰,于是被迫代替她去往敵國和親贪嫂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容