老板叫我写个APP自动化--方法二次封装--01点击输入

简介: 老板叫我写个APP自动化--方法二次封装--01点击输入

前言

这里是清安,前一章我们学习了简单的脚本输出,本章我们来将脚本优化优化,可能有一定的难度,但是跟着一步步来,多码几遍问题不大。本章我们直接使用类来编写自动化脚本,也就是所谓的封装。

简简单单的封装

from appium import webdriver
from time import sleep
class San:
    def __init__(self,desired_capas):
        self.ap = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_capas)
    def login(self):
        self.ap.find_element_by_id('com.mxchip.project352:id/etPhone').send_keys('18674622237')
        self.ap.find_elements_by_class_name('android.widget.EditText')[1].send_keys('jx123456')
        self.ap.find_element_by_id('com.mxchip.project352:id/cbAgree').click()
                self.ap.find_element_by_xpath('//*[@text="登录"]').click()
if __name__ == '__main__':
    desired_capas = {
        "deviceName": "emulator-5554",
        "platformName": "Android",
        "appPackage": "com.mxchip.project352",
        "appActivity": "com.mxchip.project352.activity.login.LoginActivity",
        "platformVersion": "7.1.2",
        "noReset": "True"
    }
    San(desired_capas).login()

如上所示,代码中就是封装了的方法了,对比上一章的简单脚本,你是不是觉得,这样写它的好处,作用在哪。如你所想,此处并没有体现出太多的优点,好处出来。试图往下想想,步骤多了之后也只是显的比较的整洁而已。

此处主旨并不是极大程度的优化代码,而是要告诉你,如何封装一个脚本,后续在框架上,这种封装思想就会突显的格外的重要。

再次改进

我们再次对上面的进行改进一下,上面的看着~没太多感觉,复用性不高,从代码量上看,我们可以再缩减一些。我们将上述类直接变成一个方法容器,专门放入一些方法进去,供我们调用。一起来看看吧。

# ----清安—---
# 微信:qing_an_an
# 公众号:测个der
from appium import webdriver
from selenium.webdriver.common.by import By
class San:
    def __init__(self, desired_capas):
        self.ap = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_capas)
    def element_(self, loc, ele, num=None):
        if num:
            return self.ap.find_elements(loc, ele)[num]
        else:
            return self.ap.find_element(loc, ele)
    def clicks_(self,loc, ele, num=None):
        if num:
            self.element_(loc, ele, num).click()
        else:
            self.element_(loc, ele).click()
    def inputs_(self, loc, ele, value, num=None):
        if num:
            self.element_(loc, ele, num).send_keys(value)
        else:
            self.element_(loc, ele).send_keys(value)
if __name__ == '__main__':
    desired_capas = {
        "deviceName": "emulator-5554",
        "platformName": "Android",
        "appPackage": "com.mxchip.project352",
        "appActivity": "com.mxchip.project352.activity.login.LoginActivity",
        "platformVersion": "7.1.2",
        "noReset": "True"
    }
    i = San(desired_capas)
    i.inputs_(By.ID, 'com.mxchip.project352:id/etPhone', 'qing_an_an')
    i.inputs_(By.CLASS_NAME, 'android.widget.EditText', 'jx123456', 1)
    i.clicks_(By.ID,'com.mxchip.project352:id/cbAgree')
    i.clicks_(By.XPATH,'//*[@text="登录"]')

这里对于初学者或许有些许的复杂,这就是二次封装了,将webdriver里的一些原有的方法,再次写一个类出来,方便自己调用。此外,这里我也没有用上两章所讲的元素方法了,这里用的selenium中的方法。没有安装的可以安装一下。pip install selenium==3.14。selenium的一些方法在appium中依然适用,比如说显示等待、上述例子中所写的方法,只要是支持都可以使用。如果没有name属性,你非得要用,那就显的有点无药可救了。上述的方法没有什么特殊的写法,结合了if-else做了一个判断,因为这里不想写太多的类似的方法了。当然你也可以拆开来写:

def clicks_(self,loc, ele, num):
            self.element_(loc, ele, num).click()
    def click_(self,loc, ele):
            self.element_(loc, ele).click()

上述只是举例,同时也希望能以此,举一反三。

最后说一下传值后的走向,例如i.inputs_(By.ID, 'com.mxchip.project352:id/etPhone', 'qing_an_an')

通过类调用了inputs_方法,他会进行一个判断,看时候存在num值,如果传值了那么就会走if,如果没有则会走else,看示例明显没有num,所以,我们走的else,进入到else后继续调用element_方方法,同样的道理,进行判断,传值,并且放回这个方法给到inputs_方法,执行后面的操作,例如我们需要输入值,那么执行send_keys方法。或许你在跑代码的过程中会遇到元素无法操作或者元素找不到的情况,不慌,下一章就会讲到。

目录
相关文章
|
1月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
112 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
1月前
|
数据采集 存储 监控
实现自动化数据抓取:使用Node.js操控鼠标点击与位置坐标
本文介绍了如何使用Node.js和Puppeteer实现自动化数据抓取,特别是针对新闻网站“澎湃新闻”。通过设置代理IP、User-Agent和Cookie,提高爬虫的效率和隐蔽性,避免被网站封锁。代码示例展示了如何模拟鼠标点击、键盘输入等操作,抓取并整理新闻数据,适用于需要规避IP限制和突破频率限制的场景。
98 10
|
2月前
|
监控 Devops 持续交付
掌握 GitOps:实现 DevOps 自动化的现代方法
【10月更文挑战第19天】GitOps 是一种基于 Git 仓库管理应用配置和集群状态的现代化 DevOps 方法,通过自动化工具实现声明式配置和持续部署。本文介绍了 GitOps 的核心概念、优势、挑战及实施的最佳实践,帮助团队提高部署效率和系统可靠性。
|
2月前
|
测试技术 Python
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
本文介绍了使用Python的unittest框架来加载测试用例的四种方法,包括通过测试用例类、模块、路径和逐条加载测试用例。
97 0
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
|
2月前
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
83 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
|
3月前
|
测试技术
基于LangChain手工测试用例转App自动化测试生成工具
在传统App自动化测试中,测试工程师需手动将功能测试用例转化为自动化用例。市面上多数产品通过录制操作生成测试用例,但可维护性差。本文探讨了利用大模型直接生成自动化测试用例的可能性,介绍了如何使用LangChain将功能测试用例转换为App自动化测试用例,大幅节省人力与资源。通过封装App底层工具并与大模型结合,记录执行步骤并生成自动化测试代码,最终实现高效自动化的测试流程。
|
3月前
|
机器学习/深度学习 物联网 大数据
软件测试的演变与未来:从传统方法到自动化革命
在数字化时代的浪潮下,软件测试作为保障软件质量的重要环节,其方法和工具经历了翻天覆地的变化。本文将带领读者穿梭时光隧道,探索软件测试的发展历程,从手工测试的繁琐与局限性,到自动化测试的高效与精准,再到未来可能迎来的智能化与集成化趋势。通过深入浅出的分析,我们将揭示如何通过不断进化的软件测试技术,提升软件开发的效率和质量,确保在这个快速变化的时代中,软件产品能够稳健前行。
|
3月前
|
机器学习/深度学习 敏捷开发 大数据
软件测试的演变之旅:从传统方法到自动化革命
在数字时代的浪潮下,软件测试作为保障产品质量的关键一环,经历了从手工测试到自动化测试的重大转变。本文将探讨这一演变背后的驱动力、所面临的挑战以及未来的发展趋势,为读者揭示软件测试领域的深层次变革。
|
3月前
|
存储 数据挖掘 测试技术
Python接口自动化中操作Excel文件的技术方法
通过上述方法和库,Python接口自动化中的Excel操作变得既简单又高效,有助于提升自动化测试的整体质量和效率。
43 0
|
4天前
|
JSON 缓存 前端开发
HarmonyOS NEXT 5.0鸿蒙开发一套影院APP(附带源码)
本项目基于HarmonyOS NEXT 5.0开发了一款影院应用程序,主要实现了电影和影院信息的展示功能。应用包括首页、电影列表、影院列表等模块。首页包含轮播图与正在热映及即将上映的电影切换显示;电影列表模块通过API获取电影数据并以网格形式展示,用户可以查看电影详情;影院列表则允许用户选择城市后查看对应影院信息,并支持城市选择弹窗。此外,项目中还集成了Axios用于网络请求,并进行了二次封装以简化接口调用流程,同时添加了请求和响应拦截器来处理通用逻辑。整体代码结构清晰,使用了组件化开发方式,便于维护和扩展。 该简介概括了提供的内容,但请注意实际开发中还需考虑UI优化、性能提升等方面的工作。
45 11

热门文章

最新文章