web自动化中浏览器实例化优化及关联

在一个测试案例py文件中,可能会有多个测试案例,比如登录,会有登录成功和登录失败的情况,执行测试用例后,就会打开两个网页。为了解决这个问题,需要进行优化来解决浏览器重复打开的问题。

一、浏览器打开问题

按照目前测试用例的编码方式,会出现每次运行测试用例都会打开一个新的浏览器,实际上我们并不需要新打开浏览器,为了避免浏览器没有复用,就需要对浏览器的实例化进行优化。

什么是浏览器的实例化:就是打开浏览器的句柄那个

 1.1、实现原理

实现原理:使用setupclass方法

unittest提供了内置的setUp()、tearDown()、setUpClass()、tearDownClass() 方法来实现测试用例的前置和后置条件的实现。

setUp():每个test方法执行前执行一次

tearDown():每个test方法介绍后执行一次

setUpClass():类开始的时候执行一次

tearDownClass():类结束的时候执行一次

 

 

 1.2、具体实现

原代码:

import unittest
from selenium import webdriver
import time

class TestCaseLogin(unittest.TestCase):

    def test_01_login_success(self):
        driver = webdriver.Chrome("driver\chromedriver.exe")
        driver.maximize_window()
        driver.get("http://47.113.200.30:2333/")

        driver.find_element_by_id("name").send_keys("langjin")
        driver.find_element_by_id("password").send_keys("123456")
        #//*[@id="popContainer"]/div/div[1]/div[2]/form/div[3]/div/div/span/button
        driver.find_element_by_xpath('//*[@id="popContainer"]/div/div[1]/div[2]/form/div[3]/div/div/span/button').click()
        time.sleep(6)

        e = driver.find_element_by_xpath('//*[@id="popContainer"]/section/aside/div/div/a/h1')
        assert e.text == "人才信息共享平台"

    def test_02_login_failed(self):
        driver = webdriver.Chrome("driver\chromedriver.exe")
        driver.maximize_window()
        driver.get("http://47.113.200.30:2333/")

        driver.find_element_by_id("name").send_keys("langjin")
        driver.find_element_by_id("password").send_keys("123456aaaa")
        #//*[@id="popContainer"]/div/div[1]/div[2]/form/div[3]/div/div/span/button
        driver.find_element_by_xpath('//*[@id="popContainer"]/div/div[1]/div[2]/form/div[3]/div/div/span/button').click()
        time.sleep(6)

        e = driver.find_element_by_xpath('//*[@id="popContainer"]/section/aside/div/div/a/h1')
        assert e.text == "人才信息共享平台"

优化后的代码:

import unittest
from selenium import webdriver
import time

class TestCaseLogin(unittest.TestCase):


    #装饰器:修饰符,表示下面的方法是类方法
    #cls:表示类本身==self
    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome("driver\chromedriver.exe")
        cls.driver.maximize_window()

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()
    
    def setUp(self):
        self.driver.get("http://47.113.200.30:2333/")


    def test_01_login_success(self):

        self.driver.find_element_by_id("name").send_keys("langjin")
        self.driver.find_element_by_id("password").send_keys("123456")
        #//*[@id="popContainer"]/div/div[1]/div[2]/form/div[3]/div/div/span/button
        self.driver.find_element_by_xpath('//*[@id="popContainer"]/div/div[1]/div[2]/form/div[3]/div/div/span/button').click()
        
        time.sleep(6)
        e = self.driver.find_element_by_xpath('//*[@id="popContainer"]/section/aside/div/div/a/h1')
        assert e.text == "人才信息共享平台"

    def test_02_login_failed(self):

        self.driver.find_element_by_id("name").send_keys("langjin")
        self.driver.find_element_by_id("password").send_keys("123456aaaa")
        #//*[@id="popContainer"]/div/div[1]/div[2]/form/div[3]/div/div/span/button
        self.driver.find_element_by_xpath('//*[@id="popContainer"]/div/div[1]/div[2]/form/div[3]/div/div/span/button').click()
        
        time.sleep(6) 
        e = self.driver.find_element_by_xpath('//*[@id="popContainer"]/section/aside/div/div/a/h1')
        assert e.text == "人才信息共享平台 | login"

运行成功后,终端会显示.,一个点代表一个测试案例

 二、关联

前置条件和后置条件:以登录为例,有很多功能是以来登录完成后来实现的,例如首页的页面元素检查。

实现方式:setupclass和setup除了做浏览器的打开方式优化外,还可以把依赖于登录的测试用例实现前置条件的判断

 

posted @ 2023-03-27 17:39  一个名  阅读(132)  评论(0编辑  收藏  举报