zoukankan      html  css  js  c++  java
  • Python的模块与函数以及与自动化的结合

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

    使用模块中的函数或者类的时候,首先需要把模块导入,模块的导入是importimport可以直接导入模块,如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()

  • 相关阅读:
    操作~拷贝clone()
    属性/css~储存
    属性/css~位置.offset()&offsetParent()&position()&scrollTop()&scrollLeft()
    属性/css~尺寸.height()
    设置,获取,删除cookie方法
    Cookie
    属性/css~css.css()
    Python井字游戏
    Asp.net vNext 学习之路(三)
    使用C#发送Http 请求实现模拟登陆(以博客园为例)
  • 原文地址:https://www.cnblogs.com/weikunzz/p/6710589.html
Copyright © 2011-2022 走看看