大家好,现在有个情况是这样的,我在写公司 app 的脚本。之前我用 monkeyrunner 实现了基本的流程,脚本是一次性跑完所有的 case 的。
但是我学了 appium 后,写了个脚本,发现脚本每次运行一个函数都会调用 setup() 里的登录功能。。。也就是说,我每次运行脚本里的一个函数,我都会点击 home 键后重新登录。
我现在想跟 monkeyrunner 一样,登录操作只做一次,然后按照顺序运行脚本里的函数
我的脚本代码如下~当然测试报告是 ok 的
#coding=utf-8
import os
import unittest,sys,time,re,datetime,HTMLTestRunner
from appium import webdriver
from time import sleep
from appium.common.exceptions import NoSuchContextException
import sys
#reload(sys)
#sys.setdefaultencoding("utf-8")
# Returns abs path relative to this file and not cwd
PATH = lambda p: os.path.abspath(
os.path.join(os.path.dirname(__file__), p)
)
class ContactsAndroidTests(unittest.TestCase):
def setUp(self):
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '4.3'
desired_caps['deviceName'] = '192.168.56.101:5555'
'''desired_caps['app'] = PATH(
'../../../sample-code/apps/ContactManager/ContactManager.apk'
)'''
desired_caps['appPackage'] = 'com.jiudao.ccare'
desired_caps['appActivity'] = '.StartActivity'
desired_caps["unicodeKeyboard"] = "True"
desired_caps["resetKeyboard"] = "True"
self.driver = webdriver.Remote('http://192.168.10.156:4723/wd/hub', desired_caps)
self.driver.implicitly_wait(1)
#登录操作
time.sleep(3)
username=self.driver.find_element_by_id("com.jiudao.ccare:id/user_name")
username.clear()
username.send_keys("suser@umser")
#assertThat(username.get_attribute("text"),equalTo("suser@umser"));
#校验
#text=username.text
self.assertEqual("suser@umser",username.get_attribute("text"),"username error")
password=self.driver.find_element_by_id("com.jiudao.ccare:id/user_password")
password.clear()
password.send_keys("1")
#self.assertEqual("杭州市",text2,"parent error")
#勾选记住密码框
self.driver.find_element_by_id("com.jiudao.ccare:id/keep_password").click()
#勾选自动登录
#self.driver.find_element_by_id("com.jiudao.ccare:id/auto_login").click()
#进行登录
self.driver.find_element_by_id("com.jiudao.ccare:id/login").click()
time.sleep(4)
def tearDown(self):
self.driver.close_app()
self.driver.quit()
#首页操作
def homePage(self):
"""首页操作"""
#左上角的首页控件
e1=self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'首页')]").text
self.assertEqual("首页",e1,"username error")
#左下角的首页控件
e2=self.driver.find_element_by_id("com.jiudao.ccare:id/main_activity_rb_one")
e23=e2.text
self.assertEqual("首页",e23,"username error")
e2.click()
time.sleep(1)
#服务管理-等待处理事件数模块
def wait(self):
"""服务管理-等待处理事件数模块"""
time.sleep(1)
self.driver.find_element_by_id("com.jiudao.ccare:id/main_activity_rb_two").click()
self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'等待处理事件数')]").click()
#进入第一个事件
time.sleep(1)
#self.driver.find_element_by_xpath("//android.widget.LinearLayout[contains(@index,0)]").click()
self.driver.find_element_by_xpath("//android.widget.ListView/android.widget.LinearLayout[contains(@index,0)]").click()
#资产信息
time.sleep(0.5)
self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'资产信息')]").click()
#基本信息
self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'基本信息')]").click()
#历史信息
self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'历史信息')]").click()
#事件处理
self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'事件处理')]").click()
#状态弹出框
self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_event_deal_state").click()
time.sleep(1)
self.driver.find_element_by_xpath("//android.widget.CheckedTextView[contains(@text,'处理中')]").click()
#输入反馈信息
#self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_event_deal_content").send_keys("你好")
#self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_event_deal_send").click()
self.driver.find_element_by_xpath("//android.widget.ImageButton[contains(@content-desc,'转到上一层级')]").click()
time.sleep(0.5)
self.driver.find_element_by_xpath("//android.widget.ImageButton[contains(@content-desc,'转到上一层级')]").click()
#服务管理-正在处理事件数模块
def process(self):
"""服务管理-正在处理事件数模块"""
time.sleep(1)
self.driver.find_element_by_id("com.jiudao.ccare:id/main_activity_rb_two").click()
self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'正在处理事件数')]").click()
#进入第一个事件
time.sleep(1)
#self.driver.find_element_by_xpath("//android.widget.LinearLayout[contains(@index,0)]").click()
self.driver.find_element_by_xpath("//android.widget.ListView/android.widget.LinearLayout[contains(@index,0)]").click()
#资产信息
time.sleep(3)
self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'资产信息')]").click()
#基本信息
self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'基本信息')]").click()
#历史信息
self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'历史信息')]").click()
#事件处理
self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'事件处理')]").click()
#状态弹出框
self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_event_deal_state").click()
self.driver.find_element_by_xpath("//android.widget.CheckedTextView[contains(@text,'处理中')]").click()
#输入反馈信息
#self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_event_deal_content").send_keys("")
#self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_event_deal_send").click()
self.driver.find_element_by_xpath("//android.widget.ImageButton[contains(@content-desc,'转到上一层级')]").click()
time.sleep(0.5)
self.driver.find_element_by_xpath("//android.widget.ImageButton[contains(@content-desc,'转到上一层级')]").click()
#服务管理-已完成事件数模块
def completed(self):
"""服务管理-已完成事件数模块"""
time.sleep(1)
self.driver.find_element_by_id("com.jiudao.ccare:id/main_activity_rb_two").click()
self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'已完成事件数')]").click()
#进入第一个事件
time.sleep(1)
#self.driver.find_element_by_xpath("//android.widget.LinearLayout[contains(@index,0)]").click()
self.driver.find_element_by_xpath("//android.widget.ListView/android.widget.LinearLayout[contains(@index,0)]").click()
#资产信息
time.sleep(0.5)
self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'资产信息')]").click()
#基本信息
self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'基本信息')]").click()
#历史信息
self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'历史信息')]").click()
#事件处理
self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'事件处理')]").click()
#状态弹出框
self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_event_deal_state").click()
self.driver.find_element_by_xpath("//android.widget.CheckedTextView[contains(@text,'完成')]").click()
#输入反馈信息
#self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_event_deal_content").send_keys("")
#self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_event_deal_send").click()
self.driver.find_element_by_xpath("//android.widget.ImageButton[contains(@content-desc,'转到上一层级')]").click()
time.sleep(0.5)
self.driver.find_element_by_xpath("//android.widget.ImageButton[contains(@content-desc,'转到上一层级')]").click()
#退出操作
def exitAccount(self):
"""退出操作"""
#进入关于蕴客界面
time.sleep(2)
e3=self.driver.find_element_by_id("com.jiudao.ccare:id/main_activity_rb_four")
e3.click()
#点击检查更新按钮
update=self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'检查更新')]")
update.click()
#点击退出按钮账号按钮
exit=self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_about_out_login")
exit.click()
if __name__ == '__main__':
suite = unittest.TestSuite()
#suite.addTest(ContactsAndroidTests("login"))
suite.addTest(ContactsAndroidTests("homePage"))
suite.addTest(ContactsAndroidTests("wait"))
suite.addTest(ContactsAndroidTests("process"))
suite.addTest(ContactsAndroidTests("completed"))
suite.addTest(ContactsAndroidTests("exitAccount"))
timestr = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
filename = "D:\\appium\\appiumresult\\result_" + timestr + ".html"
print (filename)
fp = open(filename, 'wb')
runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title='测试结果',
description='测试报告'
)
#suite = unittest.TestLoader().loadTestsFromTestCase(ContactsAndroidTests)
#unittest.TextTestRunner(verbosity=2).run(suite)
runner.run(suite)
#g_browser.quit()
fp.close() #测试报告关闭