Appium自动化框架从0到1之 公共方法的封装

简介: Appium自动化框架从0到1之 公共方法的封装

在写测试用例的时候,最常用的就是方法的调用,

我们在这里,把公共方法封装到一个文件中,


这样以后需要使用,直接调用这个方法就可以了。


直接上代码:

common_func.py
# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-7-9
"""
'''
公共方法封装
'''
from baseView.baseView import BaseView
from public.desired_caps import appium_desired
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
import logging.config
import os,time,csv
class Common(BaseView):
    #取消升级和跳过引导按钮
    cancel_upgradeBtn = (By.ID,'android:id/button2')
    #跳过按钮
    skipBtn = (By.ID,'com.tal.kaoyan:id/tv_skip')
    #登录/注册后浮窗广告 关闭按钮
    wemedia_cancel= (By.ID,'com.tal.kaoyan:id/view_wemedia_cacel')
    def check_upgradeBtn(self):
        '''
        追加 try...except...else 语句
        如果没有定位到update button, 则直接执行except
        如果定位到update button,则执行else语句
        :return:
        '''
        logging.info('============check_updateBtn===============')
        try:
            element = self.driver.find_element(*self.cancel_upgradeBtn)
        except NoSuchElementException :
            logging.info('update element is not found!')
        else:
            logging.info('click cancel button')
            element.click()
    def check_skipBtn(self):
        '''
        追加 try...except...else 语句
        如果没有定位到skip button, 则直接执行except
        如果定位到skip button,则执行else语句
        :return:
        '''
        logging.info('============check_skipBtn===============')
        try:
            element = self.driver.find_element(*self.skipBtn)
        except NoSuchElementException:
            logging.info('skip element is not found!')
        else:
            logging.info('click skip button')
            element.click()
    def get_screenSize(self):
        '''
        获取屏幕尺寸
        x:宽
        y:高
        :return:
        '''
        x = self.get_window_size()['width']
        y = self.get_window_size()['height']
        return x,y
    def swipeLeft(self):
        '''
        向左滑动,
        x1:横坐标起始位置
        y1:纵坐标起始位置
        x2:横坐标终止位置
        1000:持续时间 1000ms
        :return:
        '''
        logging.info('==========swipeLeft==============')
        l = self.get_screenSize()
        y1 = int(l[1] * 0.5)
        x1 = int(l[0] * 0.95)
        x2 = int(l[0] *0.25)
        self.swipe(x1,y1,x2,y1,1000)
    def getTime(self):
        '''
        获取当前时间,以年-月-日  时_分_秒  形式显示
        :return:
        '''
        self.now = time.strftime("%Y-%m-%d %H_%M_%S")
        return self.now
    def getScreenShot(self,module):
        '''
        设置截图
        :param module:
        :return:
        '''
        time  = self.getTime()
        base_path = os.path.dirname(os.path.dirname(__file__))
        screenshot_path = os.path.join(base_path,'screenshot')
        image_file = os.path.join(screenshot_path,'%s_%s.png' %(module,time))
        # image_file = os.path.dirname(os.path.dirname(__file__)) +'/screenshot/%s_%s.png' %(module,time)
        logging.info('get %s  screenshot ' % module)
        self.driver.get_screenshot_as_file(image_file)
    def check_market_ad(self):
        '''
        检测登录或者注册之后的界面浮窗广告
        :return:
        '''
        logging.info('=======check_market_ad=======')
        try:
            element = self.driver.find_element(*self.wemedia_cancel)
        except NoSuchElementException:
            pass
        else:
            logging.info('close market ad')
            element.click()
    def get_csv_data(self,csv_file,line):
        '''
        读取csv文件里的数据
        1.用到的是enumerate()方法
        2.encoding= utf-8-sig:防止读取数据是出现非法字符
           >> 直接写utf-8,打印结果为 ['\ufeffusername\t', 'password']
         utf-8与utf-8-sig两种编码格式的区别:
           >>UTF-8以字节为编码单元,它的字节顺序在所有系统中都是一样的,没有字节序的问题,也因此它实际上并不需要BOM(“ByteOrder Mark”)。
           >>但是UTF-8 with BOM即utf-8-sig需要提供BOM。
        :param csv_file:
        :param line:
        :return:
        '''
        logging.info('=======et_csv_data=========')
        with open(csv_file,'r',encoding='utf-8-sig') as file:
            reader = csv.reader(file)
            #循环,索引从1开始
            for index,row in enumerate(reader,1):
                if index ==line:
                    return row
if __name__ == '__main__':
    driver  = appium_desired()
    com = Common(driver)
    # com.swipeLeft()
    # com.getScreenShot('startAPP')
    csv_file = '../data/account.csv'
    #获取文件,并读取第一行数据
    data = com.get_csv_data(csv_file,1)
    print(data)
    print(data[1])

这里的account.csv 文件内容,是这样的


嗯,封装好,以后就直接调用方法,省时省力~~


目录
相关文章
|
23天前
|
设计模式 前端开发 JavaScript
自动化测试框架设计原则与最佳实践####
本文深入探讨了构建高效、可维护的自动化测试框架的核心原则与策略,旨在为软件测试工程师提供一套系统性的方法指南。通过分析常见误区,结合行业案例,阐述了如何根据项目特性定制自动化策略,优化测试流程,提升测试覆盖率与执行效率。 ####
47 6
|
23天前
|
人工智能 前端开发 测试技术
探索软件测试中的自动化框架选择与优化策略####
本文深入剖析了当前主流的自动化测试框架,通过对比分析各自的优势、局限性及适用场景,为读者提供了一套系统性的选择与优化指南。文章首先概述了自动化测试的重要性及其在软件开发生命周期中的位置,接着逐一探讨了Selenium、Appium、Cypress等热门框架的特点,并通过实际案例展示了如何根据项目需求灵活选用与配置框架,以提升测试效率和质量。最后,文章还分享了若干最佳实践和未来趋势预测,旨在帮助测试工程师更好地应对复杂多变的测试环境。 ####
42 4
|
22天前
|
监控 jenkins 测试技术
自动化测试框架的构建与实践
【10月更文挑战第40天】在软件开发周期中,测试环节扮演着至关重要的角色。本文将引导你了解如何构建一个高效的自动化测试框架,并深入探讨其设计原则、实现方法及维护策略。通过实际代码示例和清晰的步骤说明,我们将一起探索如何确保软件质量,同时提升开发效率。
35 1
|
29天前
|
机器学习/深度学习 前端开发 测试技术
探索软件测试中的自动化测试框架选择与优化策略####
本文深入探讨了在当前软件开发生命周期中,自动化测试框架的选择对于提升测试效率、保障产品质量的重要性。通过分析市场上主流的自动化测试工具,如Selenium、Appium、Jest等,结合具体项目需求,提出了一套系统化的选型与优化策略。文章首先概述了自动化测试的基本原理及其在现代软件开发中的角色变迁,随后详细对比了各主流框架的功能特点、适用场景及优缺点,最后基于实际案例,阐述了如何根据项目特性量身定制自动化测试解决方案,并给出了持续集成/持续部署(CI/CD)环境下的最佳实践建议。 --- ####
|
15天前
|
人工智能 监控 测试技术
探索软件测试中的自动化框架选择与优化策略####
【10月更文挑战第21天】 本文深入剖析了软件测试领域面临的挑战,聚焦于自动化测试框架的选择与优化这一核心议题。不同于传统摘要的概述方式,本文将以一个虚拟案例“X项目”为线索,通过该项目从手动测试困境到自动化转型的成功历程,生动展现如何根据项目特性精准匹配自动化工具(如Selenium、Appium等),并结合CI/CD流程进行深度集成与持续优化,最终实现测试效率与质量的双重飞跃。读者将跟随“X项目”团队的视角,直观感受自动化框架选型的策略性思考及实践中的优化技巧,获得可借鉴的实战经验。 ####
28 0
|
29天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
84 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
13天前
|
机器学习/深度学习 人工智能 Java
探索软件测试中的自动化框架选择与优化策略####
本文深入探讨了在软件测试领域,面对众多自动化测试框架时,如何根据项目特性、团队技能及长远规划做出最佳选择,并进一步阐述了优化这些框架以提升测试效率与质量的策略。通过对比分析主流自动化测试框架的优劣,结合具体案例,本文旨在为测试团队提供一套实用的框架选型与优化指南。 ####
|
13天前
|
敏捷开发 前端开发 Java
软件测试中的自动化测试框架选择与实践
在当今软件开发生命周期中,自动化测试已成为提升软件质量和开发效率的关键手段。本文旨在探讨自动化测试框架的选择标准及其在实际项目中的应用实践。通过对主流自动化测试框架的分析比较,结合具体案例,本文将阐述如何根据项目需求和团队特点选择合适的自动化测试工具,并分享实施过程中的经验教训。
30 1
|
20天前
|
jenkins 测试技术 持续交付
自动化测试框架的构建与优化:提升软件交付效率的关键####
本文深入探讨了自动化测试框架的核心价值,通过对比传统手工测试方法的局限性,揭示了自动化测试在现代软件开发生命周期中的重要性。不同于常规摘要仅概述内容,本部分强调了自动化测试如何显著提高测试覆盖率、缩短测试周期、降低人力成本,并促进持续集成/持续部署(CI/CD)流程的实施,最终实现软件质量和开发效率的双重飞跃。通过具体案例分析,展示了从零开始构建自动化测试框架的策略与最佳实践,包括选择合适的工具、设计高效的测试用例结构、以及如何进行性能调优等关键步骤。此外,还讨论了在实施过程中可能遇到的挑战及应对策略,为读者提供了一套可操作的优化指南。 ####
|
29天前
|
测试技术 API Android开发
探索软件测试中的自动化框架选择与实践####
本文深入探讨了软件测试领域内,面对众多自动化测试框架时,如何依据项目特性和团队需求做出明智选择,并分享了实践中的有效策略与技巧。不同于传统摘要的概述方式,本文将直接以一段实践指南的形式,简述在选择自动化测试框架时应考虑的核心要素及推荐路径,旨在为读者提供即时可用的参考。 ####