Appium自动化(9) - appium元素定位的快速入门
如果你还想从头学起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()
输出结果