10.0 花里胡哨的各个方位滑动查找元素

在介绍滑动查找元素之前,请先容许我插上一嘴--之前章节有更新过  Uiobject uicollection uiselector   这里还有一个新东西叫做  uiscrollable这个class它里面是封装了所有的滑动处理的相关操作!

name这个叫做uiscrollable的类里面有那些东西了:

Scrollintoview-----获取某个可滑动区域,然后滑动这个区域里面的元素查找我们所需要的元素

#后面的text查找条件可以用组合查找也可以用 textcontains 关键之查找text,一般查找条件使用text.....因为一般可滑动的区域id和class都是一样的...driver.find_element_by_android_uiautomator    (‘new UiScrollable(new UiSelector().resourceId("被滑动区域最后一层的id")).scrollIntoView(new UiSelector().text("我们需要查找的元素text"))‘)

代码:

from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from appium.webdriver.common.touch_action import TouchAction #导入Touch Action类
import time,re,os
Start={}
Start[‘platformName‘]=‘android‘    #设备型号  android或者ios
Start[‘platformVersion‘]=‘5.1‘  #安卓设备版本号
Start[‘deviceName‘]=‘192.168.176.101:5555‘     #安卓设备名称
Start[‘app‘]=r‘C:\Users\Administrator\Desktop\xuexi\apk\anzhuoshichang_16793302.apk‘    #设备路径  pc电脑存放apk包的路径
#上面的路径不推荐这种写法,但是目前先这么写!后续告诉大家正确的写法
Start[‘appPackage‘]=‘com.hiapk.marketpho‘      #包名
Start[‘appActivity‘]=‘com.baidu.appsearch.LauncherActivity‘        #容器
Start[‘noReset‘]=‘True‘           #是否重新安装app  True不重新安装
Start[‘unicodeKeyboard‘]=‘True‘   #是否禁用手机键盘  True禁用手机输入法
Start[‘resetKeyboard‘]=‘True‘     #是否启动appium自带键盘 True开始手机输入法
Start[‘automationName‘]=‘uiautomator2‘     #可选模式  本教程默认 Uiautomator2
Start[‘newCommandTimeout‘]=‘400‘  #超时时间(s)
driver = webdriver.Remote(‘http://127.0.0.1:4723/wd/hub‘,Start)
driver.implicitly_wait(10)  #隐式等待十秒
time.sleep(3)
driver.find_elements_by_id(‘com.hiapk.marketpho:id/title‘)[0].click()  #点击首页 必备
WebDriverWait(driver,30,0.1).until(lambda driver:driver.find_element_by_id("com.hiapk.marketpho:id/libui_title_back_btn"))
driver.find_element_by_android_uiautomator(‘new UiScrollable(new UiSelector().resourceId("com.hiapk.marketpho:id/listview")).scrollIntoView(new UiSelector().textContains("滴滴车主"))‘).click()

如果跟着操作了--是不是感觉上面说的那个【被滑动区域】很难找....

So..从最上级开始看----有下级内容的就点一下 ,看下元素的scroll属性是不是为true

如下图所示:这个看上去是不是好像是我们想要的区域---但是仔细一看---scroll 是false--所以这个也不是,那么继续往下找

再继续往下找,结果发现下一个属性就是为true的--那么这个就是我们的想要的....

备注:这种是官方给出的滑动查找元素的api....我记得貌似Uiscrollable这个class里面还有很多花里胡哨的滑动的方法...我之前有试过...结果发现除了 这个 scrollIntoview之外,其他的基本报错..因为其他的api包括这个 scrollIntoview  我全部都没有用到..所以没有去研究..

那么问题来了,我这边滑动查找元素是用的什么方法呢

...

记得上一章有介绍过 TouchAction这个很牛皮的方法是吧....我这边用的各个方位查找元素都是用的这个..并且对比了一下api 貌似他的也是调用的TouchAction这个方法实现的..

So..

支持各个方位滑动查找元素..唯一的缺点就是貌似稍微慢了那么一丢丢,只是一丢丢,实际上和scrollIntoview 查找速度差不多,,建议把wait的时间稍微调的长一点..时间越短越容易报错...

代码:

from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from appium.webdriver.common.touch_action import TouchAction #导入Touch Action类
import time,re,os
Start={}
Start[‘platformName‘]=‘android‘    #设备型号  android或者ios
Start[‘platformVersion‘]=‘5.1‘  #安卓设备版本号
Start[‘deviceName‘]=‘192.168.176.101:5555‘     #安卓设备名称
Start[‘app‘]=r‘C:\Users\Administrator\Desktop\xuexi\apk\anzhuoshichang_16793302.apk‘    #设备路径  pc电脑存放apk包的路径
#上面的路径不推荐这种写法,但是目前先这么写!后续告诉大家正确的写法
Start[‘appPackage‘]=‘com.hiapk.marketpho‘      #包名
Start[‘appActivity‘]=‘com.baidu.appsearch.LauncherActivity‘        #容器
Start[‘noReset‘]=‘True‘           #是否重新安装app  True不重新安装
Start[‘unicodeKeyboard‘]=‘True‘   #是否禁用手机键盘  True禁用手机输入法
Start[‘resetKeyboard‘]=‘True‘     #是否启动appium自带键盘 True开始手机输入法
Start[‘automationName‘]=‘uiautomator2‘     #可选模式  本教程默认 Uiautomator2
Start[‘newCommandTimeout‘]=‘400‘  #超时时间(s)
driver = webdriver.Remote(‘http://127.0.0.1:4723/wd/hub‘,Start)
driver.implicitly_wait(10)  #隐式等待十秒
time.sleep(3)
driver.find_elements_by_id(‘com.hiapk.marketpho:id/title‘)[0].click()  #点击首页 必备
WebDriverWait(driver,30,0.1).until(lambda driver:driver.find_element_by_id("com.hiapk.marketpho:id/libui_title_back_btn"))
# driver.find_element_by_android_uiautomator(‘new UiScrollable(new UiSelector().resourceId("com.hiapk.marketpho:id/listview")).scrollIntoView(new UiSelector().textContains("滴滴车主"))‘).click()
def scroll_my(x1, y1, x2, y2, element, type, timeOut):
    ‘‘‘无限各方为滑动加载获取指定元素‘‘‘
    timeStart = time.strftime(‘%d%H%M%S‘, time.localtime())
    while 1:
        try:
            if type == ‘id‘:
                driver.find_element_by_id(element)
            if type == ‘xpath‘:
                driver.find_element_by_xpath(element)  #另外这里还可以写其他的元素定位方式在这里--建议把每个定位方式独立的封装成一个方法..用到定位方式就调用哪个方法---因为判断多了,代码执行就会耗时那么一丢丢..
            break
        except:
            action = TouchAction(driver)
            action.press(x=x1, y=y1).wait(ms=500).move_to(x=x2, y=y2).release()
            action.perform()
            timeOver = time.strftime(‘%d%H%M%S‘, time.localtime())
            if int(timeOver) - int(timeStart) >= int(timeOut):
                break
            else:
                continue
    if type == ‘id‘:
        return driver.find_element_by_id(element)
    if type == ‘xpath‘:
        return driver.find_element_by_xpath(element)
scroll_my(0.5,0.9,0.5,0.4,‘//*[@text="滴滴车主"]‘,‘xpath‘,300).click()

那么问题来了 ,TouchAction  还有没有其他的骚操作呢?

原文地址:https://www.cnblogs.com/pythontest/p/9527549.html

时间: 2024-10-03 18:53:04

10.0 花里胡哨的各个方位滑动查找元素的相关文章

Spark整合kafka0.10.0新特性(二)

接着Spark整合kafka0.10.0新特性(一)开始 import org.apache.kafka.clients.consumer.ConsumerRecord import org.apache.kafka.common.serialization.StringDeserializer import org.apache.spark.streaming.kafka010._ import org.apache.spark.streaming.kafka010.LocationStrat

错误: 找不到或无法加载主类 Files\apache-activemq-5.10.0\bin\..\conf\login.config

在启动activemq的时候出现错误:“错误: 找不到或无法加载主类 Files\apache-activemq-5.10.0\bin\..\conf\login.config”,之前用activemq的时候没遇到这个问题,这次折腾就遇到了.每一次问题,都是一次收获和成长的机会,哪怕是一点点,没关系,不积跬步无以至千里! 查找login.config,明明路径E:\Program Files\apache-activemq-5.10.0\conf\login.config文件存在. 于是仔细阅读

PhpStorm 10.0.3汉化及安装破解教程

PhpStorm 10.0.3汉化破解版 PhpStorm是由JetBrains公司开发推出的商业PHP集成开发工具,软件不仅包含了webstorm的全部功能,还拥有php.javascript.HTML/css等编辑器,能为开发者提供最便捷最智能的代码编写,同时其内置自动生成phpdoc注释.集成分析器.可视化调试等功能,能轻松解决智能代码补全.快速导航以及即时错误检查等问题,是各类大型php开发项目必备的优秀平台.PhpStorm 10改进了PHP 7支持,提供phpStorm插件,并且修复

ArcGIS Server 10.0 安装及使用完整攻略

引言 ArcGIS Server 10.0在使用和安装的过程中,需要进行比较全面的学习,才能正确使用.缺乏正确的指引,用户很容易在安装及使用中遇到问题.所以笔者在此总结Server 10.0的安装及使用中需要参考的资源.提供适当的教程,并对可能出现的问题进行解释,可供一些可行的解决方案.有兴趣做好Server 10.0工作的笔者,请耐心阅读本文.笔者花了近一个星期的时间研究ArcGIS Server 10.0的使用,希望对后来者能有所帮助. 安装 Server 10.0的安装前,建议在本机安装一

ArcGIS 10.0安装之 Server的安装

第二部分 ArcGIS Server的安装.部署 注意:需关闭电脑防火墙,否则arcgis manager可能登陆不上去! 1.ArcGIS Server的安装 (1)双击打开安装程序,选择ArcGIS Server for Java Platform,安装,步骤比较简单,不在介绍: 选择安装目录,进入下一步,安装完毕后,需要进入配置. (2)ArcGIS Server for Java Platform配置 选择这两项,进入下一步 输入密码,本次开发两个账户采用Admin2008作为密码,进入

Vegas Pro 10.0破解版 32位&64位

Vegas Pro 10.0破解版:http://www.3322.cc/soft/34639.html Vegas Pro 10.0破解版是一款由索尼公司推出的目前最受欢迎的影像编辑软件,可帮助用户随心所欲地对视频素材进行各类编辑与修改操作.Vegas Pro 10.0拥有强大的后期处理功能,可允许用户地对视频素材进行剪辑合成.添加特效.调整颜色.编辑字幕等操作,并具备强大的音频处理工具,可允许用户为视频素材添加音效.录制声音.处理噪声,以及生成杜比5.1环绕立体声,另通过它用户还可将编辑好的

安装python 第三方库遇到的安装问题 microsoft visual studio c++ 10.0 is required,Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed?

问题一: microsoft visual studio c++ 10.0 is required 安装scrapy时候出现需要vc c++ 10,有时安装其他也会有. 解决方法:安装vc 2010,安装过2017无效,安装过程也不一样. 问题二: 安装好,出现Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed? 解决办法: 1.pip install wheel 2. 到http://

Microsoft Visual Studio 10.0执行WinPcap获取网络设配器的代码

WinPcap是一个基于Win32平台的,用于捕获网络数据包并进行分析的开源库. 大多数网络应用程序通过被广泛使用的操作系统元件来访问网络,比如sockets.  这是一种简单的实现方式,因为操作系统已经妥善处理了底层具体实现细节(比如协议处理,封装数据包等等),并且提供了一个与读写文件类似的,令人熟悉的接口. 然而,有些时候,这种"简单的方式"并不能满足任务的需求,因为有些应用程序需要直接访问网络中的数据包.也就是说,那些应用程序需要访问原始数据包,即没有被操作系统利用网络协议处理过

TimePickerDialog时间选择器,选择0-9分钟时,显示为10:0 9:1的样式,要改成 10:00 09:01的样式 的解决方式

1 /** 2 * 设置时间选择器 3 */ 4 private void setTimePickerDialog() { 5 Calendar mCalendar = Calendar.getInstance(); 6 mCalendar.setTimeInMillis(System.currentTimeMillis()); 7 final int hour = mCalendar.get(Calendar.HOUR_OF_DAY); 8 int minute = mCalendar.get