Appium python 定位元素

本文详细介绍了使用Appium进行移动应用自动化测试的方法,包括定位策略、元素操作、等待机制及高级手势交互等关键技术点。

代码

https://github.com/iffy1/AppiumTest

定位方法 1.绝对路径(xpath,id,name, class name) 2.相对路径 3.坐标(比如视频全屏播放界面)

 

1.包含使用contains

driver.find_element_by_xpath("//*[contains(@text,'我发布的')]").click()

如果要定位下图中的返回键://class[contains(@元素,'元素名称')]

字符查找封装

def get_bottom_button(button_name):
    return "//android.widget.TextView[@text=\"%s\"]" % button_name

  driver.find_element_by_xpath(dc.get_bottom_button("闲鱼")).click()

 

driver.find_element_by_xpath("//android.widget.ImageButton[contains(@content-desc,'Navigate up')]")
 

2.准确查找

driver.find_element_by_xpath("//*[@content-desc='我的,未选中状态']").click()

子view查找

driver.find_element_by_xpath("//android.widget.ScrollView/child::android.view.View[5]"))

 

3.find_element找不到会报错,find_elements找不到的不会报错,返回空列表

zhuanmai_btn = 0
try:
    zhuanmai_btn = driver.find_element_by_xpath("//*[@content-desc='一键转卖']")
except:
    print('没找到一键转卖')

 

4.元素等待,隐式等待,显式等待

使用场景:网速/服务器慢

# 10秒只能找到aa就会直接执行,不会等到10秒
# 10秒还没知道会抛异常
#会影响后续所有find_element方法
driver.implicitly_wait(10) #全局有效 会影响所有的find语句
driver.find_element_by_name('aa')
driver.find_element_by_name('bb')

显式等待

# 25秒超时 每5秒找1次 单个有效
WebDriverWait(driver, 25, 5).until(lambda x: x.find_element_by_xpath("//*[@text ='iffy']"), '没找到').click()

不推荐写死时间,特殊场景例外

time.sleep()

 

5.元素API

element.click()点击

element.send_keys()写字

element.clear()清空

element.text 获取内容

element.location获取位置返回字典 xy

element.size获取大小 返回字典宽高

 

6.根据属性名获取属性值

network = driver.find_element_by_xpath("//*[@text ='Network & internet']")
print('clickable:' + network.get_attribute('clickable'))

C:\Python38\python.exe C:/PycharmProjects/AppiumTest/getProperty.py
clickable:false

 

7.滑动

swipe(x_start,y_start,x_end,y_end,duration) 相同距离滑动时间越短 滑动距离越大

scroll(element_start,element_end) 滑动距离不可控

drag_and_drop(element_start,element_end) 滑动距离比较靠谱

 

8.高级手势TouchAction

比如手机图形解锁

# 找到wlan按钮
wlan_btn = driver.find_element_by_xpath("//*[@text ='Network & internet']")
# 创建touch action对象
ta = TouchAction(driver)
# 想要执行的动作
ta = ta.tap(wlan_btn)
# 执行
ta.perform()

# 简写
TouchAction(driver).tap(wlan_btn).perform()


# count 多次点击
TouchAction(driver).tap(x=100, y=100, count=10).perform()

# 按下 抬起
TouchAction(driver).press(x=100, y=100).perform()
TouchAction(driver).press(x=100, y=100).release().perform()

# 按下后等待
TouchAction(driver).press(x=500, y=600).press().wait(100).release().perform()

# 长按
TouchAction(driver).long_press(x=500, y=600, duration=2000).release().perform()

def set_pattern_psw():
    print('画正方形')
    TouchAction(driver).press(x=100, y=100)\
        .move_to(x=100, y=200)\
        .move_to(x=200, y=200)\
        .move_to(x=200, y=100)\
        .move_to(x=100, y=100)\
        .perform()

 

9.其他API

# 获取分辨率 {'width': 1080, 'height': 1794}
print(driver.get_window_size())

# 420
print(driver.get_display_density())

# 截图
driver.get_screenshot_as_file(os.path.abspath("a.png"))

# 获取网络模式
"""
Possible
values:
Value(Alias) | Data | Wifi | Airplane
0(None)           | 0 | 0 | 0
1(AirplaneMode)   | 0 | 0 | 1
2(Wifionly)       | 0 | 1 | 0
4(Dataonly)       | 1 | 0 | 0
6(All network on) | 1 | 1 | 0
"""
print(driver.network_connection)
# 设置飞行模式
# driver.set_network_connection(4)
# driver.set_network_connection(ConnectionType.AIRPLANE_MODE)
try:
    driver.set_network_connection(1)
except Exception as e:
    print("截获异常"+e.args[0])

print(driver.network_connection)

# 模拟按键
# 音量+
driver.press_keycode(keycode=24)
# 音量-
driver.press_keycode(keycode=24)
# home
driver.press_keycode(keycode=3)

# 操作通知栏
driver.open_notifications()
time.sleep(2)
# 返回键
driver.press_keycode(keycode=4)

完结

https://www.bilibili.com/video/BV1B441197rZ?p=35

 

 

 

 

 

 

 

### Appium Inspector 定位元素时搜索框一直加载的解决方案 当遇到Appium Inspector定位元素时搜索框一直处于加载状态的情况,可能由多种因素引起。为了有效解决问题,可以从以下几个方面着手: #### 1. 检查环境配置 确保所有必要的组件都已正确设置并正常工作。这包括确认本地ADB已经成功连接至目标设备[^1]。 #### 2. 验证ATX服务冲突 如果之前安装过WEditor或其他依赖于ATX的服务,则需确保这些服务已被完全卸载或暂停使用,以免其占用UIAutomator2所需资源而导致问题发生。 #### 3. 更新至最新版本 考虑到新版本中的改进和支持功能增强,建议升级到最新的Appium及其附属工具(如Inspector)。现代版次通常提供了更好的稳定性和性能优化,同时也修复了许多旧版本中存在的缺陷[^2]。 #### 4. 调整Desired Capabilities参数 适当调整`desired capabilities`配置项可以帮助改善识别效率。对于Android平台而言,尝试指定更精确的能力选项,比如设置`automationName`为`UiAutomator2`,以及合理设定其他相关属性以适应具体应用场景的需求。 ```json { "platformName": "Android", "deviceName": "emulator-5554", "appPackage": "com.example.app", "appActivity": ".MainActivity", "automationName": "UiAutomator2" } ``` #### 5. 使用显式等待机制 引入显式的等待逻辑能够给予应用程序更多时间完成初始化过程,从而提高元素被正确定位的可能性。利用Python示例代码展示如何实现这一点[^3]: ```python from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, 'search_box_id')) ) ``` 以上措施综合运用后应能显著缓解乃至彻底消除Appium Inspector中搜索框持续加载的现象。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值