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:] == ‘0‘:
                    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()

原文地址:https://www.cnblogs.com/lengjf/p/11704717.html

时间: 2024-10-16 05:56:14

Python+Selenium+Unittest编写超链接点击测试用例的相关文章

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

import unittest import webdriver import time class Test(unittest.TestCase): @classmethod def setUpClass(self): cap = {} cap['platformName'] = 'Android' cap['platformVersion'] = '4.4.2' cap['deviceName'] = '7N2SSE158P001892' cap['noReset'] = 'noReset'

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

1.UI测试框架搭建-目录结构 2. 文件介绍 2.1.baseinfo->__init__.py 配置文件定义基础参数 #-*-coding:utf-8-*- #测试用例配置参数 base_url = "http://xxxxx.com" undirect_username = "username" undirect_password = "password" direct_username = "username"

Python+selenium+unittest的GUI自动化框架实现

框架设计说明图: 框架实现前的准备工作: 1.Python版本为2.7.11的Windows下的安装. 2.命令行下的selenium最新版本(编者使用版本为2.53.0,可兼容最新火狐.IE.chrome等浏览器版本)pip安装. 3.版本为Version: Mars.1 Release (4.5.1)的eclipse安装(编者Python开发使用工具),jdk1.7. 4.eclipse下Python开发插件PyDev 4.5.1(高版本不一定兼容当前eclipse版本与Java版本,高版本

Python+Selenium ----unittest单元测试框架

unittest是一个单元测试框架,是Python编程的单元测试框架.有时候,也做叫做"PyUnit",是Junit的Python语言版本.这里了解下,Junit是Java语言的单元测试框架,Java还有一个很好用的单元测试框架叫TestNG,本系列只学习Python,所以只需要unittest是Python里的一个单元测试框架就可以了.       unittest支持测试自动化,共享测试用例中的初始化和关闭退出代码,在unittest中最小单元是test,也就是一个测试用例.要了解

Python + selenium + unittest装饰器 @classmethod

前言 前面讲到unittest里面setUp可以在每次执行用例前执行,这样有效的减少了代码量,但是有个弊端,比如打开浏览器操作,每次执行用例时候都会重新打开,这样就会浪费很多时间. 于是就想是不是可以只打开一次浏览器,执行完用例再关闭呢?这就需要用到装饰器(@classmethod)来解决了. 一.装饰器 1.用setUp与setUpClass区别 setup():每个测试case运行前运行teardown():每个测试case运行完后执行setUpClass():必须使用@classmetho

python+selenium+unittest测试框架2-装饰器@classmethod

装饰器@classmethod 一.装饰器@classmethod 多个用例可能需要多次打开浏览器,装饰器@classmethod只打开一次浏览器.classmethod是python里的类方法,@是修饰符号. 1.setUpClass(): @classmethod def setUpClass(cls): 2.tearDownClass(): @classmethod def tearDownClass(cls): 示例: from selenium import webdriver fro

python+selenium+unittest测试框架3-项目构建和发送邮件

项目构建和发送邮件 一.项目构建 1.建立项目chen 打开pycharm左上角File>New Project,在Location输入testing项目所在文件夹D:\chen,创建后选择Opin in current window. 2.创建子文件夹 PS:创建文件夹,一定要选Python Package的方式创建. 3.创建测试脚本 4.创建runalltest.py PS:在runalltest.py这个脚本里面写主函数,控制执行所有的用例. 5.下载生成测试报告的源码 import H

Python&Selenium&Unittest&BeautifuReport 自动化测试并生成HTML自动化测试报告

一.摘要 本篇博文将介绍如何借助BeautifulReport和HTML模版,生成HTML测试报告的BeautifulReport 源码Clone地址为 https://github.com/TesterlifeRaymond/BeautifulReport,其中 BeautifulReport.py和其template是我们需要的关键. 二.BeautifulReport 如下代码是BeautifulReport.py的源码,其中几个注释的地方需要注意,将其集成进自己的自动化框架时需要做相应的

python+selenium+unittest有用文章

等待(wait): https://www.jb51.net/article/92672.htm unittest运行: https://www.cnblogs.com/yoyoketang/p/7523409.html unittest测试框架: https://www.cnblogs.com/yufeihlf/p/5707929.html page objection: https://www.cnblogs.com/yufeihlf/p/5764099.html 测试用例管理: https