测试任务: 在https://www.bilibili.com/网站中 要求:以下测试,需以POM模式编写 任务1:在2022年的番剧中,按照“追番人数”升序排序,获取两页的番剧的追番人数,并测试两页番剧的追番人数是否是升序排序; 任务2:在2022年的番剧中,按照“追番人数”升序排序,获取两页的番剧的番名+集数,并测试2022番剧页面 与 每一个番剧的页面中的番名+集数,是否一致; 任务3:在“鬼灭之刃 游郭篇”的番剧页面中,测试该番的集数 与 右侧的选集是否一致; 任务4:在2023年的番剧中,按照“最高评分”进行排序,获取两页番剧的评分,测试评分排序是否正确; 任务5:在“番剧首页”的页面上方,有个会随着时间不断变动的推荐番剧区域,这里需要通过selenium控制鼠标移动到这些推荐番剧上,测试番剧的名称是否一致,如下图框住所示;
目录
②编写blibli_get_fanju_name_number01.py
③编写test01_case_Number_of_followers.py(任务1:运行此py文件)
②编写blibli_get_fanju_name_number02.py
④编写test02_case_Get_name_number.py(任务2:运行此py文件)
②编写blibli_get_fanju_name_number03.py
④编写test03_case_jishu_right_jishu.py(任务3:运行此py文件)
②编写blibli_get_fanju_name_number04.py
③编写test04_case_score.py(任务4:运行此py文件)
②编写blibli_get_fanju_name_number05.py
③编写test05_case.py(任务5:运行此py文件)
开始编写:
一、搭建框架+创建页面对象脚本
各任务所对应的py文件如下:
基类: base_page.py 任务1:在2022年的番剧中,按照“追番人数”升序排序,获取两页的番剧的追番人数,并测试两页番剧的追番人数是否是升序排序; blibli_index_object01.py blibli_get_fanju_name_number01.py test01_case_Number_of_followers.py 任务2:在2022年的番剧中,按照“追番人数”升序排序,获取两页的番剧的番名+集数,并测试2022番剧页面 与 每一个番剧的页面中的番名+集数,是否一致; blibli_index_object02.py blibli_get_fanju_name_number02.py blibli_xinfan_object02.py test02_case_Get_name_number.py 任务3:在“鬼灭之刃 游郭篇”的番剧页面中,测试该番的集数 与 右侧的选集是否一致; blibli_index_object03.py blibli_get_fanju_name_number03.py blibli_xinfan_object03.py test03_case_jishu_right_jishu.py
任务4:在2023年的番剧中,按照“最高评分”进行排序,获取两页番剧的评分,测试评分排序是否正确; blibli_index_object04.py blibli_get_fanju_name_number04.py test04_case_score.py 任务5:在“番剧首页”的页面上方,有个会随着时间不断变动的推荐番剧区域,这里需要通过selenium控制鼠标移动到这些推荐番剧上,测试番剧的名称是否一致,如下图框住所示; blibli_index_object05.py blibli_get_fanju_name_number05.py test05_case.py
二、创建页面对象的基类(base_page.py)
代码如下:
# 网页基类
class Base:
# 创建临时的driver对象
# driver = webdriver.Chrome()
# 外界创建网页对象的时候,需要将浏览器传进来
def __init__(self, driver):
self.driver = driver
# 打开网址
def open(self, url):
self.driver.get(url)
# 元素查找,loc参数(by, value)
def locator(self, loc):
return self.driver.find_element(*loc)
# 在指定父元素查找子元素
def locatorByParent(self, parent, loc):
return parent.find_element(*loc)
# 查找多个元素
def locators(self, loc):
return self.driver.find_elements(*loc)
# 在指定父元素查找多个子元素
def locatorsByParent(self, parent, loc):
return parent.find_elements(*loc)
# 切换到当前页面
def switch(self):
# 将浏览器切换到当前页面
window = self.driver.window_handles
self.driver.switch_to.window(window[-1])
# 输入
def input(self, loc, content):
self.locator(loc).send_keys(content)
# 点击
def click(self, loc):
self.locator(loc).click()
# 写入数据
def write(self, filePath, content, mode='w'):
f = open(filePath, mode)
f.write(content)
f.close()
三、各页面对象脚本代码
任务1:
①编写blibli_index_object01.py
代码如下:
# 核心业务流程
# 打开b站首页
# 点击番剧按钮,打开番剧页面
#点击2022年的番剧页面
# 点击“追番人数”升序排序按钮
# #把打开的番剧页面返回出去
from base_page.base_page import Base # 导入基类---(理解:导入功能模块)
import time
from page_object.blibli_get_fanju_name_number01 import BliBliFanju
# b站首页
class BlibliIndex(Base):
# url
url = "http://www.bilibili.com"
# 核心元素
el_button = ('xpath', '//*[@id="i_cecream"]/div[2]/div[1]/div[3]/div[2]/div/div[1]/a[1]')
el_button_2022 = ('xpath', '// *[ @ id = "home_v3_mod_index"] / div / div[3] / div / div / div[2] / a[1]')
el_button_up = ('xpath', '// *[ @ id = "app"] / div[2] / div[1] / ul[1] / li[1] / span')
# 核心业务
def openBlibliFanju(self):
# 打开b站首页
self.open(self.url)
# 等待一段时间
time.sleep(1)
# 点击番剧按钮,打开番剧页面
self.locator(self.el_button).click()
time.sleep(3)
#切换到当前窗口
self.switch()
time.sleep(1)
#点击2022年的番剧页面
self.locator(self.el_button_2022).click()
time.sleep(3)
# 切换到当前窗口
self.switch()
# 点击“追番人数”升序排序按钮
self.locator(self.el_button_up).click()
time.sleep(2)
# #把打开的番剧页面返回出去
return BliBliFanju(self.driver)
②编写blibli_get_fanju_name_number01.py
代码如下:
import time
import re
from base_page.base_page import Base
# b站番剧首页
class BliBliFanju(Base):
# 核心元素
# 每个番剧的追番人数元素xpath
el_xinFanNumber = ("xpath", '//*[@class="shadow"]')
# 第二页番剧的按钮元素xpath
el_xinFan_NextButton = ("xpath", '//*[@class="pagelistbox clearfix"]/a[2]')
# 存放两页番剧的追番人数
xinFanNumber = []
# 此函数为正则匹配追番人数的数量
def get_zhuifan_num(self, name_list):
result = []
pattern = re.compile(r'(\d+(\.\d+)?)(万)?[追番 | 追剧 ]')
for item in name_list:
match = pattern.search(item)
if match:
num_str = match.group(1)
if match.group(3):
num = float(num_str) * 10000
else:
num = int(num_str)
result.append(num)
else:
result.append(None)
return result
# 核心业务
# 获取b站2022追番页面的1、2页追番人数
def GetXinFanInfor01(self):
# 切换当前页面
self.switch()
# 获取第一页番剧的追番人数
temp = self.locators(self.el_xinFanNumber)
for i in range(len(temp)):
self.xinFanNumber.append(temp[i].text)
# 找到番剧的第二页按钮,点击切换到第二页
self.locator(self.el_xinFan_NextButton).click()
# 等待一段时间,让页面切换到下一页
time.sleep(2)
# 获取第二页番剧的追番人数
temp = self.locators(self.el_xinFanNumber)
for i in range(len(temp)):
self.xinFanNumber.append(temp[i].text)
#打印所获取到的追番人数
print(self.xinFanNumber)
# 判断追番人数”是否按照升序排序
result = self.get_zhuifan_num(self.xinFanNumber)
oringin = result
result.sort(reverse=False)
# 原始获取到的追番人数列表
print('提取追番人数的列表:',oringin)
# sort(reverse=False)函数升序后的追番人数列表
print('追番人数列表升序后的列表:',result)
print("对比上面两个列表,判断追番人数是否按照升序排序:", result == oringin)
③编写test01_case_Number_of_followers.py(任务1:运行此py文件)
代码如下:
import time
import unittest
from selenium import webdriver
from page_object.blibli_index_object01 import BlibliIndex
class TestCase_GetxinFanInfor(unittest.TestCase):
@classmethod
def setUpClass(cls):
# 创建浏览器
cls.driver = webdriver.Chrome()
# 创建b站首页
cls.blibli = BlibliIndex(cls.driver)
# 打开b站番剧首页
cls.blibliFanJu = cls.blibli.openBlibliFanju()
@classmethod
def tearDownClass(cls):
# 退出浏览器
cls.driver.quit()
# 测试用例函数
def test_OpenBliBliFanJu(self):
# 执行b站番剧首页中 获取新番信息的业务
self.blibliFanJu.GetXinFanInfor01()
# 停留一段时间
time.sleep(0.5)
if __name__ == '__main__':
unittest.main()
任务1运行结果图:
任务2:
①编写blibli_index_object02.py
代码如下:
# 核心业务流程
# 打开b站首页
# 点击番剧按钮,打开番剧页面
#点击2022年的番剧页面
# 点击“追番人数”升序排序按钮
# #把打开的番剧页面返回出去
from base_page.base_page import Base # 导入基类---(理解:导入功能模块)
import time
from page_object.blibli_get_fanju_name_number02 import BliBliFanju02
# b站首页
class BlibliIndex(Base):
# url
url = "http://www.bilibili.com"
# 核心元素
el_button = ('xpath', '//*[@id="i_cecream"]/div[2]/div[1]/div[3]/div[2]/div/div[1]/a[1]')
el_button_2022 = ('xpath', '// *[ @ id = "home_v3_mod_index"] / div / div[3] / div / div / div[2] / a[1]')
el_button_up = ('xpath', '// *[ @ id = "app"] / div[2] / div[1] / ul[1] / li[1] / span')
# 核心业务
def openBlibliFanju(self):
# 打开b站首页
self.open(self.url)
# 等待一段时间
time.sleep(1)
# 点击番剧按钮,打开番剧页面
self.locator(self.el_button).click()
time.sleep(3)
#切换到当前窗口
self.switch()
time.sleep(1)
#点击2022年的番剧页面
self.locator(self.el_button_2022).click()
time.sleep(3)
# 切换到当前窗口
self.switch()
# 点击“追番人数”升序排序按钮
self.locator(self.el_button_up).click()
time.sleep(2)
# #把打开的番剧页面返回出去
return BliBliFanju02(self.driver)
②编写blibli_get_fanju_name_number02.py
代码如下:
import time
from page_object.blibli_xinfan_object02 import BliBliXinFan02
from base_page.base_page import Base
# b站番剧首页
class BliBliFanju02(Base):
# 核心元素
# 每个番剧的番剧名
el_xinFanName = ("xpath", '//*[@class="bangumi-title"]')
# 每个番剧的集数
el_xinFan_ji_Number = ("xpath", '//*[@class="pub-info"]')
# 每个番剧的链接
el_xinFanUrl = ("xpath", '//*[@class="cover-wrapper"]')
# 新番区域下一页的按钮
el_xinFan_NextButton = ("xpath", '//*[@class="pagelistbox clearfix"]/a[2]')
# 存放两页番剧的追番人数
xinFanNumber = []
# 存放两页番剧的番名
xinFanName = []
# 存放两页番剧对应的集数
xinFan_ji_Number = []
# 存放两页番剧的链接
xinFanUrls = []
# # 存放所有新番的页面对象
xinFanPages = []
# 核心业务
# 获取两页的番剧的番名+集数,并测试2022番剧页面 与 每一个番剧的页面中的番名+集数,是否一致
def GetXinFanInfor(self):
# 切换当前页面
self.switch()
try:
# 获取第一页番剧的番剧名
temp = self.locators(self.el_xinFanName)
for i in range(len(temp)):
self.xinFanName.append(temp[i].text)
# 获取第一页番剧对应的集数
temp = self.locators(self.el_xinFan_ji_Number)
for i in range(len(temp)):
self.xinFan_ji_Number.append(temp[i].text)
# 获取第一页的番剧链接
temp = self.locators(self.el_xinFanUrl)
for i in range(len(temp)):
self.xinFanUrls.append(temp[i].get_attribute('href'))
# 找到新番区域中的第二页按钮,点击切换到第二页
self.locator(self.el_xinFan_NextButton).click()
# 等待一段时间,让新番切换到下一页
time.sleep(2)
# 获取第二页的番剧名
temp = self.locators(self.el_xinFanName)
for i in range(len(temp)):
self.xinFanName.append(temp[i].text)
# 获取第二页番剧对应的集数
temp = self.locators(self.el_xinFan_ji_Number)
for i in range(len(temp)):
self.xinFan_ji_Number.append(temp[i].text)
# 获取第二页番剧的链接
temp = self.locators(self.el_xinFanUrl)
for i in range(len(temp)):
self.xinFanUrls.append(temp[i].get_attribute('href'))
except:
print("null")
#打印获取的番剧名
print(self.xinFanName)
# 打印获取的番剧集数
print(self.xinFan_ji_Number)
# 打印获取的番剧对应的url
# print(self.xinFanUrls)
# 根据新番数,创建相应数量的新番页面对象
for url in self.xinFanUrls:
# 创建新番页面对象
xinFan = BliBliXinFan02(self.driver)
# 给新番页面对象赋予网址url
xinFan.url = url
# 把新番页面对象存放到容器中
self.xinFanPages.append(xinFan)
# print(self.xinFanPages)
# 打开指定新番
def OpenXinFan(self, index):
# 获取指定的新番
xinFan = self.xinFanPages[index]
# print(xinFan)
# 打开新番的网页
self.open(xinFan.url)
# 将新番的页面对象返回出去
return xinFan
③编写blibli_xinfan_object02.py
代码如下:
from base_page.base_page import Base
# b站新番
class BliBliXinFan02(Base):
# url
url = None
# 核心元素
# 新番的番名元素xpath
el_xinFanName = ("xpath", '//*[@class="mediainfo_mediaTitle__lu7u_"]')
# 新番的追番人数元素xpath
el_xinFan_ji_Number = ("xpath", '//*[@class="mediainfo_mediaDesc__0JJwL"][2]/span[3]')
# 新番的番名
xinFanName = None
# 新番的追番人数
xinFan_ji_Number = None
# 核心业务
# 获取新番页的信息
def GetInfor(self):
# 切换到最新的页面
self.switch()
# 获取新番页面的番名+追番人数
self.xinFanName = self.locator(self.el_xinFanName).text
self.xinFan_ji_Number = self.locator(self.el_xinFan_ji_Number).text
④编写test02_case_Get_name_number.py(任务2:运行此py文件)
代码如下:
import time
import unittest
from selenium import webdriver
from page_object.blibli_index_object02 import BlibliIndex
class TestCase_GetxinFanInfor(unittest.TestCase):
@classmethod
def setUpClass(cls):
# 创建浏览器
cls.driver = webdriver.Chrome()
# 创建b站首页
cls.blibli = BlibliIndex(cls.driver)
# 打开b站番剧首页
cls.blibliFanJu = cls.blibli.openBlibliFanju()
# 获取b站番剧首页的番剧信息
cls.blibliFanJu.GetXinFanInfor()
@classmethod
def tearDownClass(cls):
# 退出浏览器
cls.driver.quit()
# 测试用例函数
def test_OpenBliBliFanJu(self):
a = [] #存放b站番剧首页的番剧名
b = [] #存放每一个番剧的页面中的番名
c = [] #存放b站番剧首页的番剧集数
d = [] #存放每一个番剧的页面中的集数
# 循环打开所有的新番
for i in range(len(self.blibliFanJu.xinFanPages)):
# 打开指定的新番
xinFan = self.blibliFanJu.OpenXinFan(i)
# 获取当前新番的信息
xinFan.GetInfor()
# 停留一段时间
time.sleep(1)
# 去掉额外的文本和符号
expected = xinFan.xinFan_ji_Number.replace("已完结, ", "").replace("·", "").strip()
# 输出b站番剧首页的新番番名+集数,以及新番页面中的番名+集数
print()
print('b站番剧首页:', self.blibliFanJu.xinFanName[i], self.blibliFanJu.xinFan_ji_Number[i])
print('新番页面 :', xinFan.xinFanName, expected)
# 断言测试2022番剧页面 与 每一个番剧的页面中的番名,是否一致
self.assertEqual(self.blibliFanJu.xinFanName[i],xinFan.xinFanName)
if '话' in expected:
# 断言测试2022番剧页面 与 每一个番剧的页面中的集数,是否一致
self.assertEqual(self.blibliFanJu.xinFan_ji_Number[i],expected)
a.append(self.blibliFanJu.xinFanName[i])
b.append(xinFan.xinFanName)
c.append(self.blibliFanJu.xinFan_ji_Number[i])
d.append(expected)
print(a)
print(b)
print(c)
print(d)
if __name__ == '__main__':
unittest.main()
任务2运行结果图:
任务3:
①编写blibli_index_object03.py
代码如下:
# 核心业务流程
# 打开b站首页
# 点击番剧按钮,打开番剧页面
#点击2022年的番剧页面
# #把打开的番剧页面返回出去
from base_page.base_page import Base # 导入基类---(理解:导入功能模块)
import time
from page_object.blibli_get_fanju_name_number03 import BliBliFanju03
# b站首页
class BlibliIndex(Base):
# url
url = "http://www.bilibili.com"
# 核心元素
el_button = ('xpath', '//*[@id="i_cecream"]/div[2]/div[1]/div[3]/div[2]/div/div[1]/a[1]')
el_button_2022 = ('xpath', '// *[ @ id = "home_v3_mod_index"] / div / div[3] / div / div / div[2] / a[1]')
# 核心业务
def openBlibliFanju(self):
# 打开b站首页
self.open(self.url)
# 等待一段时间
time.sleep(1)
# 点击番剧按钮,打开番剧页面
self.locator(self.el_button).click()
time.sleep(3)
#切换到当前窗口
self.switch()
time.sleep(1)
#点击2022年的番剧页面
self.locator(self.el_button_2022).click()
time.sleep(2)
# 切换到当前窗口
self.switch()
time.sleep(1)
# #把打开的番剧页面返回出去
return BliBliFanju03(self.driver)
②编写blibli_get_fanju_name_number03.py
代码如下:
from page_object.blibli_xinfan_object03 import BliBliXinFan03
from base_page.base_page import Base
# b站番剧首页
class BliBliFanju03(Base):
# 核心元素
# 每个番剧的链接
el_xinFanUrl = ("xpath", '//*[@class="cover-wrapper"]')
# 存放当前页面番剧的链接
xinFanUrls = []
# # 存放所有新番的页面对象
xinFanPages = []
# 核心业务
# 测试该番的集数 与 右侧的选集是否一致
def GetXinFanInfor(self):
# 切换当前页面
self.switch()
# 获取当前页的新番链接
temp = self.locators(self.el_xinFanUrl)
for i in range(len(temp)):
self.xinFanUrls.append(temp[i].get_attribute('href'))
# 根据新番数,创建相应数量的新番页面对象
for url in self.xinFanUrls:
# 创建新番页面对象
xinFan = BliBliXinFan03(self.driver)
# 给新番页面对象赋予网址url
xinFan.url = url
# 把新番页面对象存放到容器中
self.xinFanPages.append(xinFan)
# 打开指定新番
def OpenXinFan03(self, index):
# 获取指定的新番
xinFan = self.xinFanPages[index]
# print(xinFan)
# 打开新番的网页
self.open(xinFan.url)
# 将新番的页面对象返回出去
return xinFan
③编写blibli_xinfan_object03.py
代码如下:
from base_page.base_page import Base
# b站新番
class BliBliXinFan03(Base):
# url
url = None
# 核心元素
# 番剧的集数元素xpath
el_xinFan_ji_Number = ("xpath", '//*[@class="mediainfo_mediaDesc__0JJwL"][2]/span[3]')
# 新番右侧的选集最后一集元素xpath
el_xinFan_ji_Number_right = ("xpath", '(//*[@class="numberListItem_title__ukPv0"])[last()]')
# 新番的集数
xinFan_ji_Number = None
# 新番右侧的选集最后一集
xinFan_ji_Number_right = None
# 核心业务
# 获取新番页的信息
def GetInfor(self):
# 切换到最新的页面
self.switch()
# 获取新番页面的集数和右侧的选集最后一集
self.xinFan_ji_Number = self.locator(self.el_xinFan_ji_Number).text
self.xinFan_ji_Number_right = self.locator(self.el_xinFan_ji_Number_right).text
④编写test03_case_jishu_right_jishu.py(任务3:运行此py文件)
代码如下:
import time
import re
import unittest
from selenium import webdriver
from page_object.blibli_index_object03 import BlibliIndex
class TestCase_GetxinFanInfor(unittest.TestCase):
@classmethod
def setUpClass(cls):
# 创建浏览器
cls.driver = webdriver.Chrome()
# 创建b站首页
cls.blibli = BlibliIndex(cls.driver)
time.sleep(1)
# 打开b站番剧首页
cls.blibliFanJu = cls.blibli.openBlibliFanju()
time.sleep(1)
# 获取b站番剧首页的新番信息
cls.blibliFanJu.GetXinFanInfor()
time.sleep(1)
@classmethod
def tearDownClass(cls):
# 退出浏览器
cls.driver.quit()
def extract_number(self,string):
"""
从字符串中提取数字
"""
match = re.search(r'\d+', string) # 匹配字符串中的数字
if match:
num = match.group() # 取出匹配结果
return num
else:
print("无集数")
# 测试用例函数
def test_OpenBliBliFanJu(self):
a = [] #a存放新番首页的集数
b = [] #b存放新番实际的集数
# 循环打开所有的新番
for i in range(len(self.blibliFanJu.xinFanPages)):
# 打开指定的新番
xinFan = self.blibliFanJu.OpenXinFan03(i)
# 停留一段时间
time.sleep(1)
# 获取当前新番的信息
xinFan.GetInfor()
a.append(self.extract_number(xinFan.xinFan_ji_Number))
b.append(xinFan.xinFan_ji_Number_right)
try:
self.assertEqual(self.extract_number(xinFan.xinFan_ji_Number), xinFan.xinFan_ji_Number_right)
except AssertionError as e:
print("第{}个测试不通过:第 {} 个新番的集数应该为 {},但实际为 {}".format(i+1,i+1,self.extract_number(xinFan.xinFan_ji_Number), xinFan.xinFan_ji_Number_right))
print('存放新番首页显示的集数',a)
print('存放新番实际的集数',b)
if __name__ == '__main__':
unittest.main()
任务3运行结果图:
任务4:
①编写blibli_index_object04.py
代码如下:
# 核心业务流程
# 打开b站首页
# 点击番剧按钮,打开番剧页面
#点击2022年的番剧页面
#点击年份为2023的番剧按钮
#点击按照“最高评分”进行排序
# #把打开的番剧页面返回出去
from base_page.base_page import Base # 导入基类---(理解:导入功能模块)
import time
from page_object.blibli_get_fanju_name_number04 import BliBliFanju04
# b站首页
class BlibliIndex(Base):
# url
url = "http://www.bilibili.com"
# 核心元素
el_button = ('xpath', '//*[@id="i_cecream"]/div[2]/div[1]/div[3]/div[2]/div/div[1]/a[1]')
el_button_2022 = ('xpath', '// *[ @ id = "home_v3_mod_index"] / div / div[3] / div / div / div[2] / a[1]')
el_button_2023 = ('xpath', '//*[@id="app"]/div[2]/div[2]/div[2]/div[8]/ul/li[2]')
el_button_score_up = ('xpath', '//*[@id="app"]/div[2]/div[1]/ul[1]/li[3]/span')
# 核心业务
def openBlibliFanju(self):
# 打开b站首页
self.open(self.url)
# 等待一段时间
time.sleep(1)
# 点击番剧按钮,打开番剧页面
self.locator(self.el_button).click()
time.sleep(3)
#切换到当前窗口
self.switch()
time.sleep(1)
#点击2022年的番剧页面
self.locator(self.el_button_2022).click()
time.sleep(2)
# 切换到当前窗口
self.switch()
time.sleep(1)
#点击2023年的番剧页面
self.locator(self.el_button_2023).click()
time.sleep(2)
# 切换到当前窗口
self.switch()
#点击按照“最高评分”进行排序
self.locator(self.el_button_score_up).click()
time.sleep(1)
# #把打开的番剧页面返回出去
return BliBliFanju04(self.driver)
②编写blibli_get_fanju_name_number04.py
代码如下:
import re
from base_page.base_page import Base
# b站番剧首页
class BliBliFanju04(Base):
# 核心元素
# 每个番剧的评分元素xpath
el_xinFan_score = ("xpath", '//*[@class="shadow"]')
# 番剧第二页按钮元素xpath
el_xinFan_two_page = ("xpath", '//*[@id="app"]/div[2]/div[1]/div/a[2]')
# 存放1,2页每个番剧的评分
xinFan_score = []
from typing import List
def extract_scores(self, data: List[str]) -> List[float]:
"""
从包含评分字符串的列表中提取所有评分,并返回一个包含所有评分的列表。
"""
pattern = r'(\d+\.\d+)分'
scores = []
for item in data:
match = re.search(pattern, item)
if match:
score = float(match.group(1))
scores.append(score)
return scores
# 核心业务
# 测试评分排序是否正确
def GetXinFanInfor04(self):
# 切换当前页面
self.switch()
# 获取第1页的番剧评分
temp = self.locators(self.el_xinFan_score)
for i in range(len(temp)):
self.xinFan_score.append(temp[i].text)
# 点击第二页按钮进入第二页
self.el_xinFan_two_page = self.locator(self.el_xinFan_two_page).click
# 获取第2页的番剧评分
temp = self.locators(self.el_xinFan_score)
for i in range(len(temp)):
self.xinFan_score.append(temp[i].text)
print(self.xinFan_score)
self.result = self.extract_scores(self.xinFan_score)
self.original = self.result
print('获取得到的列表', self.original)
# 手动按最高评分排序
self.result.sort(reverse=True)
print('手动按最高评分排序后的列表', self.result)
print('测试评分排序是否正确:', self.original == self.result)
③编写test04_case_score.py(任务4:运行此py文件)
代码如下:
import unittest
from selenium import webdriver
from page_object.blibli_index_object04 import BlibliIndex
class TestCase_OpenBliBliFanJu(unittest.TestCase):
@classmethod
def setUpClass(cls):
# 创建浏览器
cls.driver = webdriver.Chrome()
# 创建b站首页
cls.blibli = BlibliIndex(cls.driver)
# 执行b站首页打开番剧页面的业务
cls.blibliFanJu = cls.blibli.openBlibliFanju()
@classmethod
def tearDownClass(cls):
# 退出浏览器
cls.driver.quit()
# 测试用例函数
def test_OpenBliBliFanJu(self):
# 执行b站番剧首页中 获取新番信息的业务
self.blibliFanJu.GetXinFanInfor04()
if __name__ == '__main__':
unittest.main()
任务4运行结果图:
任务5:
①编写blibli_index_object05.py
代码如下:
# 核心业务流程
# 打开b站首页
# 点击番剧按钮,打开番剧页面
# #把打开的番剧页面返回出去
from base_page.base_page import Base # 导入基类---(理解:导入功能模块)
import time
from page_object.blibli_get_fanju_name_number05 import BliBliFanju
# b站首页
class BlibliIndex(Base):
# url
url = "http://www.bilibili.com"
# 核心元素
el_button = ('xpath', '//*[@id="i_cecream"]/div[2]/div[1]/div[3]/div[2]/div/div[1]/a[1]')
# 核心业务
def openBlibliFanju(self):
# 打开b站首页
self.open(self.url)
# 等待一段时间
time.sleep(1)
# 点击番剧按钮,打开番剧页面
self.locator(self.el_button).click()
time.sleep(3)
# #把打开的番剧页面返回出去
return BliBliFanju(self.driver)
②编写blibli_get_fanju_name_number05.py
代码如下:
import time
from base_page.base_page import Base
# b站番剧首页
class BliBliFanju(Base):
# 核心元素
# 推荐番剧下面的名称
el_xinFan_down = ("xpath", '//*[@class="season-cover-title"]')
# 推荐番剧上面的名称
el_xinFan_up = ("xpath", '//*[@class="hover-title"]')
# 存放两页番剧的追番人数
xinFan_down = []
xinFan_up = []
# 核心业务
# 获取“番剧首页”的页面上方推荐番剧两个区域的番剧名称
def GetXinFanInfor05(self):
# 切换当前页面
self.switch()
# 获取“番剧首页”的页面上方推荐番剧下区域的番剧名称
temp = self.locators(self.el_xinFan_down)
for i in range(len(temp)):
self.xinFan_down.append(temp[i].text)
# 获取“番剧首页”的页面上方推荐番剧上区域的番剧名称
from selenium.webdriver.common.action_chains import ActionChains
self.actions = ActionChains(self.driver)
self.actions.move_to_element(temp[i]).perform()
# 注意:要给获取第5和第6个番剧名称的时间设置长些,否则获取不到对应的名称
if i == 5 or i == 6:
time.sleep(3)
self.xinFan_up.append(self.locator(self.el_xinFan_up).text)
# 测试番剧名称是否一致
print("第{}个测试番剧名称是否一致:{}".format(i, temp[i].text == self.locator(self.el_xinFan_up).text))
time.sleep(0.5)
print(self.xinFan_down)
print(self.xinFan_up)
③编写test05_case.py(任务5:运行此py文件)
代码如下:
import time
import unittest
from selenium import webdriver
from page_object.blibli_index_object05 import BlibliIndex
class TestCase_OpenBliBliFanJu(unittest.TestCase):
@classmethod
def setUpClass(cls):
# 创建浏览器
cls.driver = webdriver.Chrome()
# 创建b站首页
cls.blibli = BlibliIndex(cls.driver)
# 执行b站首页打开番剧页面的业务
cls.blibliFanJu = cls.blibli.openBlibliFanju()
@classmethod
def tearDownClass(cls):
# 退出浏览器
cls.driver.quit()
# 测试用例函数
def test_OpenBliBliFanJu(self):
# 执行b站番剧首页中 获取新番信息的业务
self.blibliFanJu.GetXinFanInfor05()
time.sleep(3)
if __name__ == '__main__':
unittest.main()
任务5运行结果图:
任务完成啦!各位大佬,代码哪里需要完善,请多多指教。
I appreciate your support.