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

目录
相关文章
|
3月前
|
数据采集 存储 监控
实现自动化数据抓取:使用Node.js操控鼠标点击与位置坐标
本文介绍了如何使用Node.js和Puppeteer实现自动化数据抓取,特别是针对新闻网站“澎湃新闻”。通过设置代理IP、User-Agent和Cookie,提高爬虫的效率和隐蔽性,避免被网站封锁。代码示例展示了如何模拟鼠标点击、键盘输入等操作,抓取并整理新闻数据,适用于需要规避IP限制和突破频率限制的场景。
184 10
家政服务小程序APP开发,做好上门家政最快的方法是什么?
在家政服务领域,打造成功的平台并非易事。本文分享了三个关键步骤:避免初期盲目投入、采用低成本获客方式、建立有效的阿姨筛选机制。遵循这些方法,可助你避开常见陷阱,成为行业头部平台。
|
4月前
|
监控 Devops 持续交付
掌握 GitOps:实现 DevOps 自动化的现代方法
【10月更文挑战第19天】GitOps 是一种基于 Git 仓库管理应用配置和集群状态的现代化 DevOps 方法,通过自动化工具实现声明式配置和持续部署。本文介绍了 GitOps 的核心概念、优势、挑战及实施的最佳实践,帮助团队提高部署效率和系统可靠性。
|
4月前
|
测试技术 Python
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
本文介绍了使用Python的unittest框架来加载测试用例的四种方法,包括通过测试用例类、模块、路径和逐条加载测试用例。
143 0
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
|
4月前
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
128 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
|
5月前
|
机器学习/深度学习 物联网 大数据
软件测试的演变与未来:从传统方法到自动化革命
在数字化时代的浪潮下,软件测试作为保障软件质量的重要环节,其方法和工具经历了翻天覆地的变化。本文将带领读者穿梭时光隧道,探索软件测试的发展历程,从手工测试的繁琐与局限性,到自动化测试的高效与精准,再到未来可能迎来的智能化与集成化趋势。通过深入浅出的分析,我们将揭示如何通过不断进化的软件测试技术,提升软件开发的效率和质量,确保在这个快速变化的时代中,软件产品能够稳健前行。
|
5月前
|
机器学习/深度学习 敏捷开发 大数据
软件测试的演变之旅:从传统方法到自动化革命
在数字时代的浪潮下,软件测试作为保障产品质量的关键一环,经历了从手工测试到自动化测试的重大转变。本文将探讨这一演变背后的驱动力、所面临的挑战以及未来的发展趋势,为读者揭示软件测试领域的深层次变革。
|
5月前
|
存储 数据挖掘 测试技术
Python接口自动化中操作Excel文件的技术方法
通过上述方法和库,Python接口自动化中的Excel操作变得既简单又高效,有助于提升自动化测试的整体质量和效率。
54 0
|
4月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
97 4
|
28天前
|
机器学习/深度学习 人工智能 运维
基于AI的自动化事件响应:智慧运维新时代
基于AI的自动化事件响应:智慧运维新时代
101 11

热门文章

最新文章