zoukankan      html  css  js  c++  java
  • 第二个UI脚本--Python+selenium之unittest+HTMLtestRunner及python的继承

    前面有一篇对于常见元素的识别和操作的python自动化脚本,这一篇就接着聊下python的类继承,已经它的第三款unittest框架,和报告收集包HTMLtestRunner的应用。

    还是直接上代码吧。

    unittest和HTMLtestrunner的应用:

    # coding = utf-8
    import time
    import unittest
    import HTMLTestRunner
    import os
    import sys
    from selenium import webdriver
    
    # 继承unittest类
    class testClass(unittest.TestCase):
        # unittest提供的初始化方法,setup,可以在这里进行一些初始化的准备工作
    def setUp(self): print "setup" self.driver=webdriver.Firefox() self.driver.get("http://www.baidu.com") time.sleep(3)
        # 下面是测试方法
    def testsearch2(self): input=self.driver.find_element_by_id('kw') search=self.driver.find_element_by_id('su') input.send_keys("byebye") search.click()
    def testsearch(self): input=self.driver.find_element_by_id('kw') search=self.driver.find_element_by_id('su') input.send_keys("hello") search.click() print "assertion" self.assertTrue(search.is_displayed(),"baidu yixia should display")
        # 运行结束后的处理动作
    def tearDown(self): print 'test down...' #driver.quit() self.driver.close() if __name__ == '__main__': #unittest.main(), 这里要说明一下, 如果测试方法是以test开头的,那么unittest可以识别出来,这里就可以直接调用它的main方法来执行所有测试方法了,运行顺序就是按测试方法的名字排序 #unittest.TestCase.assertTrue()

        #这块是获取项目路径,后面在生成report时会放到改目录下 current_path=os.getcwd() print 'current path: ',current_path project_path=os.path.dirname(current_path) print "project path:",project_path
        #这块是通过unittest的testsuite方式来组织测试 testsuite
    =unittest.TestSuite() #testsuite.addTest(testClass("testsearch2")) testsuite.addTest(testClass("testsearch")) temp=str(time.time()) filedir=project_path+"//report//"+temp os.makedirs(filedir) filename="//pyresult.html" filepath=filedir+filename fp=file(filepath,'wb')

        # 调用HTMLtestrunner来执行脚本并生成测试报告,html格式的 runner
    =HTMLTestRunner.HTMLTestRunner(stream=fp,title='report',description='demo') runner.run(testsuite)

    注: 上面带#号的都是注释, 由于直接编辑的原因,所以他没有显示成绿色,大家如果要复制出来,记得注意调整一下。

    Python类的继承:

    #coding=utf-8
    from pyse import Pyse
    from time import sleep
    
    class Page(object):
        #login_url = 'http://www.126.com'
    
        def __init__(self, selenium_driver, base_url, parent=None):
            self.base_url = base_url
            self.driver = selenium_driver
            self.timeout = 30
            self.parent = parent
    
        def _iopen(self,url):
            #url = self.base_url + url
            self.base_url=url
            self.driver.open(url)
            assert self.on_page(),'Did not land on %s' % url
    
        def iopen(self):
            self._iopen(self.url)
    
        def on_page(self):
            print 'get_url is: ',self.driver.get_url()
            print 'base_url is: ',self.base_url
            return self.driver.get_url() == self.base_url
    
    class login(Page):
        def systemout(self):
            print 'pass'
    
    def testlogin():
        driver=Pyse('ff')
        print 'get in'
        url='http://www.baidu.com/'
        lg=login(driver,'')
        lg._iopen(url)
    
    if __name__=='__main__':
        testlogin()

    这块是python类的继承,page继承根object类,然后login继承了page类,然后login就可以使用page类的方法了。

    这里要说明的是,page类有2个方法,一个是_iopen(), 另一个是iopen(), 他们的区别就是,在用login的对象调用时:

    调用iopen,不需要url参数,但是需要login类有url的成员,因为在其父类page里的self.url其实就是调用login自己的url成员。

    而调用_iopen时,可以直接传递一个url参数。

  • 相关阅读:
    _proto_和prototype的区别
    ajax
    图片预加载
    loading动画
    WinSCP
    检测竖屏 横屏
    webstrom hbuilder快捷键
    vue 引入sass
    npm install -save 和 -save-dev 区别
    打乱数组顺序
  • 原文地址:https://www.cnblogs.com/jingwei/p/5039889.html
Copyright © 2011-2022 走看看