Appium自動化(9) - appium元素定位的快速入門

小菠蘿測試筆記發表於2020-05-20

如果你還想從頭學起Appium,可以看看這個系列的文章哦!

https://www.cnblogs.com/poloyy/category/1693896.html

 

快速入門栗子:boss直聘 app

環境要求:Android

栗子一:定位【自動化測試】

 程式碼

test = driver.find_element_by_class_name("android.widget.TextView")
print(test.text)

test = driver.find_element_by_xpath("//*[@resource-id='com.hpbr.bosszhipin:id/title_container']/android.widget.FrameLayout/android.widget.TextView")
print(test.text)

test = driver.find_element_by_xpath("//*[contains(@text,'自動化測試')]")
print(test.text)

輸出結果

自動化測試
自動化測試
自動化測試

 

栗子二:定位【附近】

程式碼

test = driver.find_element_by_id("com.hpbr.bosszhipin:id/tv_tab_label")
print(test.text)

test = driver.find_element_by_xpath("//*[@resource-id='com.hpbr.bosszhipin:id/tv_tab_label']")
print(test.text)

test = driver.find_element_by_xpath("//*[contains(@text,'附近')]")
print(test.text)

輸出結果

推薦
推薦
附近

為啥會有兩個推薦?

  • 很明顯因為【推薦、附近】兩個 tab 的 resource-id 都是一樣的,而 find_element_by 只返回第一個匹配到的元素
  • 這個時候可以將程式碼改成 find_elements_by 匹配多個元素,再根據索引去匹配【附近】
test = driver.find_elements_by_id("com.hpbr.bosszhipin:id/tv_tab_label")[1]
print(test.text)

test = driver.find_elements_by_xpath("//*[@resource-id='com.hpbr.bosszhipin:id/tv_tab_label']")[1]
print(test.text)

輸出結果

附近
附近

 

實戰慄子:完整的流程

  1. 進入boss app
  2. 點選右上角的放大鏡icon
  3. 點選輸入框
  4. 輸入“軟體測試”
  5. 點選第一個結果
  6. 列印第一屏的地區、工作經驗、學歷
#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
__title__  =
__Time__   = 2020-04-15 21:59
__Author__ = 小菠蘿測試筆記
__Blog__   = https://www.cnblogs.com/poloyy/
"""

# 導包
from appium import webdriver

# 準備自動化配置資訊
desired_caps = {
    # 移動裝置平臺
    'platformName': 'Android',
    # 平臺OS版本號,寫整數位即可
    'plathformVersion': '8',
    # 裝置的名稱--值可以隨便寫
    'deviceName': 'test0106',
    # 提供被測app的資訊-包名,入口資訊
    'appPackage': 'com.hpbr.bosszhipin',
    'appActivity': '.module.launcher.WelcomeActivity',
    # 如果被測應用沒有安裝到手機上,可以指定apk的在電腦上路徑
    # 'app':r'D:\apk\xxx.apk',
    # 確保自動化之後不重置app
    'noReset': True,
    # 設定session的超時時間,單位秒
    'newCommandTimeout': 6000,
    # 如果不想每次都安裝UI2驅動,可以這麼設定
    'skipServerInstallation': True
}

# 初始化driver物件-用於控制手機
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
driver.implicitly_wait(10)  # 穩定元素

# 點選放大鏡
driver.find_element_by_xpath('//*[@resource-id="com.hpbr.bosszhipin:id/ly_menu"]/android.widget.RelativeLayout[2]/.').click()

# 搜尋框輸入職位資訊
search_input = driver.find_element_by_id('com.hpbr.bosszhipin:id/et_search')
search_input.send_keys('軟體測試')  # 輸入引數

# 選擇符合條件的第一個搜尋結果
driver.find_element_by_id('com.hpbr.bosszhipin:id/tv_filtered_name').click()

# 獲取當前頁面所有職位資訊元素
job_msg = driver.find_elements_by_id('com.hpbr.bosszhipin:id/view_job_card')

for job in job_msg:
    # 輸出崗位名稱
    name = job.find_element_by_id('com.hpbr.bosszhipin:id/tv_position_name')
    # print(name.text)
    # 輸出薪資
    salray = job.find_element_by_id('com.hpbr.bosszhipin:id/tv_salary_statue')
    # print(salray.text)
    # 輸出公司名稱
    # 找到元素返回包含一個元素的列表,找不到就返回空列表
    company = job.find_elements_by_id('com.hpbr.bosszhipin:id/tv_company_name')
    # 避免螢幕遮擋了公司名,查到不到目標元素,設定一共預設值
    company_text = ''
    # 當找打company元素的時候,就使用該元素的文字
    if company:
        company_text = company[0].text

    print('%s|%s|%s' % (name.text, salray.text, company_text))

# 點選第一個搜尋結果
job_msg[0].click()

# 獲取職位名稱下面的資訊:地區、工作年限、學歷、工作性質
location = driver.find_element_by_id('tv_required_location').text

work_exp = driver.find_element_by_id('tv_required_work_exp').text

degree = driver.find_element_by_id('tv_required_degree').text

print(f'地區:{location}|工作經驗:{work_exp}|學歷:{degree}')

driver.quit()

輸出結果

 

相關文章