selenium+python对表格数据的操作

一、直接获取整个表格数据,包含表头

def table_info(self):
        tr_data=[]
        table_data=[]
        css='id=>useradmin'#根据表格id找到表格
        self.pyse.element_wait(css)
        trs=self.pyse.get_element(css).find_elements_by_tag_name('tr')#找到表以后,找到表内的所有行tr
        print(trs)
        for tr in trs:#循环每一行
            print(tr.text)#每一行的所有字段:序号 角色编号 角色名称 角色级别 状态 操作
            tr_data=tr.text.split(' ')#将每行按照空格分割成列表,装入tr_data。此时tr_data中存放的就是每一行的字段
            table_data.append(tr_data)#将每行的列表装入另一个数组中,这样相当于一个二维列表
        print(table_data)
        '''
        table_data=[['序号', '角色编号', '角色名称', '角色级别', '状态', '操作'], ['24', 'R001', '管理员', '0', '禁用', '启用', '修改']]
        tr_data=序号 角色编号 角色名称 角色级别 状态 操作
        tr_data= 25 R002 校长 1 启用 禁用 修改
        .......
        '''

2、如果不要表头,可直接用定位tbody元素,同样的方法获取到表格数据,不包含表头

3、输入关键字,搜索表格数据,验证搜索功能

此时直接用第一种方法,会提示错误。因为点击查询的时候,tbody数据重新加载,不依附于原页面

selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

没有和当前页面进行绑定,主要是页面刷新或者跳转引起的,需要重新获取一次元素。

此时需要重新定位tbody元素,再次查询

    def aftersearch_tableinfo(self):#点击查询后,表格中tbody元素不在依附于当前页面,需要重新定位
        css = 'css=>[role=alert]'  # 重新定位tbody元素
        self.pyse.element_wait(css)
        trs=self.pyse.get_element(css).find_elements_by_tag_name('tr')
        print(trs)
        tbody_data=[]
        for tr in trs:
            tr_data=tr.text.split(' ')
            tbody_data.append(tr_data)
        print(tbody_data)
        return tbody_data


    def check_role_number_in(self):
        data=self.aftersearch_tableinfo()#点击查询后,获取到表格数据,这里不包含表头
        print(len(data))
        if len(data)==0:
            print('查询关键字失败,校验失败,没有查到数据')
        else:
            for tr in range(len(data)):#遍历每一行,查看第2列是否都等于搜索关键字,tr表示每一行的行号,从0开始。因为我查询的关键词是按照第二列字段进行查的,所以此处和第二列比对
                if data[tr][1]!=Setting_Role_data.role_number:
                    return False
                else:
                    return True

 

posted @ 2018-09-13 16:01  六三零  阅读(1320)  评论(0编辑  收藏  举报