51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1980|回复: 5
打印 上一主题 下一主题

unittest 怎么实现一个类中只启动一次浏览器,代码见下图

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2016-9-22 15:50:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个class中有四个case,但是每个case都需要启动一遍浏览器,百度了一下unit test的执行顺序是    setUpclass   setUp   TearDown  Teardownclass,把启动的初始化操作写在setUPclass中后一个报错driver的问题。求解其他方法

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

  • TA的每日心情
    慵懒
    2017-11-7 16:44
  • 签到天数: 290 天

    连续签到: 1 天

    [LV.8]测试军长

    2#
    发表于 2016-9-22 16:15:35 | 只看该作者
    使用‘@classmethod’支持在一个类中只进行一次初始化和清理,下面是个例子:

    #!/user/bin/env python
    #encoding: utf-8

    import unittest
    from selenium import webdriver

    class SearchTests(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            # 基于类的setUp()和tearDown()方法
            # 这里的‘@classmethod’支持在一个类中只进行一次初始化和清理
            cls.driver = webdriver.Firefox()
            cls.driver.implicitly_wait(30)
            cls.driver.maximize_window()

            # navigate to the application home page
            cls.driver.get("http://www.jd.com/")

        def test_search_by_category(self):
            # get the search textbox
            self.search_field = self.driver.find_element_by_id("key")
            self.search_field.clear()
            self.search_field.send_keys("phones")

            #submit
            self.search_btn = self.driver.find_element_by_xpath("//button[@clstag='h|keycount|2015|03c']")
            self.search_btn.click()

            # get all the anchor elements which have product names displayed
            # currently on result page using find_elements_by_xpath method
            products = self.driver.find_elements_by_xpath("//div[@class='p-img']/a")
            self.assertGreater(len(products), 3, "more than 3~~")

        def test_search_by_name(self):
            # get the search textbox
            self.search_field = self.driver.find_element_by_id("key")
            self.search_field.clear()
            self.search_field.send_keys("android")

            #submit
            self.search_btn = self.driver.find_element_by_xpath("//button[@clstag='shangpin|keycount|toplist1|b03']")
            self.search_btn.click()


            # get all the anchor elements which have product names displayed
            # currently on result page using find_elements_by_xpath method
            products = self.driver.find_elements_by_xpath("//div[@class='p-img']/a")
            self.assertGreater(len(products), 4, "more than 4~~")

        @classmethod
        def tearDownClass(cls):
            # close the browser window
            cls.driver.quit()

    if __name__ == '__main__':
        unittest.main(verbosity=2)

    评分

    参与人数 1测试积点 +10 收起 理由
    lsekfe + 10 积极回复获得测试积点10

    查看全部评分

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
     楼主| 发表于 2016-9-22 19:47:56 | 只看该作者
    若尘_51 发表于 2016-9-22 16:15
    使用‘@classmethod’支持在一个类中只进行一次初始化和清理,下面是个例子:

    #!/user/bin/env python

    #!/usr/bin/env python
    #coding:utf-8
    from lib2to3.pgen2 import driver
    import unittest
    from appium.webdriver.common.mobileby import MobileBy
    from selenium import webdriver
    from Pages import BasePages
    from ddt import ddt,data,unpack
    from Pages import basetestcase
    @ddt
    class LoginPage(unittest.TestCase):
        @classmethod
        def setUpclass(cls):
            cls.driver=webdriver.Firefox()
            cls.driver.maximize_window()
            cls.driver.get('http://bj.58.com')
            cls.driver.implicitly_wait(30)

        @data(('','',u'您还没有输入账户名'),('','123321',u''),('ljjtest12','',u'您还没有输入密码'))
        @unpack
        def test_FailLogin(self,value1,value2,expected):
           '''验证:错误登陆返回信息'''
           BasePages.Login(self.driver,value1,value2)
           self.assertEqual(BasePages.getErrorText(self.driver),expected)
        def test_successLogin(self,username='ljjtest12',password='123321',):
           '''验证:登陆成功'''
           BasePages.Login(self.driver,username,password,)
           self.assertTrue(MobileBy.ACCESSIBILITY_ID, '退出')

        @classmethod
        def tearDownClass(cls):
            cls.driver.quit()
       # def tearDown(self):
       #     pass
       #     # self.driver.quit()
    if __name__=='__main__':
        unittest.main(verbosity=2)


    我这个还是报错driver的问题
    Error
    Traceback (most recent call last):
      File "/Library/Python/2.7/site-packages/ddt.py", line 129, in wrapper
        return func(self, *args, **kwargs)
      File "/Users/lijingjing/PycharmProjects/testcase3/testcase/Test_login.py", line 29, in test_FailLogin
        driver=self.driver
    AttributeError: 'LoginPage' object has no attribute 'driver'
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-11-7 16:44
  • 签到天数: 290 天

    连续签到: 1 天

    [LV.8]测试军长

    4#
    发表于 2016-9-23 08:45:36 | 只看该作者
    小暖ljj 发表于 2016-9-22 19:47
    #!/usr/bin/env python
    #coding:utf-8
    from lib2to3.pgen2 import driver

    可以给我看看你调用BasePages.Login这个脚本吗,看提示像是传参过程出错了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
     楼主| 发表于 2016-9-24 16:20:13 | 只看该作者
    若尘_51 发表于 2016-9-23 08:45
    可以给我看看你调用BasePages.Login这个脚本吗,看提示像是传参过程出错了

    #coding:utf-8
    from appium.webdriver.common.mobileby import MobileBy

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    import time as t
    #等待方法
    import self


    def wait():
        t.sleep(2)
    def Login(driver,username,password):
        wait()
        clickLogin(driver,username,password)

    def clickLogin(driver,username,password):
        wait()
        driver.find_element_by_id('login').find_element_by_link_text(u'登录').click()
        driver.find_element_by_id('login_tab_orig').click()
        driver.find_element_by_id('username_new').send_keys(username)
        driver.find_element_by_id('password_new').send_keys(password)
        driver.find_element_by_id('btnSubmit_new').click()

    def getErrorText(driver):
        wait()
        return driver.find_element_by_id("tipli_new").text
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-11-7 16:44
  • 签到天数: 290 天

    连续签到: 1 天

    [LV.8]测试军长

    6#
    发表于 2016-9-26 09:10:27 | 只看该作者
    小暖ljj 发表于 2016-9-24 16:20
    #coding:utf-8
    from appium.webdriver.common.mobileby import MobileBy

    看了你的脚本,确实是传参的问题(driver这个参数),我也对传参不熟,试试下面的:

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    import time as t
    #等待方法
    import self


    def wait():
        t.sleep(2)
    def Login(self,username,password):
        wait()
        clickLogin(self,username,password)

    def clickLogin(self,username,password):
        wait()
        self.driver.find_element_by_id('login').find_element_by_link_text(u'登录').click()
        self.driver.find_element_by_id('login_tab_orig').click()
        self.driver.find_element_by_id('username_new').send_keys(username)
        self.driver.find_element_by_id('password_new').send_keys(password)
        self. driver.find_element_by_id('btnSubmit_new').click()

    def getErrorText(self):
        wait()
        return self.driver.find_element_by_id("tipli_new").text
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-23 20:55 , Processed in 0.073369 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表