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

遇到的问题:

  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. kNN算法 Demo

    项目链接: https://github.com/WES6/kNN

  2. Pygame相关

    pygame是主要构筑在SDL库基础上的一组Python模块的集合,它使我们能够用Python语言来创建功能完整的游戏和多媒体程序.pygame是高度括平台可移植的,在任何SDL支持的平台上都可以运行 ...

  3. iOS常用框架源码分析

    SDWebImage NSCache 类似可变字典,线程安全,使用可变字典自定义实现缓存时需要考虑加锁和释放锁 在内存不足时NSCache会自动释放存储的对象,不需要手动干预 NSCache的key不 ...

  4. Python计算给定日期的周内的某一天

    先理一下思路:1.weekday会根据某个日期返回0到6的一个数字来表示星期几对吧,0==星期一我们来列一个表: [0,1,2,3,4,5,6] 2.知道了星期几之后,你可以计算出那一周相对于这个0到 ...

  5. JMeter接口测试-计数器

    前言 在测试注册接口的时候,需要批量注册账号时,每注册一个并且需要随时去修改数据,比较繁琐,除了使用随机函数生成账号,我们还可以使用计数器来进行批量注册. 一:添加配置元件-计数器 二:注册10个账号 ...

  6. C:数组习题

    与字符串处理有关的函数: 头文件:<stdio.h>    gets().puts() 头文件:<string.h> (1).字符串长度测量函数  :strlen(字符数组名) ...

  7. java基础进阶篇(二)_Arraylist ------【java源码栈】

    前言 ArrayList 在开发中用到的频率很高,其中原生态提供的方法有一些很好用的重载版本,其中有的坑该跳得跳啊. 一.ArrayList的6种初始化方法1.构造方法 参数为空2.构造方法 参数为L ...

  8. 机器学习- RNN以及LSTM的原理分析

    概述 RNN是递归神经网络,它提供了一种解决深度学习的另一个思路,那就是每一步的输出不仅仅跟当前这一步的输入有关,而且还跟前面和后面的输入输出有关,尤其是在一些NLP的应用中,经常会用到,例如在NLP ...

  9. 使用Taiko + Gauge进行自动化测试(一)

    目录 初识Taiko 环境安装 尝试Taiko taiko 执行过程 结合Gauge编写用例 使用Gauge 总结 初识Taiko 先来了解一下什么是Taiko:"Taiko是一个免费的开源 ...

  10. es6中的属性名表达式

    代码如下: 问题: 为什么我可以这样给obj1对象添加动态属性? 为什么我最终的结果是只添加了right属性? 解答: 1. 第一个问题解答如下: 我们知道在es5中给对象添加属性有两种方法,一种是通 ...