Appium自动化测试swipe滑动封装

简介: Appium自动化测试swipe滑动封装

一、前置说明


Appium 原生的swipe()方法,需要指定起始坐标点的位置,方法调用偏底层。我们可以使用get_window_size()获取窗口大小,然后按比例定义起始位置,从而实现上下左右的滑动。


二、代码实现


from appium.webdriver.webdriver import WebDriver as Remote
from appium.options.android import UiAutomator2Options
from libs.check import CommonChecker
from libs.decorators import rerun_if_exception
class WebDriver(Remote):
    def __init__(self, command_executor, capabilities: dict, *args, **kwargs):
        # solve the problem: AttributeError:  NoneType'  object  has  no  attribute  'to_capabilities'.
        # https://stackoverflow.com/questions/77118636/attributeerror-nonetype-object-has-no-attribute-to-capabilities-getting-th
        options = UiAutomator2Options().load_capabilities(capabilities)
        super().__init__(command_executor=command_executor, options=options, *args, **kwargs)
    def swipe_up(self, duration=500, num=1):
        size = self.get_window_size()
        x1 = size['width'] * 0.5
        y1 = size['height'] * 0.75
        y2 = size['height'] * 0.25
        for i in range(num):
            self.swipe(x1, y1, x1, y2, duration)
    def swipe_down(self, duration=500, num=1):
        size = self.get_window_size()
        x1 = size['width'] * 0.5
        y1 = size['height'] * 0.25
        y2 = size['height'] * 0.75
        for i in range(num):
            self.swipe(x1, y1, x1, y2, duration)
    def swip_left(self, duration=500, num=1):
        size = self.get_window_size()
        x1 = size['width'] * 0.75
        y1 = size['height'] * 0.5
        x2 = size['width'] * 0.05
        for i in range(num):
            self.swipe(x1, y1, x2, y1, duration)
    def swip_right(self, duration=500, num=1):
        size = self.get_window_size()
        x1 = size['width'] * 0.05
        y1 = size['height'] * 0.5
        x2 = size['width'] * 0.75
        for i in range(num):
            self.swipe(x1, y1, x2, y1, duration)
    @rerun_if_exception()
    def swipe_to(self, direction, duration=500, num=1):
        allowed = ['up', 'down', 'left', 'right']
        CommonChecker.check_item_in_list(direction, allowed, 'direction')
        if direction == 'up':
            self.swipe_up(duration, num)
        if direction == 'down':
            self.swipe_down(duration, num)
        if direction == 'left':
            self.swip_left(duration, num)
        if direction == 'right':
            self.swip_right(duration, num)

在滑动页面时,可能会遇到页面未加载完成,从而导致滑动失败的问题。因此,在swipe_to() 方法上加了一个rerun_if_exception()失败重试的装饰器,相当于加了一个自动等待页面加载完成的功能。


三、Demo验证


测试代码:

def test_swipe_to():
    from driver.appium.driver import WebDriver
    appium_server_url = 'http://localhost:4723'
    capabilities = {
        "platformName": "Android",
        "automationName": "uiautomator2",
        "deviceName": "127.0.0.1:62001",
        "app": "D:\\resources\\imooc.apk",
    }
    driver = WebDriver(command_executor=appium_server_url, capabilities=capabilities)
    driver.swipe_to('left', num=2)
    driver.swipe_to('right', num=2)

成功实现了滑动的效果,控制台运行结果:

============================= test session starts =============================
collecting ... collected 1 item
test_appium.py::test_swipe_to PASSED                                     [100%]
============================= 1 passed in 22.46s ==============================
目录
相关文章
|
6天前
|
测试技术 API Android开发
《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)
【7月更文挑战第15天】这是关于自动化测试框架中Selenium API二次封装的教程总结。教程中介绍了如何设计一个支持不同浏览器测试的页面基类(BasePage),该基类包含了对Selenium方法的二次封装,如元素的输入、点击、清除等常用操作,以减少重复代码。此外,页面基类还提供了获取页面标题和URL的方法。
19 2
|
25天前
|
测试技术
Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)
Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)
|
2月前
|
数据采集 Java 开发工具
一文2500字从0到1教你搭建Android自动化python+appium环境
一文2500字从0到1教你搭建Android自动化python+appium环境
一文2500字从0到1教你搭建Android自动化python+appium环境
|
2月前
|
编解码 测试技术 Android开发
Appium Inspector与Weditor:移动端测试的利器
本文介绍了两款移动端自动化测试的元素定位工具:Appium Inspector和weditor。Appium Inspector是官方推荐的辅助工具,而weditor是基于Python的ATX生态工具,支持Android和iOS界面分析。weditor安装需Python 3.6以上版本,可能遇到的GBK编码问题可通过更改系统区域设置解决。它提供设备界面、元素详情和代码运行三个主要部分,便于元素定位、属性查看及交互代码执行。这两款工具对于提升开发和测试效率具有积极作用。
89 8
|
2月前
|
前端开发 JavaScript 测试技术
深入理解自动化测试框架:Selenium与Appium的比较
【5月更文挑战第29天】 在快速发展的软件行业中,自动化测试已成为保证软件质量和缩短发布周期的关键。本文深入分析了两个领先的自动化测试框架——Selenium和Appium,探讨了它们的核心原理、应用场景以及优缺点。通过细致的比较,为软件开发团队提供选择合适测试工具的参考依据,并强调了在不同环境下如何优化测试流程以提高测试效率和准确性。
|
2月前
|
中间件 测试技术 API
探索自动化测试工具的新边界:Selenium与Appium的集成实践
【4月更文挑战第30天】 随着移动应用和Web应用的不断融合,传统的自动化测试工具需要适应新的测试环境。本文将详细分析Selenium和Appium这两款流行的自动化测试工具的集成实践,探讨如何构建一个能够同时支持Web和移动端应用的自动化测试框架。通过对比两者的技术架构、功能特性以及在实际项目中的集成过程,我们旨在为读者提供一个清晰的指导,帮助他们在复杂的应用环境中实现高效、稳定的自动化测试流程。
|
2月前
|
前端开发 JavaScript 测试技术
深入探索自动化测试框架:Selenium与Appium的对比分析
【4月更文挑战第29天】 在快速迭代的软件发展环境中,自动化测试已成为确保软件质量和加速产品上市的关键步骤。本文将重点探讨两种广泛使用的自动化测试框架——Selenium和Appium,通过对比它们的核心特性、适用场景及执行效率,为软件开发和测试团队提供选择指南。文章不仅分析了各自的技术架构和脚本语言支持,还讨论了它们在处理Web应用和移动应用测试时的优缺点,旨在帮助读者根据项目需求做出更加明智的选择。
|
7天前
|
Web App开发 XML Java
《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)
【7月更文挑战第14天】这篇教程介绍了如何使用Java和Selenium构建一个支持跨浏览器测试的自动化测试框架。设计的核心是通过读取配置文件来切换不同浏览器执行测试用例。配置文件中定义了浏览器类型(如Firefox、Chrome)和测试服务器的URL。代码包括一个`BrowserEngine`类,它初始化配置数据,根据配置启动指定的浏览器,并提供关闭浏览器的方法。测试脚本`TestLaunchBrowser`使用`BrowserEngine`来启动浏览器并执行测试。整个框架允许在不同浏览器上运行相同的测试,以确保兼容性和一致性。
17 3
|
9天前
|
存储 Web App开发 Java
《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架之设计篇-java实现自定义日志输出(详解教程)
【7月更文挑战第13天】这篇文章介绍了如何在Java中创建一个简单的自定义日志系统,以替代Log4j或logback。
31 5
|
12天前
|
设计模式 测试技术 Python
《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
【7月更文挑战第10天】Page Object Model (POM)是Selenium自动化测试中的设计模式,用于提高代码的可读性和维护性。POM将每个页面表示为一个类,封装元素定位和交互操作,使得测试脚本与页面元素分离。当页面元素改变时,只需更新对应页面类,减少了脚本的重复工作和维护复杂度,有利于团队协作。POM通过创建页面对象,管理页面元素集合,将业务逻辑与元素定位解耦合,增强了代码的复用性。示例展示了不使用POM时,脚本直接混杂了元素定位和业务逻辑,而POM则能解决这一问题。
27 6