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

遇到的问题:

  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. 注册免费试用12个月的亚马逊AWS云计算服务

    注册: 注册地址 点击页面中间的创建免费用户,进入下一步页面: 然后就是填写各种个人信息的页面了: 填写付款信息: 付款信息会进行一个电话验证,这里需要先填写对应的电话号码和验证码,然后点立刻呼叫我, ...

  2. linux下查找文件及查找包含指定内容的文件常用命令

    whereis <程序名称> 查找软件的安装路径-b 只查找二进制文件-m 只查找帮助文件-s 只查找源代码-u 排除指定类型文件-f 只显示文件名-B <目录> 在指定目录下 ...

  3. 【简单版】hexo博客搭建流程梳理

    前言 本文章会为你梳理一个搭建hexo博客的流程 相关网址: Docs: https://hexo.io/docs/ Themes: https://hexo.io/themes/ 安装hexo 准备 ...

  4. C++扬帆远航——1

    问题及代码: /* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:test.cpp * 作者:常轩 * 完成日期:2 ...

  5. 小程序在ios10.2系统上兼容

    1.  定位元素在ios10.2系统上出现样式问题??? 没错,就是在测试在侧道ios10.2系统时发现了样式错误的问题,比如一个Swiper中,最后一个展示有问题. 这是啥原因❓❓❓❓❓❓ 大写的问 ...

  6. 编写简单i18n库

    i18n是什么?i18n(其来源是英文单词internationalization的首末字符i和n,18为中间的字符数)是"国际化"的简称. 前言 第一次接触多语言是用野生java ...

  7. zookeeper和dubbo安装与搭建(2)

    Zookeeper+Dubbo安装与搭建(2) (原创:黑小子-余) 一.环境配置:zookeeper3.6.0 + dubbo3.5.4 + maven3.6.1 + jdk1.8 + tomcat ...

  8. 修复Nginx的WebDAV功能

    如果想使用WebDAV来实现文件共享,尤其是想使用操作系统内置功能来挂载文件系统的话,省心的话还是用Apache吧. 下文介绍如何用Nginx来实现这个目标.Windows内置的客户端是Microso ...

  9. vue中eslint报错的解决方案

    1,Newline required at end of file but not found. (eol-last) //文末需要一行 这个是报错: 这个是不报错的: 只需要在最后一行加上一空行即可 ...

  10. nes 红白机模拟器 第8篇 USB 手柄支持

    买了一个支持 USB OTG, 蓝牙 连接的 安卓手柄. 接到 ubunto 上 dmesg 可以看到识别出来的信息,内核已经支持了. usb - using uhci_hcd usb - usb - ...