- 显示print输出,带截图功能的html报告
- 关于表格的操作
http://blog.csdn.net/huayuhuan/article/details/76559465根据内容定位元素位置方法一:方法二:"""根据table的id属性和table中的某一个元素定位其在table中的位置table包括表头,位置坐标都是从1开始算tableId:table的id属性queryContent:需要确定位置的内容"""def get_table_content(tableId,queryContent):# 按行查询表格的数据,取出的数据是一整行,按空格分隔每一列的数据table_tr_list = driver.find_element(By.ID, tableId).find_elements(By.TAG_NAME, "tr")table_list = [] #存放table数据for tr in table_tr_list: #遍历每一个tr#将每一个tr的数据根据td查询出来,返回结果为list对象table_td_list = tr.find_elements(By.TAG_NAME, "td")row_list = []print(table_td_list)for td in table_td_list: #遍历每一个tdrow_list.append(td.text) #取出表格的数据,并放入行列表里table_list.append(row_list)# 循环遍历table数据,确定查询数据的位置for i in range(len(table_list)):for j in range(len(table_list[i])):if queryContent== table_list[i][j]:print("%r坐标为(%r,%r)" %(queryContent,i+1,j+1))get_table_content("myTable","第二行第二列")
方法三
"""根据CSS选择器和table中的某一个元素定位其在table中的位置table包括表头,位置坐标都是从1开始算cssSelector:table的CSS选择器属性queryContent:需要确定位置的内容"""def get_table_content(cssSelector,queryContent):locator = cssSelector + ">tbody>tr"table_list = []table_tr_list = driver.find_elements(By.CSS_SELECTOR, locator)[1:] #去掉表头for tr in table_tr_list:row_list = []table_td_list = tr.find_elements(By.TAG_NAME,"td")for td in table_td_list:row_list.append(td.text)table_list.append(row_list)for i in range(len(table_list)):for j in range(len(table_list[i])):if queryContent== table_list[i][j]:print("%r坐标为(%r,%r)" %(queryContent,i+1,j+1))get_table_content("#myTable","第二行第二列")
https://www.cnblogs.com/yan-xiang/p/6819168.html
操作table数据
# -*- coding: utf-8 -*- from selenium import webdriver import os,time from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
file_path = os.path.abspath('selenium_table.htm') driver = webdriver.Chrome() driver.get(file_path) table = driver.find_element_by_id('tab1')
#table的总行数,包含标题 table_rows = table.find_elements_by_tag_name('tr') print "总行数:",len(table_rows)
#tabler的总列数 ''' 在table中找到第一个tr,之后在其下找到所有的th,即是tabler的总列数 ''' table_cols = table_rows[0].find_elements_by_tag_name('th') print "总列数:",len(table_cols)
#获取某单元格的text:获取第一行第二列的text,[不算标题行] row1_col2 = table_rows[1].find_elements_by_tag_name('td')[1].text print "第一行第二列的text:",row1_col2
#删除最后一行 table_rows[-1].find_element_by_tag_name('input').click() time.sleep(2) driver.switch_to_alert().accept() time.sleep(2)
#检查是否删除成功 ''' 解释:text_to_be_present_in_element实际是一个类,由于添加了__call__方法,它的实例也可以调用 作用:检查指定元素上的文本是否符合预期
检查是否成功的思路 1.删除的是最后一行,也就是序号为'4'的那行,所以只要检查整个table中是否还有‘4’即可,如果返回false,说明删除成功,前提条件是table中的其他单元格内容均不包含‘4’ 【如果其他单元格中的内容包含‘4’,返回True,显然检查结果是不正确的,所以此处要检查的预期值必须在table中是唯一的,比如用身份证】 2.检查table中最后一行的序号是不是‘4’,如果不是,则说明删除成功 3.通过检查table的行数来判断 ''' #第一种检查 expected_4 = EC.text_to_be_present_in_element((By.XPATH,'//*[@id="tab1"]'),'4') if expected_4(driver) == False: print '第一种检查:删除成功' #time.sleep(2) #第二种检查 expected_4 = EC.text_to_be_present_in_element((By.XPATH,'//*[@id="tab1"]/tbody/tr[4]/td[1]'),'4') if expected_4(driver) != True: print '第二种检查:删除成功' #time.sleep(2) #第三种检查 table_rows_sc = table.find_elements_by_tag_name('tr') print len(table_rows_sc) if len(table_rows_sc) == len(table_rows)-1: print '第三种检查:删除成功'
获取指定单元格的内容
#table = driver.find_element_by_class_name("datagrid-btable")table = driver.find_element_by_xpath("html/body/div[2]/div[2]/div[2]/div[2]/div[2]/table")table_rows = table.find_elements_by_tag_name('tr')row1_col6 = table_rows[0].find_elements_by_tag_name('td')[5].textprint ("第一行第六列的text:",row1_col6)#获取页面第一行数据:新代码row1_col7 = table_rows[0].find_elements_by_tag_name('td')[6].textprint ("第一行第七列的text:",row1_col7)
- 生成指定位数的随机字符串