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()

Python的模块与函数以及与自动化的结合的更多相关文章

  1. 自学Python之路-Python基础+模块+面向对象+函数

    自学Python之路-Python基础+模块+面向对象+函数 自学Python之路[第一回]:初识Python    1.1 自学Python1.1-简介    1.2 自学Python1.2-环境的 ...

  2. Python OS模块常用函数说明

    Python的标准库中的os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Wi ...

  3. python os模块进程函数

    Table of Contents 1. 系统进程 2. 举例 2.1. os.fork 2.2. os.exec 和 os.system 2.3. os.wait 3. 总结 系统进程 今天在看&l ...

  4. Python标准模块--built-ins函数

    1.Python内置函数 2.Python内置函数举例 2.1 数学运算 abs,计算绝对值: >>> abs(-1) 1 >>> abs(3) 3 round,四 ...

  5. python os模块实用函数

    os.sep可以取代操作系统特定的路径分隔符.windows下为 “\\” os.name字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'pos ...

  6. Python re 模块findall() 函数返回值展现方式详解

    findall 函数: 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表. 注意: match 和 search 是匹配一次 findall 匹配所有,mat ...

  7. Python os模块常用函数详解

    当前使用平台: os.name #返回当前使用平台的代表字符,Windows用'nt'表示,Linux用'posix'表示 当前路径和文件 os.getcwd() #返回当前工作目录 os.listd ...

  8. python os模块 常用函数

    os.getcwd() 获取当前工作目录 os.listdir() 返回指定目录下的所有文件和目录 os.remove() 删除单个文件 os.path.split() 以元祖形式返回一个路径的目录和 ...

  9. python re模块findall使用

    今天练习re模块时候出现了一个很奇怪的问题,同样的正则表达式用re.search()与用re.compile().findall()匹配出来的结果不一致. 很是奇怪,故此记录一下,防止以后碰到类似情况 ...

随机推荐

  1. Spring 常用类

    一.拦截器 public class SysInteceptor implements HandlerInterceptor { /** * 最后执行,可用于释放资源 */ @Override pub ...

  2. atitit.atiOrmStoreService 框架的原理与设计 part1  概述与新特性

    atitit.atiOrmStoreService 框架的原理与设计 part1  概述与新特性 1. 新特性如下 支持生成sql在无数据库连接的情况下 2. Orm设计 主要的俩个以来service ...

  3. 无序列表li横向排列

    一.横向两列方式排列: 在网页中,很多地方都会用到无序列表横向排列的形式,通常的写法都是使得li的css样式设置为:float:left的形式即可,li会依次从最左边开始并列对齐, 例如: HTML中 ...

  4. 试题系列四(袋中有6红球 3黄球 3绿球,从中取6个球,求所有拿到球的颜色的可能 c(12,6))

    1.袋中有6红球 3黄球 3绿球,从中取6个球,求所有拿到球的颜色的可能 c(12,6) #include<stdio.h> int main(int argc, char** argv) ...

  5. iOS自定义转场动画实战讲解

    iOS自定义转场动画实战讲解   转场动画这事,说简单也简单,可以通过presentViewController:animated:completion:和dismissViewControllerA ...

  6. javascript执行环境以及作用域链的理解

    在javascript脚步语言中执行环境有两种: 全局环境: 局部环境: 我们可以拿一个田径跑道来打比方,全局环境就可以理解为是最外面跑道,它包含着内部所有的东西,有人在跑步,有人在跳远,这些用着不同 ...

  7. wireshark抓包常见提示含义解析

    原文转自:http://blog.sina.com.cn/s/blog_987e00020102wq60.html http://www.cnblogs.com/redsmith/p/5462547. ...

  8. iOS 全屏播放网页视频退出后状态栏被隐藏

    使用wkWebView播放网页上的视频,播放完成后,退出视频返回到网页发现app的状态整个被隐藏了,解决方法,监听状态栏隐藏通知,在适当的时候让状态栏显示出来 [[NSNotificationCent ...

  9. virtualBox centos 6.x不能联网

    sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet UUID=3323da63---89bb-92 ...

  10. Import语句

    在Java中,如果给出一个完整的限定名,包括包名.类名,那么Java编译器就可以很容易地定位到源代码或者类.Import语句就是用来提供一个合理的路径,使得编译器可以找到某个类. 例如,下面的命令行将 ...