Selenium之table操作

操作内容:

获取table总行数、总列数、获取某单元格的text值,删除一行【如果每行后边提供删除的按钮】

HTML代码:

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>
<body>
<script type="text/javascript">
function deleteRow(tableID, obj) {//参数为表格ID,触发对象
//获得触发对象的行号,parentElement的个数取决于触发对象为TR的第几级子项,input=>td=>tr,所以parentElement有两个
var rowIndex = obj.parentElement.parentElement.rowIndex;
//var table = document.getElementById(tableID).deleteRow(rowIndex);
alert("您确定要删除吗?")
obj.parentElement.parentElement.parentElement.deleteRow(rowIndex); //再简化:省略tableID参数
}
</script>
<table border="1" id="tab1" width="90%">
<tbody>
<tr>
<th>序号</th>
<th>姓名</th>
<th>年龄</th>
<th>身份证</th>
<th>删除</th>
</tr>
<tr>
<td style="text-align: center;">1</td>
<td >测试一</td>
<td>15</td>
<td>1111111111111111111</td>

<td name="sc" style="text-align: center;"><input
type="button" value="删除" onclick="deleteRow(‘tb‘,this)"/></td>
</tr>
<tr>
<td style="text-align: center;">2</td>
<td>测试二</td>
<td>20</td>
<td>2222222222222222222</td>

<td name="sc" style="text-align: center;"><input
type="button" value="删除" onclick="deleteRow(‘tb‘,this)"/></td>
</tr>

<tr>
<td style="text-align: center;">3</td>
<td>测试三</td>
<td>20</td>
<td>3333333333333333333</td>

<td name="sc" style="text-align: center;"><input
type="button" value="删除" onclick="deleteRow(‘tb‘,this)"/></td>
</tr>

<tr>
<td style="text-align: center;">4</td>
<td>测试四</td>
<td>20</td>
<td>4444444444444444444</td>

<td name="sc" style="text-align: center;"><input
type="button" value="删除" onclick="deleteRow(‘tb‘,this)"/></td>
</tr>

</tbody>
</table>

</body>
</html>

拷贝上述代码保存为table.html,打开页面出现乱码的解决方法:

1) html4: <meta http-equiv="content-type" content="text/html;charset=utf-8">

2) html5: <meta charset=utf-8>

Python代码:

# -*- coding: utf-8 -*-from selenium import webdriverimport os, timefrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as EC

file_path = os.path.abspath(‘table.html‘)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(u"总行数:", len(table_rows))

# table的总列数‘‘‘在table中找到第一个tr,之后在其下找到所有的th,即是table的总列数‘‘‘table_cols = table_rows[0].find_elements_by_tag_name(‘th‘)print(u"总列数:", len(table_cols))

# 获取某单元格的text:获取第一行第二列的text,[不算标题行]row1_col2 = table_rows[1].find_elements_by_tag_name(‘td‘)[1].textprint(u"第一行第二列的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 == 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(‘第二种检查:删除成功‘)

#第三种检查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(‘第三种检查:删除成功‘)

原文地址:https://www.cnblogs.com/lunvo/p/9186296.html

时间: 2024-07-29 04:51:31

Selenium之table操作的相关文章

selenium 获取table数据

public class Table { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub WebDriver driver = ExplorerBase.IESetting(); String url = "http://zs.njust.edu.cn/newzs/news/zhxw/20140710151805.htm"; driver.m

算法学习 - Hash Table操作,分离链接法解决哈希冲突

分离链接法 hash table是映射机制的,最大的优点就是它的操作是O(1)级别的.但是会出现哈希冲突,这就需要几种办法来解决.这里先说一种:分离链接法. 就是当插入的位置已经存在一个值之后,那么在这个值之后插入,就可以了,也叫拉链法.(但是其实会降低查找速度,变成O(n)级别) 下面是代码: // // main.cpp // HashTable_SeparateChaining // // Created by Alps on 14-8-5. // Copyright (c) 2014年

postgresql的show databases、show tables、describe table操作

[sql] view plaincopy 1.相当与mysql的show databases; [sql] view plaincopy select datname from pg_database; [sql] view plaincopy 2.相当于mysql的show tables; [sql] view plaincopy SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'; pu

selenium webdriver frame操作,跳进跳出

如果有两个平级的frame,跳进一个以后操作完成再操作第二个,这种情况要先跳出来,再跳进另外一个frame 跳出语句:browser.switch_to_default_content() #coding:utf-8 from selenium import webdriver import time url='http://*******' browser = webdriver.Chrome() browser.get(url) browser.maximize_window() name=

[python]利用selenium模拟用户操作抓取天猫评论数据

准备: python3.5 安装selenium包 第一种方法: cmd里输pip install selenium,但是经常报错 第二种方法: 下载安装包-cmd进入解压路径-python setup.py install-报错permission denied-右键安全更改报错文件夹权限为完全控制-再次安装成功unknown error: unable to discover open pages-下载chromedriver放在环境变量目录下测试自动打开百度时提示"您使用的是不受支持的命令

Oracle索引梳理系列(十)- 直方图使用技巧及analyze table操作对直方图统计的影响(谨慎使用)

版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内容用于商业用途,将保留追究其法律责任的权利.如果有问题,请以邮箱方式联系作者([email protected]). 前言 针对索引列,尤其是存在严重数据倾斜的索引列,直方图的统计信息,对于CBO优化器更准确地选择执行计划至关重要. 对于初心者,可以从这篇文章中,了解到直方图对于索引列的价值.作用,

table 操作

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <ti

MySQL DROP TABLE操作以及 DROP 大表时的注意事项

语法: 删表 DROP TABLE Syntax DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ... [RESTRICT | CASCADE] 可一次删除一张或多张表.需具有所删除表上的DROP权限. 表定义文件和数据文件均被移除.表被删除后表上的用户权限不会被自己主动删除. 參数里表中指定的表名不存在则报错,但对于存在的表仍会删除.可通过指定IF EXISTS阻止表不存在时引发的错误(此时对于不存在的表仅产生一个NOTE).

table操作:边框-斑马线-多表头-焦点高亮-自动求和

一.操作table,本例子实现的功能: 1.table等宽边框2.table斑马线3.实现table多表头4.焦点所在行高亮5.自动计算总分 二.效果图 三.代码: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <!--表格--> 5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 6 &l