Appium +Python笔记——滚动及查找屏幕外指定控件,操作seekbar

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

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()

结果图像记录:

你可能感兴趣的:(Appium笔记)