测试功能:博客园首页网站分类的一级菜单链接和二级菜单链接的点击。

遇到的问题:

  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编写超链接点击测试用例的更多相关文章

  1. Python+selenium+unittest+HTMLTestReportCN单元测试框架分享

    分享一个比较基础的,系统性的知识点.Python+selenium+unittest+HTMLTestReportCN单元测试框架分享 Unittest简介 unittest是Python语言的单元测 ...

  2. Python+Selenium+Unittest+Ddt+HTMLReport分布式数据驱动自动化测试框架结构

    1.Business:公共业务模块,如登录模块,可以把登录模块进行封装供调用 ------login_business.py from Page_Object.Common_Page.login_pa ...

  3. windiows下搭建python+selenium+unittest+Chrome的Web自动化环境

    一.selenium.unittest概念 Selenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架.它是一款用于运行端到端功能测试的超强工具.您可以使用多个编程语言编写测试,并且 ...

  4. python+selenium +unittest生成HTML测试报告

    python+selenium+HTMLTestRunner+unittest生成HTML测试报告 首先要准备HTMLTestRunner文件,官网的HTMLTestRunner是python2语法写 ...

  5. python+selenium+unittest,爬虫电影网站

    以前经常在这个网站上下载电影下来看,这个网站比较坑的就是,主页上只有电影的名称,但是评分是看不到的:只有再点击电影名字,进入电影主页时才能看到评分.一般下载的电影都是评分高的才看,低的就忽略掉了.每次 ...

  6. Python+Selenium+Unittest框架使用——Selenium——定位元素(二)

    1.定位元素(id.name.class.link.partial link) (1)find_element_by_id() 用百度定位测试,用firebug查看定位元素 ,输入框的id为“kw”, ...

  7. 用python和unittest编写app自动化测试用例

    import unittest import webdriver import time class Test(unittest.TestCase): @classmethod def setUpCl ...

  8. Python Selenium unittest+HTMLTestRunner实现 自动化测试及发送测试报告邮件

    1.UI测试框架搭建-目录结构 2. 文件介绍 2.1.baseinfo->__init__.py 配置文件定义基础参数 #-*-coding:utf-8-*- #测试用例配置参数 base_u ...

  9. python selenium --unittest 框架

    转自:http://www.cnblogs.com/fnng/p/3300788.html 学习unittest 很好的一个切入点就是从selenium IDE 录制导出脚本.相信不少新手学习sele ...

随机推荐

  1. 第一次安装vs2010无法运行程序,系统找不到exe文件,LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

    最近在看数据结构的一些书籍,怎奈代码是c写的,所以安装一个编译器vs2010来测试代码,但是建完文件后编译ok,f5却出现错误:无法启动程序,系统找不到指定文件.上网找了一些解决办法,但是仍然无法解决 ...

  2. 给iPhone找一条平凡之路

    新款iPhone马上就要开发布会了,对于全世界的手机从业者来说,现在的感觉就好像中国人过年:早些时候,大家都盼着过年,放鞭炮.享受美食,小孩子还有压岁钱,但随着生活水平的提高,年味越来越淡,昔日的美好 ...

  3. MyEclipse下Spring+Hibernate整合

    目前,SSH(Struts+Spring+Hibernate)是Web开发的一种常用框架组合,Struts实现了MVC,Hibernate实现了关系对象映射,Spring实现了基于Bean的配置管理. ...

  4. 事务以及Spring的事务管理

    一.什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行 二.事务的特性(ACID) 原子性: 事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完成,要么完全不起作用: 一致性 ...

  5. HTML 和 CSS 基础

    Contents hyper text markup language 超文本标记语言,是最基础的网页开发语言.网页文件后缀名以.html/.htm结束. 基本标签 文件标签 <!DOCTYPE ...

  6. LeetCode 32,并不Hard的难题,解法超级经典,带你领略动态规划的精彩

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天给大家分享的是LeetCode当中的32题,这是一道Hard难度的题.也是一道经典的字符串处理问题,在接下来的文章当中,我们会详细地解读 ...

  7. Web Scraper 高级用法——抓取属性信息 | 简易数据分析 16

    这是简易数据分析系列的第 16 篇文章. 这期课程我们讲一个用的较少的 Web Scraper 功能--抓取属性信息. 网页在展示信息的时候,除了我们看到的内容,其实还有很多隐藏的信息.我们拿豆瓣电影 ...

  8. Slog62_项目上线之ArthurSlog个人网站上线1

    ArthurSlog SLog-62 Year·1 Guangzhou·China September 9th 2018 GitHub NPM Package Page ArthurSlog Page ...

  9. js事件委托target

    **看一看,瞧一瞧!** 话说要谈事件委托和target.那我们首先来看看什么是事件.话说什么是事件呢?一般的解释是比较重大.对一定的人群会产生一定影响的事情.而在JavaScript中就不是这样了, ...

  10. 新建eclipse工作空间的常用设置

    1.设置字体: Window->Preferences->(可以直接搜索font)General -> Appearance ->Colors and Fonts --> ...