嗯,还是把自己做的实验保存一下
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