zoukankan      html  css  js  c++  java
  • Appium常见元素操作

    appium里提供TouchAction类和MultiAction类来实现元素的操作.

    TouchAction类

    TouchAction类:将一系列的动作放在一个链条中,然后将该链条传递给服务器,服务器接受该链条后,解析各个动作,逐个执行.

    TouchAction类提供了以下几种方法:
    tap:点击
    press:短按
    long_press:长按,默认1s
    wait:等待,单位ms
    movie_to:移动到
    relese:释放
    perform:执行
    cancle:取消

    为更好的看到效果可在手机上开启:开发者选项-输入-指针位置.
    注:appium中左上角为(0,0)

    一,单点触控

    1,单点触控实现划屏

    TouchAction实现从下到上划动:

    from appium.webdriver.common.touch_action import TouchAction
    #获取窗口大小
    size=driver.get_window_size()
    #确定要划动的点x轴的位置为屏幕中央
    x=size["wedth"]*0.5
    #确定从下到上划动距离开始和结束位置
    y_start=size["height"]*0.9
    y_end=size["height"]*0.1
    #初始化
    ta=TouchAction(driver)
    #按住起始位置移动到结束位置
    ta.press(x=x,y=y_start).move_to(x=x,y=y_end).wait(200)
    

    webdriver.py中的swipe()方法已封装该功能,可直接使用.

    from appium import webdriver
    size = driver.get_window_size()
    x=size["width"]*0.5
    y_start=size["height"]*0.9
    y_end=size["height"]*0.1
    driver.swipe(x,y_start,x,y_end,200)
    

    注:如果从上向下划动可调换y_end和y_start的值;如果从左向右划可调换x和y的值

    2,列表划动

    使用场景:页面展示内容很多需要划动来查看,比如浏览小红书中的内容,看到感兴趣的点击进入详情页面.
    分析:
    现确定感兴趣内容,如何找到?
    通过划屏来找元素,不确定划多少屏用到while循环.

    while循环什么时候停止?
    找到元素或划到底.

    如何确定已经划到下一页面了?
    新页面和老页面的源代码不同可判断为新页面;
    old历史页面初始值为None,new当前页面driver.page_source获取当前页面源码,循环过程中执行划动后将new赋值给old,直到old==new,即划不动了.

    #要找到元素
    loc=(MobileBy.ANDROID_UIAUTOMATOR,'text("aa")')
    #设置old和new的初始值
    old=None
    new=driver.page_source
    while old!=new:
    	#找元素-driver.find_element或者等待,没有找找元素或者等待失败,都抛异常
    	try:
    		WebDriverWait(driver,5).until(EC.visibility_of_element_located(loc))
    	except:
    		#没找到,继续划到下一屏
    		driver.swipe(x,y_start,y_end,200)
    		sleep(1)
    		#更新新旧页面
    		old=new
    		new=driver.page_source
    	else:
    		#找到了点击一下,结束循环
    		driver.find_element(*loc).click()
    		break
    

    二,多点触控

    1,实现放大缩小

    MultiAction类中提供了多点触控的方式,该类下面只有add()和perform()方法;
    原理是将多条轨迹合并在一起同步执行,只需要将每条轨迹的动作添加到add()方法中再perform()就OK.
    使用场景:放大和缩小的场景中使用偏多.
    已下代码为在百度地图中屏幕正中间放大.

    #设备大小
    size=driver.get_window_size()
    #实例话多点触控类
    ma=MultiAction(driver)
    #第一个touchAction
    ta1=TouchAction(driver)
    ta1.press(x=size["width"*0.5],y=size["height"]*0.5).wait(200)
    	.move_to(x=size["width"*0.1],y=size["height"]*0.9).wait(200).release()
    #第二个
    ta2=TouchAction(driver).press(x=size["width"*0.5],y=size["height"]*0.5).wait(200)
    	.move_to(x=size["width"*0.9],y=size["height"]*0.1).wait(200).release()
    #加入多点触控中
    ma.add(ta1,ta2)
    #执行
    ma.perform()
    sleep(6)
    driver.quit()
    

    2,实现多指点击

    场景:使用场景比较少,比如双击屏幕实现截图
    driver.tap()方法实现.其中的要求:最多支持5个指头;只有点击和长按两种动作;当duration=None时为点击,duration不为None时为长按,长按的时间根据传入的duration值决定;第一个参数positions需要传入坐标,并且格式为嵌套元组的列表,第二个参数为duration,单位ms,例如:[(100, 20), (100, 100)], 500].

    难者不会 会者不难 学是关键
  • 相关阅读:
    超分网络一般不需要BN
    常用的损失函数loss
    VS Code导入torch后出现红色下划线警告
    光流算法:Horn–Schunck光流讲解
    网络训练loss不下降的问题
    l1,l2loss的比较
    Nvidia DALI加速数据增强
    pytorch将部分参数进行加载
    模型训练技巧
    node 特性及优缺点
  • 原文地址:https://www.cnblogs.com/hsmwm/p/14990895.html
Copyright © 2011-2022 走看看