千家信息网

Appium常用操作之元素定位、swipe滑屏的操作方法是什么

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,本篇内容介绍了"Appium常用操作之元素定位、swipe滑屏的操作方法是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家
千家信息网最后更新 2026年11月04日Appium常用操作之元素定位、swipe滑屏的操作方法是什么

本篇内容介绍了"Appium常用操作之元素定位、swipe滑屏的操作方法是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、打开 uiautomatorviewer

用这个工具来给大家定位:

实现一个截屏(通常情况下这样用,可以截屏成功)。

二、Appium 常用操作

1.用 layui 做 app 元素定位的时候会报错怎么办?

建议不用 layui。layui 在有些情况下定位元素是有问题的。在环境基本上是正确的情况下,它截图截不到。所以可以舍弃 layui,直接用自带的 uiautomatorviewer(现在拥有的定位方式,它全部都支持)。

2.不等待,直接去找这个元素会报错吗?

和 Web 自动化一样,Appium 执行这个命令也是需要时间的。这一行代码,是进入到 app 当中,app 在这个过程中做一件事(一堆的东西),所以即便你运行的这只有这一行代码,它做的事比较多。

感觉上比 Web 等待的时间要长,但是如果你是用真机的话比用模拟器快。

所以这个之前需要等待一下。在 Web 自动化等待的时候用的是这个WebDriverWait以及EC条件表达。在这里也是一样,因为都是要页面等待元素出现,等待元素可见。

3.如果是 Web 自动化,会 import By,在 Appium 中 MobileBy 有 8 种定位方式。如果现在还用 By,就没办法用到 uiautomator 以及 accessibility_id。

所以在移动端当中代码:

from selenium.webdriver.common.by import By

要改成:

from appium.webdriver.common.mobileby import MobileBy

再也不需要用By了,By有的id、class,它都有的。所以,在这个地方要等到这个id出现,那就是:

WebDriverWait(driver,20).until(EC.visibility_of_element_located((MobileBy.ID,'com.huyu.yuncaidian:id/id_text')))

这个是打开 app 之后一定要做的等待工作。

4.如果是欢迎页面,没有这种元素怎么办?

如果默认进入的就是欢迎界面,要我们左滑右滑的这种,那就sleep,因为你没有可识别的元素。

通过 Activity 的名字来识别没有用,因为它也叫 Activity。

可以找到,但是不代表这个东西出来了。

如果有明确元素的时候,就不要用time.sleep了。就等到元素出现,再去操作元素。

这个元素定位和 Web 元素定位一样的,有多种方式。

安卓和 ios 的手机屏幕有大小的限制,所以一个页面当中元素不会太多,也不会很密密麻麻。因为它需要你不但要能看得清楚还能用手点得着。所以它会做的格局上面内容偏少,间距也会比较大。

点击"我的"后,页面内容切换。页面内容切换,你就要等,它也是要加载时间的。

三、打开 app 并登录

#  某app 2.9.0准环境
from appium import webdriver
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from appium.webdriver.common.mobileby import MobileBy

desired_caps={}
# 平台类型
desired_caps["platformName"]="Android"
# 平台版本号
desired_caps["platformVersion"]="7.0"
# 设备名称
desired_caps["deviceName"]="XPUDU17713003790"
# app 包名
desired_caps["appPackage"]="保密"
# app 入口 acitivity
desired_caps["appActivity"]="保密"

# 连接Appium server。前提:appium desktop要启动。有监听端口。
# 将desired_caps发送给appium server。打开app
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)

# 运行代码之前:
#1.appium server启动成功。处于监听状态
#2.模拟器/真机必须能够被电脑识别。即adb devices能够识别到要操作的设备。


# 点击"我的"
time.sleep(5)
# 元素定位-组合定位方式
driver.find_element_by_xpath("//*[@resource-id='com.tfffc.cf:id/id_text' and @text='我的']").click()

#点击手机密码登录
WebDriverWait(driver,20).until(EC.visibility_of_element_located((MobileBy.ID,'com.tfffc.cf:id/tv_phone_passwad')))
driver.find_element_by_id('com.tfffc.cf:id/tv_phone_passwad').click()

#输入用户名、密码、点击登录按钮
WebDriverWait(driver,20).until(EC.visibility_of_element_located((MobileBy.ID,'com.tfffc.cf:id/editview_phone')))
driver.find_element_by_id('com.tfffc.cf:id/editview_phone').send_keys('输入手机号')
driver.find_element_by_id('com.tfffc.cf:id/editview_phone_password').send_keys('输入密码')
driver.find_element_by_id('com.tfffc.cf:id/phone_password_login').click()

四、移动端特有的操作

1.swipe 滑屏操作

Appium 的swipe函数是针对屏幕上的坐标来滑动的。swipe函数是安卓和 IOS 两种设备同时通用。

从一个点滑到另外一个点,那么每个点都有 x 值和 y 值。swipe有 4 个参数。所以起始 x,起始 y,结束 x,结束 y。

2.如果写一个操作,所有的手机都能适用,是不是应该考虑屏幕的尺寸呢?

手机有 5 寸、4.4 寸、5.7 寸的。分辨率是 1280x700,所以它最大的坐标点就是 1280x700。不同的安卓厂商、不同的大小,它的分辨率都不一样,它的坐标值是绝对不一样的。

这个怎么办?怎么兼容下这个特征比较好?

不需要针对每个版型的手机写一段代码,全部通用。

「用坐标有个缺陷:可能适用于某一种手机,换个手机就不行了,因为坐标值对不上。」

3.有没有什么办法可以获取整个设备的尺寸大小?

直接获取下它的宽和高是多少。针对屏幕上的某个坐标点来滑动的,又不是针对某一个元素。整屏滑动就是左滑右滑,上滑下滑。

设置下滑动的百分比,如果滑动40%-50%,感觉根本滑动不过去。如果能够获取到整屏的大小,按百分比来滑动,滑动的距离在70%-90%,那肯定就能滑过去了。

根据每个手机的 x 轴和 y 轴,确定它的滑屏百分比,那随便什么样的手机都是可以滑屏的。所以在实现这个滑屏的时候,首先获取屏幕的size。

4.屏幕的 size 怎么获取呢?

有个专门的函数:

get_window_size 返回窗口的宽和高。

get_window_size()这个函数的返回值:

返回的是个字典。

5.这个东西想一口气把它滑过来,不能出现滑动到半路上又回去了。如果我要从右边滑到左边,起点和终点怎么选?

swipe有 2 个坐标点,首先要得到start_x。

x 轴是width。size['width']是 x 轴的最大值。

「所有人的使用习惯:」 滑屏都是在正中间滑屏或者稍微偏下一点。从一个页面滑动到另外一个页面,y 轴没有变化。

所以 y 值是固定的,就取个中间值 0.5:
#height、width
size= driver.get_window_size()
start_x=size['width']*0.9
start_y=size['height']*0.5
滑动的间距最好是达到 80%以上,这样写,间距就是 0.8 了:
#height、width
size= driver.get_window_size()
start_x=size['width']*0.9
start_y=size['height']*0.5

end_x=size["width"]*0.1

swipe还有个参数叫做duration(时长),这个单位是毫秒。

6.准备花多长时间去滑动呢?

看过手机的操作,如果滑动的太快了,根本没有效果。有的时候滑动的太快了,它还没来得及响应就结束了。所以可以设置下duration(时长),放缓一点呢,相对来说更稳定些。

向上向下滑动的时候,start_x 是?

上下滑动,x 轴不变,x 轴同样取中间值。但是 y 轴从下往上,值越来越小。

这个可以把它封装起来,以后需要的时候直接调用就好了,随便什么设备都是一样的。如果webdriver中有些方法标明了仅仅是 ios 或者安卓,那就只能在对应的平台上使用。

如果一个函数并没有说明,那么就是大家一起用的,不分彼此。

#height、width
size= driver.get_window_size()
start_x=size['width']*0.9
start_y=size['height']*0.5

end_x=size["width"]*0.1
end_y=size['height']*0.5
#从右向左滑
driver.swipe(start_x,start_y,end_x,end_y,200)
#从左向右滑
driver.swipe(end_x,end_y,start_x,start_y,200)

#向下滑动
#向上滑动:x轴不变,y从大到小
driver.swipe(size["width"]*0.5,size["heigth"]*0.9,size["width"]*0.5,size["heigth"]*0.1)
#向上滑动:x轴不变,y从小到大
driver.swipe(size["width"]*0.5,size["heigth"]*0.1,size["width"]*0.5,size["heigth"]*0.9)

"Appium常用操作之元素定位、swipe滑屏的操作方法是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

元素 定位 手机 时候 页面 就是 屏幕 代码 内容 函数 设备 大小 情况 方式 时间 安卓 常用 方法 东西 密码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网金融科技 广东猪兼强互联网科技有限公司 新华互联网科技学院 互联网科技卖菜 紫鲸互联网科技 天津摩尔互联网科技 科技互联网创业计划书 互联网科技创新企业排名 江苏南京365互联网科技 以后互联网后是啥科技 金融科技与互联网金融相同和不同 未来五年的互联网科技 滨湖区互联网智能科技产品有哪些 上海京穆互联网科技有限公司 黑云互联网科技有限公司 世界互联网科技成果奖 北京军民互联网科技公司 北京品多多互联网科技有限公司 平安好医生打造互联网科技医疗 恒生科技互联网指数十大成分股 百单网互联网科技有限公司怎么样 科技股互联网 深圳卡尔迅互联网科技有限公司怎么样 滨湖区互联网智能科技产品供应 云创客互联网科技公司 链环科技传统企业怎么转型互联网 互联网科技包装股 江苏互联网智能科技产品出厂价 容联科技互联网电商 10位科技互联网大佬
0