在一个测试案例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除了做浏览器的打开方式优化外,还可以把依赖于登录的测试用例实现前置条件的判断。
标签:web,浏览器,self,driver,find,实例,div,element,id From: https://www.cnblogs.com/bzbz/p/17253667.html