zoukankan      html  css  js  c++  java
  • appium--滑动

    前戏

    在进行app自动化的时候,经常会进行滑动的操作,比如左右滑动,上下的滑动。在appium中滑动用到swipe方法进行滑动。

    def swipe(开始横坐标,开始纵坐标,结束横坐标,结束纵坐标,时间(ms))

    上面的图表示手机的左上角为坐标原点,往右为x正半轴,往下为y正半轴

    获取屏幕的坐标

    import pytest
    from appium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    
    class Testcsca():
        def setup(self):
            caps = {}
            caps["platformName"] = "Android"
            # caps["deviceName"] = "127.0.0.1:62001"
            caps["deviceName"] = "CLB0219314000452"
            caps["appPackage"] = "com.jgw.csca"
            caps["appActivity"] = "com.jgw.csca.view.activity.LoginActivity"
            caps["platfromVersion"] = "9.0.0"
            caps["autoGrantPermissions"] = True  # 设置自动授权权限
            caps['unicodeKeyboard'] = True  # 输入中文时要加,要不然输入不了中文
            caps['resetKeyboard'] = True  # 输入中文时要加,要不然输入不了中文
            caps['automationName'] = 'uiautomator2'
    
            self.driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
            self.driver.implicitly_wait(20)
    def test_size(self):
            x = self.driver.get_window_size()['width']  # 获取x轴的长度
            y = self.driver.get_window_size()['height']  # 获取y轴的长度
            print(x, y)

    结果

    720 1280

    使用坐标定位

    from time import sleep
    
    import pytest
    from appium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    
    class Testcsca():
        def setup(self):
            caps = {}
            caps["platformName"] = "Android"
            # caps["deviceName"] = "127.0.0.1:62001"
            caps["deviceName"] = "CLB0219314000452"
            caps["appPackage"] = "com.jgw.csca"
            caps["appActivity"] = "com.jgw.csca.view.activity.LoginActivity"
            caps["platfromVersion"] = "9.0.0"
            caps["autoGrantPermissions"] = True  # 设置自动授权权限
            caps['unicodeKeyboard'] = True  # 输入中文时要加,要不然输入不了中文
            caps['resetKeyboard'] = True  # 输入中文时要加,要不然输入不了中文
            caps['automationName'] = 'uiautomator2'
    
            self.driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
            self.driver.implicitly_wait(20)
    
        # 封装滑动的操作
        def swip(self):
            x = self.driver.get_window_size()['width']  # 获取x轴的长度
            y = self.driver.get_window_size()['height']  # 获取y轴的长度
            self.driver.swipe(360,900,360,100,1000)  # 从下往上滑动
    
        def test_login(self):
    
            self.driver.find_element_by_android_uiautomator('new UiSelector().text("请输入用户名")').send_keys('123')
    
            self.driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.jgw.csca:id/et_pwd")').send_keys('123456')
    
            self.driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.Button")').click()
    
            self.driver.find_element_by_id('com.jgw.csca:id/ll_first_sign').click()
            self.driver.find_element_by_xpath('//*[@text="已完成"]').click()
            sleep(2)
            self.swip()

    虽然上面的方法实现了滑动,但上利用率确不高,因为手机的分辨率不同,所以会导致执行失败,可以使用相对坐标点的方法来进行滑动

    相对滑动

    from time import sleep
    
    import pytest
    from appium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    
    class Testcsca():
        def setup(self):
            caps = {}
            caps["platformName"] = "Android"
            # caps["deviceName"] = "127.0.0.1:62001"
            caps["deviceName"] = "CLB0219314000452"
            caps["appPackage"] = "com.jgw.csca"
            caps["appActivity"] = "com.jgw.csca.view.activity.LoginActivity"
            caps["platfromVersion"] = "9.0.0"
            caps["autoGrantPermissions"] = True  # 设置自动授权权限
            caps['unicodeKeyboard'] = True  # 输入中文时要加,要不然输入不了中文
            caps['resetKeyboard'] = True  # 输入中文时要加,要不然输入不了中文
            caps['automationName'] = 'uiautomator2'
    
            self.driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
            self.driver.implicitly_wait(20)
    
        # 封装获取屏幕大小的操作
        def get_windoe_size(self):
            x = self.driver.get_window_size()['width']  # 获取x轴的长度
            y = self.driver.get_window_size()['height']  # 获取y轴的长度
            return x,y  # 返回的是一个元组
    
        # 滑动的封装
        def swip(self):
            size = self.get_windoe_size()
            x1 = int(size[0] * 0.5)  # size[0]取元组的第一个值,*0.5表示中间的点
            y1 = int(size[1] * 0.9)  # size[1]取元组的第二个值,*0.1表示距离底部近
            y2 = int(size[1] * 0.1)
            self.driver.swipe(x1, y1, x1, y2, 1000)
    
        def test_login(self):
    
            self.driver.find_element_by_android_uiautomator('new UiSelector().text("请输入用户名")').send_keys('123')
    
            self.driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.jgw.csca:id/et_pwd")').send_keys('123456')
    
            self.driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.Button")').click()
    
            self.driver.find_element_by_id('com.jgw.csca:id/ll_first_sign').click()
            self.driver.find_element_by_xpath('//*[@text="已完成"]').click()
            sleep(2)
            self.swip()
  • 相关阅读:
    笔试题
    js在IE和FF下的兼容性问题
    Textarea高度随内容自适应地增长,无滚动条
    请让页面中的一个元素(10px*10px)围绕坐标(200, 300) 做圆周运动
    一次点击两次触发addEventListener
    html 1.0 鼠标放上去会亮 onmouseover onmouseout 以及this标签的使用
    提示框一段时间以后消失setTimeout
    两种定时器 setInterval(一直执行) setTimeout(只执行一次)
    其他标签a实现提交功能
    创建标签的两种方法insertAdjacentHTML 和 createElement 创建标签 setAttribute 赋予标签类型 appendChild 插入标签
  • 原文地址:https://www.cnblogs.com/zouzou-busy/p/11403078.html
Copyright © 2011-2022 走看看