老板叫我写个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方法。或许你在跑代码的过程中会遇到元素无法操作或者元素找不到的情况,不慌,下一章就会讲到。

目录
相关文章
|
运维 iOS开发 Windows
windows电脑备案ios APP获取公钥和证书指纹Sha-1值的方法
在阿里云进行APP备案、在备案IOS端的环节的时候,发现需要我们将p12证书安装在电脑上,再用xcode或或钥匙串访问来获取这个证书的公钥和sha-1值。 但是大部分开发uniapp应用的同学们,或者进行发布的运维人员的电脑都是windows,无法按照阿里云的教程来获取ios的公钥和sha-1。备案就被卡主了。 这里介绍下另一个方法,就是使用香蕉云编来在线上传证书获取。如下图所示,打开香蕉云编后,找到下图这个功能
1590 0
|
存储 Linux 容器
【Container App】在容器中抓取网络包的方法
本文介绍在Azure Container App中安装tcpdump抓取网络包,并通过Storage Account上传抓包文件的方法。内容包括使用curl和nc测试外部接口连通性、长Ping端口、安装tcpdump、抓取网络包、以及通过crul命令上传文件至Azure Storage。适用于需要分析网络请求和排查网络问题的场景。
407 0
|
API Go 网络架构
【Azure Logic App】特殊的方法来停止正常步骤无法停止的Workflow Job
本文介绍了一种特殊方法,用于解决标准版Logic App在异常情况下无法正常停止的问题。当点击Cancel按钮报错“WorkflowRunCanNotBeCancelled”时,可通过以下步骤解决:进入Logic App的Kudu页面,定位到`C:\home\site\wwwroot`目录下的`host.json`文件,添加`Jobs.SuspendedJobPartition`和`Jobs.CleanupJobPartition`参数,并以大写格式设置值为`"<WORKFLOWID>:2D<RUNID>"`。调整后可成功停止异常Job
500 18
|
存储 JavaScript
(ERP系统查看DWG)MxCAD APP调用内部弹框的方法
MxCAD APP 二次开发提供了调用项目内部弹框的接口,以保持样式统一。用户需创建 `test_dialog` 文件夹并依次创建 `dialog.ts`、`dialog.vue` 和 `index.ts` 文件来注册、构建和渲染弹框。通过 `useDialogIsShow` 钩子函数控制弹框显示,并可在方法中直接调用 `dialog.showDialog()` 来控制弹框显隐。此外,还支持监听确认或取消事件获取数据,以及通过配置 `vite.config.ts` 解决样式冲突问题。最终在 `src/index.ts` 中引入相关文件即可实现弹框功能。
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
1510 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
数据采集 存储 监控
实现自动化数据抓取:使用Node.js操控鼠标点击与位置坐标
本文介绍了如何使用Node.js和Puppeteer实现自动化数据抓取,特别是针对新闻网站“澎湃新闻”。通过设置代理IP、User-Agent和Cookie,提高爬虫的效率和隐蔽性,避免被网站封锁。代码示例展示了如何模拟鼠标点击、键盘输入等操作,抓取并整理新闻数据,适用于需要规避IP限制和突破频率限制的场景。
959 10
|
机器学习/深度学习 算法 文件存储
神经架构搜索:自动化设计神经网络的方法
在人工智能(AI)和深度学习(Deep Learning)快速发展的背景下,神经网络架构的设计已成为一个日益复杂而关键的任务。传统上,研究人员和工程师需要通过经验和反复试验来手动设计神经网络,耗费大量时间和计算资源。随着模型规模的不断扩大,这种方法显得愈加低效和不够灵活。为了解决这一挑战,神经架构搜索(Neural Architecture Search,NAS)应运而生,成为自动化设计神经网络的重要工具。
1129 0
|
监控 Devops 持续交付
掌握 GitOps:实现 DevOps 自动化的现代方法
【10月更文挑战第19天】GitOps 是一种基于 Git 仓库管理应用配置和集群状态的现代化 DevOps 方法,通过自动化工具实现声明式配置和持续部署。本文介绍了 GitOps 的核心概念、优势、挑战及实施的最佳实践,帮助团队提高部署效率和系统可靠性。
|
测试技术 Python
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
本文介绍了使用Python的unittest框架来加载测试用例的四种方法,包括通过测试用例类、模块、路径和逐条加载测试用例。
624 0
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
694 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法