python+selenium获取禅道所有Bug标题

前言:

对于一组很多的数据,一个页面加载不完,需要分页加载,比如禅道的Bug数,一页默认是20个(自己可以根据需求更改),这时就有了第二页,第三页等等。

这时如果要获取所有的Bug标题来怎么做呢?

点击下一页Bug,你会发现url的变化,就只有最后一个数字改变,如下图:

大体思路:

获取所有url→ddt驱动获取每一页的数据

步骤:

第一步:获取所有url

这里已经显示了总共有几页和当前所在的页面数,我们要获取的就后面的数字 ‘3’。

先定位到这个元素,在通过正则取出后面的 ‘3’,具体代码如下:

b=self.driver.find_element_by_xpath(".//*[@id=‘bugList‘]/tfoot/tr/td/div[2]/div/strong[2]")
page=re.findall(r‘/(.+?)‘,b.text)
total_page=page[0]
print(‘总共的页数:‘,total_page)

接下来就是要用到range函数了,获取所有的url地址了,代码如下:

for i in range(1,int(total_page)+1):
  Url=url+‘/zentao/bug-browse-1--unclosed-0--60-20-%s.html‘ % i
  print(Url)

最后控制台输出如下:

观察下,是不是只有后面的1,2,3在跟着变,其他无任何变化,这时就可以将这些url添加到一个list中去,用做接下来的ddt驱动的数据了

具体代码如下:

#coding:utf-8
from selenium.webdriver.firefox.webdriver import WebDriver as Firefox
import re,time
from selenium.webdriver.support.ui import WebDriverWait
class GetUrl():
    ‘‘‘获取所有URL页面‘‘‘
    def get_url(self,url,username,psw):
        self.driver=Firefox()
        self.driver.maximize_window()
        self.driver.set_page_load_timeout(20)
        self.driver.implicitly_wait(20)
        self.driver.get(url+‘/zentao/user-login-L3plbnRhby8=.html‘) #输入网址
        WebDriverWait(self.driver,20,1).until(lambda x:x.find_element_by_id("account")).send_keys(username) #输入账号
        WebDriverWait(self.driver,20,1).until(lambda x:x.find_element_by_name("password")).send_keys(psw)   #输入密码
        WebDriverWait(self.driver,20,1).until(lambda x:x.find_element_by_id(‘submit‘)).click()              #点击登录按钮
        time.sleep(2)
        self.driver.find_element_by_xpath(".//*[@id=‘mainmenu‘]/ul/li[4]/a").click()
        time.sleep(2)
        self.driver.find_element_by_xpath(".//*[@id=‘modulemenu‘]/ul/li[2]/a").click()
        time.sleep(2)
        table=self.driver.find_element_by_id(‘bugList‘)  #获取到bugList这个表格
        table_rows=table.find_elements_by_tag_name(‘tr‘) #获取行数
        print((‘每一页数据的条数:‘),(len(table_rows)-2))    #这里减2是减去表格最上面和最下面那行
        b=self.driver.find_element_by_xpath(".//*[@id=‘bugList‘]/tfoot/tr/td/div[2]/div/strong[2]") #定位到页面显示总页数那个元素(1/3)
        page=re.findall(r‘/(.+?)‘,b.text)  #通过正则取出后面那个总页数(也就是那个3)
        total_page=page[0]
        print(‘总共的页数:‘,total_page)
        a=[]  #创建空list去接收生成的url
        for i in range(1,int(total_page)+1):
            Url=url+‘/zentao/bug-browse-1--unclosed-0--60-20-%s.html‘ % i
            a.append(Url)
        print(a)
        self.driver.close()
        return a
if __name__==‘__main__‘:
    url=‘http://127.0.0.1‘
    username=‘admin‘
    psw=‘123456‘
    a=GetUrl()
    a.get_url(url,username,psw)

第二步:编写另一个类来执行

1.导入第一步的url结果

2.添加ddt驱动

3.将结果写入TXT中

具体代码如下:

#coding:utf-8
import unittest
import ddt
import time
from com.Practice.test_geturl import GetUrl
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
url=‘http://127.0.0.1‘
username=‘admin‘
psw=‘123456‘
test_url=GetUrl().get_url(url,username,psw)
@ddt.ddt
class Test(unittest.TestCase):
    ‘‘‘获取所有Bug标题‘‘‘
    @ddt.data(*test_url)
    def test_01(self,test_url):
        self.driver = webdriver.Firefox()
        self.driver.get(‘http://127.0.0.1/zentao/user-login-L3plbnRhby8=.html‘)
        WebDriverWait(self.driver,20,1).until(lambda x:x.find_element_by_id("account")).send_keys(‘admin‘)
        WebDriverWait(self.driver,20,1).until(lambda x:x.find_element_by_name("password")).send_keys(‘123456‘)
        WebDriverWait(self.driver,20,1).until(lambda x:x.find_element_by_id(‘submit‘)).click()
        time.sleep(1)
        self.driver.get(test_url)
        a=self.driver.find_elements_by_xpath(".//*[@id=‘bugList‘]/tbody/tr/td[4]/a")
        for i in a:
            print(i.text)
            try:
                with open(‘zendao.txt‘,‘a‘) as f:
                    f.write(i.text+‘\n‘)
            except Exception as msg:
                print(‘写入时出错啦:%s‘ % msg)
        time.sleep(1)
    def tearDown(self):
        self.driver.close()

if __name__==‘__main__‘:
    unittest.main()

这里获取文本信息是通过table定位获取。

最后TXT打印结果(没截全):

这个是一个优惠券生成的网址,也是分页显示,原理和上面大体相同。

结语:

这个有点麻烦,应该还有更简单的方法。只可惜小白一枚,能力不足,暂时就只能先这样做了,欢迎大家提意见!!!

原文地址:https://www.cnblogs.com/luobobobo/p/9249193.html

时间: 2024-11-08 04:59:21

python+selenium获取禅道所有Bug标题的相关文章

【禅道】bug管理篇

出自:http://www.zentao.net/book/zentaopmshelp/64.html 分配给研发人员要处理的bug时,怎么通知他们呢?发邮件?http://www.zentao.net/book/zentaopmshelp/96.html 简介:本文讲述如何使用禅道来进行bug的跟踪和管理. 一.创建产品 二.提出bug 三.解决bug 四.关闭bug 上篇文章讲述了禅道的简使用方法之一,只使用禅道来进行项目任务管理.禅道的测试功能也可以独立出来单独使用.这种方式很适合于测试团

015 python接口 自动化测试 - 禅道

''' 时间:2018/11/12 目录: 一: 自动化测试 二: 数据格式 ''' 一: 自动化测试 1 : 建立工程目录. # coding:utf-8 import requests import time from test_018.login_chandao import Login host = "http://127.0.0.1" class AddBug(): def __init__(self, s): self.s = s def up_load(self, jpg

用python+selenium获取XX省交通违章数据

前言: 目前在研究易信公众号,想给公众号增加一个获取个人交通违章的查询菜单,通过点击返回查询数据.以下是实施过程. 一.首先,用火狐浏览器打开XX省交管网,分析页面信息: 可以看到共有4种查询种类,我只要查询违章数据,所以分析第一个电子警察信息查询就好了,用firebug分别查看车牌号码.车辆识别码.验证码输入框,可以得到id属性,分别为:carNum1.carAuthCode1.captcha1. 到这里,我们可以用selenium根据获取的id,自动填入车牌号码.车辆识别码.验证码,但验证码

Python Selenium 获取不到弹出框的另外一种思路

大家都知道弹出框大致可以分为三种:1.警告消息框(alert).2.确认消息框(confirm).3.提示消息对话(prompt) 而selenium 提供switch_to_alert()方法来定位: switch_to_alert() #定位弹出对话 text()               #获取对话框文本值 accept()                   #相当于点击"确认" dismiss()                  #相当于点击"取消"

用python+selenium获取北上广深成五地PM2.5数据信息并按空气质量排序

从http://www.pm25.com/shenzhen.html抓取北京,深圳,上海,广州,成都的pm2.5指数,并按照空气质量从优到差排序,保存在txt文档里 #coding=utf-8 from selenium import webdriver from time import sleep class PM: def __init__(self): self.dr = webdriver.Chrome() self.pm25_info = self.get_pm25_info() de

Python+Selenium获取百度联系我们页面的email列表

#coding=utf-8 from selenium import webdriver import re driver = webdriver.Chrome() driver.maximize_window() driver.implicitly_wait(6) driver.get("http://home.baidu.com/contact.html") # 得到页面源代码 doc = driver.page_source emails = re.findall(r'[\w][

selenium获取多窗口句柄并一一切换至原窗口句柄(三个窗口)

网上有很多是selenium基于python来获取两个窗口句柄与切换,本文实现用python+selenium获取多窗口句柄并一一切换至原窗口句柄(三个窗口),且在每个窗口下进行一个搜索或翻译,然后截图. 代码如下: 1 # coding=utf-8 2 from selenium import webdriver 3 import time 4 5 driver = webdriver.Chrome() 6 driver.maximize_window() # 窗口最大化 7 8 driver

第1周小组博客作业——关于禅道测试管理的总结

1.工具概述 1.1是什么? 1> 禅道是由青岛易软天创公司开发的一款开源的项目管理软件. 2> 禅道特点是将软件研发中的产品管理,项目管理,质量管理三个核心流程融合在一套工具里面,是一款软件生命周期管理软件.现在很多的商业软件也都转向了这种管理方式.比如微软的TFS,HP的ALM. 3> 核心的管理思想是基于scrum,然后在scrum基础上完善了测试管理,文档管理,事务管理等功能. 4> 轻量级实现,源码包仅有2M,集成安装包不到10M. 5> 真开源,真免费. 6>

python tornado 实现类禅道系统

最近楼主加班 喽, 好久没有更新我的博客了,哎,一言难尽,废话我就不说了,来开始上精华. 背景:目前市面上有很多bug管理工具,但是各有各的特点,最著名,最流行的就是禅道,一个偶然的机会接触到了python ,学到tornado后,就想着去怎么去用到实处,后来发现自己公司的除了禅道就记录bug没有什么可以用的工具了. 语言:python3 第三库 :tornado,qiniu(用于云存储文件),数据库用sqlite why  use tornado?很多人其实会这么问我,我感觉tornado可以