3 模块与函数
3.1程序结构
python的程序由package,module,function组成,分别是包,模块,函数。模块是函数和类的集合,包,模块,函数之间的关系如下:
3.2模块
python的程序就是由模块来组成,一个python文件可以看成是一个模块,而模块一般由代码,函数,或者类组成。如下代码,创建demo.py文件,编写一个自动化的测试脚本,demo.py文件就是模块,见代码:
#!coding:utf-8
from seleniumimport webdriver
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('http://www.baidu.com')
element=driver.find_element_by_id('kw')
element.send_keys('selenium')
driver.quit()
使用模块中的函数或者类的时候,首先需要把模块导入,模块的导入是import,import可以直接导入模块,如import time。如果不想使用程序的前缀,可以使用from ... import ...,如from time import sleep。
模块的属性:__name__一般是判断是否是程序的入口,见程序的实例代码:
#!coding:utf-8
from seleniumimport webdriver
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('http://www.baidu.com')
element=driver.find_element_by_id('kw')
element.send_keys('selenium')
driver.quit()
if__name__=='__main__':
print u'主程序运行'
else:
print u'Sorry,程序被另外的模块调用'
3.3函数
python的函数是是一段可重复多次调用的代码,依据参数,来返回结果。python的函数定义非常简单,如下定义一个二个数相加的方法,见代码:
def add(x,y):
return x+y
print add(2,3)
对自动化的测试脚本进行函数化,见代码:
def test():
driver=webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('http://www.baidu.com')
driver.quit()
test()
OK,我们把百度登录的代码再次打印出来,然后进行函数化,创建文件baidu.py,百度登录退出的源码为:
#!coding:utf-8
from seleniumimport webdriver
fromselenium.webdriver.common.action_chains import ActionChains
from time import sleep
driver=webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('http://www.baidu.com')
driver.find_element_by_link_text(u'登录').click()
driver.find_element_by_id('TANGRAM__PSP_8__userName').send_keys('850460807@qq.com')
driver.find_element_by_id('TANGRAM__PSP_8__password').send_keys('cl070209')
driver.find_element_by_id('TANGRAM__PSP_8__submit').click()
element=driver.find_element_by_xpath(".//*[@id='s_username_top']/span")
#获取用户昵称
niCheng=element.text
sleep(3)
ActionChains(driver).move_to_element(element).perform()
sleep(3)
driver.find_element_by_xpath(".//*[@id='s_user_name_menu']/div/a[5]").click()
driver.find_element_by_xpath(".//*[@id='tip_con_wrap']/div[3]/a[3]").click()
assert text in u'百度昵称'
函数化后的文件为location.py,我们把需要封装的公共方法封装在location.py的文件中,location.py的文件源码为:
#!coding:utf-8
from seleniumimport webdriver
from selenium.webdriver.common.action_chainsimport ActionChains
from time import sleep
deffindId(driver,id):
f=driver.find_element_by_id(id)
return f
deffindLinkText(driver,linkText):
f=driver.find_element_by_link_text(linkText)
return f
def findXpath(driver,xpath):
f=driver.find_element_by_xpath(xpath)
return f
#登录方法
deflogin(driver,username='liwangpingmysql@outlook.com',passwd='194935server'):
findLinkText(driver,u'登录').click()
sleep(2)
findId(driver,'TANGRAM__PSP_8__userName').send_keys(username)
sleep(2)
findId(driver,'TANGRAM__PSP_8__password').send_keys(passwd)
sleep(2)
findId(driver,'TANGRAM__PSP_8__submit').click()
sleep(3)
#退出方法
def exit(driver):
sleep(2)
element=findXpath(driver,".//*[@id='s_username_top']/span")
ActionChains(driver).move_to_element(element).perform()
sleep(2)
findXpath(driver,".//*[@id='s_user_name_menu']/div/a[5]").click()
sleep(2)
findXpath(driver,".//*[@id='tip_con_wrap']/div[3]/a[3]").click()
#获取昵称方法
defgetNiCheng(driver):
element=findXpath(driver,".//*[@id='s_username_top']/span")
return element.text
在baidu.py调用封装成函数的文件,简化自动化的测试脚本,baidu.py文件的源码为:
#coding:utf-8
from seleniumimport webdriver
fromselenium.webdriver.common.action_chains import ActionChains
from time import sleep
import location
driver=webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('http://www.baidu.com')
location.login(driver)
text=location.getNiCheng(driver)
location.exit(driver)
assert text in u'清晨无涯'
driver.quit()