Python+Selenium+Unittest编写超链接点击测试用例
测试功能:博客园首页网站分类的一级菜单链接和二级菜单链接的点击。
遇到的问题:
1.循环点击二级菜单时,点击了一个一级菜单下的第一个二级菜单后,页面会刷新,再定位同一个一级菜单次下的第二个二级菜单时,
会报错:找不到第二个二级菜单,这时需要对一级菜单重新定位赋值;

2.当一级菜单下的二级菜单太多时,在页面的不可见区域,这时会报错:element not interactable,这时需要滑动滚动条。

# coding=utf-8
from selenium import webdriver
import unittest
from selenium.webdriver import ActionChains
from selenium.common.exceptions import NoSuchElementException class Testcnbloglink(unittest.TestCase):
@classmethod
def setUpClass(cls):
'''初始化浏览器驱动和访问地址'''
cls.driver = webdriver.Chrome()
cls.base_url = 'https://www.cnblogs.com/'
cls.driver.get(cls.base_url)
cls.driver.maximize_window() # 将浏览器设为全屏 def test_1clickcateitem(self):
'''测试点击一级菜单链接'''
try:
cate_parentid = '//*[@id="cate_item"]/li' # 所有一级菜单元素
for i in range(1, 30): # 循环一级菜单元素下标
cate_id = cate_parentid + '[' + str(i) + ']' # 得到的一级菜单元素
# 循环点击每一个一级菜单
menu = self.driver.find_element_by_xpath(cate_id)
menu.click()
menu = self.driver.find_element_by_xpath(cate_id) # 点击菜单之后,页面刷新,需要重新赋值
# 断言,判断跳转链接是否正确
if menu.get_attribute('id')[10:] == '':
self.assertEqual(self.driver.current_url, 'https://www.cnblogs.com/cate/all/')
elif menu.get_attribute('id')[10:] == '-1':
self.assertEqual(self.driver.current_url, 'https://www.cnblogs.com/comment/')
else:
self.assertEqual(self.driver.current_url, 'https://www.cnblogs.com/cate/' +
menu.get_attribute('id')[10:] + '/')
except NoSuchElementException:
print('没有找到一级菜单,一级菜单点击完成') def test_2clickcatecontent(self):
'''点击第二级菜单'''
try:
cate_parentid = '//*[@id="cate_item"]/li' # 一级菜单的所有元素
for i in range(1, 30):
cate_id = cate_parentid + '[' + str(i) + ']'
above = self.driver.find_element_by_xpath(cate_id) # 一级菜单元素
aid = above.get_attribute("id")[10:] # 一级菜单的id值
try:
cate_content_parentid = '// *[ @ id = "cate_content_block_' + aid + '"]' # 二级菜单的所有元素
for f in range(1, 30):
# 鼠标悬停一级菜单
ActionChains(self.driver).move_to_element(above).perform()
cate_content_id = cate_content_parentid+'/div[2]'+'/ul'+'/li['+str(f)+']'+'/a' # 二级菜单元素
menu2 = self.driver.find_element_by_xpath(cate_content_id)
# 拖动元素到可见区域--scrollIntoView() 拉到顶部显示,有可能会被导航栏遮挡,定位不到而报错;
# scrollIntoView(false)可视区域底部对齐
if f == 17:
self.driver.execute_script("arguments[0].scrollIntoView(false);", menu2)
# 循环点击二级菜单
menu2.click()
# 点击二级菜单之后,页面刷新,需要对一级菜单重新赋值,要不然找不到同一个一级菜单下的其他二级菜单
above = self.driver.find_element_by_xpath(cate_id)
except NoSuchElementException:
print('没有找到二级菜单,二级菜单点击完')
except NoSuchElementException:
print('没有找到一级菜单,一级菜单悬停完成') @classmethod
def tearDownClass(cls):
cls.driver.quit()
Python+Selenium+Unittest编写超链接点击测试用例的更多相关文章
- Python+selenium+unittest+HTMLTestReportCN单元测试框架分享
分享一个比较基础的,系统性的知识点.Python+selenium+unittest+HTMLTestReportCN单元测试框架分享 Unittest简介 unittest是Python语言的单元测 ...
- Python+Selenium+Unittest+Ddt+HTMLReport分布式数据驱动自动化测试框架结构
1.Business:公共业务模块,如登录模块,可以把登录模块进行封装供调用 ------login_business.py from Page_Object.Common_Page.login_pa ...
- windiows下搭建python+selenium+unittest+Chrome的Web自动化环境
一.selenium.unittest概念 Selenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架.它是一款用于运行端到端功能测试的超强工具.您可以使用多个编程语言编写测试,并且 ...
- python+selenium +unittest生成HTML测试报告
python+selenium+HTMLTestRunner+unittest生成HTML测试报告 首先要准备HTMLTestRunner文件,官网的HTMLTestRunner是python2语法写 ...
- python+selenium+unittest,爬虫电影网站
以前经常在这个网站上下载电影下来看,这个网站比较坑的就是,主页上只有电影的名称,但是评分是看不到的:只有再点击电影名字,进入电影主页时才能看到评分.一般下载的电影都是评分高的才看,低的就忽略掉了.每次 ...
- Python+Selenium+Unittest框架使用——Selenium——定位元素(二)
1.定位元素(id.name.class.link.partial link) (1)find_element_by_id() 用百度定位测试,用firebug查看定位元素 ,输入框的id为“kw”, ...
- 用python和unittest编写app自动化测试用例
import unittest import webdriver import time class Test(unittest.TestCase): @classmethod def setUpCl ...
- Python Selenium unittest+HTMLTestRunner实现 自动化测试及发送测试报告邮件
1.UI测试框架搭建-目录结构 2. 文件介绍 2.1.baseinfo->__init__.py 配置文件定义基础参数 #-*-coding:utf-8-*- #测试用例配置参数 base_u ...
- python selenium --unittest 框架
转自:http://www.cnblogs.com/fnng/p/3300788.html 学习unittest 很好的一个切入点就是从selenium IDE 录制导出脚本.相信不少新手学习sele ...
随机推荐
- NoneBot+酷Q,打造QQ机器人
NoneBot 是一个基于 酷Q 的 Python 异步 QQ 机器人框架,它会对 QQ 机器人收到的消息进行解析和处理,并以插件化的形式,分发给消息所对应的命令处理器和自然语言处理器,来完成具体的功 ...
- Java學習筆記(基本語法)
本文件是以學習筆記的概念為基礎,用於自我的複習紀錄,不過也開放各位的概念指證.畢竟學習過程中難免會出現觀念錯誤的問題.也感謝各位的觀念指證. 安裝JDK 在Oracle網站中找自己系統的JDK下載位置 ...
- Flask添加新命令
代码: import click from flask import Flask app = Flask(__name__) @app.cli.command() def hg(): click.ec ...
- 软件测试人必备的 Python 知识图
之前发过蛮多不少关于 Python 学习的文章,收到大家不少的好评,不过大家也有许多困惑: 现在测试不好做,是不是真的该重新去学一门热门的语言? 入门 Python 该学哪些知识点?该看哪些书? 可以 ...
- Y事业部打造一体化质量管理平台
互联网企业质量管理的困惑 作为互联网时代的互联网企业,我们的研发模式和传统模式相比,最显著的不同在于发布节奏加快了,这个加快不是快了10%,20%,50%,而是加快了几倍,甚至几十倍,上百倍.面对加快 ...
- yii框架通过控制台命令创建定时任务
假设Yii项目路径为 /home/apps 1. 创建文件 /home/apps/web/protected/commands/console.php $yii = '/home/apps/frame ...
- React Native Build Apk
1 React Native安卓项目打包APK 1.1 产生签名的key 先通过keytool生成key 1 keytool -genkey -v -keystore demo-release-key ...
- 一篇文章带您读懂List集合(源码分析)
今天要分享的Java集合是List,主要是针对它的常见实现类ArrayList进行讲解 内容目录 什么是List核心方法源码剖析1.文档注释2.构造方法3.add()3.remove()如何提升Arr ...
- 如何正确使用redis分布式锁
前言 笔者在公司担任技术面试官,在笔者面试过程中,如果面试候选人提到了reids分布式锁,笔者都会问一下redis分布式锁的知识点,但是令笔者遗憾的是,该知识点十个人中有九个人都答得不清楚,或者回 ...
- [红日安全]Web安全Day5 - 任意文件上传实战攻防
本文由红日安全成员: MisakiKata 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目 ...