前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >工厂设计模式在自动化中的引用(二)

工厂设计模式在自动化中的引用(二)

作者头像
无涯WuYa
发布2018-10-25 16:17:07
发布2018-10-25 16:17:07
8830
举报

生命不息,整合不息!

工厂设计模式在自动化中的引用(一)中介绍了利用工厂设计模式,整合selenium2和appium,写在一个框架中,可以实现对web应用程序,移动应用程序的自动化测试,在之前介绍了对web的测试实例代码,本文章介绍对移动应用程序的测试,关于appium本文章先不介绍,待后期完整的介绍appium的知识体系。在一个测试工厂中,生产一个可以测试web,可以测试app的测试工具,测试web或app什么,给什么框架测试,相互独立而有相互有依据,互相不影响,见如下的流程图:

实现的dashPage.py的代码见如下:

#!/usr/bin/env python #coding:utf-8

from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support.expected_conditions import NoSuchElementException from selenium.webdriver.support.expected_conditions import NoSuchFrameException from selenium.webdriver.support import expected_conditions from selenium.webdriver.common.by import By from selenium import webdriver from appium import webdriver

class Factory: def createAutomation(self,page): if page=='web': return WebPage() elif page=='app': return AppPage()

class AutomationPage: def __str__(self): return 'page'

def findElement(self,*loc): try: return self.driver.find_element(*loc) except(NoSuchElementException,KeyError,ValueError),e: print 'Error details :%s'%(e.args[0])

class WebPage(AutomationPage): def __str__(self): return 'web'

def __init__(self,driver): self.driver=driver

def goTo(self,base_url): self.driver.get(base_url)

def getCurrentUrl(self): return self.driver.current_url

class AppPage(AutomationPage): def __str__(self): return 'app'

def __init__(self,driver): self.driver=driver

def getDesiredcaps(self,version,deviceName,package,activity): """ :param version: 设备版本 :param deviceName: 设备名称 :param package: apk包名称 :param activity: apk的activity :return:android初始化信息 """ PATH=lambda p: os.path.abspath( os.path.join(os.path.dirname(__file__),p) ) desired_caps={} desired_caps['platformName']='Android' desired_caps['platformVersion']=version # desired_caps['deviceName']='Android Emulator' desired_caps['deviceName']=deviceName desired_caps['appPackage']=package desired_caps['appActivity']=activity desired_caps['waitappActivity']='android.webkit.WebView' desired_caps['browserName']='' self.driver=webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps) self.driver.implicitly_wait(30) 代码截图为:

编写demoAppPage.py的模块,已测试微博在android手机的登录为实例,编写的代码见如下:

#coding:utf-8

from selenium import webdriver from selenium.webdriver.common.by import By from Page import dashPage from appium import webdriver import time

class demoAndroidPage(dashPage.AppPage): login_loc=(By.ID,'com.sina.weibo:id/titleSave') userName_loc=(By.ID,'com.sina.weibo:id/etLoginUsername') password_loc=(By.ID,'com.sina.weibo:id/etPwd') loginButton_loc=(By.ID,'com.sina.weibo:id/bnLogin')

def clickLogin(self): self.findElement(*self.login_loc).click() time.sleep(2)

def inputUserName(self,username): self.findElement(*self.userName_loc).send_keys(username) time.sleep(2)

def inputPasswd(self,password): self.findElement(*self.password_loc).send_keys(password) time.sleep(2)

def clickLoginButton(self): self.findElement(*self.loginButton_loc).click() time.sleep(2)

def login(self,username='admin',password='admin'): self.clickLogin() self.inputUserName(username) self.inputPasswd(password) self.clickLoginButton()

代码截图:

下来就是测试层了,很简单了,直接继承对象层,实现代码见如下:

#coding:utf-8

import unittest,os,sys from appium import webdriver from appium.common.exceptions import NoSuchContextException from selenium.webdriver.common.touch_actions import TouchActions from time import sleep from Page import dashPage,demoAppPage

class AndroidSina(unittest.TestCase,demoAppPage.demoAndroidPage,dashPage.AppPage): def setUp(self): self.getDesiredcaps('4.4.4','Samsung Galaxy S4','com.sina.weibo','com.sina.weibo.MainTabActivity')

def testLogin(self): self.login()

def tearDown(self): self.driver.quit()

if __name__=='__main__': suite=unittest.TestSuite(unittest.makeSuite(AndroidSina)) result=unittest.TextTestRunner(verbosity=2).run(suite) sys.exit(not result.wasSuccessful())

见代码截图:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档