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 ...
随机推荐
- 注册免费试用12个月的亚马逊AWS云计算服务
注册: 注册地址 点击页面中间的创建免费用户,进入下一步页面: 然后就是填写各种个人信息的页面了: 填写付款信息: 付款信息会进行一个电话验证,这里需要先填写对应的电话号码和验证码,然后点立刻呼叫我, ...
- linux下查找文件及查找包含指定内容的文件常用命令
whereis <程序名称> 查找软件的安装路径-b 只查找二进制文件-m 只查找帮助文件-s 只查找源代码-u 排除指定类型文件-f 只显示文件名-B <目录> 在指定目录下 ...
- 【简单版】hexo博客搭建流程梳理
前言 本文章会为你梳理一个搭建hexo博客的流程 相关网址: Docs: https://hexo.io/docs/ Themes: https://hexo.io/themes/ 安装hexo 准备 ...
- C++扬帆远航——1
问题及代码: /* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:test.cpp * 作者:常轩 * 完成日期:2 ...
- 小程序在ios10.2系统上兼容
1. 定位元素在ios10.2系统上出现样式问题??? 没错,就是在测试在侧道ios10.2系统时发现了样式错误的问题,比如一个Swiper中,最后一个展示有问题. 这是啥原因❓❓❓❓❓❓ 大写的问 ...
- 编写简单i18n库
i18n是什么?i18n(其来源是英文单词internationalization的首末字符i和n,18为中间的字符数)是"国际化"的简称. 前言 第一次接触多语言是用野生java ...
- zookeeper和dubbo安装与搭建(2)
Zookeeper+Dubbo安装与搭建(2) (原创:黑小子-余) 一.环境配置:zookeeper3.6.0 + dubbo3.5.4 + maven3.6.1 + jdk1.8 + tomcat ...
- 修复Nginx的WebDAV功能
如果想使用WebDAV来实现文件共享,尤其是想使用操作系统内置功能来挂载文件系统的话,省心的话还是用Apache吧. 下文介绍如何用Nginx来实现这个目标.Windows内置的客户端是Microso ...
- vue中eslint报错的解决方案
1,Newline required at end of file but not found. (eol-last) //文末需要一行 这个是报错: 这个是不报错的: 只需要在最后一行加上一空行即可 ...
- nes 红白机模拟器 第8篇 USB 手柄支持
买了一个支持 USB OTG, 蓝牙 连接的 安卓手柄. 接到 ubunto 上 dmesg 可以看到识别出来的信息,内核已经支持了. usb - using uhci_hcd usb - usb - ...