appium 学习笔记(三)

原创 2018年04月17日 11:32:34

unittest 框架:

把原来的自动化脚本修改成:

from appium  import webdriver
from time import sleep
import adbbase
import unittest


class happyfoodTest(unittest.TestCase): #自动化框架,继承unittest.TestCase
    """Test com.happy.food"""

    def setUp(self): #准备测试环境,每个用例前执行
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['paltformVersion'] = adbbase.platformVersion()
        desired_caps['deviceName'] = adbbase.platformName()
        desired_caps['appPackage'] = adbbase.appPackage()
        desired_caps['appActivity'] = adbbase.appActivity()

        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)

        sleep(5)

    def test_login(self): #用例,以test开头
        """Test login"""
        self.driver.find_element_by_id("phoneNumber").send_keys("13410066133")
        self.driver.find_element_by_id("passWord").send_keys("1234567a")
        self.driver.back()
        self.driver.find_element_by_id("login").click()

    def tearDown(self): #清理环境,用例执行完后执行
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

执行后发现会报错:

ResourceWarning: unclosed file <_io.TextIOWrapper name=3 encoding='cp936'>

参考别人的脚本,修改自动获取app、设备信息的方式为子进程subprocess

import re
import os
import subprocess

appLocation = "E:\\test\kxlp5_v1.5.5.apk"

def platformName():
    # readDeviceName = list(os.popen('adb devices').readlines())
    # deviceName = re.findall(r'^\w*\b',readDeviceName[1])[0]
    # return deviceName

    cmd = "adb devices"
    result = ""
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE,
                         stdin=subprocess.PIPE, shell=True)
    (output, err) = p.communicate()
    if output != "":
        result = output.split()[4].decode() 
    return result

def platformVersion():
    # deviceAndroidVersion = list(os.popen('adb shell getprop ro.build.version.release').readlines())
    # deviceVersion = re.findall(r'^\w*\b',deviceAndroidVersion[0])[0]
    # return deviceVersion

    cmd = "adb shell getprop ro.build.version.release"
    result = ""
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE,
                         stdin=subprocess.PIPE, shell=True)
    (output, err) = p.communicate()
    if output != "":
        result = output.split()[0].decode()
    return result

def appPackage():
    # appPackageAdb = list(os.popen('chcp 65001 | aapt dump badging '+appLocation+'  | findstr package').readlines())
    # appPackage = re.findall(r"name='(.+?)' versionCode",appPackageAdb[0])[0]
    # return appPackage

    cmd = "chcp 65001 | aapt dump badging "+appLocation+"  | findstr package"
    result = ""
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE,
                         stdin=subprocess.PIPE, shell=True)
    (output, err) = p.communicate()
    if output != "":
        result = re.findall(r"name='(.+?)' versionCode",output.decode())[0]
    return result

def appActivity():
    # appActivityAdb = list(os.popen('chcp 65001 | aapt dump badging '+appLocation+'  | findstr launchable-activity').readlines())
    # appActivity = re.findall(r"name='(.+?)'  label",appActivityAdb[0])[0]
    # return appActivity

    cmd = "chcp 65001 | aapt dump badging "+appLocation+"  | findstr launchable-activity"
    result = ""
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE,
                         stdin=subprocess.PIPE, shell=True)
    (output, err) = p.communicate()
    if output != "":
        result = re.findall(r"name='(.+?)'  label",output.decode())[0]
    return result


subprocess为子进程的方法

split为切割方法,默认以所有空字符进行切片

decode将其他编码字符串解码成python默认的unicode

这里不解码的话可能会报错

re.findall 是正则表达的其中一种


用C++Builder 编写定时关机程序

用C++Builder 编写定时关机程序 辽宁大学 郑永凡 从Internet下载较大的软件时,由于目前网络带宽的原因,许多人喜欢在晚间进行,而到深夜时就存在人需要休息的问题。目前绝大多数下载软件可以...
  • stanely
  • stanely
  • 2001-06-07 15:29:00
  • 1455

实验楼Linux学习笔记(三)之 目录结构及文件基本操作

实验楼Linux学习笔记(三)之 目录结构及文件基本操作 一、Linux 目录结构 UNIX 是以目录为主的,Linux 也继承了这一优良特性。 Linux 是以树...
  • java2316
  • java2316
  • 2016-09-05 15:18:19
  • 374

Servlet学习笔记(三)

主要知识点: 1、Forward和Redirect 2、ServletConfig和ServletContext 单一职责原则:即每个类只完成单一的功能,这样做的好处是使类更简短,方便后期维护程序...
  • jiujiuming
  • jiujiuming
  • 2016-09-07 20:01:11
  • 189

kaldi学习笔记-三音素训练2

本文介绍三音素训练部分。
  • fengzhou_
  • fengzhou_
  • 2017-09-23 14:17:52
  • 518

Appium Recipes

  • 2018年04月19日 09:25
  • 10.26MB
  • 下载

Andrew Ng 机器学习笔记(三)

欠拟合与过拟合的概念 如果我们以一个房价的训练集来做出一个线性的预测,如果我们做一个一次函数,那房价的预测线条应该是一个向上攀升的直线;如果做一个二次函数,可能有些部分会陡一点有些部分会平缓一点,...
  • chixujohnny
  • chixujohnny
  • 2016-03-10 18:41:11
  • 390

hadoop学习笔记(三)

  • 2013年11月12日 14:54
  • 28KB
  • 下载

appium完整环境安装

  • 2017年10月29日 15:58
  • 1.46MB
  • 下载

mybatis和hibernate的区别---Mybatis的学习笔记(四)

具体说明:Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将j...
  • u013991521
  • u013991521
  • 2016-12-04 16:21:22
  • 187

Matplotlib学习笔记(三)

注解: import matplotlib.pyplot as plt import numpy as np x = np.linspace(-3,3,50) y = 2*x+1 plt.figu...
  • MainTain_
  • MainTain_
  • 2017-08-14 21:06:25
  • 95
收藏助手
不良信息举报
您举报文章:appium 学习笔记(三)
举报原因:
原因补充:

(最多只允许输入30个字)