首页 > 其他分享 >Appium系列之元素操作

Appium系列之元素操作

时间:2022-08-17 23:22:57浏览次数:45  
标签:Appium 系列 int 元素 driver press context touch KEYCODE

元素操作

  • click()
#点击操作也可以用tab实现点击操作
driver.find_element_by_id("com.wuba.zhuanzhuan:id/ae8").click()
  • clear()
#清空输入框内容
driver.find_element_by_id("com.wuba.zhuanzhuan:id/ij").clear()
  • send(xx)
#输入框内输入内容
driver.find_element_by_id("com.wuba.zhuanzhuan:id/ij").send_keys("test content")
  • text
#获得元素的text内容
print(driver.find_element_by_xpath(" //android.widget.LinearLayout[1]//xxx").text)
  • size 获取元素大小
  • get_attribute 获取元素属性
  • set_value 设置值
  • location 获取元素位置

触摸操作

前提需要先是实例化

from appium.webdriver.common.touch_action import TouchAction
touch = TouchAction(driver)
  • tap
# 点击
ele = driver.find_element(AppiumBy.ID, "com.zhao.myreader:id/iv_search")
touch.tap(ele)
touch.perform()
  • press
# 按住不放
ele = driver.find_element(AppiumBy.ID, "com.zhao.myreader:id/iv_search")
touch.press(ele)
touch.perform()
  • release
# 释放
ele = driver.find_element(AppiumBy.ID, "com.zhao.myreader:id/iv_search")
touch.press(ele).release()
touch.perform()
  • move_to
# 先按住一个元素,移动到一个地方
touch.press(x=55, y=1100)
touch.wait(ms=100)  # 毫秒
touch.move_to(x=900, y=1100)  # 移动
touch.release()
  • long_press
# 长按包含释放操作
ele2 = driver.find_element(AppiumBy.ACCESSIBILITY_ID, "读书屋")
touch.long_press(ele2)  # 长按和按下 不是一个意思;长按是包含了释放的
  • swipe
#获得屏幕大小宽和高
def getSize(driver):
    x = driver.get_window_size()['width']
    y = driver.get_window_size()['height']
    return (x, y)
#屏幕向上滑动
def swipeUp(driver,t=1000):
    l = getSize(driver)
    x1 = int(l[0] * 0.5)    #x坐标
    y1 = int(l[1] * 0.75)   #起始y坐标
    y2 = int(l[1] * 0.25)   #终点y坐标
    driver.swipe(x1, y1, x1, y2,t)
#屏幕向下滑动
def swipeDown(driver,t=1000):
    l = getSize(driver)
    x1 = int(l[0] * 0.5)  #x坐标
    y1 = int(l[1] * 0.25)   #起始y坐标
    y2 = int(l[1] * 0.75)   #终点y坐标
    driver.swipe(x1, y1, x1, y2,t)
#屏幕向左滑动
def swipLeft(driver,t):
    l=getSize(driver)
    x1=int(l[0]*0.75)
    y1=int(l[1]*0.5)
    x2=int(l[0]*0.05)
    driver.swipe(x1,y1,x2,y1,t)
#屏幕向右滑动
def swipRight(driver,t=1000):
    l=getSize(driver)
    x1=int(l[0]*0.05)
    y1=int(l[1]*0.5)
    x2=int(l[0]*0.75)
    driver.swipe(x1,y1,x2,y1,t)

多指操作

使用单指操作TouchAction 对象实例对象,然后将单指的对象添加到多指的对象里面即可,注意单指操作里面不要使用执行命令

from appium.webdriver.common.multi_action import MultiAction
action1 = TouchAction(driver) # 依次实例化两个操作对象,不能用一个
action2 = TouchAction(driver)
window_size = driver.get_window_size()
width = window_size["width"]
height = window_size["height"]
action1 = TouchAction(driver)  # 事件一定要区分成两个对象
action2 = TouchAction(driver)  # 事件一定要区分成两个对象 
# 方大的操作:从中心往两边展开
action1.press(x=width / 3, y=height / 3, pressure=2).wait(100).move_to(x=width / width,  y=height / height).release()
action2.press(x=width / 2, y=height / 2, pressure=2).wait(100).move_to(x=width / 1, y=height / 1).release()
multi_action = MultiAction(driver) # 将单指操作传递给多指操作,并由多指来执行执行命令
multi_action.add(action1)
multi_action.add(action2)
multi_action.perform()

系统事件

press_keycode(AndroidKeyCode)#发送按键事件
# 例如:点击home键,home键的KeyCode是3
driver.press_keycode(3)

KEYCODE_CALL 拨号键 5

KEYCODE_ENDCALL	挂机键	6
KEYCODE_HOME	按键Home	3
KEYCODE_MENU	菜单键	82
KEYCODE_BACK	返回键	4
KEYCODE_SEARCH	搜索键	84
KEYCODE_CAMERA	拍照键	27
KEYCODE_FOCUS	拍照对焦键	80
KEYCODE_POWER	电源键	26
KEYCODE_NOTIFICATION	通知键	83
KEYCODE_MUTE	话筒静音键	91
KEYCODE_VOLUME_MUTE	扬声器静音键	164
KEYCODE_VOLUME_UP	音量增加键	24
KEYCODE_VOLUME_DOWN	音量减小键	25

driver的一些重要操作

  • reset
#重置app
#这时候driver会重置,相当于卸载重装应用。所以本地缓存会失效
driver.reset()
  • start_activity(包名,activity名)
#启动app的某一个activity
driver.start_activity("com.wuba.zhuanzhuan","./presentation.view.activity.LaunchActivity")
  • contexts
#获得所有contexts
driver.contexts
#结果如下:
['NATIVE_APP', 'WEBVIEW_com.android.browser']

NATIVE_APP:native的context
WEBVIEW_com.android.browser:webview的context,存放html的容器
  • current_context
#查看当前的context
driver.current_context
  • switch_to.context(context名)
#切换context
driver.switch_to.context("WEBVIEW_com.wuba.zhuanzhuan")

NATIVE时不能定位WEBVIEW的内容,在WEBVIEW的context时不能定位NATIVE的内容。
所以需要切换到对应的context中去进行操作

  • scroll(起始元素,结束元素)
    driver.scroll(origin_el,destination_el)
  • page_source # 获得当前页面的所有元素
    driver.page_source # 这可以用来判断元素是否存在,例如(assert “发布成功” in driver.page_source)
  • 补充一些driver启动时可能用到的项
autoLaunch :Appium是否要自动启动或安装app,默认true
desired_caps[‘autoLaunch’] = ‘false’
有的时候我不想让appium每次都启动app,想自己去启动activity,那这个项这时就可以起作用了

noReset:在会话前是否重置app状态。默认是false
desired_caps[‘noReset’] = ‘true’

newCommandTimeout:设置未接收到新命令的超时时间,默认60s
如果60s内没有接收到新命令,appium会自动断开连接,如果我需要很长时间做driver之外的操作,可能延长接收新命令的超时时间
desired_caps[“newCommandTimeout”]=1800

标签:Appium,系列,int,元素,driver,press,context,touch,KEYCODE
From: https://www.cnblogs.com/kxtomato/p/16597192.html

相关文章

  • SQLMAP系列强化
    案例1:DC-9图1:尝试‘or1=1--+    //判断存在注入kali中使用sqlmap工具跑就完了sqlmap-u"http://192.168.178.135/results.php"--data"search=1" ......
  • 港队系列算法、数据结构
    写在前面这两个东西其实并没有什么联系,但是因为都是由@dd_d首创的,所以写在一起。Update:不想新开博客了,所以以后dd_d有什么新发明就直接在这里更新了。港队线段......
  • Python入门系列(一)安装环境
    python是什么python是一门很受欢迎的语言,除了不能生孩子以外,其它都可以做。它擅长的领域是脚本工具和科学数据这一块,比如大数据,数据分析什么的。python安装为了演示和......
  • 摸鱼系列之idea摸鱼插件推荐
    前言作为一枚程序员,上班时候正撸着代码呢,撸不出代码了,没灵感了,看需求念头不通达了,脑瓜里蹦不出一丁点火花了,这时候怎么办?程序在运行,还要好几分钟,等待时间里,白白浪费了,玩......
  • Mysql 系列 | procedure(存储过程)
    存储过程是实现特定功能的语句集合,编译后存在数据库中。通过存储过程的名字,并给定参数来调用。创建createprocedure过程名([IN|OUT|INOUT参数名数据类型])begin......
  • 干货:Easy系列各视频平台云台控制功能的使用注意事项汇总
    TSINGSEE青犀视频旗下Easy系列视频平台,比如EasyCVR、EasyNVR、EasyGBS等,均可支持对摄像头的云台控制,包括摄像头的焦距调整、方向调整等。在视频监控场景中,摄像头的云台控制......
  • 技术分享 | Appium 用例录制
    原文链接下载及安装下载地址:https://github.com/appium/appium-desktop/releases下载对应系统的Appium版本,安装完成之后,点击“StartServer”,就启动了AppiumServe......
  • 【区块链与隐私保护系列】基于Linux的TensorFlow Federated安装与使用
    一、TensorflowTederated安装基础环境:操作系统:Ubuntu20.04首先,安装Anaconda:具体的安装步骤可以查看这篇文章,亲测实用,https://blog.csdn.net/ITBigGod/artic......
  • 一、使用Expected_conditions判断元素是否可见-6
    1、处理定位报错的问题判断该元素存在,再输入。判断该元素不存在,抛出异常。依然是通过EC这个模块。2、判断是否存在邮箱地址,存在,再操作。就不用担心元素不存在,程序......
  • css 隐藏元素
    display,visibility仅会改变元素显示,不会改变元素种类。可以配合js使用使元素可以动态的显示隐藏。可以使用display或visibility实现html元素的隐藏功能,但......