新乡专业做网站,网站建设维护兼职,柏乡县网站建设,windows网站建设教程视频本文是基于Pytest框架#xff0c;读取excel中的文件#xff0c;传入页面表单中#xff0c;并做相应的断言实现。
1、编辑媒体需求
首先明确一下需求#xff0c;我们需要对媒体的表单数据进行编辑#xff0c;步骤如下#xff1a; 具体表单如下图所示
1、登录
2、点击我…本文是基于Pytest框架读取excel中的文件传入页面表单中并做相应的断言实现。
1、编辑媒体需求
首先明确一下需求我们需要对媒体的表单数据进行编辑步骤如下 具体表单如下图所示
1、登录
2、点击我的媒体
3、点击媒体 4、点击编辑媒体 5、设置标题
6、设置媒体标题分类
7、设置标签001
8、设置产生日期
9、上传图片
10、描述 11、状态
12、启动评论
13、缩略图时刻
14、允许下载 然后点击Update Media后就会跳转到这个媒体的界面上。可以查看提交的配置是否生效。 2、编辑媒体V1.0
第一版先定位到元素并手工实现。
2.1 登录
2.1.1 conftest.py配置
首先在conftest.py做好公共方法的配置工作也就是登录退出等一些常用的方法。
conftest.配置特点
conftest.py配置脚本名称是固定的不能改名称
conftest.py与运行的用例要在同一个package下并且有————init__.py文件
测试用例文件不需要import conftest.py就能自动找到配置好的pytest.fixture
import timeimport pytest
from selenium import webdriverpytest.fixture(scopesession)
def driver():driverwebdriver.Firefox()driver.maximize_window()driver.implicitly_wait(10)yield drivertime.sleep(10) # 如果需要观察程序运行过程那么加时间等待代码调试弯沉后去掉时间等待。# driver.quit()pytest.fixture(scopesession)
def login(driver):driver.get(https://svr-6-9010.share.51env.net/accounts/login/)# 3、输入用户名driver.find_element_by_id(id_login).send_keys(changcheng1211)# 4、输入密码driver.find_element_by_id(id_password).send_keys(changcheng1211)driver.find_element_by_id(id_captcha_1).send_keys(changcheng1211)# 5、点击登录driver.find_element_by_class_name(primaryAction).submit()yield driver介绍一下
Pytest Fixture
作用
为每个测试用例完成一些公共的前置或者后置工作
限制范围
scopefunction每个方法调用一次
scopeclass每个类调用一次
scopemodule每一个.py文件调用一次
scopesession多个.py文件只调用一次
用法
import pytest
打开浏览器 def driver():
登录功能 def login(): 2.1.12 pytest之全局配置文件pytest.ini
[pytest]
addopts -s -v
testpaths test_cases/test_update_media.py
-s表示输出调试信息用于显示测试函数中print()打印的信息
-v未加前只打印模块名加v后打印类名、模块名、方法名显示更详细的信息
-q表示只显示整体测试结果
-vs这两个参数可以一起使用
-n支持多线程或者分布式运行测试用例前提需安装pytest-xdist插件
–html生成html的测试报告前提需安装pytest-html插件 如pytest -vs --html ./reports/result.html
testpaths 是指定执行的路径的。
2.2 编辑媒体test_update_media.py
首先在测试的目录下新建一个测试文件test_update_media.pyD:\python\autoFuncTest2\test_cases\test_update_media.py
from selenium.webdriver.support.select import Selectclass TestUpDateMedia:def test_update_meida(self,login):# 1、登录# 2、点击我的媒体login.find_element_by_partial_link_text(我的媒体).click()# 3、点击媒体login.find_element_by_class_name(item-thumb).click()# 4、点击编辑媒体login.find_element_by_link_text(编辑媒体).click()# 5、设置标题login.find_element_by_id(id_title).clear()login.find_element_by_id(id_title).send_keys(小猴子.MP4)# 6、设置媒体标题分类id_category login.find_element_by_id(id_category)# 如果用ctrl键可以多选用click方法不能多选。# Selenium给我们提供了一种方法 select_by_visible_text(Film) 可以多选select_category Select(id_category)select_category.select_by_visible_text(Film)select_category.select_by_index(0) # Artselect_category.select_by_value(2) # Documentary# 7、设置标签001id_new_tags login.find_element_by_id(id_new_tags)id_new_tags.clear()id_new_tags.send_keys(001)# 8、设置产生日期id_add_date login.find_element_by_id(id_add_date)id_add_date.clear()id_add_date.send_keys(2000/06/04 20:49)# 9、上传图片login.find_element_by_id(id_uploaded_poster).send_keys(D:\\niupeng2.png)# 10、描述id_description login.find_element_by_id(id_description)id_description.clear()id_description.send_keys(今天我们去动物园参观了小猴子)# 11、状态id_state login.find_element_by_id(id_state)Select(id_state).select_by_visible_text(私有)# 12、启动评论login.find_element_by_id(id_enable_comments).click()# 13、缩略图时刻id_thumbnail_time login.find_element_by_id(id_thumbnail_time)id_thumbnail_time.clear()id_thumbnail_time.send_keys(50)# 14、允许下载login.find_element_by_id(id_allow_download).click()# 15、点击Update Medialogin.find_element_by_class_name(primaryAction).submit()
下面介绍一下代码的实现
from selenium.webdriver.support.select import Selectclass TestUpDateMedia:def test_update_meida(self,login):
首先导入一个Select的包因为里面有用到下拉框选择。
新建一个class TestUpDateMedia 的类。
def test_update_meida(self,login):
并在里面声明一个‘test_update_meida’的方法它继承自conftest.py的login的类。这里是直接调用登录功能。 # 2、点击我的媒体login.find_element_by_partial_link_text(我的媒体).click()# 3、点击媒体login.find_element_by_class_name(item-thumb).click()# 4、点击编辑媒体login.find_element_by_link_text(编辑媒体).click()
先点我的媒体点击媒体再点击编辑媒体 # 5、设置标题login.find_element_by_id(id_title).clear()login.find_element_by_id(id_title).send_keys(小猴子.MP4)
设置标题前应先清空输入框 # 6、设置媒体标题分类id_category login.find_element_by_id(id_category)# 如果用ctrl键可以多选用click方法不能多选。# Selenium给我们提供了一种方法 select_by_visible_text(Film) 可以多选select_category Select(id_category)select_category.select_by_visible_text(Film)select_category.select_by_index(0) # Artselect_category.select_by_value(2) # Documentary
设置媒体的标题分类 这里涉及到下拉框的操作
下拉框操作 假设有一个元素使select标签这时需要选择其中一个/多个选项 这时就不是click或者sendKeys这样的操作而是应该使用”选择“操作 代码实现步骤 1.首先定位下拉框 WebElement element driver.findElement(By...) 2.把定位到的元素转成下拉框类型 Select select new Select(element); 3、执行”选择“操作 select.deselectAll() 清空选择 选择某个元素有三种方式 select.select_by_visible_text(界面可见的文字) select.select_by_index(0) #选项的value属性 select.select_by_value(2) #第几个选项 # 7、设置标签001id_new_tags login.find_element_by_id(id_new_tags)id_new_tags.clear()id_new_tags.send_keys(001)# 8、设置产生日期id_add_date login.find_element_by_id(id_add_date)id_add_date.clear()id_add_date.send_keys(2000/06/04 20:49) 设置标签和产生日期。 # 9、上传图片login.find_element_by_id(id_uploaded_poster).send_keys(D:\\niupeng2.png)# 10、描述id_description login.find_element_by_id(id_description)id_description.clear()id_description.send_keys(今天我们去动物园参观了小猴子)# 11、状态id_state login.find_element_by_id(id_state)Select(id_state).select_by_visible_text(私有) 正常定位元素并发送值就可以。 # 12、启动评论login.find_element_by_id(id_enable_comments).click()# 13、缩略图时刻id_thumbnail_time login.find_element_by_id(id_thumbnail_time)id_thumbnail_time.clear()id_thumbnail_time.send_keys(50)# 14、允许下载login.find_element_by_id(id_allow_download).click()# 15、点击Update Medialogin.find_element_by_class_name(primaryAction).submit() 到这后第一版已经完成了。已经实现了基本的功能。
在命令行界面输入pytest,会显示执行完成。 3、编辑媒体V2.0
简要说明一下代码的结构。首先新建了一个叫autoFuncTest2的工程。里面按顺序resource下面有test_data.xlsx的测试数据文件。test_cases下面的conftest.py的配置文件和test_update_media2.py的测试用例文件utils里面有一个专门读取xlsx文件的excel_utils.py文件。最后是一个pytest.ini的全局配置文件。
执行顺序为首先命令行输入pytest会读取pytest.ini配置文件按照里面的路径执行测试test_cases下面的测试用例test_update_media2.py。test_update_media2.py再调用conftest.py进行登录登录完成后调用utils里面有一个专门读取xlsx文件的excel_utils.py文件读取resource下面有test_data.xlsx的测试数据文件进行操做。 3.1 pytest之全局配置文件pytest.ini
把代码的执行路径改了。因为我们要重新编写V2.0版本。我们要将待执行的命令指向要执行的文件。
[pytest]
addopts -s -v
testpaths test_cases/test_update_media2.py
3.2 测试数据文件test_data.xlsx
这个是要读取的excel文件
其中里面有一些参数是我们要读取的。
title, category, tag, date, image, description, state, enable_comments, thumbnail_time, allow_download,verify_state, verify_date, verify_enable_comments,verify_allow_download 3.3 test_update_media2.py
这个要从excel里面读取数据进行参数化。
import timeimport pytest
from selenium.webdriver.support.select import Selectfrom utils import excel_utilsclass TestUpDateMedia:test_data excel_utils.read(__file__)pytest.mark.parametrize(title, category, tag, date, image, description, state, enable_comments, thumbnail_time, allow_download, verify_state, verify_date, verify_enable_comments, verify_allow_download, test_data)def test_update_media(self,login,title, category, tag, date, image, description,state, enable_comments, thumbnail_time, allow_download,verify_state, verify_date, verify_enable_comments,verify_allow_download):# 1、登录# 2、点击我的媒体if Media was edited! in login.page_source:login.find_element_by_xpath(//i[text()menu]).click()# 如果页面出现了Media was edited!那么需要先点击左上角的”i“标签三个横线的按钮login.find_element_by_partial_link_text(我的媒体).click()# except Exception as e:# login.find_element_by_xpath(//i[text()menu]).click()# 3、点击媒体login.find_element_by_class_name(item-thumb).click()# 4、点击编辑媒体login.find_element_by_link_text(编辑媒体).click()# 5、设置标题login.find_element_by_id(id_title).clear()login.find_element_by_id(id_title).send_keys(title)# 6、设置媒体标题分类id_category login.find_element_by_id(id_category)# 如果用ctrl键可以多选用click方法不能多选。# Selenium给我们提供了一种方法 select_by_visible_text(Film) 可以多选select_category Select(id_category)select_category.deselect_all()for c in category.split(,):select_category.select_by_visible_text(c)# select_category.select_by_index(0) # Art# select_category.select_by_value(2) # Documentary# Experimental,Music,TV# 7、设置标签001id_new_tags login.find_element_by_id(id_new_tags)id_new_tags.clear()id_new_tags.send_keys()# 8、设置产生日期id_add_date login.find_element_by_id(id_add_date)id_add_date.clear()id_add_date.send_keys(date)# 9、上传图片login.find_element_by_id(id_uploaded_poster).send_keys(image)# 10、描述id_description login.find_element_by_id(id_description)id_description.clear()id_description.send_keys(description)# 11、状态id_state login.find_element_by_id(id_state)Select(id_state).select_by_visible_text(state)# 12、启动评论id_enable_comments login.find_element_by_id(id_enable_comments)if enable_comments 启用评论 and id_enable_comments.is_selected():passelif enable_comments 不启用评论 and not id_enable_comments.is_selected():passelse:id_enable_comments.click()# 13、缩略图时刻id_thumbnail_time login.find_element_by_id(id_thumbnail_time)id_thumbnail_time.clear()id_thumbnail_time.send_keys(thumbnail_time)# 14、不允许下载 allow_download,id_allow_download login.find_element_by_id(id_allow_download)if allow_download 允许下载 and id_allow_download.is_selected():passelif allow_download 不允许下载 and not id_allow_download.is_selected():passelse:id_allow_download.click()# 15、点击Update Medialogin.find_element_by_class_name(primaryAction).submit()# 16.断言# 检查标题assert login.find_element_by_css_selector(.media-title-banner h1).text title# 检查分类for c in category.split(,):assert c in login.page_source# 检查标签assert tag in login.page_source# 检查日期assert verify_date in login.page_source# 检查描述assert description in login.page_source# 检查状态if state 公开:assert private not in login.page_sourceassert unlisted not in login.page_sourceelse:assert verify_state in login.page_source# 检查评论assert verify_enable_comments in login.page_source# 检查是否允许评论 form-textareaif Add a comment... verify_enable_comments:assert login.find_element_by_class_name(form-textarea).get_attribute(placeholder) Add a comment...else:assert verify_enable_comments in login.page_source# 检查是否允许下载if verify_allow_download 允许下载:# login.find_element_by_xpath(//span[text()下载])assert 下载 in login.page_sourceelse:assert 下载 not in login.page_source
下面解释一下
pytest.mark.parametrize(excel中的标题,test_data) 接下来将这些参数传进去。并将里面的响应参数替换成传进去的参数。
def test_update_media(self,login,title, category, tag, date, image, description,state, enable_comments, thumbnail_time, allow_download,verify_state, verify_date, verify_enable_comments,verify_allow_download): 有时隐式等待一些元素需要用一些条件触发可以用一些条件判断代替。
if Media was edited! in login.page_source:login.find_element_by_xpath(//i[text()menu]).click() 有时一个参数里面有多个值比如category里面有Experimental,Music,TV下拉框里面需要选多个值需要用for循环遍历并用逗号隔开他们。 # 6、设置媒体标题分类id_category login.find_element_by_id(id_category)# 如果用ctrl键可以多选用click方法不能多选。# Selenium给我们提供了一种方法 select_by_visible_text(Film) 可以多选select_category Select(id_category)select_category.deselect_all()for c in category.split(,):select_category.select_by_visible_text(c) 有时需要判断同时页面上是否勾选如果勾选并且excel中要求启用评论那么不操作反之就勾选。这里面涉及到一个多重判断。 # 12、启动评论id_enable_comments login.find_element_by_id(id_enable_comments)if enable_comments 启用评论 and id_enable_comments.is_selected():passelif enable_comments 不启用评论 and not id_enable_comments.is_selected():passelse:id_enable_comments.click()