如果你還想從頭學起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)
輸出結果
附近
附近
實戰慄子:完整的流程
- 進入boss app
- 點選右上角的放大鏡icon
- 點選輸入框
- 輸入“軟體測試”
- 點選第一個結果
- 列印第一屏的地區、工作經驗、學歷
#!/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()
輸出結果