嗯,还是把自己做的实验保存一下

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滚动查找屏幕外的控件的更多相关文章

  1. Recyclerview点击事件,更新item的UI+更新Recyclerview外的控件

    项目中用到了Recyclerview,在第一行代码中学到了一种相对来说简单的点击事件方法,可是这种点击事件是在adapter中写的,没有教怎么更新item的ui和更新Recyclerview之外的控件 ...

  2. OpenLayers在地图外放置控件

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...

  3. Appium入门(8)__控件定位

    部分摘自:http://www.testclass.net/appium/appium-base-find-element/ appium 通过 uiautomatorviewer.bat 工具来查看 ...

  4. UWP 查找模板中的控件

    这个标题我也不知道咋起,意思说一下你就明白. 1. 对官方控件的模板进行定制修改,以满足多样化需求,还有漂亮的UI 比如ListView,GridView等. 2. 在设计的情况下并没有这个控件,而在 ...

  5. appium简明教程(10)——控件定位基础

    狭义上讲,UI级的自动化测试就是让机器代替人去点来点去的过程. 但机器去点什么(点上面还是点左边),怎么点(是长按还是轻触),这些东西是必须由代码的编写者所指示清楚的. 控件定位就是解决机器点什么的问 ...

  6. 移动端自动化测试 -- appium 之Desired Capabilities与 定位控件

    一.Desired Capabilities Desired Capabilities 在启动 session 的时候是必须提供的. Desired Capabilities 本质上是以 key va ...

  7. Wp8滚动区域(ScrollViewer)控件的使用

    1. <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28" ...

  8. 获取Android屏幕尺寸、控件尺寸、状态栏/通知栏高度、导航栏高度

    1.获取Android屏幕尺寸 我们能够通过getSize()方法获得屏幕的尺寸 Display display = getWindowManager().getDefaultDisplay(); P ...

  9. C# WinForm设置窗口无边框、窗口可移动、窗口显示在屏幕中央、控件去边框

    1)窗口去除边框 在组件属性中FormBorderStyle设为None 2)窗口随着鼠标移动而动 添加引用using System.Runtime.InteropServices; 在初始化控件{I ...

随机推荐

  1. GAN入门

    1 GAN基本概念 1.1 什么是生成对抗网络? 生成对抗网络(GAN, Generative adversarial network) 在 2014 年被 Ian Goodfellow 提出. GA ...

  2. 中文分词,自然语言处理器NLP。 新版本已上线,增加二级行业分类。

    一  cacl2新版本上线,在一级行业的基础上深度挖掘,新增了对应的二级分类. 可以查看一级行业[农林牧渔],下面对应的所有二级行业的词库.这里拿[林业]来观察效果. 具体分词的效果. 二    Gi ...

  3. Android动态加载布局之LayoutInflater【转】

    万分感谢大佬:https://www.jianshu.com/p/6a235ba5ee17 深入了解View<一>之Android LayoutInfalter原理分析 下文为:Layou ...

  4. ubuntu 修改文件及文件夹的权限

    转载请注明来源:https://www.cnblogs.com/hookjc/ 打开终端进入你需要修改的目录然后执行下面这条命令chmod 777 * -R全部子目录及文件权限改为 777 来源:py ...

  5. Java向mysql中插入时间的方法

    ava向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明);部分资料参考网络资源  java向MySQL插入当前时间的四种方式 第一种:将java.util.Date类型的 ...

  6. iOS 学习资料Blog 技术论坛等,不断添加中。。。。

    iOS 学习资料整理 http://www.jianshu.com/p/dc81698a873c    中文 iOS/Mac 开发博客列表  https://github.com/tangqiaobo ...

  7. Java基础总结(二)

    1.ArrayList和Vector的区别 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的 ...

  8. Docker consul的容器服务更新与发现

    Docker consul的容器服务更新与发现 目录 Docker consul的容器服务更新与发现 一.Consul简介 1. 服务注册与发现 2. consul概述 3. consul的两种模式 ...

  9. Centos8安装virtualbox

    一.执行以下命令并启用 VirtualBox 和 EPEL 包仓库 dnf config-manager --add-repo=https://download.virtualbox.org/virt ...

  10. 帆软报表(finereport)table块钻取,返回记住table块位置

    <1>首先table块加初始化事件,idex为参数,参数值为$tab_idexsetTimeout(function(){_g().getWidgetByName("tabpan ...