selenium 如何处理table
qi_ling2005 http://jarvi.iteye.com/blog/1477837
andyguo http://blog.csdn.net/gzh0222/article/details/7568490
以前在selenium RC 里面有一个getTable方法,是得到一个单元格中的文本。其详细描述如下:
- /** Gets the text from a cell of a table. The cellAddress syntax <span style="white-space: normal; #ffffff;">tableLocator.row.column</span>
- , where row and column start at 0.
- @param tableCellAddress a cell address, e.g. <span style="white-space: normal; #ffffff;">"foo.1.4"</span>
- @return the text from the specified cell
- */
- String getTable(String tableCellAddress);
/** Gets the text from a cell of a table. The cellAddress syntax tableLocator.row.column
, where row and column start at 0.
@param tableCellAddress a cell address, e.g. "foo.1.4"
@return the text from the specified cell
*/
String getTable(String tableCellAddress);
就是传入一个参数,这个参数的格式必须是tableLocator.row.column,如"foo.1.4",foo用于得到table对象,1.4代表在table里第1行第4列。行、列从0开始。
在selenium webdriver里,没有这样的方法,也就是说没有专门操作table的类。但我们可以自己封闭一个,这并不难。以上面的getTable方法为例,我们自己也可以创建这样功能的一个方法。
- public String getCellText(By by,String tableCellAddress)
public String getCellText(By by,String tableCellAddress)
我叫它getCellText,它有两个参数,第一个是By对象用于得到table对象, tableCellAddress 如"1.4",代表在table里第1行第4列。行、列从0开始。
以下面html代码为例:
- <html>
- <head>
- <title>Table</title>
- </head>
- <body>
- <table border="1" id="myTable">
- <tr>
- <th>Heading(row 0 ,cell 0)</th>
- <th>Another Heading(row 0 ,cell 1)</th>
- <th>Another Heading(row 0 ,cell 2)</th>
- </tr>
- <tr>
- <td>row 1, cell 0</td>
- <td>row 1, cell 1</td>
- <td>row 1, cell 2</td>
- </tr>
- <tr>
- <td>row 2, cell 0</td>
- <td>row 2, cell 1</td>
- <td>row 2, cell 2</td>
- </tr>
- </table>
- </body>
- </html>
<html><head><title>Table</title></head><body><table border="1" id="myTable"><tr><th>Heading(row 0 ,cell 0)</th><th>Another Heading(row 0 ,cell 1)</th><th>Another Heading(row 0 ,cell 2)</th></tr><tr><td>row 1, cell 0</td><td>row 1, cell 1</td><td>row 1, cell 2</td></tr><tr><td>row 2, cell 0</td><td>row 2, cell 1</td><td>row 2, cell 2</td></tr></table></body>
</html>
示例代码如下:
- import java.util.List;
- import org.openqa.selenium.By;
- import org.openqa.selenium.NoSuchElementException;
- import org.openqa.selenium.WebDriver;
- import org.openqa.selenium.WebElement;
- import org.openqa.selenium.firefox.FirefoxDriver;
- public class Table {
- /**
- * @author gongjf
- */
- private WebDriver driver;
- Table(WebDriver driver){
- this.driver = driver;
- }
- /** 从一个table的单元格中得到文本值. 参数tableCellAddress的格式为
- row.column, 行列从0开始.
- @param by 用于得到table对象
- @param tableCellAddress 一个单元格地址, 如. "1.4"
- @return 从一个table的单元格中得到文本值
- */
- public String getCellText(By by,String tableCellAddress) {
- //得到table元素对象
- WebElement table = driver.findElement(by);
- //对所要查找的单元格位置字符串进行分解,得到其对应行、列。
- int index = tableCellAddress.trim().indexOf('.');
- int row = Integer.parseInt(tableCellAddress.substring(0, index));
- int cell = Integer.parseInt(tableCellAddress.substring(index+1));
- //得到table表中所有行对象,并得到所要查询的行对象。
- List<WebElement> rows = table.findElements(By.tagName("tr"));
- WebElement theRow = rows.get(row);
- //调用getCell方法得到对应的列对象,然后得到要查询的文本。
- String text = getCell(theRow, cell).getText();
- return text;
- }
- private WebElement getCell(WebElement Row,int cell){
- List<WebElement> cells;
- WebElement target = null;
- //列里面有"<th>"、"<td>"两种标签,所以分开处理。
- if(Row.findElements(By.tagName("th")).size()>0){
- cells = Row.findElements(By.tagName("th"));
- target = cells.get(cell);
- }
- if(Row.findElements(By.tagName("td")).size()>0){
- cells = Row.findElements(By.tagName("td"));
- target = cells.get(cell);
- }
- return target;
- }
- public static void main(String[] args) {
- WebDriver driver;
- System.setProperty("webdriver.firefox.bin","D:\\Program Files\\Mozilla Firefox\\firefox.exe");
- driver = new FirefoxDriver();
- driver.get("file:///C:/Documents and Settings/Gongjf/桌面/selenium_test/table.html");
- Table table = new Table(driver);
- By by = By.id("myTable");
- String address = "0.2";
- System.out.println(table.getCellText(by, address));
- }
- }
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;public class Table {/*** @author gongjf*/private WebDriver driver;Table(WebDriver driver){this.driver = driver;}/** 从一个table的单元格中得到文本值. 参数tableCellAddress的格式为row.column, 行列从0开始.@param by 用于得到table对象@param tableCellAddress 一个单元格地址, 如. "1.4"@return 从一个table的单元格中得到文本值*/public String getCellText(By by,String tableCellAddress) {//得到table元素对象WebElement table = driver.findElement(by);//对所要查找的单元格位置字符串进行分解,得到其对应行、列。int index = tableCellAddress.trim().indexOf('.');int row = Integer.parseInt(tableCellAddress.substring(0, index));int cell = Integer.parseInt(tableCellAddress.substring(index+1));//得到table表中所有行对象,并得到所要查询的行对象。List<WebElement> rows = table.findElements(By.tagName("tr"));WebElement theRow = rows.get(row);//调用getCell方法得到对应的列对象,然后得到要查询的文本。String text = getCell(theRow, cell).getText();return text;}private WebElement getCell(WebElement Row,int cell){List<WebElement> cells;WebElement target = null;//列里面有"<th>"、"<td>"两种标签,所以分开处理。if(Row.findElements(By.tagName("th")).size()>0){cells = Row.findElements(By.tagName("th"));target = cells.get(cell);}if(Row.findElements(By.tagName("td")).size()>0){cells = Row.findElements(By.tagName("td"));target = cells.get(cell);}return target;}public static void main(String[] args) {WebDriver driver;System.setProperty("webdriver.firefox.bin","D:\\Program Files\\Mozilla Firefox\\firefox.exe"); driver = new FirefoxDriver();driver.get("file:///C:/Documents and Settings/Gongjf/桌面/selenium_test/table.html");Table table = new Table(driver);By by = By.id("myTable");String address = "0.2";System.out.println(table.getCellText(by, address));}}
运行代码将输出
- Another Heading(row 0 ,cell 2)
Another Heading(row 0 ,cell 2)
ps: 这里我只是以得到一个table中单元格的文本为例,但是从代码可以看出,对table的基本操作都有涉及到。有用到的同学可以自己包装一个完整的table类。
selenium 如何处理table相关推荐
- Selenium 如何处理多层嵌套 iframe
文章目录 Selenium 如何处理多层嵌套 iframe 1.如果 iframe 里面还套了一个 iframe 2.如何不直接回到主文档,而是返回上一层 iframe Selenium 如何处理多层 ...
- Selenium自动化测试面试题
目录 1.什么是自动化测试.自动化测试的优势是什么? 2.什么样的项目比较适合做自动化测试,什么样的不适合做自动化测试? 3.说一下开展自动化工作的主要流程是怎样的? 4.在制定自动化测试计划的时候一 ...
- Selenium自动化测试面试题全家桶
Selenium自动化测试面试题 一.目录 1.什么是自动化测试.自动化测试的优势是什么? 2.什么样的项目比较适合做自动化测试,什么样的不适合做自动化测试? 3.说一下开展自动化工作的主要流程是怎样 ...
- 【软件测试面试】面试了字节、美团、腾讯等30几家公司后,才知道软件测试面试全是这个套路......
一.Linux系统应用和环境配置: 1.Linux系统的操作命令给我说10个,一般用什么工具远程连接Linux服务器? 2.Linux中的日志存储在哪里?怎么查看日志内容? 3.Linux中top和p ...
- 面试了字节、美团、腾讯等30几家公司后,才知道软件测试面试全是这个套路......
一.Linux系统应用和环境配置: 1.Linux系统的操作命令给我说10个,一般用什么工具远程连接Linux服务器? 2.Linux中的日志存储在哪里?怎么查看日志内容? 3.Linux中top和p ...
- html table rownum,Python+Selenium获取HTML-Table表格数据
在自动化中,有时我们会遇到html表格,需要对表格添加的内容判断其正确性,那么怎么才能取得表格数据呢? 1.通过selenium定位方式(id,name,xpath等方式)定位table标签 定义基类 ...
- Selenium xpath无法解析的如何处理
Selenium xpath无法解析的如何处理 一.问题描述 Xpath无法解析的原因 使用selenium加载时没有加入等待时间,导致页面元素无法加载xpath无法解析 xpath语句未能准确定位 ...
- python自动访问网页_Python自动化 selenium 网页自动化-在访问一个网页时弹出的浏览器窗口,我该如何处理?...
相信大家在使用selenium做网页自动化时,会遇到如下这样的一个场景: 在你使用get访问某一个网址时,会在页面中弹出如上图所示的弹出框. 首先想到是利用Alert类来处理它. 然而,很不幸,Ale ...
- html如何将多个复选框组织成一组_[Selenium]18.如何处理一组元素
场景 button group就是元素组,将一组按钮排列在一起.处理这种对象的思路一般是使用find_elements_by_XXXX方法, 然后使用index或属性去定位更具体的元素 代码 下面的代 ...
- Java selenium 获取表格数据_Java+Selenium 如何参数化验证Table表格数据
场景: 当我们编写脚本时候,需要验证某个表格某一列数据,或者多个列数据. 如果每验证一个就写一个方法,实在是太费事, 因此我们需要有参数化的思想,把某列数据看成固定的元素,然后去验证即可. 1. 示例 ...
最新文章
- 【NLP】jieba分词-Python中文分词领域的佼佼者
- 如何查看ddos 放开的ip
- 一起学习C语言:函数(二)
- 为机场按上一双“慧眼”消灭飞机的“黑色十分钟”
- python_正则表达式匹配ip
- e480win7显卡驱动_win7系统联想e480安装的操作方法
- 计算机网络之IP报文
- Manjaro20KDE桌面环境安装Google输入法
- ffmpeg视频转码压缩
- python从入门到精通编程汪老师_游戏AI开发从入门到精通:最全游戏AI编程书单...
- 美丽的诗句 撩妹首选哦!
- iPadOS生产力翻身,Mac Pro官方攒机 | 软、硬皆出彩的WWDC19
- 手机注册服务器异常是什么问题,ohho注册不了网络异常
- python kite 云盘下载
- 0x80073712_解决Windows 组件存储已损坏,0x80073712错误
- 微信小程序----App生命周期
- (11)RabbitMQ的mandatory、immediate和ReturnListener
- Thinking-in-Java 读书笔记-11-持有对象
- python cocos2d菜鸟教程,cocos2dx技术选型
- 【信息安全第三章同余习题】把剩余类1(mod 5)写成模15的剩余类之和
热门文章
- Domino 邮箱服务器接收不存在的邮箱账号的邮件
- Length of Last Word
- Android——列表选择框(Spinner)
- 半边数据结构(The_Half-Edge_Data_Structure)
- 韩顺平的java入门到精通中serversql笔记(包括emp表和dept表,linux的mysql版)
- 2.3线性表的链式表示和实现(静态链表)
- 《大道至简》第一章,伪代码。
- factory工厂模式之工厂方法FactoryMethod
- 互联网公司如何有效执行流程的心得
- 深入浅出理解 COOKIE MAPPING