python :

https://www.cnblogs.com/yan-xiang/p/6819168.html

操作内容:获取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>

Python代码:

# -*- 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 '第三种检查:删除成功'

运行结果:

JAVA :

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.testng.annotations.Test;
public class LocateTable {
public WebDriver driver;
@Test
public void LocateTableTest() {
WebElement table = driver.findElement(By.id("table"));
List<WebElement> rows = table.findElements(By.tagName("tr"));
// assertEquals(5,rows.size());
for(WebElement row:rows){
List<WebElement> cols= row.findElements(By.tagName("td"));
for(WebElement col:cols){
System.out.println(col.getText()+"\t");
}
System.out.println("");
}
}
}

[Selenium] 处理表格(python + java)的更多相关文章

  1. selenium webdriver 表格的定位方法练习

    selenium webdriver 表格的定位方法 html 数据准备 <html> <body> <div id="div1"> <i ...

  2. [Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)

    [Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)开学典礼](https://ke.qq.com/course/453802)**测试交流群:549376944**0 ...

  3. paip.判断字符是否中文与以及判读是否是汉字uapi python java php

    paip.判断字符是否中文与以及判读是否是汉字uapi python java php   ##判断中文的原理 注意: 中文与汉字CJKV 的区别..日本,韩国,新加坡,古越南等国家也用汉字,但不是中 ...

  4. paip.截取字符串byLastDot方法总结uapi python java php c# 总结

    paip.截取字符串byLastDot方法总结uapi python java php c# 总结 ========uapi   left_byLastDot   right_byLastDot 目前 ...

  5. paip.文件目录操作uAPI php python java对照

    paip.文件目录操作uAPI php python java对照 chdir -- 改变目录 chroot -- 改变根目录 dir -- directory 类 closedir -- 关闭目录句 ...

  6. selenium与表格的二三事

    今天遇到的问题是selenium与表格中行和列的问题! 我想要做的事情是统计当前的table有多少行,表格形式如下如所示: 图中所示为2行,我的定位方式是这样的 : table=driver.find ...

  7. 十大经典排序算法(Python,Java实现)

    参照:https://www.cnblogs.com/wuxinyan/p/8615127.html https://www.cnblogs.com/onepixel/articles/7674659 ...

  8. Python Java 快速配置环境变量(Path)

    Python Java 快速配置环境变量(Path) 最近系统被重置,清空了C盘中的program等文件夹以及初始化了环境变量. 通常环境下,在windows环境中我们都会打开"环境变量&q ...

  9. 吾八哥学Selenium(一):Python下的selenium安装

    selenium简介 Selenium也是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mozilla Firefox.Mo ...

随机推荐

  1. [ACM] POJ 1068 Parencodings(模拟)

    Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19352   Accepted: 11675 De ...

  2. 命令行高效操作Git,看这篇就够了

    原文地址:http://blog.jboost.cn/2019/06/16/use-git.html 对于软件开发人员来说,git几乎是每天都需要接触的工具.但对于相处如此亲密的工作伙伴,你对它的了解 ...

  3. 【文献阅读】Augmenting Supervised Neural Networks with Unsupervised Objectives-ICML-2016

    一.Abstract 从近期对unsupervised learning 的研究得到启发,在large-scale setting 上,本文把unsupervised learning 与superv ...

  4. java 发展简史

    [0]README 0.1) 本文转自 core java volume 1,仅供了解Java 的发展历史,它的前世今生,所谓知己知彼,百战不殆(just a joke) : [1]java 发展简史 ...

  5. C#之stream

    在C#中经常要用stream stream下面主要有 FileStream:使用文件作为后备设备. BufferedStream:使用缓冲区作为后备设备,用来增强性能的中间存储. MemoryStre ...

  6. 新西兰天维网登录发送明文password

    新西兰比較有人气的华人社区站点是天维网(新西兰天维网),是这边华人用中文吐槽常常上的论坛,也是华人之间各种交易(比方买卖二手车)的集散地.上次非诚勿扰新西兰专场就是天维网承办的宣传和报名.来新西兰定居 ...

  7. EasyNVR RTSP摄像机HLS直播服务器中使用Onvif协议获取设备快照

    我们知道EasyNVR中可以获取快照信息,之前的文章也说明了EasyNVR是如何进行快照抓取的 这里我们使用另一种方法进行快照的抓取 流程 获取设备能力Capabilities 获取设备的能力,并且可 ...

  8. iOS 流布局 UICollectionView使用(UICollectionVIew的代理方法)

    UICollectionViewDataSource协议 这个协议主要用于collectionView相关数据的处理,包含方法如下: 设置分区数(这个是可选实现的) - (NSInteger)numb ...

  9. 【linux】记录一次系统被攻击的处理过程

    今天登录zabbix监控网页的时候发现非常卡,登录到系统里面以后,通过top看,CPU已经100%了,有一个叫做httpds的进程占用,第一反映就是系统被入侵了,下面记录了处理过程,仅供各位参考 通过 ...

  10. session,cookie的理解(总结)

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...