Appium + python 元素定位

本文详细介绍了使用Appium进行移动应用测试时的各种元素定位方法,包括id、name、xpath等,并针对移动端特有的定位方式如accessibility_id进行了说明。
部署运行你感兴趣的模型镜像

element 定位,遇到元素属性不唯一,无法直接定位到元素,可能会导致程序报错
elements 定位,先定位一组元素,返回的是list对象,再通过下标( [index] )取出元素
driver.find_elements_by_id(‘com.xxx.xxx.test:id/image’)[3].click()*
在这里插入图片描述在这里插入图片描述在这里插入图片描述

常用的元素定位方法

id定位:resrouce-id属性是id
driver.find_element_by_id(‘username’)

name定位:text属性是name
driver.find_element_by_name(u’请输入用户名’)

xpath定位
driver.find_element_by_xpath()
https://blog.youkuaiyun.com/xgh1951/article/details/86216826
http://www.cnblogs.com/cnkemi/p/9180525.html

class_name定位: 一般一个页面上的class属性不唯一,元素不唯一的话定位会报错了
driver.find_element_by_class_name()

css 定位
driver.find_element_by_css_selector()

link定位
driver.find_element_by_link_text()

tag定位
driver.find_element_by_tag_name()

partial_link定位
driver.find_element_by_partial_link_text()

accessibility_id 定位
content-desc即是对应的 accessibility_id

android_uiautomator 定位
driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId(“username”)’).clear()
driver.find_element_by_accessibility_id(u"我的").click()

移动端 新增方法: accessibility_id 定位
driver.find_element_by_accessibility_id()

移动端 新增方法:Android
driver.find_element_by_android_uiautomator()

移动端 新增方法: ios
driver.find_element_by_ios_uiautomation()

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

编写使用 AppiumPython 的自动化测试脚本,需要遵循一套完整的指南,包括环境搭建、脚本编写、测试执行等步骤。以下是详细的编写指南: ### 环境搭建 在开始编写脚本之前,需要确保已经安装并配置好了 AppiumPython 的运行环境: - 安装 Python:确保你的系统中已经安装了 Python 3.x 版本。可以通过 Python 官方网站下载安装包。 - 安装 Appium:可以通过 npm 安装 Appium 服务器,命令为 `npm install -g appium`。 - 安装 Appium Python 客户端:通过 pip 安装 AppiumPython 库,命令为 `pip install Appium-Python-Client`。 - 配置设备环境:根据测试目标设备(Android 或 iOS)安装相应的 SDK 或 Xcode 工具链[^4]。 ### 初始化测试会话 Appium 测试脚本的核心是通过 WebDriver 启动一个会话,设备或模拟器进行交互。需要设置所需的 `desired capabilities`,这些参数描述了测试设备和应用的基本信息。例如: ```python from appium import webdriver desired_caps = { 'platformName': 'Android', 'deviceName': 'emulator-5554', 'appPackage': 'com.example.app', 'appActivity': '.MainActivity' } driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) ``` 在上述代码中,`platformName` 指定平台类型,`deviceName` 指定设备名称,`appPackage` 和 `appActivity` 指定被测应用的包名和启动 Activity[^1]。 ### 元素定位操作 编写自动化测试脚本的关键是定位 UI 元素并对其进行操作。Appium 支持多种元素定位方式,包括 `id`、`xpath`、`accessibility id` 等。例如: ```python # 使用 id 定位元素并点击 element = driver.find_element_by_id('com.example.app:id/button') element.click() # 使用 xpath 定位并输入文本 element = driver.find_element_by_xpath('//android.widget.EditText[@text="请输入用户名"]') element.send_keys('test_user') ``` 这些操作模拟了用户在移动应用上的交互行为,如点击、输入等[^3]。 ### 断言验证 自动化测试中需要对预期结果进行验证,可以使用 Python 的 `unittest` 或 `pytest` 框架进行断言操作。例如: ```python # 使用 unittest 框架进行断言 import unittest class TestExample(unittest.TestCase): def test_login(self): # 假设登录成功后会显示欢迎文本 welcome_text = driver.find_element_by_id('com.example.app:id/welcome').text self.assertEqual(welcome_text, '欢迎,test_user') if __name__ == '__main__': unittest.main() ``` 通过断言可以确保应用在测试过程中行为符合预期[^1]。 ### 测试结束清理 在测试脚本执行完毕后,需要关闭 Appium 会话并清理资源: ```python # 关闭会话 driver.quit() ``` 这一步确保设备资源被正确释放,避免影响后续测试任务[^2]。 ### 脚本优化维护 为了提高脚本的可维护性和复用性,可以采用以下策略: - 将 `desired capabilities` 抽象为配置文件。 - 使用 Page Object 模式组织页面元素和操作逻辑。 - 使用日志记录测试过程,便于调试和分析问题。 ### 示例代码 以下是一个完整的 Appium + Python 自动化测试脚本示例: ```python from appium import webdriver from selenium.webdriver.common.by import By import unittest import time class TestApp(unittest.TestCase): def setUp(self): desired_caps = { 'platformName': 'Android', 'deviceName': 'emulator-5554', 'appPackage': 'com.example.app', 'appActivity': '.MainActivity' } self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) def test_login(self): driver = self.driver # 点击登录按钮 login_button = driver.find_element(By.ID, 'com.example.app:id/login_button') login_button.click() time.sleep(1) # 输入用户名 username_field = driver.find_element(By.XPATH, '//android.widget.EditText[@text="用户名"]') username_field.send_keys('test_user') time.sleep(1) # 输入密码 password_field = driver.find_element(By.XPATH, '//android.widget.EditText[@text="密码"]') password_field.send_keys('123456') time.sleep(1) # 提交登录表单 submit_button = driver.find_element(By.ID, 'com.example.app:id/submit_button') submit_button.click() time.sleep(2) # 验证登录成功 welcome_text = driver.find_element(By.ID, 'com.example.app:id/welcome_text').text self.assertEqual(welcome_text, '欢迎,test_user') def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main() ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值