appium滚动查找屏幕外的控件
嗯,还是把自己做的实验保存一下
Appium1.12.1+python2.7 实验滚动,查找屏幕外控件以及控制seekbar
scroll() 是根据页面中两个元素位置之间的距离进行滑动。
滑动寻找屏幕外的特定元素,Python可以用find_element_by_android_uiautomator('Uiautomator-Java代码语句'),会上下都滚动一次,遍历一遍。
运行环境:Ubuntu18.0, Appium-linux-1.12.1.AppImage, Python2.7
使用的平板,在settings中测试滚动查找控件
test_scroll:
1.将“家长监护”滚动至原本“显示”所在的位置
2.滚动查找屏幕外的“辅助功能”
test_seekBar
3.控制“显示”功能调节亮度的seekBar,通过坐标滑动(代码中坐标,X坐标从控件宽度取值,因为等于屏幕宽所以才这样取)
#coding=utf-8
'''
Created on 2019年8月31日
@author: derik
'''
import unittest
from appium import webdriver
from selenium.webdriver.common.by import By class Test(unittest.TestCase): def setUp(self):
desired_caps={}
# 测试设备的系统版本,adb shell getprop | grep ro.build.version
desired_caps['platformVersion']='5.1.1'
desired_caps['platformName']='Android'
desired_caps['deviceName']='G0B0ME036482001L'
# 测试启动的APK包名/活动名 adb shell dumpsys activity activities | grep mFocusedActivity
desired_caps['appPackage']='com.android.settings'
desired_caps['appActivity']='.Settings'
# 每次启动不要清除应用数据
desired_caps['noReset']='true'
self.driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
# 设置隐式等待时间,10秒内找不到控件,等待
self.driver.implicitly_wait(10) def tearDown(self):
self.driver.quit() def test_scroll(self):
# 寻找控件方法:driver.find_element(By.查询方式,"查询的条件")
XianShi=self.driver.find_element(By.XPATH, "//android.widget.TextView[@text='显示']")
parentMonitor=self.driver.find_element(By.XPATH, "//android.widget.TextView[@text='家长监护']")
#将‘家长监护’滚动到‘显示’的位置,
self.driver.scroll(parentMonitor,XianShi,3000)
#滚动完之后,若想点击‘家长监护’,不能使用parentMonitor.click(),会点到“错误”的坐标,滚动后,分析节点数据获得的坐标过时了吧
#需要重新寻找控件,即self.driver.find_element(By.XPATH, "//android.widget.TextView[@text='家长监护']").click()
#滚动查找不在屏幕内的指定控件;会滚回到顶层重新找起
#以下方法实验中发现的需要注意,指定条件的控件只要在屏幕底层出现,程序是能识别的(毕竟是直接分析的节点数据),但有的应用在底部有遮挡住listView部分的控件,像酷狗音乐底部就有,
#这时程序虽然识别到了,但此时人眼看去是看不到的,被遮挡住了,想要对指定控件操作比如点击,就会点到遮挡的控件上,
self.driver.find_element_by_android_uiautomator('new UiScrollable(new UiSelector().scrollable(true)).scrollIntoView(new UiSelector().text("辅助功能"))')
def test_seekBar(self):
# 寻找控件方法:driver.find_element_by_xpath('查询的条件')
self.driver.find_element_by_xpath("//android.widget.TextView[@text='显示']").click()
seekBar=self.driver.find_element(By.ID,'com.android.settings:id/f_seekbar') #获取到
#获取seekbar控件本身的(尺寸)宽度
startX=seekBar.size.get('width')
#获取控件中间位置y坐标,(试过后验发现不加尺寸的一半也能操作)
#控件的坐标Y(应该是左上角的坐标)+控件本身高度的一半
startY=seekBar.location.get('y')+(seekBar.size.get('height'))/2
#通过控件的坐标滑动seekbar,从seekBar的1/4处滑动到3/4处
self.driver.swipe(startX/4,startY,startX*3/4,startY, 3000)
if __name__ == "__main__":
unittest.main()
结果图像记录:

————————————————
原文链接:https://blog.csdn.net/qq_37112121/article/details/100172538
appium滚动查找屏幕外的控件的更多相关文章
- Recyclerview点击事件,更新item的UI+更新Recyclerview外的控件
项目中用到了Recyclerview,在第一行代码中学到了一种相对来说简单的点击事件方法,可是这种点击事件是在adapter中写的,没有教怎么更新item的ui和更新Recyclerview之外的控件 ...
- OpenLayers在地图外放置控件
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...
- Appium入门(8)__控件定位
部分摘自:http://www.testclass.net/appium/appium-base-find-element/ appium 通过 uiautomatorviewer.bat 工具来查看 ...
- UWP 查找模板中的控件
这个标题我也不知道咋起,意思说一下你就明白. 1. 对官方控件的模板进行定制修改,以满足多样化需求,还有漂亮的UI 比如ListView,GridView等. 2. 在设计的情况下并没有这个控件,而在 ...
- appium简明教程(10)——控件定位基础
狭义上讲,UI级的自动化测试就是让机器代替人去点来点去的过程. 但机器去点什么(点上面还是点左边),怎么点(是长按还是轻触),这些东西是必须由代码的编写者所指示清楚的. 控件定位就是解决机器点什么的问 ...
- 移动端自动化测试 -- appium 之Desired Capabilities与 定位控件
一.Desired Capabilities Desired Capabilities 在启动 session 的时候是必须提供的. Desired Capabilities 本质上是以 key va ...
- Wp8滚动区域(ScrollViewer)控件的使用
1. <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28" ...
- 获取Android屏幕尺寸、控件尺寸、状态栏/通知栏高度、导航栏高度
1.获取Android屏幕尺寸 我们能够通过getSize()方法获得屏幕的尺寸 Display display = getWindowManager().getDefaultDisplay(); P ...
- C# WinForm设置窗口无边框、窗口可移动、窗口显示在屏幕中央、控件去边框
1)窗口去除边框 在组件属性中FormBorderStyle设为None 2)窗口随着鼠标移动而动 添加引用using System.Runtime.InteropServices; 在初始化控件{I ...
随机推荐
- from 表单上传多个文件?
和单个上传文件基本相同,就是需要在后台控制器中,用数组来接收 jsp页面提交过来的file数据. 也分为三个部分演示. 一.jsp <%-- Created by IntelliJ IDEA. ...
- ApacheJemeter的简单使用
前言:最近由于工作需要进行接口测试,故简单复习一下ApacheJemeter的使用 安装包下载地址: 链接:https://pan.baidu.com/s/11ywNWRUkFNNBCWw4HiO6B ...
- Swift字符串的介绍
字符串的介绍 字符串在任何的开发中使用都是非常频繁的 OC和Swift中字符串的区别 在OC中字符串类型时NSString,在Swift中字符串类型是String OC中字符串@"" ...
- 广播接收者案例_sd卡状态监听
(1)定义广播接收者 import android.content.BroadcastReceiver; import android.content.Context; import android. ...
- C++学习笔记_complex类的实现
头文件中的防卫式声明 点击查看代码 #ifndef __COMPLEX__ #define __COMPLEX__ class complex { } #endif 类的定义 点击查看代码 class ...
- Maven下Java、JavaWeb约定标准项目结构
1.Maven Java 项目结构: 2.Maven JavaWeb 项目结构: 注意:webapp下必须要有WEB-INF文件夹,WEB-INF文件夹下必须要有web.xml 跟 classes文件 ...
- [技术干货-算子使用] mindspore.scipy 入门使用指导
1. MindSpore框架的SciPy模块 SciPy 是基于NumPy实现的科学计算库,主要用于数学.物理学.生物学等科学以及工程学领域.诸如高阶迭代,线性代数求解等都会需要用到SicPy.Sci ...
- C#使用 WebRequest 异步获取网页并自动忽略SSL证书
C#使用 WebRequest 模拟浏览器请求访问网页并自动忽略HTTPS安全证书 以下两个C#异步方法,封装了WebRequest请求,支持忽略SSL证书. 作者:张赐荣 1.Get请求 ...
- Intellij IDEA出现java.lang.ClassNotFoundException: com.mysql.jdbc.Driver处理办法
菜单-->File-->project structure-->Modules-->Dependencies-->添加MySQL的驱动包:mysql-connector- ...
- TensorFlow 关闭日志打印
ubuntu 中打开命令行,执行如下指令 vim ~/.bashrc 进入配置文件后在文件末尾加上: export TF_CPP_MIN_LOG_LEVEL=2 保存退出,再使用下面命令使刚才修改的配 ...